실전 Motion Matching 셋업
블렌딩, 전이 최적화, Continuing Pose, 디버깅까지 프로덕션 레벨 Motion Matching 구축을 다룹니다.
단계별 셋업 가이드
제로에서 시작하는 Motion Matching 구축 절차
// Step 1: 플러그인 활성화
// Edit → Plugins → "Pose Search" 활성화
// Edit → Plugins → "Motion Trajectory" 활성화
// 에디터 재시작
// Step 2: PoseSearchSchema 생성
// Content Browser → 우클릭 → Animation → Pose Search Schema
// - Skeleton 설정
// - Pose Channel: foot_l, foot_r (Position + Velocity)
// - Trajectory Channel: History 3 samples, Prediction 4 samples
// Step 3: PoseSearchNormalizationSet 생성
// Content Browser → 우클릭 → Animation → Pose Search Normalization Set
// - Schema 참조
// - Normalization Database에 DB 연결 (자동 계산)
// Step 4: PoseSearchDatabase 생성
// Content Browser → 우클릭 → Animation → Pose Search Database
// - Schema 참조
// - AnimSequence 추가: Walk, Run, Turn_L/R, Start, Stop 등
// - Build Index (저장 시 자동)
// Step 5: 캐릭터 BP에 CharacterTrajectoryComponent 추가
// - History/Prediction 설정은 Schema와 맞춤
// Step 6: AnimBP에 Motion Matching 노드 추가
// - Database or Chooser 연결
// - Inertialization Deactivate 노드 추가 (블렌딩용)
블렌딩과 Continuing Pose
포즈 전환 품질을 높이는 블렌딩 전략
Inertialization
Motion Matching의 기본 블렌딩 방식. 이전 포즈의 관성을 유지하면서 새 포즈로 전환합니다. 전통적 크로스페이드보다 비용이 낮고 더 자연스럽습니다.
Continuing Pose Bias
현재 재생 중인 애니메이션을 계속 재생하는 데 보너스를 부여합니다. 불필요한 포즈 전환을 줄여 안정성을 높입니다.
Search Throttle
매 프레임 DB 검색 대신, N 프레임마다 검색을 수행하여 CPU 비용을 절감합니다. 일반적으로 2~4 프레임 간격이 적합합니다.
Interrupt Mode
새 포즈로 전환할 최소 Cost 차이 임계값. 현재 포즈와의 Cost 차이가 임계값 미만이면 전환하지 않습니다.
// Motion Matching 노드 권장 설정
// Continuing Pose Bias
ContinuingPoseCostBias = 0.15f;
// 0.0: 매 프레임 최적 포즈로 전환 (떨림 심함)
// 0.1~0.2: 밸런스 (권장)
// 0.5+: 전환 매우 드물 (반응 느림)
// Search Throttle
SearchThrottle = 2; // 2프레임마다 검색
// 60fps에서 30회/초 검색 → 성능 절감
// Inertialization Half-Life
BlendHalfLife = 0.15f; // 초
// 포즈 전환 시 관성 감쇄 시간
// 짧을수록 빠른 전환, 길수록 부드러운 전환
// Minimum Cost to Interrupt
MinCostToInterrupt = 0.05f;
// 현재 포즈 대비 이만큼 이상 좋은 포즈가 있을 때만 전환
최적화 전략
프로덕션 환경에서의 Motion Matching 성능 최적화
| 최적화 기법 | 효과 | 트레이드오프 |
|---|---|---|
| DB 분리 (Chooser) | 검색 공간 축소 | DB 간 전환 시 블렌딩 필요 |
| Search Throttle | 검색 빈도 감소 (50-75%) | 반응 지연 (1~2 프레임) |
| LOD 기반 비활성화 | 먼 캐릭터 MM 비활성화 | 먼 거리에서 품질 저하 |
| 피처 수 최소화 | 피처 벡터 차원 감소 | 매칭 정확도 감소 |
| 애니메이션 프루닝 | 블렌드 구간 제거로 DB 축소 | 일부 전이 품질 저하 |
멀리 있는 캐릭터는 Motion Matching 대신 전통적 BlendSpace + State Machine으로 폴백합니다. SignificanceManager와 연동하여 화면 크기가 임계값 이하이면 간단한 로코모션으로 전환하고, 가까워지면 다시 Motion Matching을 활성화합니다.
디버깅과 시각화
Motion Matching 디버깅 도구와 문제 해결 가이드
// 콘솔 명령어
// Motion Matching 시각화
a.PoseSearch.DrawDebug 1
// → 현재 쿼리 포즈, 선택된 DB 포즈, 궤적을 화면에 표시
// 검색 통계
a.PoseSearch.DrawDebugStats 1
// → Cost 값, 검색 시간, 선택된 애니메이션 이름 표시
// Rewind Debugger
// 에디터에서 Animation → Rewind Debugger 활성화
// → Motion Matching 결정을 프레임별로 되감기하며 분석
// Unreal Insights
// -trace=PoseSearch 옵션으로 실행
// → 프로파일링 데이터 수집
문제: 떨림(Jitter)
포즈가 너무 자주 전환됩니다. Continuing Pose Bias를 높이거나, MinCostToInterrupt를 높여 전환 빈도를 줄이세요.
문제: 반응 지연
방향 전환이 느립니다. Trajectory Weight를 높이고, Continuing Pose Bias를 낮추세요. 애니메이션에 Turn 동작을 추가하면 도움이 됩니다.
문제: 발 미끄러짐
포즈 전환 시 발이 미끄러집니다. Foot Placement 노드를 추가하고, Inertialization 블렌딩 시간을 조절하세요.
문제: 부적절한 포즈 선택
상황에 맞지 않는 애니메이션이 재생됩니다. DB를 Chooser로 분리하거나, Tag 필터링을 활용하여 후보를 제한하세요.
핵심 요약
- 셋업 순서: 플러그인 → Schema → Normalization → Database → Trajectory Component → AnimBP
- Inertialization이 Motion Matching의 기본 블렌딩 방식이며, Continuing Pose Bias로 전환 빈도를 조절한다.
- Search Throttle, DB 분리, LOD 폴백으로 프로덕션 성능을 최적화한다.
- Rewind Debugger와
a.PoseSearch.DrawDebug로 Motion Matching 결정을 시각적으로 분석한다. - 떨림/지연/미끄러짐 문제는 Cost 가중치, Continuing Bias, Foot Placement 조합으로 해결한다.
도전 과제
배운 내용을 직접 실습해보세요
Motion Matching 노드에서 Continuing Pose Cost Bias를 조절하여 포즈 전환 빈도를 제어하세요. 값을 낮추면 더 자주 전환, 높이면 현재 포즈 유지 경향이 강해집니다. 다양한 값에서의 시각적 품질과 끊김을 비교하세요.
Motion Matching에서 포즈 전환 시 Blend Time을 0.1초, 0.2초, 0.3초로 설정하며 시각적 차이를 비교하세요. Inertialization 블렌딩을 적용하여 관절 오버슈팅 없이 부드러운 전환이 이루어지는지 확인하세요.
10종 이상의 애니메이션(걷기, 달리기, 8방향 스트레이프, 시작/정지)을 Database에 등록한 프로덕션 레벨 Motion Matching을 구축하세요. Rewind Debugger로 매칭 결과를 프레임별로 분석하고, Cost 함수를 튜닝하여 최적의 품질을 달성하세요.