물체가 법선을 제대로 향하도록하기
이 작은 애드온을 작성했습니다. https://gist.github.com/SuddenDevelopment/16df6602a2ecab06f56dc8a2c7e4c9e0
처음에는 훌륭하다고 생각했지만 영역 조명이 잘못된 방향을 향하는 시나리오를 많이 발견했습니다.
나는 얼굴에 대한 법선을 얻고, 빛을 그 얼굴과 일치하도록 회전시킨 다음 법선을 향하게하려고 노력하지만, 적절한 방향을 향하게되면 얼굴의 대략 절반에서 작동합니다. 쿼트 너 리온으로 회전하는 축을 가지고 놀면 올바른 다른 축을 얻습니다..inverted()
내가 올바른 방향으로 가고 있는지조차 모르겠다. 도움을 주셔서 감사합니다.

답변
매트릭스 중심 접근
메시의 선택된 각면의 중심에 램프 오브젝트를 배치하는 코드로,면 법선 방향을 가리키는 라이트 로컬 -Z 축을 사용합니다.
객체 전역 회전 행렬을 미리 곱하여면 법선의 전역 방향을 찾습니다. (스케일 없음).
import bpy
import bmesh
context = bpy.context
ob = context.edit_object
mw = ob.matrix_world
me = ob.data
bm = bmesh.from_edit_mesh(me)
faces = [f for f in bm.faces if f.select]
while faces:
f = faces.pop()
light = bpy.data.lights.new(
f"Face{f.index}",
type='AREA',
)
light.size = 1
light_ob = bpy.data.objects.new(
f"Face{f.index}",
light,
)
M = mw.normalized() @ f.normal.to_track_quat('-Z', 'Y').to_matrix().to_4x4()
M.translation = mw @ f.calc_center_median()
light_ob.matrix_world = M
context.collection.objects.link(light_ob)
육아가있는 지역.
위 코드는 얼굴의 전역 방향으로 장면에 조명을 추가합니다. 메시가 이동되면 조명이 함께 이동하지 않습니다.
또 다른 옵션은 로컬 좌표 만 사용하고 각 라이트를 메시의 자식으로 만드는 것입니다.
얼굴에 맞게 크기 조정.
얼굴에 맞게 영역 조명의 크기를 조정하는 것 같습니다. 축이 정렬되지 않았을 때이를 수행하는 것은 최소 / 최대 축을 찾는 것보다 조금 더 깊이 있습니다. IMO는 아마도 다른 질문을 보증합니다.
다른 벡터를 사용하여 정렬하는 몇 가지 예입니다. 면에는 가장 긴 가장자리, 가장자리를 기반으로하는 계산 접선 방법이 있습니다. 접선과 일치하도록 로컬 z 축 (면 법선)을 중심으로 조명을 회전하여 조정할 수 있습니다. 이렇게하면 하나의 알려진 축이 가장자리와 정렬되고 일치하도록 크기를 조정할 수 있습니다.
https://blender.stackexchange.com/a/94047/15543
Z 축에 수직 인면을 정렬합니다.
https://blender.stackexchange.com/a/121227/15543
이와 유사하게이 폴리 내부 각도는 모서리를 2d로 매핑합니다. 마찬가지로면 법선이 축에 정렬되면 좌표를 2d에 매핑 할 수 있습니다.
https://blender.stackexchange.com/a/203355/15543
좌표가 2d 인 경우 직사각형에 맞는 몇 가지 도우미 메서드 (주로 UV 용)가 있습니다.
mathutils.geometry.box_fit_2d 사용