0. 개요
캐릭터에 새로운 애니메이션을 넣어보려고 했는데 문제가 생겼다.
가져온 애니메이션과 기존 캐릭터가 서로 다른 스켈레톤을 사용하고 있었던 것이다.

기존 캐릭터는 SK_Mannequin 계열 스켈레톤을 사용하고 있었지만, 새로 가져온 애니메이션은 별도의 본 구조를 가진 스켈레톤을 사용하고 있었다. 같은 Skeleton 에셋을 공유한다면 애니메이션을 바로 적용할 수 있지만, 이렇게 서로 다른 스켈레톤을 사용하고 있다면 그대로 재생할 수 없다.
따라서 언리얼 엔진 5에서 제공하는 애니메이션 리타겟팅(Animation Retargeting) 기능을 이용해 애니메이션을 변환해 보기로 했다.
UE5에서 서로 다른 스켈레톤 사이의 애니메이션을 변환할 때는 주로 다음 두 에셋을 사용한다.
- IK Rig: 각 스켈레톤의 팔, 다리, 척추와 같은 본 체인을 정의한다.
- IK Retargeter: 원본 IK Rig와 대상 IK Rig를 연결하여 애니메이션을 변환한다.
전체적인 작업 순서는 다음과 같다.
- 원본과 대상 스켈레톤의 IK Rig를 만든다.
- IK Rig에서 Retarget Chain과 IK Goal을 설정한다.
- 관절이 비정상적으로 꺾이지 않도록 IK 설정을 보정한다.
- IK Retargeter에서 원본과 대상 IK Rig를 연결한다.
- 변환 결과를 미리 확인하고 Animation Sequence로 내보낸다.
1. 원본과 대상의 IK Rig 생성하기
먼저 Content Browser에서 우클릭한 뒤 IK Rig 에셋을 생성한다.
Animation → IK Rig → IK Rig

IK Rig는 하나만 만들면 되는 것이 아니다.
원본 애니메이션이 사용하는 스켈레톤과 애니메이션을 적용할 대상 스켈레톤에 대해 각각 하나씩 만들어야 한다.
예를 들어 다음과 같이 두 개의 IK Rig가 필요하다.
- 원본 애니메이션용 IK Rig
- 대상 캐릭터용 IK Rig
IK Rig를 생성하고 에셋을 열었다면 먼저 Preview Skeletal Mesh를 지정한다.

Preview Skeletal Mesh에는 해당 IK Rig가 사용할 Skeletal Mesh를 넣어주면 된다.
Skeletal Mesh를 지정하면 왼쪽 Hierarchy 패널에서 스켈레톤이 가지고 있는 본 구조를 확인할 수 있다.

이곳에서 각각의 본을 선택하거나, Retarget Chain과 IK Goal을 생성할 수 있다.
2. IK Goal 만들기
이렇게 Rig를 만들었다면, 다음으로 할 일은 Retarget Chain과 IK Goal을 생성해 주는 작업이다.
이때 이 작업은 모두 손수 만들어도 되지만, 원본, 결과가 비슷한 형태의 본이고 또 거의 동일한 휴머노이드 본이라면, 굳이 그럴 필요가 없다. 일단 '자동 생성' 방식부터 보고, 최악의 경우 자동 생성이 안 될 때 사용 가능한 방법을 살펴보자.
2-1. Goal 만들기 1: Auto Create 기능으로 기본 설정 만들기
사람 형태의 일반적인 스켈레톤이라면 모든 설정을 처음부터 직접 만들기보다 자동 생성 기능을 먼저 사용하는 편이 편하다.
IK Rig 에디터에서는 다음과 같은 기능을 제공한다.
- Auto Create Retarget Chains
- Auto Create IK

Auto Create Retarget Chains는 스켈레톤의 본 이름과 구조를 분석하여 팔, 다리, 척추와 같은 Retarget Chain을 자동으로 생성한다.
Retarget Chain은 개별 본을 일대일로 연결하는 설정이 아니다. 예를 들어 thigh, calf, foot으로 연결된 다리 본들을 하나의 체인으로 묶어두고, 이후 IK Retargeter에서 원본과 대상의 다리 체인을 서로 대응시키는 방식이다.
Auto Create IK는 손과 발처럼 IK 보정이 필요한 위치에 IK Goal과 관련 Solver 설정을 자동으로 생성해준다.
자동 생성 기능을 사용하면 모든 본을 직접 찾아가며 설정하는 것보다 작업 난이도를 크게 줄일 수 있다. 다만 자동 생성 결과가 항상 정확한 것은 아니므로, 생성된 체인과 IK Goal이 올바른 본에 연결되었는지 확인해야 한다.
2-2. Goal 만들기 2: IK Goal을 직접 생성해야 하는 경우
대부분은 위와 같이 자동으로 생성해서 해결할 수 있지만(이번 프로젝트를 할 땐 문제없이 성공), 정말 운이 나쁘면 IK Goal을 직접 지정해야 할 수 있다.
스켈레톤의 본 이름이 일반적인 규칙과 다르거나, 자동 생성 기능이 본 구조를 제대로 인식하지 못하면 IK Goal이 만들어지지 않는다.
이때는 Hierarchy 패널에서 손이나 발에 해당하는 본을 우클릭하고 New IK Goal을 선택하여 직접 생성할 수 있다.

IK Goal은 손이나 발이 도달해야 할 목표 위치를 나타낸다.
좀 더 정확히 말해서 IK란 역운동학(Inverse kinematic)이라고 하는 기술이다. 보통은 애니메이션에서 몸에서 팔까지, 각 관절 구조의 움직임을 몸-어깨-팔꿈치-손목까지 차례대로 따라가서 손의 위치를 계산하게 된다. 그렇지만 이러면 손이 내가 원하는 위치에 도달하도록 계산하기가 정말 어렵다. 그러니까, 반대로 손이 도달해야 할 목표 위치를 지정한 후에 이러한 조건을 만족할 수 있게 몸의 위치를 조정하는 것이다. 역으로 손-손목-팔꿈치-어깨-몸의 위치를 역산하는 것이 IK라고 할 수 있겠다.
이때 그 목표점이 되는 곳이 IK Goal이고 말이다.
다만 IK Goal을 생성하는 것만으로는 실제 본이 움직이지 않는다. IK Goal은 Solver Stack에 추가된 IK Solver와 함께 사용해야 한다.
Solver는 IK Goal의 위치를 바탕으로 팔이나 다리의 본을 어떻게 회전시킬지 계산한다. Full Body IK를 사용한다면 Solver의 Root Bone을 지정하고, 생성한 IK Goal을 Solver에 연결해야 한다.
여기서 Retarget Chain과 IK Goal의 역할을 구분해야 한다.
- Retarget Chain은 원본과 대상 스켈레톤의 본 움직임을 전달하기 위한 설정이다.
- IK Goal은 손과 발의 목표 위치를 기준으로 관절을 보정하기 위한 설정이다.
따라서 IK Goal을 만든다고 해서 Retarget Chain 설정이 대체되는 것은 아니다.
자동으로 Retarget Chain이 생성되지 않았다면 시작 본과 끝 본을 선택하여 체인을 별도로 만들어야 한다.
예를 들어 다리는 다음과 같이 하나의 체인으로 구성할 수 있다.
thigh → calf → foot
팔은 다음과 같이 구성할 수 있다.
upperarm → lowerarm → hand
이 부분은 직접 만들어본 게 아니라, 만약 필요하다면 공식 자료를 찾아보는 것을 추천한다.
3. 자동 생성 후 발생하는 역관절 문제
자동 생성 기능을 사용했다고 해서 모든 설정이 바로 정상적으로 동작하는 것은 아니다.
특히 Full Body IK가 적용된 상태에서 발의 IK Goal을 움직여보면 무릎이 사람이 움직일 수 없는 방향으로 꺾이는 경우가 있다.

Solver 입장에서는 목표 위치에 발을 도달시키는 것만 중요하기 때문에, 무릎이 앞쪽으로 꺾여야 하는지 뒤쪽으로 꺾여야 하는지를 정확하게 판단하지 못할 수 있다.
이러한 문제는 관절에 Bone Settings를 추가하고, 회전 강성과 선호 방향을 지정하여 보정할 수 있다.
3-1. Rotation Stiffness와 Preferred Angles 설정하기
Full Body IK Solver가 추가된 상태에서 보정하려는 본에 Bone Settings를 추가한다.
이후 해당 설정을 선택하면 오른쪽 Details 패널에서 다음과 같은 항목을 조절할 수 있다.
- Rotation Stiffness
- Position Stiffness
- Use Preferred Angles
- Preferred Angles
- 회전축별 Limits

Rotation Stiffness는 IK 계산 과정에서 해당 본이 기존 회전 상태를 얼마나 강하게 유지할지를 결정한다.
값이 너무 낮으면 관절이 IK Goal을 따라 과도하게 회전할 수 있고, 값을 올리면 현재 관절 방향을 비교적 강하게 유지한다.
Preferred Angles는 Solver가 관절을 어느 방향으로 구부릴지 결정할 때 우선적으로 사용할 회전 방향을 지정한다.
(위치를 얼마나 잘 유지할지 결정하는 Position Sitffness도 있긴 하지만 여기서는 사용하지 않았으니 패스하자.)
이번에 사용한 스켈레톤에서는 양쪽 calf 본에 다음과 같은 설정을 적용했다.
- Rotation Stiffness를 적당히 증가시킨다.
- Use Preferred Angles를 활성화한다.
- Preferred Angles를 (0.0, 0.0, 90.0)으로 설정한다.
발목의 움직임도 지나치게 불안정하다면 발 본에도 Rotation Stiffness나 회전 제한을 추가할 수 있다.
다만 Preferred Angles에 들어갈 값은 모든 스켈레톤에서 동일하지 않다.
스켈레톤마다 본의 로컬 축 방향이 다르기 때문에, 어떤 스켈레톤에서는 Z 축에 값을 넣어야 하고 다른 스켈레톤에서는 X축이나 Y축을 조절해야 할 수도 있다. 좌우 다리에서 서로 반대 부호의 값이 필요한 경우도 있다.
따라서 (0, 0, 90)을 고정된 정답으로 사용하기보다는, IK Goal을 직접 움직여보면서 무릎이 자연스러운 방향으로 접히는 값을 찾아야 한다.
설정을 조절하고 다시 발의 IK Goal을 움직여보니, 이전처럼 무릎이 뒤집히지 않고 정상적인 방향으로 꺾이는 것을 확인할 수 있었다.

이제 원본과 대상 스켈레톤의 IK Rig 설정이 어느 정도 끝났다.
다음으로 두 IK Rig를 연결하고 실제 애니메이션을 변환해주어야 한다.
4. IK Retargeter 생성하기
Content Browser에서 우클릭하고 IK Retargeter 에셋을 생성한다.
Animation → IK Rig → IK Retargeter

IK Retargeter는 원본 애니메이션이 사용하는 IK Rig와 애니메이션을 적용할 대상 IK Rig를 연결하는 역할을 한다.
에셋 생성 과정에서 Source IK Rig를 선택하거나, 생성 후 Details 패널에서 원본과 대상을 직접 지정할 수 있다.
4-1. Source IK Rig와 Target IK Rig 지정하기
IK Retargeter를 열고 다음 두 항목을 지정한다.
- Source IK Rig: 원본 애니메이션이 사용하는 IK Rig
- Target IK Rig: 애니메이션을 적용할 캐릭터의 IK Rig

Source에는 변환할 애니메이션의 스켈레톤을 기준으로 만든 IK Rig를 넣는다.
Target에는 최종적으로 애니메이션을 사용할 캐릭터의 IK Rig를 넣는다.
두 IK Rig가 정상적으로 지정되었다면 뷰포트에 원본 메시와 대상 메시가 함께 나타난다.
4-2. Preview Mesh의 위치 조절하기
처음 IK Retargeter를 열면 원본 메시와 대상 메시가 같은 위치에 겹쳐서 나타날 수 있다.
이 상태에서는 두 캐릭터의 자세를 비교하기 어렵기 때문에 Preview Mesh의 Offset을 조절하여 서로 떨어뜨려 놓는 것이 좋다.


이 Offset은 IK Retargeter 에디터에서 두 캐릭터를 비교하기 위한 미리 보기 설정이다.
따라서 Offset을 변경한다고 해서 실제로 내보내는 애니메이션에 옆으로 이동하는 값이 추가되는 것은 아니다.
원본과 대상을 나란히 배치해 두면 팔다리의 각도나 골반 높이, 발의 위치를 비교하기 쉬워진다.
4-3. Chain Mapping 확인하기
다음으로 Chain Mapping 패널에서 원본과 대상의 Retarget Chain이 올바르게 연결되어 있는지 확인한다.

원본과 대상 IK Rig에서 비슷한 이름으로 체인을 만들었다면 자동으로 연결되는 경우가 많다.
예를 들어 다음과 같은 대응 관계가 만들어진다.
- Target Left Arm → Source Left Arm
- Target Right Arm → Source Right Arm
- Target Left Leg → Source Left Leg
- Target Right Leg → Source Right Leg
- Target Spine → Source Spine
자동으로 연결되지 않았거나 잘못된 체인이 지정되었다면 Source Chain을 직접 수정해야 한다.
Chain Mapping이 잘못되어 있으면 팔의 움직임이 다리에 전달되거나, 특정 부위의 애니메이션이 전혀 재생되지 않을 수 있다.
따라서 적어도 팔, 다리, 척추, 목, 머리 체인은 정상적으로 연결되었는지 확인하는 것이 좋다.
손가락 애니메이션까지 필요하다면 손가락 체인도 별도로 확인해야 한다.
5. Asset Browser에서 애니메이션 선택하기
IK Retargeter 아래쪽의 Asset Browser에는 Source IK Rig의 스켈레톤이 사용하는 애니메이션 목록이 표시된다.
여기에서 변환할 애니메이션을 선택하거나 더블클릭한다.

애니메이션을 선택하면 원본 캐릭터와 대상 캐릭터가 동시에 애니메이션을 재생한다.
이를 통해 실제로 내보내기 전에 리타겟 결과를 미리 확인할 수 있다.
5-1. 리타겟 결과 미리 보기
애니메이션을 재생하면서 원본과 대상 캐릭터의 움직임을 비교해 본다.

이 단계에서는 다음과 같은 부분을 확인하는 것이 좋다.
- 팔과 다리가 올바른 방향으로 움직이는가
- 무릎이나 팔꿈치가 반대로 꺾이지 않는가
- 손과 발의 위치가 지나치게 어긋나지 않는가
- 골반의 높이가 비정상적으로 변하지 않는가
- 특정 체인의 애니메이션이 누락되지 않았는가
- 원본과 대상의 기본자세 차이로 어깨나 팔이 벌어지지 않는가
결과가 이상하다면 먼저 Chain Mapping을 확인해야 한다.
Chain Mapping이 정상이라면 각 IK Rig의 Retarget Chain, IK Goal 또는 Solver 설정을 다시 살펴봐야 한다.
원본은 T Pose이고 대상은 A Pose인 것처럼 두 캐릭터의 기본자세가 크게 다르다면, IK Retargeter의 Retarget Pose도 별도로 보정해야 할 수 있다.
5-2. 리타겟된 애니메이션 내보내기
미리 보기 결과에 문제가 없다면 변환된 애니메이션을 새로운 Animation Sequence로 내보낼 수 있다.
Asset Browser에서 내보낼 애니메이션을 선택한 뒤 Export Selected Animations를 실행한다.



애니메이션을 저장할 폴더를 지정하면 대상 스켈레톤을 사용하는 새로운 Animation Sequence 에셋이 생성된다.
이렇게 생성된 애니메이션은 대상 캐릭터의 Animation Blueprint, State Machine, Blend Space 등에서 사용할 수 있다.
이렇게까지 하고 나면 아주 잘 Export 될 것이다!
6. 주의사항
사람 형태의 일반적인 스켈레톤이라면 Auto Create 기능을 사용해 대부분의 설정을 자동으로 만들 수 있어 작업이 어렵지 않다(물론, 아예 인외의 형태라던가 관절 구조가 다르다던가 하면 그건 다른 이야기긴 하다).
다만 자동 생성 결과가 항상 자연스러운 것은 아니다.
특히 무릎처럼 구부러지는 방향이 중요한 관절은 앞에서 보이듯, Solver가 방향을 잘못 선택하여 역관절이 발생할 수 있었다. 이런 부분은 Rotation Stiffness, Preferred Angles, Limits 등의 설정을 직접 조절해야 한다.
전체 과정을 정말 러프하게 정리하면 다음과 같다.
- 원본과 대상 스켈레톤의 IK Rig를 각각 생성한다.
- Preview Skeletal Mesh를 지정한다.
- Auto Create 기능으로 Retarget Chain과 IK 설정을 만든다.
- 필요한 경우 IK Goal과 Solver를 직접 설정한다.
- 역관절이 발생하면 Rotation Stiffness와 Preferred Angles를 조절한다.
- IK Retargeter를 생성하고 Source와 Target IK Rig를 지정한다.
- Chain Mapping이 올바른지 확인한다.
- Asset Browser에서 애니메이션을 미리 확인한다.
- Export Selected Animations로 변환된 애니메이션을 내보낸다.
자동 생성 기능을 이용하면 기본 설정은 비교적 빠르게 끝낼 수 있지만, 마지막 결과를 자연스럽게 만들려면 결국 각 스켈레톤의 본 구조에 맞는 보정 작업이 필요하다.
'Unreal Engine 5' 카테고리의 다른 글
| [Unreal Engine] UMG에서 긴 텍스트가 영역을 벗어나지 않게 만들기(Scale Box + Text) (0) | 2026.08.11 |
|---|---|
| 언리얼 엔진 5 - 나이아가라에서 로컬 모듈 & User Parameter 사용하기 (0) | 2026.06.14 |
| 언리얼 엔진5 - 충돌 이벤트 처리 (0) | 2026.06.06 |
| 언리얼 엔진 - 전방 선언하고 include 안 할 때를 주의하자(error C2440: 'static_cast' : cannot convert from ...) (0) | 2026.05.31 |
| 퍼포스와 Visual Studio를 같이 사용하는 방법 (0) | 2026.04.16 |
댓글