2026.01.14 - [Unreal/MotionMaching] - [unreal] 모션 매칭(MotionMaching)
[unreal] 모션 매칭(MotionMaching) 기본이동
언리얼의 모션 매칭이란 언리얼에 단순히 애니메이션을 재생하는걸 넘어서 실시간 상황에 따라 가장 적절한 포즈를 선택하는 시스템이다.쿼리(Query) : 모션 매칭의 핵심 시스템으로 캐릭터의 현
codehortus.tistory.com
이전 기본이동에 이어 상태에 따른 애니메이션을 추가했다.
이전 블로그에서 pss 에 대한 설정을 했다
1.PSS(PoseSearch Schema)
어떤 데이터를 기준으로 최적의 모션을 찾을것인가 정의하는 핵심 설계도로
단순 애니메이션을 모아 두는 것이 아니라 케릭터의 위치, 속도, 발의 위치 등 비교할 특징등(Features)을 설정하는곳,
이전 블로그에서 기본 설정으로만 다루었다.
1-2. 주요 구성 요소(Features)
- Trajectory(궤적)
가장 중요한 요소로 캐릭터가 앞으로 어디로 갈지, 과거에 어디에 있었는지를 비교한다.- Prediction (예측): 미래의 1초, 2초 뒤의 위치와 방향을 확인하여 그 흐름에 맞는 모션을 찾는다
- History (이력): 과거의 움직임과 부드럽게 이어지는지 확인한다.
- Pose (포즈 상태)
- Position (위치): 특정 본(Bone)의 상대적 위치 (예: 양발의 위치).
- Velocity (속도): 발이 땅을 차는 속도나 골반의 이동 속도.
- Facing (방향): 특정 본이 바라보는 방향.
- Sampling Settings (샘플링 설정)
- Sample Rate: 데이터를 얼마나 촘촘하게 분석할지 결정한다.
- Weights (가중치): "발의 위치보다 이동 경로(Trajectory)를 2배 더 중요하게 보겠다"와 같이 각 요소의 중요도를 수치화한다.

2. Pose Search Database
모션 매칭 시스템에서 실제 애니메이션 데이터가 저장되고 인덱싱 되는 모션 저장소.
PSS가 무엇을 기준으로 찾을 것인가 를 정의했다면
PSD 는 그 기준에 맞춰 어떤 애니메이션들을 검색 대상으로 삼을 것 인가 를 결정한다.
2-1. PSD의 핵심 기능
데이터 베이스는 사용자가 등록한 애니메이션(Sequence, blendSpace등)을 스키마에 정의된 채널별로 분석하여
검색 가능한 다차원 데이터로 변환한다.
- 데이터 인덱싱 : 애니메이션의 각 프레임을 스키마에 특징(위치,속도,궤적 등) 에 맞춰 수치화 하여 저장한다
- 비용 계산(cost calculation) : 런타임에 현재 캐릭터 상태와 데이터베이스 내 포즈 간의 차이(cost)를 계산하여 가장 적절한 포즈를 고른다
- 최적화 구조 : 수많은 포즈 데이터 중 가장 유사한 것을 빠르게 찾기 위해 내부적으로 KD-Tree 또는 VP-Tree 같은 가속 구조를 사용한다.
KD-Tree(K-Dimensional Tree) : 공간을 축 기준으로 쪼개는 방식, 다차원 공간을 특정축을 기준으로 절반씩 계속 나눈다.
VP-Tree(Vantage Point Tree): 특정 기준점과 거리를 기준으로 쪼개는 방식


3. 각 동작별 PSD를 구성
각 동작인 jump / crouch / idle / sprint 를 구성해 데이터를 넣어준다.
각 이름에 맞는 동작별 PSD를 넣어주되 상태가 변하는 시작점 Lend to stand 같은 상태 전환은 제거해 주고
필요에 따라 넣어준다.
4. Chooser(추저)
모션 매칭 시스템에서 어떤 PSD 를 사용할 것인가를 결정하는 의사결정 테이블이다.
기존 애니메이션 블루프린트 ABP에서는 복잡한 상태머신과 트잰지션 노드로 가득 찼던 로직을
Chooser를 사용해 깔끔한 데이터 테이블 형태로 관리할 수 있다 .
4-1. Chooser의 핵심 역할
모션 매칭은 데이터가 많을수록 연산량이 늘어난다
Chooser는 현재 캐릭터의 상태(속도, 공중 여부, 무기 장착 등)를 보고 가장 적합한 특정 데이터베이스만 열어보도록 필터링 역할
- 상태 분류: "달리기 중인가? 멈추는 중인가? 점프 중인가?"를 판별.
- 자산 선택: 조건에 맞는 최적의 Pose Search Database나 Anim Sequence를 반환.
- 성능 최적화: 수만 개의 포즈 전체를 검색하는 대신, 관련된 수천 개의 포즈만 검색하게 함.

각 만든 상태 PSD 를 ABP의 등록된 bool 값과 float 값과 연동하여 사용할 수 있다. 각 상태에 맞게 bool 값을 비교해 주면 된다.
5. 최종 흐름
1. PSD 를 각 상태에 맞게 추가해주고 애니메이션을 넣어준다.
2. 추저 테이블을 생성해준다.
3. 추저 테이블에 열과 행을 추가해 각 상태에 따른 PSD를 넣어준다



6.디버깅

리와인드 디버거와 리와인드 디버거 디테일을 켜준다.
6-1. 리와인드 디버거(Rewind Debugger)
시간에 따른 전체적인 상황 파악을 할 수 있게 해준다.
- 타임라인 기반 녹화: 게임 플레이를 실시간으로 녹화하고, 타임라인을 드래그(Scrubbing)하여 과거 시점의 정보를 볼 수 있다.
- 트랙 시스템: 선택한 캐릭터의 애니메이션 블루프린트, 변수 값, 노티파이(Notify) 등이 타임라인에 표시된다.
- 오브젝트 필터: 드로퍼 툴(스포이트 아이콘)로 뷰포트의 캐릭터를 찍으면 해당 캐릭터의 모든 데이터가 트랙에 올라옵니다.

6-2. 리와인드 디버거 디테일(Rewind Debugger Details)
모션 매칭의 내부 분석을 담당한다. 타임 라인의 poseSerach 트랙을 클릭하면 이 창에 상세 정보가 나타난다.
핵심 탭 구성 (모션 매칭 기준)
- Active Pose (활성 포즈): 현재 캐릭터가 재생 중인 애니메이션과 해당 포즈의 비용(Cost) 정보를 보여준다.
- Selection Table (선택 테이블): 가장 중요한 탭, 시스템이 포즈를 고를 때 후보에 올랐던
수많은 포즈들의 리스트를 보여준다.- Total Cost: 왜 이 포즈가 선택되었는지(혹은 탈락했는지) 총점을 보여준다.
- Breakdown: 궤적(Trajectory), 포즈(Pose), 정렬(Alignment) 등 스키마에서 설정한
각 항목별 감점 요인을 상세히 볼 수 있다.
- Debug Drawing (디버그 드로잉): 리스트에서 특정 포즈를 클릭하면, 뷰포트에 해당 포즈의 고스트(Ghost) 스켈레톤과 예측 궤적이 그려진다.. 이를 통해 "아, 미래 궤적이 꺾여서 이 포즈가 선택됐구나"라고 시각적으로 이해 할 수 있다.

7.트래블 슈팅
7-1. 이슈 : 캐릭터가 제자리에서 점프임력을 받았음에도 불구하고 점프 애니메이션 대신 idle 애니메이션이 재생됨
7-2. 원인 : 리와인드 디버거를 통해 확인한 결과 데이터의 유사성으로 인한 비용 계산 오류.
7-2-1. 포즈의 중복성 : 점프 PSD 안에 점프후 착지하여 Idle 로 이어지는 구간이 포함되 있었음
7-2-2. 낮은 비용 발생 : 제자리 점프시 캐릭터의 속도는 0에 가깝고 시스템은 속도가 0 인 idle 상태의 현재 상태에 더
적합하다고 판단,
7-2-3. 잘못된 선택 : 시스템은 더 정답에 가깝다고 수치상으로 계산된 idle 포즈를 선택해 점프 애니메이션이 덮임
7-3.해결 :
잘못 들어간 점프 PSD 내에 문제를 일으키던, Idle 상태로 전환되는 중복 구간 애니메이션 제거
점프 외에 앉기와 달리기 등 현재 포즈 상태에 전환되는 애니메이션들을 전부 제거해줌.
3번의 빨간 줄 확인!

8. 결과
점프 앉기 전력질주 등 애니메이션 간 전환이 자연스럽고 부드럽게 적용됨

'Unreal > MotionMatching' 카테고리의 다른 글
| [unreal]5.7 GASP 모든 오브젝 파쿠르 기능 (0) | 2026.02.13 |
|---|---|
| [unreal] 5.7 motion matching chooser table : error (0) | 2026.01.27 |
| [unreal] unreal 5.7 모션 매칭(motion matching) - weapon pose (0) | 2026.01.26 |
| [unreal] 모션 매칭(MotionMatching) 기본이동 (1) | 2026.01.14 |