Game Development/Unreal Engine

[UE5] Motion Matching - 1 (캐릭터 가져오기, 애니메이션 리타게팅)

Dlaiml 2024. 7. 16. 19:06

 

언리얼 엔진에서 500개가 넘는 무료 애니메이션이 포함된 캐릭터를 포함하는 Unreal Engine Game Animation Sample Project을 공개하였다.

 

 

Motion Matching 을 사용한 애니메이션 시스템을 선보인다고 적혀있는데, 이 샘플 프로젝트로 Motion Matching(모션 매칭)이 무엇이고 어떻게 사용하는지에 대해 이번 포스팅에서 다뤄보려 한다.

 

마침 진행하고 있는 TPS 프로젝트가 있어 Animation Retargeting + Motion Matching에 대해 같이 소개하겠다.

 

 

UE Game Animation Sample Project

 

에픽게임즈 런처의 마켓플레이스에서 무료탭의 에픽게임즈 콘텐츠를 클릭하면 에픽게임즈에서 제공하는 여러 콘텐츠를 확인할 수 있다. 최신순으로 정렬하여 Game Animation Sample을 다운받고 프로젝트를 만들어보자 (UE 5.4만 지원)

 

프로젝트를 열고 DefaultLevel에서 게임을 실행해보면 아래와 같이 걷거나 점프, 착지, 방향전환까지 매우 다양하게 애니메이션이 잘 적용된 캐릭터로 플레이 해 볼 수 있다.

 

 

UE Game Animation Sample 프로젝트의 애니메이션 파일들은 아래 사진과 같이 Content > Characters > UEFN_Mannequin >  Animations 폴더에 있다. 

 

모션매칭 하기를 원하는 애니메이션들을 UEFN의 Animation 폴더에서 클릭한 후 원하는 프로젝트의 Content 폴더로 Migrate 하자.

 

이제 원하는 애니메이션을 가져왔기 때문에 Game Animation Sample Project를 닫고 모션매칭을 적용할 프로젝트에서 작업을 이어가자.

 

캐릭터 추가 및 Material 세팅

 

모션 매칭으로 애니메이션을 실행할 대상 캐릭터는 에픽게임즈에서 제공하는 무료 모델인 Paragon: Yin을 사용하려한다.

프로젝트에 추가를 클릭하여 현재 프로젝트에 추가하자. 

 

 

추가한 캐릭터의 Skeleteal Mesh를 확인해보면 Head, Skin, Skirt 등 Material 설정에서 Shader model, D3D11등 버전 차이로 기본 Material이 로드되는 경우가 있다.

 

로딩에 실패한 MIC_Yin_Skin을 보면 Parent로 지정된 M_Yin_Skin Material에 문제가 있음을 알 수 있다.

 

Material Graph를 열어보면 Skim Maps Texture, RGBAO Texture, Normal Texture에 Texture가 지정되지 않아 오류가 발생한 상태다.

 

Texture는 보통 T를 Prefix로 사용하기 때문에 T_{캐릭터이름}_{부위}_{텍스쳐종류} 방식으로 검색하면 파일명 설정이 잘되어있다면 쉽게 찾을 수 있다.

 

_N -> Normal Texture

_RGBAO -> RGBAO Texture

_MAPS ->  Skin Maps Texture

_COLOR -> Diffuse Texture

 

파일명과 알맞은 노드에 해당 파일을 Texture로 지정해주자.

 

 

Animation Retarget

Migrate한 애니메이션 시퀀스 중 하나를 우클릭하고 Retarget Animation 을 실행하였다. 

 

Source Skeletal Mesh를 Import한 SM_UEFN_Mannequin으로 설정하고 

위에서 추가한 Yin 캐릭터의 Skeletal Mesh를 Target Skeletal Mesh로 지정하였다. 애니메이션을 보면 받아온 애니메이션들이 모두 잘 Retargeting 된 것을 확인할 수 있다.

(SM_UEFN_Mannequin은 Fortnite Humanoid 템플릿, Yin은 UE4 Mannequin 템플릿과 일치하기 때문에 별도의 Retarget Chain 설정 없이 한 번에 성공)

 

 

 

UE 5.4에서의 간단한 Animation Retargeting은 방법은 아래 포스팅에서도 다루었다.

 

[UE5] Animation Retargeting, IK Rig (Sketchfab, Mixamo) - 1

프로젝트에 사용할 캐릭터 애셋, 애니메이션을 찾다가 무료 애셋이 많은 사이트인 Sketchfab, Mixamo을 알게 되었다. Sketchfab에서 캐릭터를 가져오고, Mixamo에서 애니메이션을 가져와 원하는 애니메이

dlaiml.tistory.com

 

이후 Export Animation을 클릭하여 Target Skeletal Mesh에 맞는 애니메이션들을 저장하자.

이렇게 UEFN Mannequin의 Skeleton을 기준으로 만들어진 애니메이션들을 원하는 캐릭터의 Skeleton에 Retarget하였다.

 

Input 수정

프로젝트에 추가한 Yin 캐릭터 폴더를 보면 AnimationTestMap이라는 레벨이 있다.

 

실행하면 스페이스바를 눌러 점프, 마우스 좌클릭을 눌러 공격이 가능하고 알맞은 애니메이션이 재생되는 것을 볼 수 있다.

이는 Yin 캐릭터 블루프린트인 YinPlayerChacracter 블루프린트에서 작성된 로직이다.

 

우선 레벨을 실행하고 점프, 공격 등 여러 Input을 테스트 해보았다.

마우스를 돌려 시점을 바꾸거나, WASD로 움직이는 것에 문제가 있어 이어서 이를 해결해려한다.

 

캐릭터, Controller의 블루프린트를 보고 Enhanced Input 대신 Axis, Action mapping을 사용하고 있는 것을 알 수 있었다.

언리얼 엔진 5 버전으로 넘어오면서 에디터의 Project Setting에서 Input Axis, Action 매핑을 사용하기 보다 Enhanced Input을 사용을 권장한다. (훨씬 체계적이고 여러 State에서의 Input 구분이 편리하며 확장성이 좋다)

 

Input binding은 Project Settings > Input에서 아래처럼 확인할 수 있다.

 

 

 

Warning이 뜨는 YinPlayerCharacter 블루프린트의 노드들을 방금 확인한 Input Binding에서 확인한 매핑들로 새로 노드를 만들어 이어준다. (우클릭 후 매핑 이름 입력)

 

다시 레벨에 들어가서 마우스를 돌리고 WASD를 입력하면 정상적으로 캐릭터가 움직인다.

 

이제 모션매칭을 하기전 필요한 준비를 모두 마쳤다.

추가한 캐릭터와 관련된 설정을 하느라 포스팅이 길어져 모션매칭은 다음 포스팅에서 이어하겠다.

 

 

Reference

[0] https://dlaiml.tistory.com/entry/UE5-Animation-Retargeting-IK-Rig-Sketchfab-Mixamo-1

 

[UE5] Animation Retargeting, IK Rig (Sketchfab, Mixamo) - 1

프로젝트에 사용할 캐릭터 애셋, 애니메이션을 찾다가 무료 애셋이 많은 사이트인 Sketchfab, Mixamo을 알게 되었다. Sketchfab에서 캐릭터를 가져오고, Mixamo에서 애니메이션을 가져와 원하는 애니메이

dlaiml.tistory.com

[1] https://dev.epicgames.com/documentation/en-us/unreal-engine/enhanced-input-in-unreal-engine