본문 바로가기
공부/Unreal Engine 5

[언리얼5.4] 모션매칭(Motion Matching)

by MY블로그 2024. 5. 2.

언리얼5의 새로운 버전인 5.4의 모션매칭 사용해보기!

 

공식 참고 링크

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/motion-matching-in-unreal-engine?application_version=5.3

언리얼 엔진의 애니메이션 에셋 및 기능 | 언리얼 엔진 5.4 문서 | Epic Developer Community

언리얼 엔진의 애니메이션 에셋 및 기능과 관련된 페이지가 수록되어 있습니다.

dev.epicgames.com

 

1. 언리얼 5.4 버전 설치 & 프로젝트 생성

갑자기 업그레이드 뜨길래 5.4.1 로 업그레이드!

단순하게 모션매칭 시스템을 사용해보기 위한 샘플 프로젝트로 게임 > 3인칭 > 블루프린트 프로젝트 생성(스타터컨텐츠 미포함)

 

2. 애니메이션 추가

모션 매칭은 다양한 애니매이션을 사용하기 때문에 필요한 애니메이션을 추가한다.
샘플로 사용하기 적절한것은 언리얼 라이라 프로젝트의 마네킹 애니메이션들!
이주해오거나 라이라 복사후 임포트 하도록 한다.
 
에픽게임즈 런처 실행 > 언리얼엔진 > 샘플 > UE 게임 샘플 > Lyra Starter Game 에서 무료로 프로젝트를 생성하고 다양한 에셋들을 가져다 사용 할 수 있다.

테스트를 위하여 캐릭터의 이동과 관련된 모든 애니메이션을 임포트.
이때 스켈레톤을 꼭 지정해주도록 합니다.

이셋을 모두 임포트한뒤에 잘 저장해주고
해당 에셋루트 모션 설정을 일괄 설정하기 위하여 모든에셋 선택 > 에셋 액션 > 프로퍼티 매트릭스에서 선택편집 메뉴를 사용 합니다.

에디터의 모든 에셋을 선택(Ctrl + A 사용) 디테일에서
루트 모션 활성화 체크, 루트 강제 잠금 체크, 애니메이션 루프 체크 후 저장 합니다.

 

2. 플러그인 추가

Motion Trajectory 플러그인을 설치 하도록 합니다. (처음 활성화시 재시작 필요)

플러그인이 성공적으로 설치 되었다면 추가적인 기능(Trajectory)이 활성화 됩니다.
 

3. 포즈 서치 스키마 생성

이후 포즈 서치 스키마(PSS)를 언리얼 기본 마네킹 스켈레톤으로 생성합니다.

PSS를 자세히 보면 현재 언리얼의 기본 마네킹을 사용하기 때문에
foot_l / foot r 이 자동 맵핑 되어있는 것을 볼 수 있습니다.
외부 에셋을 사용할때에는 본이름이 다를경우 자동 매칭이 되지 않으므로 기본 설정과 비교해보아야 합니다.

 

4. 포즈 서치 데이터베이스 생성

생성한 포즈 서치 스키마(PSS)를 베이스로 포즈 서치 데이터베이스(PSD)를 생성합니다.(생성시 PSS 선택창 활성화됨)

PSD의 화면은 애니메이션 시퀀스 화면과 비슷해 보입니다.

에셋 목록에 추가 버튼을 사용하거나 컨텐츠 창에서 드래그앤 드랍으로 일괄 적으로 애니메이션 추가가 가능합니다.

에셋 목록에 추가한 애니메이션을 선택하고 재생시 모든 애니메이션의 동작을 한번에 볼 수 있습니다.
Tip. 에픽게임즈에서 200개 정도의 모션매치용 애니메이션이 포함된 프로젝트가 출시될 예정이라고 합니다!

 

5. 포즈 서치 노멀라이제이션 셋 생성

포즈 서치 노멀라이제이션 셋(PSNS)을 생성 합니다.

생성된 PSNS는 매우 심플합니다. 데이터베이스에 엘리먼트를 확장하고 생성한 포즈 서치 데이터베이스(PSD)를 적용 하면 됩니다.

 

6. 궤적(Trajectory) 컴포넌트 추가하기

추가한 플러그인이 활성화 되어있다면 Trajectory 컴포넌트를 추가 할 수 있습니다.
캐릭터의 블루프린트에서 추가를 통하여 컴포넌트를 추가합니다. (Character Trajectory)

 

7. 애니메이션 블루프린트 바인딩 

플레이어가 사용할 애니메이션 블루프린트에서 플레이어의 변수와 컴포넌트의 변수를 만들어 바인딩 합니다.

애니메이션 블루프린트의 변수
애니메이션 블루프린트 이벤트 그래프

이후 애님그래프에서 모션매칭을 아웃포즈에 연결합니다.
모션 매칭을 포즈히스토리에 연결하고 포즈히스토리를 아웃포즈에 연결합니다.
이때 포즈히스토리의 Trajectory 핀은 우클릭하고 프로퍼티의 Trajectory로 바인딩 합니다.
단순히 변수를 Get으로 연결하려하면 핀은 호환되지 않습니다.

좌 : 변수와 호환되지 않는핀 / 우 : 우클릭으로 바인딩 지정

 
이후 플레이어의 블루프린트를 통하여 캐릭터의 메쉬의 Animation을 생성한 애니메이션블루프린트로 설정합니다.
추가적으로 현재 모션매치는 플레이어가 이동하는 방향값에 따라 다른 모션들이 지정되어있기 때문에 컨트롤러 회전 요 사용 설정을 True 로 지정합니다.(방향키쪽으로 회전하지않도록)

 

8. 디버그 확인

게임 실행후 틸트키(~)를 누르고 a.CharacterTrajectory.Debug 1 을 입력하면 경로를 디버그로 확인 할 수있습니다.

 

정리

기존의 애니메이션은 블렌드스페이스와 캐릭터의 이동값(속도)를 사용하였으나
모션매칭은
포즈서치스키마(PSS),
포즈서치데이터(PSD),
포즈서치정규화셋(PSNS) 을 생성후
플레이어 캐릭터 클래스에 CharacterTrajectory컴포넌트를 생성후
애니메이션 블루프린트에서 바인딩하여 사용하게 되었습니다.
바인딩 할때에는 Motion Matching 함수와 Pose History 함수를 사용합니다.
또한 주의할점으로는 모션 매칭에서 이동하는 것은 애니메이션이 RootMotion을 재생하여 이동하는 것이므로 모든 애니메이션은 루트모션 설정을 동일하게 해야하며 애니메이션은 모두 Loop 설정이 되어야 합니다.
 
ex.루트가 고정되지 않을 경우
루트모션 활성화를 하지 않을경우 큰 문제는 없었습니다.
애니메이션이 루프하지 않도록 하였을 경우에도 큰 문제는 없었습니다.
다만 루트를 고정하지 않을 경우에만 아래처럼 문제가 발생합니다.

댓글