모션 매칭

김혁·2025년 10월 31일

기술연구

목록 보기
7/10
post-thumbnail

모션 매칭이란?

개념

  • 모션 매칭은 언리얼 엔진 5.4버전부터 추가된 쿼리 기반 애니메이션 포즈 선택 시스템.
  • 기존 애니메이션 시스템과 달리 애니메이션 데이터 세트에서 정보에 기반한 애니메이션 포즈를 선택하여 애니메이션 시퀀스 간에 트랜지션 또는 블렌딩 로직을 구성하지 않고도 반응형 애니메이션 시스템을 만들 수 있음.

동작 원리

  • Motion Matching 노드는 본의 위치 및 속도 같은 스키마를 통해 캐릭터로부터 채널을 쿼리하고 데이터베이스 에셋에 저장된 애니메이션 데이터 세트에서 정보를 기반으로 쿼리에 맞는 애니메이션 포즈를 선택함

사용법

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 사용이 권장되는 이유

  1. 궤적 정보의 정확성
    • 모션 매칭은 캐릭터의 궤적 정보를 핵심적으로 사용하여 다음 애니메이션을 선택함
    • 루트 모션이 켜져 있으면, 루트 본의 움직임이 캐릭터의 실제 이동을 정확하게 나타내기 때문에 더 정확한 선택이 가능해짐
  2. 애니메이션과 캐릭터 이동의 분리
    • 루트 모션을 사용하면 캐릭터의 이동 제어권을 애니메이션이 가지고 오게 되서, 캡슐 컴포넌트가 실제로 움직이게 됨
    • 이를 통해 애니메이션에 맞춰 캐릭터를 이동시키려 할 때 발생하는 속도 불일치나 물리적 오류를 최소화할 수 있음
  3. 부드러운 전환 보장 (매칭 비용 최소화)
    • 모션 매칭은 현재 포즈와 다음에 선택할 애니메이션 프레임의 포즈 유사도를 계산함
    • 루트 모션 애니메이션은 이동과 포즈가 유기적으로 연결되어 있어, 이동 의도에 맞는 애니메이션을 찾으면 포즈도 자연스럽게 연결될 가능성이 높아짐


개인 샘플 프로젝트 : Github - Motion Matching

참고

공식문서 : 언리얼 엔진의 모션 매칭
Fab 샘플 프로젝트 : Epic Games - Game Animation Sample
유튜브 : [언리얼 페스트 2024 서울] Day2 모션 매칭: 자연스러운 애니메이션 손쉽게 구현하기
유튜브 튜토리얼 자료 : The Full Motion Matching Tutorial W500 Animations/ Walk, Crouch, Jump, TurnInPlace

profile
게임 개발자를 향해..

0개의 댓글