언리얼 엔진에서 휴머노이드 캐릭터간의 애니메이션 Retargeting
스켈레탈 애니메이션은 뼈대를 기반으로 하는 애니메이션이므로 원칙적으로 서로다른 골격구조를 가진 캐릭터의 애니메이션은 서로 교환하여 사용할 수가 없다.
언리얼 엔진에서는 Animation Retargeting 이라는 방법을 사용하여 휴머노이드 캐릭터 간에는 골격구조가 서로 다르더라도 Rig 애셋을 통하여 애니메이션을 서로 교환하여 사용할 수 있다
언리얼 엔진은 두 캐릭터 간에 서로 뼈대정보를 공유하기 위해 새로운 애셋인 휴머노이드 Rig 애셋을 생성하여 사용하는 방법을 제공한다
여기서는 mixamo 사이트에서 다운로드한 캐릭터와 애니메이션을 언리얼 프로젝트로 임포트하여 언리얼 엔진에서 제공하는 마네킹 캐릭터에 사용되는 애니메이션을 mixamo 에서 가져온 캐릭터에 적용하는 절차에 대해 알아 보고자 한다.
mixamo.com 사이트에서 캐릭터와 애니메이션을 다운로드하고 언리얼 프로젝트로 임포트하는 방법은 다음 링크를 눌러 참조하면 된다
https://unrealengine.tistory.com/category/Skeletal%20Animation/Mixamo%20Character
설정 절차 ( 마네킹 캐릭터의 애니메이션을 mixamo 캐릭터에게 설정하는 예)
Skeleton Asset 더블클릭하여 에디터 열기
1. 소스 스켈레톤에 Rig 애셋 생성하기
Content Browser에서 마네킹 스켈레톤을 더블클릭하여 페르소나 에디터를 열고
툴바 > Retarget Manager > Select Rig: Select Humanoid Rig
위와 같이 선택하면 자동으로 Rig 이름과 뼈의 이름이 서로 나란히 매칭된 표가 표시된다 언리얼 캐릭터의 경우에는 자동 매핑이 문제 없지만 외부에서 임포트한 다른 스켈레톤에는 적절치 않는 매핑이 될 수 있으므로 자동으로 설정하더라도 반드시 모든 본이 적절히 설정되었는지 확인해야 한다
2. 소스 Rig 애셋 저장
스켈레톤 에디터의 툴바에서 Save 버튼을 눌러 생성된 휴머노이드 Rig애셋 정보를 저장한다
설정된 Rig 정보를 별도의 파일에 저장하려면 중간에 있는 [저장] 버튼을 누르면 된다. 저장된 매핑 정보는 다음에 동일한 작업을 할 때 일일이 설정하는 것이 아니라 [로드] 버튼을 눌러 적용하면 된다
3. 타겟 스켈레톤에 Rig 애셋 생성
타겟 스켈레톤을 더블클릭하여 페르소나 에디터를 열고 소스 스켈레톤에 설정했던 Rig 애셋을 동일한 방법으로 설정한다. 모든 본에 대응하는 타겟 본의 이름을 정확히 지정해야 한다. 위와 마찬가지로 작성된 릭애셋을 저장해두면 동일한 작업을 반복할 때 로드하여 사용할 수 있다
4. 소스 애니메이션 리타겟 및 애니메이션 생성
사용하고자 하는 소스 애니메이션 위에서 마우스 우측 > Retarget Anim Assets > Duplicate Anim Assets and Retarget
5. Select Skeleton(타겟 스켈레톤 선택)
새로 나타난 창의 왼쪽에는 소스 스켈레톤의 기본 포즈가 표시되어 있고 우측 Target 영역은 아직 비어 있는 상태이다
왼쪽 중간 쯤에 표시된 새로운 스켈레톤 이름을 선택하면 우측에 Target 영역에 해당 스켈레톤의 기본 포즈가 표시된다
소스 스켈레톤의 기본포즈와 타겟 스켈레톤의 기본포즈가 서로 일치하는지 확인한다
기본포즈가 서로 일치하지 않으면 애니메이션에도 영향을 미치게 되므로 팔을 벌린 정도나 다리를 벌린 정도, 팔의 전후 위치 등을 비교하여 소스 스켈레톤의 자세를 변경해 주면 된다
6. 소스 스켈레톤의 기본포즈 수정
언리얼 엔진에 포함된 마네킹 캐릭터의 기본포즈는 A 자형인데 mixamo 에서 임포트한 캐릭터는 T 자형 포즈를 기본으로 하고 있으므로 리타겟팅을 수행하기 전에 양 캐릭터의 기본 자세를 최대한 동일하게 설정해 주어야 애니메이션이 정상적으로 작동한다.
스켈레톤 에디터를 열고 왼쪽의 Select Bone 탭에서 수정하고자 하는 뼈를 찾아 선택한다
뷰포트의 편집툴에서 회전툴 등을 이용하여 본을 회전하여 타겟 스켈레톤의 기본포즈와 같이 설정한다
타겟 매니저 화면의 하단에 있는 [자세변경] 버튼을 누르고 [현재자세 사용] 버튼을 누른다. [자세 보이기] 버튼을 누르면 다시 원래의 기본자세가 표시되고 [자세 감추기] 버튼을 누르면 수정된 자세가 표시된다
4번 항목을 다시 수행하고 창의 하단에 있는 Select 버튼을 누르면 새로운 애니메이션이 생성된다
7. 위에서 생성된 애니메이션을 타겟 캐릭터에 설정하기
언리얼 3인칭 프로젝트에서 뷰포트 상의 마네킹을 선택하고 우측 [디테일] 섹션의 [블루프린트 편집] 버튼을 누르고 에디터의 왼쪽 [컴포턴트 추가] 섹션에서 Mesh 노드를 선택하면 우측 [디테일] 섹션의 Mesh 항목 설정에서 메시를 설정하면 마네킹 캐릭터 대신에 mixamo 등의 외부에서 임포트한 캐릭터를 설정할 수 있다
애니메이션 섹션에서는 위에서 생성한 애니메이션을 설정하고 저장한다
애니메이션 블루프린트를 생성하여 위의 애니메이션을 사용할 수도 있다
8. 플레이 버튼을 눌러 적용된 캐릭터와 애니메이션이 잘 작동하는지 확인한다
Unreal - Mixamo Bone Mapping ( Humunoid Rig)
root |
None |
pelvis | Hips |
spine_01 | Spine |
spine_02 | Spine1 |
spine_03 | Spine2 |
neck_01 | Neck |
head | Head |
clavicle_l | LeftShoulder |
upperarm_l | LeftArm |
lowerarm_l | LeftForeArm |
hand_l | LeftHand |
clavicle_r | RightShoulder |
upperarm_r | RightArm |
lowerarm_r | RightForeArm |
hand_r | RightHand |
thigh_l | LeftUpLeg |
calf_l | LeftLeg |
foot_l | LeftFoot |
ball_l | LeftToeBase |
thigh_r | RightUpLeg |
calf_r | RightLeg |
foot_r | RightFoot |
ball_r | RightToeBase |
thumb_01_l | LeftHandThumb1 |
thumb_02_l | LeftHandThumb2 |
thumb_03_l | LeftHandThumb3 |
index_01_l | LeftHandIndex1 |
index_02_l | LeftHandIndex2 |
index_03_l | LeftHandIndex3 |
middle_01_l | LeftHandMiddle1 |
middle_02_l | LeftHandMiddle2 |
middle_03_l | LeftHandMiddle3 |
ring_01_l | LeftHandRing1 |
ring_02_l | LeftHandRing2 |
ring_03_l | LeftHandRing3 |
pinky_01_l | LeftHandPinky1 |
pinky_02_l | LeftHandPinky2 |
pinky_03_l | LeftHandPinky3 |
thumb_01_r | RightHandThumb1 |
thumb_02_r | RightHandThumb2 |
thumb_03_r | RightHandThumb3 |
index_01_r | RightHandIndex1 |
index_02_r | RightHandIndex2 |
index_03_r | RightHandIndex3 |
middle_01_r | RightHandMiddle1 |
middle_02_r | RightHandMiddle2 |
middle_03_r | RightHandMiddle3 |
ring_01_r | RightHandRing1 |
ring_02_r | RightHandRing2 |
ring_03_r | RightHandRing3 |
pinky_01_r | RightHandPinky1 |
pinky_02_r | RightHandPinky2 |
pinky_03_r | RightHandPinky3 |