지난 포스트에서는 캐릭터 Animation을 가져오고 언리얼 엔진에서 활용하는 기본적인 방법을 다뤘다.
이번에는 한 단계 더 나아가 Level Sequence에서 Control Rig를 이용해 직접 Animation을 만들고 수정하는 방법, Mixamo 캐릭터에 One Click Control Rig를 적용하는 과정, 영상에서 움직임을 생성하는 QuickMagic AI Motion Capture, 그리고 Skeletal Mesh Animation을 Texture로 변환하는 AnimToTexture까지 실습했다.
특히 이번 포스트에서는 Animation을 단순히 가져와 재생하는 것에서 끝나지 않고, 필요에 따라 직접 수정하거나 Animation Sequence로 Bake하고, 많은 캐릭터를 처리하기 위해 Animation의 표현 방식 자체를 바꾸는 과정까지 이어졌다.
Level Sequence에서 캐릭터 Animation 직접 만들기
언리얼 엔진에서는 외부에서 만들어진 Animation Sequence를 사용하지 않고도 Sequencer와 Control Rig를 이용해 Skeletal Mesh의 Bone을 직접 조절하면서 Animation을 제작할 수 있다.
먼저 캐릭터를 Level Sequence에 추가했다.
기존 Animation Track이 들어 있다면 이번에는 수동으로 직접 움직임을 만들 것이므로 기존 Animation은 제거했다.

캐릭터 Track의 + 버튼 - Control Rig - FK Control Rig를 선택한다.


FK Control Rig는 별도의 Control Rig Asset을 직접 만들지 않아도 Sequencer에 있는 Skeletal Mesh의 Bone을 조절할 수 있도록 자동으로 생성되는 Control Rig다.
Bone을 선택하고 위치나 회전을 조절한 뒤 Key를 기록하면 Animation을 직접 만들 수 있다.

간단한 포즈 수정이나 Bone 수가 많지 않은 캐릭터라면 FK Control Rig만으로도 상당한 작업이 가능하다.
실제로 Bone을 움직여 보면 Bone의 계층 관계에 따라 하위 Bone들이 함께 움직이기 때문에 캐릭터의 팔이나 척추, 머리 등을 직접 조절하면서 Pose를 만들 수 있다.
작업해보면 Animation Sequence를 매번 외부 프로그램에서 수정하고 다시 Import하지 않아도 언리얼 내부에서 간단한 자세를 바로 고칠 수 있다는 점이 꽤 편리하다.
FK & IK의 차이
캐릭터 Animation을 직접 만들기 시작하면 FK와 IK를 구분할 필요가 있다.
FK는 Forward Kinematics의 약자로, 부모 Bone을 움직이거나 회전시키면 그 영향을 자식 Bone이 순차적으로 받는 방식이다.
예를 들어 어깨를 회전하면 상완 → 팔꿈치 → 손목 → 손 순서로 함께 움직인다.
팔을 자연스럽게 휘두르거나 척추를 굽히는 것처럼 관절의 회전 흐름을 직접 만들어야 하는 작업에 적합하다.
반대로 IK는 Inverse Kinematics다.
손이나 발처럼 Bone Chain의 끝부분인 End Effector의 목표 위치를 먼저 지정하면 Solver가 중간 관절의 위치와 회전을 계산한다.
대표적인 예가 다음과 같다.
- 캐릭터의 발을 바닥에 고정
- 손을 테이블 위에 올려놓기
- 벽을 짚은 손 유지
- 컵이나 무기를 쥔 손의 위치 유지
걷는 Animation 자체에 IK가 반드시 필요한 것은 아니다.
FK만으로도 걷는 동작을 만들 수 있지만, 발이 바닥에서 미끄러지지 않도록 접지시키거나 특정 위치에 손·발을 유지할 때 IK의 장점이 커진다.
Animation 작업에서는 FK와 IK 중 하나만 사용하는 것이 아니라 필요한 상황에 따라 둘을 전환하면서 사용하는 경우가 많다.
Mixamo 캐릭터에 One Click Control Rig 적용하기
기본 FK Control Rig보다 편하게 Mixamo 캐릭터를 조절하기 위해 이번에는 One Click Control Rig를 사용했다.
One Click Control Rig는 UnrealForVFX에서 제공하는 서드파티 Control Rig로, Mixamo에서 Rig한 캐릭터에 IK/FK Control을 빠르게 구성해 Animation을 수정할 수 있도록 만든 도구다.
현재 제작사에서는 언리얼 엔진 5.3~5.6+ 호환을 안내하고 있다.
One Click Control Rig 설치
먼저 언리얼 엔진을 종료한 상태에서 사용하는 Engine Version과 맞는 One Click Control Rig 폴더를 준비한다.
언리얼 엔진 5.6을 사용하고 있다면 다운로드한 파일 중 5.6 버전의 폴더를 다음 Engine Plugins 경로에 복사했다.
C:\Program Files\Epic Games\UE_5.6\Engine\Plugins

Engine 설치 폴더를 직접 수정하는 방식이기 때문에 언리얼 엔진을 업데이트하거나 다시 설치하면 플러그인이 사라질 가능성이 있다.
사용한 플러그인 원본은 별도로 보관해두는 편이 좋다.
폴더를 복사한 뒤 언리얼 엔진을 다시 실행하고 Edit - Plugins에서 One Click Control Rig를 검색하여 플러그인을 활성화한 뒤 에디터를 다시 시작한다.

Engine Content의 Control Rig를 프로젝트로 복사
플러그인을 활성화하면 Engine Content에서 One Click Control Rig 관련 Asset을 확인할 수 있다.

이번 작업에서는 Engine Content에 들어 있는 원본을 직접 사용하는 대신 필요한 Control Rig를 프로젝트 Content 폴더로 복사해서 사용했다.

Engine Content에 들어 있는 Asset을 직접 수정하면 나중에 원본 상태로 되돌리기 어렵기 때문에, 프로젝트 Content 폴더로 복사한 뒤 복사본을 사용하는 것이 안전하다.
Mixamo Skeletal Mesh 지정
복사한 One Click Control Rig를 열고 Rig Hierarchy 영역의 빈 공간을 우클릭한 뒤 Import를 사용한다.


여기에서 Mixamo에서 Rig한 캐릭터의 Skeletal Mesh를 지정했다.
이 과정을 통해 One Click Control Rig가 현재 프로젝트에서 사용할 Mixamo Skeleton을 기준으로 구성된다.

Sequencer에서 One Click Control Rig 사용
처음에 추가했던 FK Control Rig는 제거하고 캐릭터 Track의 + 버튼 - Control Rig로 이동한다.
이번에는 플러그인을 설치했기 때문에 목록에 프로젝트로 복사한 OneClick_CtrlRig_Mixamo가 나타난다.

Control Rig가 추가되면 캐릭터 주위에 손·발·골반 등을 조절할 수 있는 Control Shape가 나타난다.


One Click Control Rig 하단에는 IK/FK Switch가 있어 필요한 상황에 따라 팔과 다리의 제어 방식을 바꿀 수 있다.

예를 들어 자유롭게 팔을 휘두르는 자세는 FK로 조정하고, 컵을 잡은 손이나 바닥에 붙어 있는 발은 IK를 이용하면 위치를 관리하기 쉽다.
실제로 캐릭터를 직접 움직여보면 단순히 Bone 자체를 선택하는 FK Control Rig보다 사람이 자주 조작하는 손·발·골반 중심으로 Control이 정리되어 있어 Pose 수정이 훨씬 직관적이다.


Level Sequence에서 만든 Animation을 Animation Sequence로 저장하기
Sequencer 안에서 Control Rig로 만든 Animation은 해당 Level Sequence 안에서만 사용할 필요는 없다.
완성된 움직임을 하나의 Animation Sequence Asset으로 Bake할 수 있다.

Animation을 만든 Skeletal Mesh Track을 우클릭한 뒤 Bake Animation Sequence를 선택한다.

저장 위치와 Animation Sequence 설정을 지정하면 Content Browser에 새로운 Animation Sequence가 생성된다.



생성된 Animation Sequence를 열어보면 Sequencer에서 Control Rig로 만들었던 움직임이 그대로 기록되어 있다.

확인을 위해 같은 캐릭터를 Level에 하나 더 복사하고 Level Sequence에 추가한 뒤 새로 만든 Animation Sequence를 지정했다.
그러면 Control Rig 없이도 앞에서 만든 Animation이 그대로 재생된다.



즉 작업 흐름은 다음처럼 이해하면 된다.
Control Rig로 Animation 제작 → Sequencer에서 확인 → Bake Animation Sequence → 독립적인 Animation Asset으로 재사용
이 과정을 알고 있으면 언리얼 내부에서 만든 간단한 Animation을 다른 Level이나 Sequence에서도 반복해서 사용할 수 있다.
QuickMagic으로 영상에서 AI Animation 만들기
이번에는 Animation을 직접 Keyframing하는 대신 AI Motion Capture 서비스를 이용했다.
사용한 서비스는 QuickMagic이다.
QuickMagic은 일반 카메라나 스마트폰으로 촬영한 영상을 분석하여 사람의 움직임을 3D Skeleton Animation으로 변환하는 AI Motion Capture 서비스다.
전통적인 Motion Capture처럼 여러 대의 카메라나 Marker Suit가 없어도 영상 하나를 이용해 움직임을 추출할 수 있다는 것이 특징이다.
영상 업로드 & Skeleton Format 선택
먼저 Motion Capture에 사용할 영상을 업로드했다.
영상 속 인물을 선택한 뒤 Animation을 출력할 Skeleton Format을 지정한다.

이미지의 오른쪽에는 여러 Target Skeleton이 보인다.
- Boy / Girl FBX
- Unitree G1
- Unreal 5.6~5.8
- Mixamo
- SMPL 등
이번 수업에서는 Boy FBX를 사용했다.

어떤 Skeleton Format으로 출력하느냐에 따라 Bone 구조나 이름이 달라질 수 있으므로 최종적으로 Animation을 사용할 프로그램에 맞춰 선택하는 것이 중요하다.
QuickMagic Motion 생성 옵션
다음 화면에서는 Motion Capture 결과에 영향을 주는 옵션을 설정했다.

이번 작업에서 사용한 화면을 기준으로 주요 옵션을 정리하면 다음과 같다.
Basic Model V2.1
현재 UI에서는 Basic Model V1 / Basic Model V2.1을 선택할 수 있는데, 이번 작업에서는 최신 V2.1을 사용했다.
Physics Optimization
Physics Optimization은 AI가 추출한 Motion을 어느 정도 안정화할 것인지 조정하는 값이다.
값이 낮으면 영상에서 추출한 원본 움직임과 Motion의 크기를 비교적 많이 유지한다.
대신 떨림이나 불안정한 움직임이 남을 가능성이 있다.
값을 높이면 움직임이 부드럽고 안정적으로 정리되지만, 점프 높이·강한 동작·빠른 팔 움직임처럼 원래 Motion의 크기가 줄어들 수 있다.
QuickMagic에서도 낮은 값은 원본 재현에, 높은 값은 안정화에 유리하다고 설명한다.
따라서 무조건 10×를 사용하는 것이 아니라 문제가 사라지는 범위에서 가장 낮은 값을 찾는 방식이 좋다.
이번 작업에서는 기본 설정에 가까운 값으로 테스트했다.
기능 선택
Capture할 범위도 지정할 수 있다.
Full Body는 전신 동작을 추적한다.
Upper Body는 상체 중심 Motion을 추출하며 하체는 별도의 기본 Motion이 적용되는 방식이다.
Hand를 활성화하면 손과 손가락 Tracking을 함께 사용한다.
Face는 얼굴 Motion을 추적하는 기능이다.
이번 작업에서는 Full Body와 Hand를 활성화하고 Face는 사용하지 않았다.
Animation 첫 Keyframe Pose
Original Pose, T-Pose, A-Pose 등을 선택할 수 있다.
이 옵션은 출력 Animation의 첫 프레임 Pose를 지정한다.
Original Pose는 원본 영상의 첫 프레임 자세를 유지하고, T-Pose와 A-Pose는 Target Rig의 Reference Pose에 맞춰 Retargeting할 때 활용할 수 있다.
이번 작업에서는 Original Pose를 사용했다.
Frame Rate
QuickMagic은 24 / 30 / 60 / 120 FPS를 지원한다.
이번 작업에서는 30 FPS로 생성했다.
30 FPS가 항상 정답인 것은 아니며 최종 Unreal Sequence나 영상 프로젝트의 Frame Rate와 맞추는 것이 좋다.
In-Place Animation
In-Place를 활성화하면 캐릭터의 실제 전진 이동을 제거하고 제자리에서 걷거나 뛰는 형태의 Motion으로 만들 수 있다.
게임에서 Character Movement가 캐릭터 자체를 이동시키고 Animation은 제자리 Locomotion만 담당할 때 활용하기 좋다.
반대로 실제 Motion 자체가 캐릭터를 앞으로 이동시켜야 하는 Cinematic Animation에서는 이동량을 유지하는 편이 자연스럽다.
이번 작업에서는 OFF로 두어 원본의 이동을 유지했다.
Keyframe Reduction
AI Motion Capture 결과는 기본적으로 매우 많은 Keyframe을 포함할 수 있다.
Keyframe Reduction을 사용하면 Motion을 크게 바꾸지 않는 중간 Key를 줄여 Animation Data를 가볍게 만들고 Curve를 수정하기 쉽게 만들 수 있다.
다만 빠른 Dance나 Jump처럼 Frame마다 Pose 변화량이 큰 Animation에서는 과도한 감소가 발 미끄러짐이나 움직임 손실을 발생시킬 수 있다.
빠르고 큰 Motion에서는 Keyframe Reduction을 끄는 것을 권장하고 있다.
이번 작업에서는 기본 설정으로 진행했다.
Penetration Fix
Penetration Fix는 팔과 몸통, 다리 등이 서로 관통하는 문제를 줄이기 위한 옵션이다.
현재 이 기능을 Mesh Penetration Prevention으로 설명하고 있으며, 관통을 줄이는 대신 원본 Motion 복원 정확도가 조금 떨어질 수 있다고 한다.
따라서 관통 현상이 실제로 눈에 띄는 Animation에서 선택적으로 사용하는 것이 좋다.
설정을 완료한 뒤 Motion을 생성하고 FBX를 다운로드했다.

QuickMagic Animation을 언리얼 엔진에서 확인
다운로드한 FBX를 언리얼 엔진으로 Import한다.
Level에 Import된 Skeletal Mesh를 배치하고 Level Sequence에 해당 Actor를 추가한 다음 Animation Track에 생성된 Animation Sequence를 지정했다.
그러면 QuickMagic에서 생성했던 사람이 움직이는 Motion이 언리얼 엔진에서도 재생되는 것을 확인할 수 있다.

다만 AI Mocap 결과가 항상 최종 Animation으로 바로 사용 가능한 것은 아니다.
영상에서 손이 가려졌거나 특정 물체와 접촉하는 Motion에서는 손·발 위치가 조금 틀어지는 경우가 있다.
Source 캐릭터와 언리얼 캐릭터의 신체 비율이 다를 경우에도 자세가 달라질 수 있다.
이 때문에 AI Mocap은 빠르게 기본 Motion을 만드는 단계로 사용하고 필요한 부분만 수동으로 정리하는 방식이 실무적으로 효율적이다.
AI Animation 위에 Control Rig로 자세 보정하기
AI Motion Capture 결과에서 일부 자세만 이상하다면 Animation 전체를 다시 만드는 것보다 필요한 Bone만 수정하는 것이 효율적이다.
이번 작업에서는 커피를 마시는 Animation에서 손 자세가 어색한 부분을 수정했다.

캐릭터 Track의 + - Control Rig - FK Control Rig를 추가하면서 Layered를 활성화했다.

Layered Control Rig를 사용하면 기존 Animation Sequence를 지우지 않고 그 위에 Control Rig 수정값을 겹칠 수 있다.


따라서 원본 AI Animation은 그대로 유지하면서 손과 팔의 Bone만 수정하고 Key를 기록할 수 있다.


AI가 전체 Motion을 만들어주고 사람이 눈에 잘 띄는 오류만 보정하는 방식은 직접 모든 Keyframe을 만드는 것보다 훨씬 빠르게 결과를 얻을 수 있었다.
많은 캐릭터를 처리하기 위한 Animation 방식
Skeletal Mesh는 Skeleton, Skin Weight, Animation Pose 계산 등을 계속 처리해야 한다.
캐릭터 수가 많아질수록 이런 비용도 함께 증가하기 때문에 대규모 군중에는 별도의 최적화 방법이 필요하다.
외부 군중 관련 도구로 Anima, iClone, Golaem 등이 있다.
언리얼 엔진 내부에는 Mass Framework를 기반으로 하는 Crowd System도 있다.
대표적인 예가 City Sample이다.

City Sample은 The Matrix Awakens 기술 데모에 사용한 기술과 Asset을 기반으로 만든 Unreal Engine Sample Project다.
대규모 City Environment 안에서 Mass AI를 이용해 차량과 Crowd Entity를 처리한다.
다만 이번 작업에서는 Mass Framework 자체를 구성하는 작업까지 진행하지 않고, Animation 표현 비용을 낮추는 AnimToTexture 방식을 실습했다.
AnimToTexture
AnimToTexture는 이름 그대로 Animation 데이터를 Texture로 변환하는 언리얼 엔진 Plugin이다.
일반 Skeletal Mesh는 Skeleton Bone을 계속 계산하면서 Mesh를 변형한다.
AnimToTexture에서는 이와 다른 방식으로 Bone이나 Vertex Animation 데이터를 Texture에 미리 기록한다.
이후 Material이 해당 Texture 데이터를 읽고 Static Mesh의 Vertex를 이동시켜 Animation처럼 보이게 만든다.
AnimToTexture Plugin 활성화
먼저 Edit - Plugins에서 AnimToTexture를 검색하고, Plugin을 활성화한 뒤 언리얼 엔진을 다시 시작한다.

참고로 AnimToTexture는 Experimental Plugin으로 제공되므로, 실제 프로젝트에 적용할 경우 충분히 테스트한 뒤 사용하는 것이 좋다.
Skeletal Mesh를 Static Mesh로 변환
이번 작업에서는 사슴 Skeletal Mesh를 사용했다.
Skeletal Mesh Editor에서 Make Static Mesh를 사용해 현재 Mesh를 Static Mesh로 생성한다.


즉 최종적으로 Animation을 표현할 대상은 더 이상 Skeletal Mesh가 아니라 SM_Doe_AnimTex라는 Static Mesh가 된다.
LOD는 하나만 사용
만들어진 Static Mesh를 열고 LOD Settings의 Number of LODs를 1로 설정했다.

AnimToTexture Data Asset에서는 Animation을 Bake할 Skeletal Mesh와 Static Mesh의 LOD Index를 각각 지정하며, 선택한 Static Mesh LOD의 UV Channel에 필요한 Vertex 정보를 저장한다.
따라서 이번처럼 LOD 0을 기준으로 Bake한 상태에서 다른 LOD로 전환되면 필요한 Mapping이 일치하지 않아 Animation이 깨질 수 있다.
이번 실습에서는 이를 피하기 위해 LOD 0 하나만 사용하도록 설정했다.
AnimToTexture Sample Material 구조 확인
직접 Material Graph를 처음부터 만들기보다는 Engine Plugin 안에 들어 있는 Sample을 참고했다.
Engine Content에서 AnimToTexture 폴더의 Characters에 있는 Mannequin 관련 Asset을 확인했다.

Bone Animation이 적용된 Static Mesh를 Level에서 보면 Skeletal Mesh가 아닌데도 움직이고 있다.

핵심은 Mesh 자체가 Animation을 가진 것이 아니라 Material이 Animation Texture를 읽어 Vertex를 움직이고 있다는 점이다.
AnimToTexture Material Node 복사
AnimToTexture Sample Static Mesh에 사용된 Material을 열고 Animation에 필요한 Material Node 부분을 복사했다.

이 Node를 사슴의 기존 Master Material에 붙여 넣었다.

Bone Animation 쪽에서는 Animation Texture를 읽은 결과를 이용해 최종 Material의 World Position Offset을 계산한다.
World Position Offset은 Material에서 Vertex 위치를 이동시킬 수 있는 입력이다.
따라서 Static Mesh임에도 Vertex를 Frame마다 다른 위치로 이동시키면 Animation처럼 보이게 만들 수 있다.
Use Material Attributes 사용
이번 Material은 여러 Material 값을 하나의 Material Attributes 구조로 전달해야 하므로 Material Main Node에서 Use Material Attributes를 활성화했다.

기존 Texture들은 Make Material Attributes를 통해 연결하고, AnimToTexture에서 복사한 Bone Animation 결과와 합쳐 최종 Material Attributes로 전달했다.


사슴 Asset에는 일반 몸 Material과 Fur Material이 따로 있었기 때문에 두 Material 모두 동일하게 AnimToTexture 변형이 적용되도록 수정했다.

몸 Material만 움직이고 털 Material에는 Animation 처리를 하지 않으면 몸과 털이 서로 다른 위치에 남는 문제가 생길 수 있기 때문이다.
Material Instance 생성
수정한 Master Material에서 각각 Material Instance를 만들었다.

이 Material Instance 안의 Layer Parameters - Texture Parameter Values에 이후 생성할 Animation Texture를 지정하게 된다.

여기서 Texture는 일반적인 Base Color Texture처럼 표면 색을 표현하기 위한 것이 아니다.
Animation에 필요한 위치·회전·Weight 값을 저장하는 Data Texture다.
Animation Data를 저장할 Static Texture 만들기
AnimToTexture Bone Mode에서는 Animation을 저장할 Texture Asset이 필요하다.
이번 작업에서는 Content Drawer의 빈 공간에서 우클릭한 뒤 Texture - Render Target을 생성했다.


Render Target은 GPU가 렌더링 결과를 기록할 수 있는 Texture 형태의 Resource다.
생성한 Render Target을 우클릭하고 Create Static Texture를 사용하면 일반 Texture2D Asset으로 변환할 수 있다.


이번 과정에서는 Render Target 자체를 최종적으로 사용할 필요가 없으므로 Static Texture를 만든 뒤 원래 Render Target은 제거했다.
생성된 Static Texture를 복제해 총 세 개를 준비했다.
- Position Texture
- Rotation Texture
- Weight Texture

Material Instance의 Texture Parameter Values에도 각각 알맞은 Texture를 연결했다.

아직 Animation 데이터를 Bake하지 않았기 때문에 이 단계에서는 Texture가 검은색에 가깝게 보이는 것이 정상이다.
AnimToTexture Data Asset 설정
Engine의 AnimToTexture 폴더에서 Sample로 제공되는 DA_BoneAnimation을 프로젝트 Content 폴더로 복사했다.

복사한 Data Asset을 열고 이번 사슴 Asset에 맞게 수정한다.

Skeletal Mesh에는 Animation의 원본이 되는 SK_DeerDoe_AnimTex를 지정하고, Static Mesh에는 앞에서 만든 SM_Doe_AnimTex를 지정한다.
Texture 영역에는 앞에서 만든 세 Static Texture를 연결한다.
- Bone Position Texture → Position
- Bone Rotation Texture → Rotation
- Bone Weight Texture → Weight
Animation Sequence 지정
Data Asset 아래의 Animation 영역에서 Texture로 Bake할 Animation Sequence를 지정한다.

Sample Rate는 이번 실습에서 30으로 설정되어 있다.
즉 AnimToTexture는 지정한 Animation Sequence를 일정 Frame Rate로 Sampling하고 그 결과를 Animation Texture에 기록하게 된다.
BP_AnimToTexture 수정
다음으로 Engine의 AnimToTexture Sample에 들어 있는 BP_AnimToTexture를 프로젝트로 복사했다.

원본 Blueprint에는 Vertex Animation과 Bone Animation 작업을 위한 구조가 함께 들어 있다.

이번 실습에서는 Bone Mode를 사용하므로 수업에서는 필요하지 않은 Vertex Animation 쪽 Node를 제거하고 Bone Animation Workflow에 맞게 정리했다.


Bone Animation 실행 구조
정리된 Bone Animation 부분은 다음 이미지처럼 구성됐다.

이번 작업에서 중요한 흐름은 다음과 같다.
Set Light Map Index → Animation to Texture → Branch → Update Material Instance from Data Asset
Bone Data Asset 변수에는 앞에서 수정한 사슴용 Data Asset을 지정했다.


Update Material Instance from Data Asset에는 Animation Texture를 사용할 사슴 Material Instance를 지정했다.

즉 Data Asset에는 어떤 Skeletal Mesh의 어떤 Animation을 어떤 Static Mesh와 Texture에 Bake할 것인지가 들어 있고, 마지막 Node에서는 그 Data를 읽을 Material Instance를 지정하는 구조로 이해할 수 있다.
Blueprint 수정이 끝났다면 Compile하고 저장한다.
Editor Utility Blueprint 실행
이 Blueprint는 일반적인 게임 플레이용 Actor Blueprint가 아니라 Editor에서 Animation Texture를 만드는 작업을 실행하기 위한 Utility Blueprint로 사용했다.
Content Browser에서 BP_AnimToTexture를 우클릭하고 Run Editor Utility Blueprint를 실행한다.

정상적으로 실행되면 앞에서 검은색이었던 Position, Rotation, Weight Texture가 갑자기 여러 색이 섞인 형태로 변한다.

처음 보면 Texture가 깨졌거나 망가진 것처럼 보이지만 정상이다.
이 Texture는 사람이 보는 이미지가 아니라 Animation 계산에 필요한 수치 데이터를 Pixel 값으로 저장한 Data Texture다.
Position Texture에는 Bone 위치, Rotation Texture에는 Bone 회전, Weight Texture에는 Vertex가 어떤 Bone의 영향을 받는지에 대한 Weight 정보가 저장된다.
즉 이 Texture의 화려한 색 자체에는 시각적인 의미가 없고 Material이 해당 값을 숫자로 해석하는 것이 중요하다.
실행 전 검은 Texture와 실행 후 복잡한 색상의 Texture를 비교해보면 실제 Animation Data가 Texture에 기록됐다는 것을 쉽게 확인할 수 있다.
Fur Material도 동일하게 적용
사슴은 몸 Material 외에 Fur Material을 별도로 사용하고 있기 때문에 Fur용 Material Instance에도 같은 Animation Texture 구조를 적용했다.
Fur용 BP와 Data Asset도 복사해서 해당 Material Instance에 맞게 설정하고 같은 과정을 반복했다.



몸과 털 모두 준비되면 SM_Doe_AnimTex Static Mesh에 새로 만든 Material Instance들을 적용한다.

이 Static Mesh를 Level에 배치하면 Skeleton이 없는 Static Mesh임에도 원래 사슴 Animation이 재생되는 것을 확인할 수 있다.

여기까지 완료되면 AnimToTexture의 핵심 구조가 완성된다.
Skeletal Mesh Animation
→ Animation Data Bake
→ Position / Rotation / Weight Texture
→ Material에서 Texture Data 읽기
→ World Position Offset으로 Static Mesh 변형
직접 결과를 보면 Static Mesh가 움직인다는 점이 처음에는 상당히 낯설지만, Material이 Vertex를 Frame마다 이동시키고 있다는 구조를 이해하면 AnimToTexture가 어떤 방식으로 작동하는지 훨씬 쉽게 이해할 수 있다.
이번 포스트에서는 언리얼 엔진에서 Animation을 다루는 여러 접근 방식을 한 번에 경험했다.
단순한 Pose나 Motion은 FK Control Rig로 직접 만들 수 있고, Mixamo 캐릭터에는 One Click Control Rig를 이용해 IK/FK Control을 보다 편하게 구성할 수 있었다.
완성된 Sequencer Animation은 Bake Animation Sequence를 통해 독립적인 Animation Asset으로 만들 수 있었으며, QuickMagic을 이용하면 실제 영상을 기반으로 AI Motion Capture Animation을 빠르게 생성할 수 있었다.
AI가 만든 Motion 역시 완성본으로만 볼 필요는 없다.
기존 Animation을 유지한 채 Layered Control Rig를 추가하면 손이나 팔처럼 필요한 부분만 다시 보정할 수 있다.
마지막으로 AnimToTexture에서는 Animation을 Skeleton으로 계산하는 기존 방식과 완전히 다른 접근을 사용했다.
Bone의 위치와 회전, Weight 정보를 Texture로 Bake하고 Material의 World Position Offset에서 이를 재생하면 Static Mesh에서도 Animation을 표현할 수 있다.
이번 내용에서 가장 중요한 것은 각각의 기능을 따로 외우는 것보다 캐릭터 수와 수정 범위, 접촉 여부, 필요한 Animation 품질에 따라 어떤 방식을 선택해야 하는지를 구분하는 것이라고 느꼈다.