모션 매칭이란?
개념
- 모션 매칭은 언리얼 엔진 5.4버전부터 추가된 쿼리 기반 애니메이션 포즈 선택 시스템.
- 기존 애니메이션 시스템과 달리 애니메이션 데이터 세트에서 정보에 기반한 애니메이션 포즈를 선택하여 애니메이션 시퀀스 간에 트랜지션 또는 블렌딩 로직을 구성하지 않고도 반응형 애니메이션 시스템을 만들 수 있음.
동작 원리
- Motion Matching 노드는 본의 위치 및 속도 같은 스키마를 통해 캐릭터로부터 채널을 쿼리하고 데이터베이스 에셋에 저장된 애니메이션 데이터 세트에서 정보를 기반으로 쿼리에 맞는 애니메이션 포즈를 선택함
사용법
1. 플러그인을 활성화 : 포즈 서치(Pose Search)

2. 포즈 서치 스키마 에셋 생성
- 포즈 서치 스키마 에셋은 모션 매칭 환경설정 및 쿼리 세팅이 저장됨
- 이 에셋은 Motion Matching 노드에 연결하는 데 사용됨
- 다양한 채널을 통해 쿼리에 사용될 데이터를 정의하는 역할임
-> 채널의 종류는 공식문서를 참고하자!
- [Animation]->[Motion Matching]->[Pose Search Schema]

- 필요에 따라 채널 세팅 (디폴트로 궤적 및 포즈 채널 추가되어 있음)
3. 포즈 서치 데이터베이스 에셋 생성
- 캐릭터의 애니메이션 데이터를 Motion Matching 노드가 선택할 수 있는 포맷으로 저장하는 에셋
- [Animation]->[Motion Matching]->[Pose Search Database]

- 데이터베이스 내부에서 애니메이션 추가
4. ABP에서 블루프린트 노드 연결
- Pose Search -> Motion Matching 노드에서 포즈 서치 데이터베이스 에셋 설정
- Motion Matching 노드 Output을 Pose History 노드 연결
- Pose History 노드를 Output Pose로 연결
-> Pose History 노드는 캐릭터의 궤적 데이터를 실시간으로 수집하고 저장하는 역할을 함
-> ABP가 매 프레임 업데이트될 때마다 현재 캐릭터의 본 위치, 방향, 속도 등의 정보를 지속적으로 기롷가여 히스토리 버퍼에 보관해놓고, 모션 매칭 노드의 입력에 사용됨

포즈 서치 스키마
- 애니메이션을 선택하기 위한 쿼리에 사용될 데이터를 정의하는 에셋임
- 최대한 적은 샘플을 사용하는 것이 좋음.
-> 샘플이 많을수록 더 정확한 데이터를 제공할 수 있지만, 시스템의 결과가 왜곡될 수 있음
궤적 채널
- 궤적 채널 내에 있는 각 인덱스에 플래그를 할당하여 모션 궤적 채널을 쿼리할 때 샘플 포인트가 찾을 데이터 타입을 결정할 수 있음

- 디폴트 세팅으로 위치, 속력 + 정면 방향, 위치 + 정면 방향, 위치 + 속력 + 정면 방향을 플래그로 가지고 있음
- 채널 자체의 Weight의 경우에는 해당 채널 전체가 포즈 서치 스키마 내의 다른 채널과 비교했을 때, 최종 애니메이션 선택에서의 가중치를 의미함 (Default : 7.0)
- 샘플에서의 Offset은 현재 포즈를 기준으로 몇 초 앞이나 뒤의 궤적 정보를 평가에 사용할지 결정하는 시간 값임
-> 양수는 미래 궤적을 예측하기 위함이고, 음수는 과거 궤적을 참고하기 위함임
- 샘플에서의 Weight는 특정 Offset 지점의 궤적 정보가 비용 계산에 얼마나 영향을 미칠지 결정하는 가중치임
포즈 채널
- 특정 본들의 현재 상태 데이터를 기반으로 쿼리 시스템과 매칭할 수 있음
- 주로 신체의 주요 관절들의 현재 위치와 회전 정보를 포함함

- 디폴트 세팅으로 발의 속력과 위치를 가지고 있음
포즈 서치 데이터베이스
- 스키마를 기반으로 모션 매칭에서 선택할 수 있는 애니메이션 에셋 목록을 추가하는 에셋

- 위는 Game Animation Sample 프로젝트에 있던 Idle, Run 관련 애니메이션을 추가했을 때 보여지는 다양한 애니메이션임
- 루트 모션이 활성화되어 있지 않은 애니메이션은 추가하지 않음
애니메이션 추가할 때 주의사항
- 모션 매칭에 사용될 애니메이션은 루트 모션 사용 옵션을 켜야 함
- [Asset Actions] -> [Edit Selection in Property Matrix] 를 통해 여러 애니메이션의 속성을 한 번에 바꿀 수 있음
-> Root Motion 탭의 Enable Root Motion, Force Root Lock을 활성화해줘야 함
Root Motion 사용이 권장되는 이유
- 궤적 정보의 정확성
- 모션 매칭은 캐릭터의 궤적 정보를 핵심적으로 사용하여 다음 애니메이션을 선택함
- 루트 모션이 켜져 있으면, 루트 본의 움직임이 캐릭터의 실제 이동을 정확하게 나타내기 때문에 더 정확한 선택이 가능해짐
- 애니메이션과 캐릭터 이동의 분리
- 루트 모션을 사용하면 캐릭터의 이동 제어권을 애니메이션이 가지고 오게 되서, 캡슐 컴포넌트가 실제로 움직이게 됨
- 이를 통해 애니메이션에 맞춰 캐릭터를 이동시키려 할 때 발생하는 속도 불일치나 물리적 오류를 최소화할 수 있음
- 부드러운 전환 보장 (매칭 비용 최소화)
- 모션 매칭은 현재 포즈와 다음에 선택할 애니메이션 프레임의 포즈 유사도를 계산함
- 루트 모션 애니메이션은 이동과 포즈가 유기적으로 연결되어 있어, 이동 의도에 맞는 애니메이션을 찾으면 포즈도 자연스럽게 연결될 가능성이 높아짐
개인 샘플 프로젝트 : Github - Motion Matching
참고
공식문서 : 언리얼 엔진의 모션 매칭
Fab 샘플 프로젝트 : Epic Games - Game Animation Sample
유튜브 : [언리얼 페스트 2024 서울] Day2 모션 매칭: 자연스러운 애니메이션 손쉽게 구현하기
유튜브 튜토리얼 자료 : The Full Motion Matching Tutorial W500 Animations/ Walk, Crouch, Jump, TurnInPlace