모션 매칭 심화

김혁·2025년 10월 31일

기술연구

목록 보기
8/10

디버깅

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 에셋이 됨.

사용방법

  1. [Animation]->[Chooser Table] 에셋 생성
  2. 우상단의 Table Settings를 누르면 Details에 결과 타입을 설정할 수 있음
    -> 조건에 따라 다른 포즈 서치 데이터베이스를 선택하기 위함이기 때문에 해당 클래스를 선택
  3. 좌측에 결과 값으로 [Add Row] 버튼을 통해 에셋을 추가한 후에, 넣고자 하는 데이터베이스를 할당
  4. [Add Column] 버튼을 통해 조건을 할당하고, 데이터베이스에 맞는 조건을 부여함
  5. ABP 모션 매칭 노드에서 데이터베이스 세팅을 Dynamic으로 수정한 후에, On Update를 Create Binding을 통해 특정 함수랑 바인딩
  6. 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

profile
게임 개발자를 향해..

0개의 댓글