디버깅
Rewind Debugger
- Rewind Debugger를 통해 현재 선택된 애니메이션은 무엇인지, 선택된 포즈 서치 데이터베이스는 무엇인지 알 수 있음

- Pose Search를 클릭하고 Rewind Debugger Details 창을 확인하면 그 시점에서 애니메이션별 계산하는 비용을 확인할 수 있음

- 위를 확인해보면 비용이 가장 작은 애니메이션을 선택해서 현재 재생시켜주는 점을 알 수 있음
- Bias 값을 통해 현재 재생하는 애니메이션에 비용을 마이너스해줘서, 현재 재생하는 애니메이션을 최대한 가져가려고 하고 있음 -> 애니메이션을 교체하면 추가적인 비용이 발생하기 때문
실행 중에 궤적 정보 보여주기
- a.AnimNode.PoseHistory.DebugDrawTrajectory 1 로 설정하면 궤적 정보 보임

데이터베이스 동적 선택
- Game Animation Sample에는 약 1000개의 애니메이션 시퀀스가 존재한다고 한다.
- 그렇다면 항상 모든 애니메이션의 비용을 계산하는 것은 너무 비효율적이고, 의도하지 않은 애니메이션이 선택될 가능성이 높다.
- 따라서 캐릭터의 현재 상태에 따라 동적으로 데이터베이스를 선택하는 방법을 제공한다.
선택자 테이블 (Chooser Table)
- 모션 매칭 시스템이 특정 상황이나 캐릭터 상태에 따라 어떤 포즈 서치 데이터베이스를 사용할지 결정하도록 돕는 에셋
- 복잡한 애니메이션 로직을 깔끔하고 효율적으로 관리할 수 있음
- 역할
- 입력된 쿼리 데이터를 기반으로 여러 선택지 중 최종적으로 사용할 애니메이션 데이터를 결정
- 동적 선택 : 캐릭터의 현재 상태, 플레이어의 입력과 같은 컨텍스트 데이터를 분석하여 가장 적합한 PSD를 선택함
- 효율성 극대화 : 거대한 데이터베이스 하나를 매번 검색하는 대신, Chooser Table이 먼저 상황에 맞는 작은 PSD를 선택하고, 모션 매칭 노드가 선택된 작은 PSD 내에서만 최적의 포즈를 검색하도록 지시
- 제어력 및 명확성 : "달리기" 상태에서는 달리기 관련 애니메이션만 포함된 PSD를, "착지 후" 상태에서는 착지 및 전환 애니메이션만 포함된 PSD를 명확하게 지정하여, 의도하지 않은 애니메이션이 선택되는 것을 방지
- 작동 방식
- 기본적으로 Key-Value 쌍을 가진 스프레드시트와 유사한 구조로 작동함
- 쿼리 축 : 테이블의 행과 열을 정의하는 입력 조건. 예 : 캐릭터 속도, 가속도
- 선택된 값 : 쿼리 축의 조건들이 충족될 때, 반환되는 출력 값. 보통 PSD 에셋이 됨.
사용방법
- [Animation]->[Chooser Table] 에셋 생성
- 우상단의 Table Settings를 누르면 Details에 결과 타입을 설정할 수 있음
-> 조건에 따라 다른 포즈 서치 데이터베이스를 선택하기 위함이기 때문에 해당 클래스를 선택
- 좌측에 결과 값으로 [Add Row] 버튼을 통해 에셋을 추가한 후에, 넣고자 하는 데이터베이스를 할당

- [Add Column] 버튼을 통해 조건을 할당하고, 데이터베이스에 맞는 조건을 부여함

- ABP 모션 매칭 노드에서 데이터베이스 세팅을 Dynamic으로 수정한 후에, On Update를 Create Binding을 통해 특정 함수랑 바인딩

- On Update를 통해 바인딩된 함수에서 아래와 같이 Chooser를 통해 데이터베이스를 선택하고, Motion Matching Node에 연결되게 노드 생성 및 연결

참고 : 애니메이션 블루프린트를 통해 변수 값을 받아오고 있음
- 앉아서 가는 경우에는 Character Movement 컴포넌트를 통해 Crouch 함수를 실행

주의사항
- PSS(포즈 서치 스키마)에 따라 결과값이 다른 애니메이션 선택이 될 가능성이 높음
- 점프의 경우, 특히 Default로 사용할 경우 이상한 애니메이션이 많이 나옴
-> Default가 XY 기반으로 하기 때문에 Z축 신경을 쓰지 않음
- 언리얼에서 제공하는 Game Animation Sample에 기본 로코모션 및 파쿠르할 때, 스키마가 존재하기 때문에 이를 최대한 활용해야 할 것으로 보임
- 추가적으로 발이 미끄러져보이는 현상이 있는 듯하기 때문에, 루트 모션 및 모션 워핑도 공부가 필요해보임
개인 샘플 프로젝트 : Github - Motion Matching
참고
공식문서 : 언리얼 엔진의 모션 매칭
Fab 샘플 프로젝트 : Epic Games - Game Animation Sample
유튜브 : [언리얼 페스트 2024 서울] Day2 모션 매칭: 자연스러운 애니메이션 손쉽게 구현하기
유튜브 튜토리얼 자료 : The Full Motion Matching Tutorial W500 Animations/ Walk, Crouch, Jump, TurnInPlace