1. 사람의 몸을 선택해야 제일 중앙에 오게할 수 있으니 몸을 선택한다.
2. 우클릭 -> Set Origin -> Origin to Geometry를 클릭합니다.
- 그러면 오리진이 몸 가운데에 온다.
3. 이번엔 쓰리디 커서를 오리진이 위치한 몸의 중앙에 오게 해야한다.
- Shift + S**를 누릅니다.
- 메뉴 선택: 파이 메뉴에서 **Cursor to Selected**를 클릭
- 그러면 쓰리디 커서가 오리진과 겹쳐진다.
4.
지금 상태에서 단순히 오리진을 바닥으로 내리는 버튼은 없습니다.
3D 커서의 수치를 바닥으로 먼저 수정한 뒤, 오리진을 그곳으로 다시 소환해야 합니다.
가장 정확하게 바닥에 박는 순서입니다.
1. 3D 커서를 수치상 바닥(0)으로 내리기
현재 커서가 사람 몸 중앙(배꼽 높이)에 있으니, 높이값만 0으로 바꿉니다.
- 방법: N 패널 -> View 탭 -> 3D Cursor 항목의 Location Z에 0을 입력합니다.
- 결과: 커서가 사람 몸의 X, Y 중앙은 유지한 채로, 바닥면으로 수직 하강합니다.
5.
이제 커서가 바닥에 있으니 오리진을 그리로 부릅니다.
- 방법: 오브젝트 모드에서 뼈와 메쉬를 다 잡고, 우클릭 -> Set Origin -> Origin to 3D Cursor를 클릭합니다.
- 결과: 사람은 움직이지 않고, 노란 점(오리진)들만 정확히 바닥 0점으로 내려와 박힙니다.
Ctrl + A -> All Transforms 을 해버리면 다시 도루마무
정리
수치적으로 가장 완벽하게 오리진을 발바닥 중앙에 박는 정답입니다.
정리하신 절차를 다시 확인해드리면:
- 몸 선택: 기준이 될 메쉬를 잡는다.
- Origin to Geometry: 오리진을 몸 정중앙으로 소환한다.
- Cursor to Selected: 오리진 위치(몸 중앙)에 3D 커서를 일치시킨다.
- Z=0 입력: N 패널에서 커서 높이만 바닥으로 내린다. (X, Y축은 몸 중앙 유지)
- Origin to 3D Cursor: 바닥에 있는 커서 위치로 오리진을 끌어내린다.
Ctrl + A -> All Transforms 을 해버리면 다시 도루마무
이 모든걸 한번에 해결할 스크립트
스크립트 모드에 가서 새문서를 꺼내서 실행하면,
레이아웃 화면에서 N 을 눌러 탭에서 사용할수있다.
같이 잇는 페어런츠는 그냥 여러객체의 페어런트 관계를 끊는 버튼임.
py 로 만들어서 애드온에서 불러와서 사용할수잇다.
import bpy
import mathutils
# --- [기능 1] 오리진 위치만 수정 (부모 관계 절대 유지) ---
class OBJECT_OT_origin_to_floor_final(bpy.types.Operator):
"""오리진을 바닥 정중앙으로 이동시키되, 부모-자식 관계는 건드리지 않습니다."""
bl_idname = "object.origin_to_floor_final"
bl_label = "오리진 바닥 정중앙"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
obj = context.active_object
if not obj or obj.type != 'MESH':
self.report({'WARNING'}, "메쉬 객체를 선택하세요.")
return {'CANCELLED'}
# [안전장치] 현재 부모가 있는지 미리 확인 (관계 보존용)
temp_parent = obj.parent
# 1. 월드 좌표 기준의 바운딩 박스 계산 (X, Y 중앙 및 Z 바닥 찾기)
bbox_corners = [obj.matrix_world @ mathutils.Vector(corner) for corner in obj.bound_box]
x_coords = [c.x for c in bbox_corners]
y_coords = [c.y for c in bbox_corners]
z_coords = [c.z for c in bbox_corners]
target_world = mathutils.Vector((
(min(x_coords) + max(x_coords)) / 2, # 가로 중앙
(min(y_coords) + max(y_coords)) / 2, # 세로 중앙
min(z_coords) # 최하단 바닥
))
# 2. 오리진 이동 시 메쉬가 틀어지지 않도록 행렬 보정
# matrix_world를 직접 수정하므로 부모와의 상대적 연결(점선)이 유지됩니다.
target_local = obj.matrix_world.inverted() @ target_world
obj.data.transform(mathutils.Matrix.Translation(-target_local))
obj.matrix_world.translation = target_world
# [확인] 혹시라도 부모 관계가 흔들렸다면 원래대로 다시 고정
if temp_parent:
obj.parent = temp_parent
self.report({'INFO'}, "오리진 수정 완료 (부모 관계 유지됨)")
return {'FINISHED'}
# --- [기능 2] 부모 관계만 해제 (오리진 위치 절대 유지) ---
class OBJECT_OT_clear_parent_keep_transform(bpy.types.Operator):
"""점선(부모 관계)만 끊고, 객체는 현재 눈에 보이는 그 자리에 고정합니다."""
bl_idname = "object.clear_parent_keep_final"
bl_label = "부모 해제 (위치유지)"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
# 선택된 객체 중 부모가 있는 것들만 확인
has_parent = [o for o in context.selected_objects if o.parent]
if not has_parent:
self.report({'INFO'}, "해제할 부모 관계가 없습니다.")
return {'FINISHED'}
# 블렌더 기본 기능: 관계는 지우되(Clear), 현재 위치는 유지(Keep Transform)
bpy.ops.object.parent_clear(type='CLEAR_KEEP_TRANSFORM')
self.report({'INFO'}, f"{len(has_parent)}개 객체 부모 해제 완료")
return {'FINISHED'}
# --- [UI] N 패널 통합 UI 구성 ---
class VIEW3D_PT_sd_work_tools(bpy.types.Panel):
"""N 패널의 MyTools 탭에 하나의 작업창만 생성합니다."""
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = 'MyTools' # 사이드바 탭 이름
bl_label = "작업 도구함" # 패널 제목
def draw(self, context):
layout = self.layout
# 버튼들을 한 줄씩 깔끔하게 배치
col = layout.column(align=True)
# 상단: 오리진 버튼
col.label(text="1. 오리진 관리")
col.operator("object.origin_to_floor_final", icon='CENTER_ONLY')
layout.separator() # 중간 간격 비우기
# 하단: 부모 해제 버튼
col = layout.column(align=True)
col.label(text="2. 관계 관리")
col.operator("object.clear_parent_keep_final", icon='UNLINKED')
# --- 시스템 등록 및 해제 ---
classes = (
OBJECT_OT_origin_to_floor_final,
OBJECT_OT_clear_parent_keep_transform,
VIEW3D_PT_sd_work_tools
)
def register():
for cls in classes:
bpy.utils.register_class(cls)
def unregister():
for cls in reversed(classes):
bpy.utils.unregister_class(cls)
if __name__ == "__main__":
register()
'3D > Blender' 카테고리의 다른 글
| 스크립트 실행후 N창에 생긴 탭 없애기 스크립트 (0) | 2026.01.12 |
|---|---|
| 저장 후 객체가 고정되지 않고, 다른곳에 이동하여 있을때 (배치틀어짐) (0) | 2026.01.11 |
| 2D 불(fire) 이미지를 가져와서 3D처럼 만들기 (1) | 2026.01.10 |
| 횃불을 여러개로 복사 배치후, 밝기를 하나만 조정해, 모두 적용되게 하기 (1) | 2026.01.10 |
| 횃불 만들어 발광하고, 광원으로 주변에 빛이 전달되게 하기 (0) | 2026.01.10 |