언리얼 엔진의 스켈레톤 편집(Skeleton Editing) 툴을 사용하여 기존 스켈레톤을 편집 및 수정하고, 본 이름을 변경하거나 본 배치를 편집하거나 본 계층구조를 변경하는 등의 액션을 수행할 수 있습니다.
본 생성(Bone Creation)이나 스킨 웨이트 페인팅(Skin Weight Painting)과 같은 툴을 사용하여 FBX 파일을 임포트할 필요 없이 원하는 스태틱 메시의 스켈레톤 에셋을 새로 생성할 수도 있습니다. 컨트롤 릭, 시퀀서 등의 툴을 함께 사용하여 에디터 내에서 캐릭터의 스킨과 애니메이션을 완전히 구현할 수 있습니다.
전제 조건
스켈레탈 메시 편집 툴 플러그인을 활성화합니다. 메뉴 바의 편집(Edit) > 플러그인(Plugins)으로 이동하여 애니메이션(Animation) 섹션에서 스켈레탈 메시 편집 툴(Skeletal Mesh Editing Tools) 플러그인을 찾거나 검색창을 사용합니다. 플러그인을 활성화하고 에디터를 재시작합니다.
프로젝트에는 스켈레톤을 생성할 수 있는 스태틱 메시 오브젝트나 스켈레톤 에셋을 편집하려는 스켈레탈 메시 캐릭터가 포함되어 있습니다.
스켈레탈 메시 생성
콘텐츠 브라우저(Content Browser)에서 원하는 스태틱 메시 오브젝트를 우클릭하고 컨텍스트 메뉴에서 스켈레탈 메시로 변환(Convert to Skeletal Mesh) 옵션을 선택합니다.
스켈레탈 메시로 변환 옵션을 선택하면 메뉴가 표시되며, 이 메뉴에서 스태틱 메시에 바운딩할 기존 스켈레톤 메시 에셋을 선택할 수도 있고, 새로 생성(Create New)을 선택하여 새로운 스켈레톤 에셋을 생성할 수도 있습니다.
스켈레톤 에셋을 새로 생성할 때 스태틱 메시의 원점에 단일 루트 본이 생성됩니다.
스켈레톤 에셋 편집하기
새 스켈레톤 에셋을 생성하거나, 편집할 기존 에셋을 선택한 다음, 스켈레톤 에디터에서 스켈레톤을 엽니다. 에디터를 연 다음에는 툴바에서 편집 툴(Editing Tools) 버튼을 선택하여 스켈레톤 편집을 시작합니다.
아래에서 스켈레톤 에디터의 툴과 패널을 간략하게 살펴볼 수 있습니다.
툴 패널
스켈레톤 트리(Skeleton Tree)
디테일(Details)/에셋 디테일(Asset Details)/프리뷰(Preview)
본 생성 및 편집
본을 생성하기 시작하려면 툴 패널에서 스켈레톤(Skeleton) 모드를 선택합니다.
스켈레톤 편집(Edit Skeleton) 툴을 사용하면 뷰포트의 메시 안에 본을 배치할 수 있습니다.
추가(Add) 모드(N)를 활성화한 다음, 뷰포트에서 본을 선택하고 새 본을 올바른 길이와 위치로 캐릭터에 드래그합니다. 처음 선택한 본이 새 본의 부모로 작동합니다.
새 본을 생성한 다음에는 수락(Accept)을 선택하여 새 본과 배치를 확인합니다.
축 길이(Axis Length)와 축 두께(Axis Thickness)를 사용하여 새 본이 가리키는 방향을 시각화합니다.
활성화하면 자손 업데이트(Update Children) 프로퍼티는 편집 시 선택된 본의 모든 부모 본을 함께 이동시킵니다. 전체 체인을 조정할 때 유용합니다.
본 부모 지정
스켈레톤 트리 패널에서 본을 선택하여 새 부모 본으로 드래그 앤 드롭하는 방식으로 스켈레톤 계층구조에서 본의 부모를 다시 지정할 수 있습니다.
본 이름변경
본을 우클릭하고 컨텍스트 메뉴에서 본 이름변경(Rename Bone)(F2) 옵션을 선택하면 본의 이름을 변경할 수 있습니다.
체인을 여러 개 선택하여 본의 이름을 일괄 변경할 수도 있습니다. 또한 이름 끝에 해시태그(#) 연산자를 사용하면 여러 개의 본에 연속된 숫자를 붙일 수 있습니다. 예를 들어, 체인을 여러 개 선택하고 첫 번째 본의 이름을 tail_##1로 변경하고 변경사항을 입력하면, 첫 번째 본은 tail_001이 되고 이후 본은 tail_002, tail_003 등이 됩니다.
편집 모드
스켈레톤에서 편집(Edit) 모드를 선택하고 본 방향(Orient)이나 본 미러링(Mirror) 같은 툴을 사용하여 기존 본을 편집할 수 있습니다.
본 방향
본은 올바른 방향을 가리켜야 의도한 방식대로 회전할 수 있습니다. 이를 본 방향(Bone Orientation)이라고 합니다. 본의 방향을 지정하려면 방향을 지정할 체인을 선택하고 방향 섹션을 펼칩니다.
아래에서 본 방향 프로퍼티 목록과 기능 설명을 참조할 수 있습니다.
| Property | Description |
|---|---|
프라이머리(Primary) | 본이 향할 방향(일반적으로 X축)을 설정합니다. |
세컨더리(Secondary) | 본의 위쪽 방향을 나타낼 축을 설정합니다. |
평면을 세컨더리로 사용(Use Plane as Secondary) | 활성화하면 이 프로퍼티는 본을 관통하는 평면을 생성하여 방향 지정에 도움을 줍니다. |
세컨더리 타깃(Secondary Target) | 보조 축에 사용할 위치를 설정합니다. |
자손 방향(Orient Children) | 활성화하면 이 프로퍼티는 선택한 본 아래로 모든 자손의 방향을 지정합니다. |
본을 선택하고 회전 기즈모(Rotate Gizmo)(R)를 사용하거나, X, Y, Z 각 축에 명시적으로 트랜스폼 값을 지정하여 수동으로 본 방향을 지정할 수도 있습니다.
Mirror Bones
스켈레톤 생성 프로세스를 빠르게 진행하려면 본 미러링 툴로 본 체인을 미러링하여 사지 또는 기타 미러링된 본 구조체를 복사하면 됩니다. 본 체인을 미러링하려면 미러링하려는 체인이나 본을 선택한 다음 편집 모드에서 미러 버튼을 사용합니다.
아래에서 본 미러링 프로퍼티 목록과 기능 설명을 참조할 수 있습니다.
| Property | Description |
|---|---|
미러 축(Mirror Axis) | 미러링할 축 평면을 설정합니다. |
회전 미러(Mirror Rotation) | 활성화하면 평면을 가로지르는 회전이 반전됩니다. 보통 애니메이션에 필요합니다. |
왼쪽 스트링(Left String) | 왼쪽에서 검색하는 데 사용할 이름을 정의합니다. |
오른쪽 스트링(Right String) | 오른쪽에서 검색하는 데 사용할 이름을 정의합니다. |
자손 미러(Mirror Children) | 활성화하면 미러링된 본이 선택된 본 체인 내의 자손도 모두 미러링합니다. |
스킨 웨이트
스켈레탈 메시에 새 본을 추가할 때, 스킨 바인드(Bind Skin) 툴을 사용하면 해당 본에 스킨 웨이트(Skin Weights)를 추가하여 본이 메시의 지오메트리에 영향을 줄 수 있습니다. 스킨 웨이트는 스켈레탈 메시 지오메트리의 각 버텍스에 할당된 값으로, 본이 움직일 때 본이 버텍스를 디폼해야 하는 영향력을 나타냅니다. 각 버텍스는 스켈레톤에 있는 여러 본의 영향을 받을 수 있습니다. 사용자는 본마다 각각의 버텍스에 가중치를 할당하여 버텍스가 연결할 본을 알려줘야 합니다. 각 본의 버텍스마다 0.0부터 1.0까지의 값이 포함되어 있습니다. 여기서 0은 해당 버텍스가 본의 영향을 전혀 받지 않는다는 뜻이고, 1은 버텍스가 뼈에 완전히 연결되어 있다는 뜻입니다. 0에서 1 사이의 값을 통해 버텍스가 본에 부분적으로 영향을 받게 할 수 있습니다. 각 버텍스에 스킨 웨이트를 개별적으로 설정하는 것은 실용적이지 않으므로 대신 스킨 웨이트 맵을 페인팅하는 것이 전체 캐릭터에 우아한 디포메이션을 생성하는 더 좋은 솔루션입니다.
각 버텍스의 스킨 웨이트 값은 정규화됩니다. 즉, 각 버텍스의 총 가중치는 1이 되어야 합니다. 이는 스켈레톤 전체가 이동될 때 메시의 버텍스도 함께 이동하도록 보장합니다. 버텍스의 총 가중치가 1보다 작으면 버텍스의 움직임이 스켈레톤의 움직임보다 지연되어 나타납니다. 반대로 총 가중치가 1보다 크면 버텍스가 스켈레톤보다 더 많이 움직입니다. 그렇기 때문에 언리얼 엔진은 메시의 각 버텍스의 스킨 웨이트 값을 정규화하여 총값을 1로 강제합니다.
예를 들어, 팔꿈치의 버텍스 값이 팔뚝 본에서 0.7이라면, 남은 0.3 가중치는 하나 이상의 다른 본에 할당됩니다. 이 경우 0.3의 가중치는 상완에 할당될 가능성이 높습니다.
버텍스 가중치를 편집하면 언리얼 엔진은 다른 가중치를 자동으로 정규화하여 총값을 항상 1로 만들기 때문에 언리얼 엔진이 스킨 웨이트를 자동으로 조정할 수도 있습니다.
버텍스에 1의 인플루언스만 있고 가중치가 0보다 큰 본이 1개만 있는 경우, 해당 본의 가중치를 실질적으로 수정할 수 없습니다. 가중치를 1.0이 아닌 다른 값으로 설정하면 정규화 절차가 트리거되어 할당한 값에 관계없이 다시 값을 1.0로 설정합니다. 일단 버텍스가 0이 아닌 가중치로 여러 본에 할당되면, 사용자가 설정한 가중치를 달성하기 위해 정규화 절차가 필요한 만큼 초과 가중치를 다른 인플루언스에 분배합니다.
버텍스의 가중치 값이 팔뚝에 0.7, 상완에 0.3이 할당된 앞의 예시를 들어보겠습니다. 사용자가 팔뚝의 가중치를 0.6으로 낮춰 일부 가중치를 제거하려고 하면, 정규화 절차가 자동으로 상완의 가중치 값을 0.3에서 0.4로 변경하여 총값을 1로 유지합니다.
버텍스 가중치만 명시적으로 추가하는 것이 가장 좋습니다. 그러면 원하는 값을 얻기 위해 정규화 절차에서 필요한 만큼 가중치를 제거할 수 있습니다.
본의 인플루언스를 줄이려면 다른 본에 가중치를 추가하는 편이 낫습니다. 이렇게 하면 정규화에 의존하여 인플루언스를 다른 인플루언스에 균등하게 분배하지 않고 인플루언스가 어디에 속하는지 명시적으로 지정할 수 있습니다.
스킨 웨이트 바인딩
스킨 웨이트 페인팅을 시작하려면 툴 패널에서 스킨 모드를 선택한 다음 스킨 바인드(Bind Skin) 툴을 선택하여 에셋 베이스라인 세팅을 설정합니다.
아래에서 스킨 바인드 툴의 프로퍼티 목록과 그 기능에 대한 설명을 참조할 수 있습니다.
| Property | Description |
|---|---|
바인딩 타입(Binding Type) | 바인딩에 사용할 방법을 선택합니다. 다음 방법 중에서 선택할 수 있습니다.
|
강성(Stiffness) | 바인딩의 강성을 설정합니다. 값이 낮을수록 더 멀리 있는 본이 바인드에 기여합니다. |
최대 인플루언스(Max Influences) | 각 버텍스에 영향을 미치는 최대 본 수를 설정합니다. |
복셀 해상도(Voxel Resolution) | 바인딩 타입이 측지 복셀(Geodesic Voxel)로 설정된 경우, 이 프로퍼티를 사용하면 복셀화된 그리드의 해상도를 설정할 수 있습니다. 값이 크면 퍼포먼스에 영향을 주지만 더 미세한 디테일을 표현할 수 있습니다. |
페인트 가중치
베이스 가중치 세트가 있으면 이제 스킨 웨이트 맵을 페인팅하여 각 본이 영향을 미치는 메시의 영역을 설정할 수 있습니다. 스킨 웨이트 맵을 페인팅하기 시작하려면 스킨 모드 내에서 가중치 편집(Edit Weights) 버튼을 선택합니다.
그런 다음, 메시에 스킨 웨이트 맵을 페인팅하는 데 사용할 툴을 선택할 수 있습니다. 두 가지 가중치 편집 모드가 있습니다.
브러시(Brush): 페인트 브러시 툴을 사용하여 가중치를 전체 메시에 페인팅합니다. 이 모드는 주로 넓은 영역이나 간단한 구조에 가중치를 페인팅하는 데 사용됩니다.
버텍스(Vertices): 개별 버텍스를 선택하여 스킨 웨이트를 편집하는 데 사용할 수 있는 선택 툴을 사용합니다. 이 모드는 주로 세부적인 가중치 편집 및 마스킹에 사용됩니다.
브러시 모드
브러시 모드를 사용하여 가중치 페인팅을 시작하려면 스켈레톤 트리 패널의 계층구조에서 본을 선택합니다. 그러면 해당 본에 할당된 가중치가 메시에 표시됩니다.
브러시 모드에는 가중치 편집에 도움이 되는 브러시 연산(Operations) 세트가 포함되어 있습니다.
| 연산 | Description |
|---|---|
더하기(Add) | 이 모드는 최댓값인 |
대체(Replace) | 이 모드는 현재 가중치에서 세기 값을 뺀 값으로 대체합니다. |
곱하기(Multiply) | 이 모드는 현재 가중치에 세기 값을 곱합니다. |
완화(Relax) | 이 모드는 에지별로 현재 연결된 버텍스 가중치의 평균을 현재 가중치에 적용합니다. 이 모드는 스무딩과 유사하게 작동합니다. |
두 가지 타입의 브러시 중에서 선택할 수도 있습니다.
| 브러시 | Description |
|---|---|
표면(Surface) | 표면 브러시는 메시 표면을 따라 떨어진 거리에 비례하여 버텍스에 영향을 주는데, 이를 측지 거리라고 합니다. 입술처럼 곡률이 높고 좁은 부분을 페인팅할 때 유용합니다. 표면 브러시(Surface Brush)는 아랫입술을 페인팅할 때 윗입술에 영향을 주지 않으며, 그 반대의 경우도 마찬가지입니다. |
볼륨(Volume) | 볼류메트릭 브러시(Volumetric Brush)는 브러시 중심에서 버텍스까지의 직선거리에 비례하여 버텍스에 영향을 줍니다. 메시의 연결성이나 거리와 무관합니다. |
각 브러시는 다음 세팅으로 수정할 수도 있습니다.
| 세팅 | Description |
|---|---|
반경(Radius) | 브러시 크기를 설정합니다. |
세기(Strength) | 브러시의 세기를 설정하여 브러시 연산 결과에 영향을 줍니다. |
감쇠(Falloff) | 브러시의 지수적 감쇠, 즉 브러시가 브러시 중앙 주변 포인트에 주는 영향력을 설정합니다. |
브러시와 모드를 선택한 다음에는 뷰포트의 메시에서 브러시 툴을 클릭하고 드래그하여 선택한 본의 스킨 웨이트 맵에 페인팅하기 시작할 수 있습니다.
B 단축키를 사용하여 브러시 크기(Brush Size)와 브러시 세기(Brush Strength)를 시각적으로 편집할 수 있습니다.
B 키를 누른 상태로 왼쪽이나 오른쪽으로 드래그하여 브러시의 반경을 편집합니다.
B 키를 누른 상태로 위나 아래로 드래그하여 브러시의 세기를 편집합니다.
가중치 편집이 완료되면 수락(Accept)을 눌러 새 가중치를 확정하고 툴을 종료합니다.
결과가 마음에 들지 않으면 가중치를 수락한 후에도 Ctrl+Z를 사용하여 수정한 내용을 간단하게 취소할 수 있습니다.
버텍스 모드
버텍스모드를 사용하면 범위(Marquee) 선택 툴을 사용하여 가중치를 편집할 특정 버텍스를 선택할 수 있습니다.
아래에서 버텍스 모드의 작업 목록과 그 기능에 대한 설명을 참조할 수 있습니다.
| 연산 | Description |
|---|---|
미러링(Mirroring) | 현재 선택된 본과 버텍스 가중치를 미러 평면(Mirror Plane) 방향을 기준으로 반대편에 미러링합니다. |
가중치 플러드(Flood Weights) | 브러시 작업을 사용하여 선택한 가중치를 플러드합니다. 버텍스와 본을 선택하고 더하기 연산을 사용하여 가중치를 플러드할 수 있습니다. 본의 가중치가 |
가중치 정리(Prune Weights) | 지정된 한계치 값 미만의 가중치는 제거됩니다. 특히 퍼포먼스 개선에 유용합니다. |
웨이트 맵의 예리한 경계를 부드럽게 하려면 버텍스, 본을 선택하고 완화 연산을 사용합니다.
가중치 미러링
스킨 웨이트 페인팅 워크플로를 빠르게 진행하려면, 미러 버튼을 사용하여 사지나 기타 미러링된 구조 같은 대칭 구조를 미러링하면 됩니다. 구조를 미러링하려면 미러링하려는 본, 본 체인 또는 버텍스를 선택한 다음 가중치 편집 탭 아래의 툴 패널에서 미러 버튼을 선택합니다.
버텍스 모드를 사용할 때 버텍스를 선택하지 않으면 선택한 본의 영향을 받는 모든 버텍스에 연산이 실행됩니다. 이는 캐릭터의 왼쪽 전체에 대한 가중치를 오른쪽에 미러링하는 데 유용할 수 있습니다.
페인트 어트리뷰트 맵
어트리뷰트 맵(Attribute Maps)은 페인팅 가능한 버텍스별 웨이트 맵으로, 디포머 그래프 등 언리얼 엔진의 다른 기능에 데이터로 전송할 수 있습니다. 페인팅을 시작할 어트리뷰트 맵을 새로 생성하려면 어트리뷰트 편집(Edit Attributes) 탭으로 이동하여 맵에 새 이름을 지정하고 웨이트 맵 레이어 추가(Add Weight Map Layer)를 실행합니다.
이 새 맵은 이제 어트리뷰트 인스펙터(Attributes Inspector)의 버텍스 어트리뷰트(Vertex Attributes) 섹션에 표시됩니다.
새 어트리뷰트 맵을 생성한 다음에는 툴 패널의 맵 페인트(Paint Maps) 탭을 선택하여 맵을 페인팅할 수 있습니다. 선택된 어트리뷰트(Selected Attribute)에서 페인팅할 타입 맵을 선택한 다음, 뷰포트를 클릭하고 드래그하여 메시 페인팅을 시작할 수 있습니다.
단축키 레퍼런스
아래에서 각 스켈레톤 생성 모드에 사용할 수 있는 단축키 목록을 참조할 수 있습니다.
가중치 편집
| 단축키 | Description |
|---|---|
B(누른 상태로)(왼쪽에서 오른쪽으로 드래그) | 브러시 반경 크기 변경 |
B(누른 상태로)(위에서 아래로 드래그) | 브러시 세기 변경 |
Shift | 브러시 완화 |
Ctrl | 현재 브러시 반전 |
마우스 가운데 버튼 클릭(본에) | 페인트할 인플루언스를 시각적으로 선택 |
F | 선택된 버텍스 또는 본의 프레임 카메라 |
본 편집
| 단축키 | Description |
|---|---|
N | 새 본 생성 |
ESC | 본 편집 |
B | 부모 변경 |
Shift + P | 연결 해제(부모 해제) |
Delete | 본 제거 |
Python API
아래에서 워크플로 자동화 스크립트 작성에 사용할 스켈레톤 편집 툴용 Python API를 참조할 수 있습니다.
본 및 가중치 액세스
mesh_path = "/Game/Characters/Mannequins/Meshes/SKM_Quinn_Simple"
asset_editor = unreal.EditorAssetLibrary()
skel_mesh = asset_editor.load_asset(mesh_path)모디파이어 라이브러리 로드
# load the weight modifier
weight_modifier = unreal.SkinWeightModifier()
# load the skeleton modifier
skeleton_modifier = unreal.SkeletonModifier()새 본 생성
# Create two bones, a and b
skeleton_modifier.set_skeletal_mesh(skel_mesh)
skeleton_modifier.add_bones(["a", "b"],["root", "root"], [unreal.Transform(), unreal.Transform()])본 부모 지정
# Parent bone b to bone a
skeleton_modifier.parent_bone("b", "a")변경사항 커밋
# Commit the changes
skeleton_modifier.commit_skeleton_to_skeletal_mesh()