Motion Matching

정혜창·2025년 4월 21일

독학

목록 보기
28/28

🎮 모션 매칭

참고 자료 :
https://www.youtube.com/watch?v=S4aBd64t-hY&t=508s
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/motion-matching-in-unreal-engine?application_version=5.5

1️⃣ 모션 매칭이란?

  • 모션 매칭 시스템은 기존의 언리얼에서 스테이트 머신이나 블랜드 스페이스 기반의 애니메이션보다 훨씬 자연스럽고 다양한 캐릭터 애니메이션을 실행시킬 수 있는 차세대 기술.
  • 모션 매칭은 사용자의 입력에 따라 매 프레임마다 가장 적절한 애니메이션을 수많은 데이터 애니메이션에서 검색을 하여 출력하는 방식으로 작동.
  • 즉, 수많은 애니메이션 클립을 사전에 전처리하여, 현재 상태에 가장 적합한 프레임을 골라 즉석에서 점프하듯 전환.
    👉 애니메이션 시퀀스 간에 트랜지션 또는 블렌딩 로직을 구성하지 않고도 반응형 애니메이션 시스템을 생성할 수 있다.

2️⃣ 준비

  • 우선 플러그인을 설치해야한다.
  • 모션매칭 시스템은 많은 애니메이션 데이터베이스를 바탕으로 검색하여 출력하는 방식이기 때문에 애니메이션이 많을수록 캐릭터의 움직임이 자연스러워진다. 무료료 제공되는 lyra 템플릿이 모션매칭을 활용한 가장 적절한 예시이기 때문에 여기있는 애니메이션 시퀀스를 활용하는 자료를 공부하였다.

3️⃣ 적용

📌 Migration

  • lyra에서 migration으로 애니메이션 시퀀스를 가지고 온다.

📌 Pose Search Schema (포즈 검색 개요) (PSS)

  • migration을 했다면 우선 Pose Search Scheam를 생성해야한다.
  • 여기서는 기본적으로 모션 매칭 환결설정 및 쿼리 세팅을 설정한다. 이 에셋은 애니메이션 데이터베이스와 쿼리 시스템을 Motion Matching 노드에 연결하는 데 사용되며, 애니메이션을 선택하기 위한 쿼리에 사용될 데이터를 정의한다.

🔥 Trajectory Channel

궤적 채널 내에 있는 각 인덱스에 플래그를 할당하여 모션 궤적 채널을 쿼리할 때 샘플 포인트가 찾을 데이터 타입을 결정할 수 있다.

🔥 Pose Channel

포즈 채널을 사용하면 모션 매칭 시스템에 대한 본 정의를 설정하여 포즈를 쿼리 시스템과 매칭할 수 있다.


📌 Pose Search Database (PSD)

  • Pose Search Schema를 생성했다면 이제 Pose Search Database를 생성해야한다.

    생성할 때 전에 만든 스키마를 할당해주는 모습
  • 이제 아까 Migration으로 가져온 애니메이션을 드래그&드롭해서 Locomotion을 만들 수 있다.(Locomotion 뿐만아니라 다양하게 만들 수 있음)

  • 그 전에 PSD에 사용할 애니메이션 에셋이 RootMotion을 사용하는지 체크해야한다.

  • 가져온 애니메이션이 매우 많으면 모든 에셋의 Root Motion을 설정을 일일이 하는 것이 힘들 것이다. 따라서 다음 방법으로 한번에 에셋의 Property를 변경할 수 있다.
  • Root Motion을 Enable로 체크하고 애니메이션 시퀀스를 드래그&드롭으로 넣는다. 그러면 아래 처럼 여러 애니메이션 시퀀스가 한번에 동작하는 것을 볼 수 있다.

📌 Database를 ABP에 적용

  • 앞서 만들었던 PSS에 적용된 스켈레톤과 같은 것을 적용한 애니메이션 블루 프린트를 만든다. 그리고 해당 블루프린트 Anim Graph에서 Motion Matching Node 생성
  • 생성한 노드에 우리가 만든 PSD를 할당.
  • 궤적에 따른 애니메이션 포즈를 매칭 시킬 수 있도록 Pose History 노드를 생성한다.
  • 사용하는 캐릭터에 Character Trajectory 컴포넌트 추가한다.
  • ABP Event Graph에서 프레임마다 Trajectory Component를 업데이트 한다.
  • 다시 Anim Graph로 돌아와서 Pose Histroy 노드의 Input Trajectory에 프레임마다 업데이트되는 Trajectory Component와 Binding 한다.
profile
Unreal 1기

0개의 댓글