Deeper Learning

[UE5] Motion Matching - 3 (Chooser, Custom Channel) 본문

Game Development/Unreal Engine

[UE5] Motion Matching - 3 (Chooser, Custom Channel)

Dlaiml 2024. 7. 18. 15:40

저번 포스팅에 이어 Chooser를 사용하여 Pose Search Databases를 상황에 맞게 교체하고 직접 Pose Search Schema에 Channel을 추가하여 더 자연스러운 모션매칭을 완성해보려 한다.

 

[UE5] Motion Matching - 2 (Pose Search, 모션 매칭)

저번 포스팅에 이어서 모션매칭을 이어 진행해보자. [UE5] Motion Matching - 1 (모션매칭, UE 5.4)언리얼 엔진에서 500개가 넘는 무료 애니메이션이 포함된 캐릭터를 포함하는 Unreal Engine Game Animation Sample

dlaiml.tistory.com

 

Chooser

 

Content Drawer에서 우클릭한 뒤 Chooser Table을 만들자.

애니메이션 블루프린트에 캐릭터의 정보를 모아두었으므로 Input으로는 애니메이션 블루프린트,

Output으로는 PoseSearchDatabase를 자료형으로 정해준다.

 

Result에는 Add Row를 누르고 Asset을 지정하여 선택할 Pose Search Databases를 골라주고

조건에는 ABP(애니메이션 블루프린트)에서 세팅해 둔 변수들을 Add Column을 통해 추가해 준다.

이후 간단하게 숫자 범위나, Bool 값을 조정하여 어떤 상황에 어떤 포즈 데이터셋을 사용할 것인지 정해주었다

 

 

 

걷기, 달리기 애니메이션은 현재 속도에 따라 달라지도록 하였기 때문에 테스트를 위해 캐릭터 블루프린트에 Ctrl키를 눌러 Character Movement의 Max Walk Speed를 조정할 수 있도록 하였다.

 

 

이제 Pose Search Database를 Chooser에서 설정한 로직에 따라 선택하도록 만들어보자.

ABP의 AnimGraph 탭에서 PSD_Run으로 데이터베이스가 고정되어 있던 Motion Matching 노드의 Database 설정을 Dynamic Value로 바꾸자. 매 순간 데이터베이스를 바꾸길 원하기 때문에 Pin도 노출될 필요가 없으므로 꺼주자.

 

 

대신 노드가 업데이트될 때마다 실행할 함수를 만들기 위해 On Update에서 Create Binding으로 함수를 추가하자.

 

 

모션 매칭 노드에서 Database를 선택하는 블루프린트는 아래와 같이 간단하다.

이제 OnUpdate 함수에서 Chooser에 따라 Database를 선택한다.

 

 

걷기 / 달리기 애니메이션 전환도 매끄럽고 Crouch 상태에서 이동 애니메이션도 모두 잘 적용되었다.

문제가 있다면 Database에서 애니메이션을 확인해 보고 어울리지 않는 애니메이션을 제거해주기만 하면 된다.

Idle 데이터 셋에 있는 앉아있는 애니메이션, Run 데이터셋에 있는 점프 애니메이션 등을 제거하였다.

 

 

하지만 점프를 할 때마다 문제가 발생하였다. Jump 포즈 데이터셋을 정제하고 Z Velocity를 높여도 어색한 애니메이션이 재생되었다.

공중에서 살짝만 방향이 바뀌거나 조작을 해도 다른 애니메이션으로 빠르게 교체되고 사용하고 있는 Pose Search Schema의 채널에 Z 축을 넣지 않은 것이 문제의 이유이다.

이를 개선하기 위해 Position XY, Feet Bone, Velocity XY, Face Direction XY 등 설정하였던 Pose Search Schema의 채널이 아닌 다른 채널과 Weight로 공중 애니메이션을 위한 Pose Search Schema를 새로 만들어보자.

 

 

XY뿐 아니라 Z축도 고려하도록 하였으며 빠르게 떨어지거나 뛰어오르는 액션이 많아 앞뒤로 0.1~0.2 초의 Offset의 데이터를 더 잘 활용하도록 Weight를 증가시켰다

 

 

아직 많이 부족하지만 처음 애니메이션보다 훨씬 자연스러워졌다.

 

UE 샘플 프로젝트 모션매칭 살펴보기

 

UE Game Animtation Sample Project에서는 어떤 방식으로 수많은 애니메이션 시퀀스를 적절하게 선택하는 모션매칭 방식을 사용하였기에 매우 자연스러운 애니메이션 시스템을 만들었는지 살펴보자.

 

우선 Nested Chooser를 사용하여 보기 편하게 정리해 두었다. 정의한 State에 따라 Chooser를 선택한다.

 

Stand Runs에만 7개의 Pose Search Database가 있었고 Starting, Pivoting, JustTraversed, Landed 등 여러 상태를 모두 활용하고 있었다.

 

착지 후 달리는 Lands, Run이라는 이름이 붙은 PSD를 열어보면 5개의 애니메이션이 들어있다.

 

착지 후 뒤로, 앞으로, 좌로, 우로 이동하는 애니메이션이 하나씩 있었고 앞으로 이동하는 애니메이션은 착지하는 발에 따라 2개의 애니메이션이 있었다.

 

들어있는 애니메이션 세트를 보자마자 PSD만 잘 선택되면 간단한 정보(왼발 오른발 Bone Pose, 현재 속도와 0.n초 뒤에 Position)로도 쉽게 애니메이션을 선택할 수 있겠다는 생각이 들었다.

모션 매칭을 알아보기 위해 예시로 모든 애니메이션을 간단하게만 구분하고 채널도 복잡하게 세팅해 두어서 디버깅도 쉽지 않았다. 

 

만약 후에 모션 매칭을 활용해서 캐릭터 애니메이션 시스템을 만든다면 다양한 State를 기반으로 PSD를 정의하고 알맞은 애니메이션을 분류하고 프레임을 자르고 배치하는 것에 더 시간을 쏟고 나서 디버깅이 쉬운 상태에서 Trajectory를 켜두고 하나씩 채널을 세팅하는 것이 좋아 보인다.

 

Reference

[0] https://dev.epicgames.com/documentation/en-us/unreal-engine/motion-matching-in-unreal-engine

[1] https://dev.epicgames.com/community/learning/tutorials/1JMK/motion-matching-in-unreal-engine-5-4-step-by-step-tutorial?content_review=true&locale=ko-kr

[2] https://www.youtube.com/watch?v=j8RgsganqRU&list=PLLuramE9fKBmdbmg_FKtqxr2J5JT5Ei4o&index=5

 

Comments