9.18
모델링을 하다보면 몇몇 공정은 불필요하게 클릭수가 많아진다.
이런 것들을 애드온에 자동화시켜둔다면, 작업에 꽤 많은 도움이 된다.
커브의 점 건너 뛰어 선택.
머리카락을 제작할 땐 특히 불편했던 기능. 인덱싱이 틀렸을 땐 반전시켜 사용하자.
obj = bpy.context.object
for spline in obj.data.splines:
for i, point in enumerate(spline.points):
if i%2 == 0:
point.select = True
아웃라인 생성
셰이더 경로는 따로 설정해야 한다.
obj = bpy.context.object
outline_obj = copy_object(obj)
deselect_all()
select(outline_obj)
outline_obj.data.materials.clear()
outline_obj.name = obj.name + ".outline"
outline_obj.data.use_auto_smooth = False
bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)
set_mode('EDIT')
select_all()
bpy.ops.mesh.flip_normals()
bpy.ops.transform.shrink_fatten(value=-0.01)
append(shader_path, 'Material', 'Outline')
mat = bpy.data.materials.get('Outline')
outline_obj.data.materials.append(mat)
outline_obj.hide_select = True
X축 미러
오브젝트를 X축 기준으로 반대쪽에 복사한다.
대칭되는 팔이나 다리등의 의상을 만들 때 많이 쓰는 기능
bpy.ops.object.duplicate(linked=True)
obj = bpy.context.object
obj.location.x *= -1
obj.scale.x *= -1
obj.rotation_euler.y *= -1
obj.rotation_euler.z *= -1
트랜스폼 정렬
이게 왜 없어...
active_object = bpy.context.active_object
for obj in bpy.context.selected_objects:
obj.location = active_object.location.copy()
obj.rotation_euler = active_object.rotation_euler.copy()
obj.scale = active_object.scale.copy()
아웃라인 제거
for obj in bpy.data.objects:
if 'outline' in obj.name:
bpy.data.objects.remove(obj)
축방향으로 90도 돌리기
물건을 배치할 때 이게 어느쪽 방향으로 돌리는 게 맞지? 를 빠르게 확인하기 위한 용도
#Panel
row = layout.row()
row.operator("object.rotate_x", text="X")
row.operator("object.rotate_y", text="Y")
row.operator("object.rotate_z", text="Z")
#operator
selected_objects = bpy.context.selected_objects
for obj in selected_objects:
obj.rotation_euler.x += math.radians(90.0)
Y축따라 회전 복사
Array회전 버전. 문양같은 패턴을 만들기 위해 사용
n = 7
rot = pi / n * 2
for i in range(n-1):
bpy.ops.object.duplicate(linked=True)
bpy.ops.transform.rotate(value=rot, orient_axis='Y', orient_type = 'GLOBAL')
도움 : chatGPT