UE5 Motion Matching 애니메이션
Motion Matching은 UE5 5.2에서 정식 도입된 데이터 중심 애니메이션 시스템입니다. 전통적인 Animation State Machine 대신 방대한 모션 캡처 데이터베이스에서 현재 캐릭터 상태와 가장 유사한 포즈를 실시간으로 검색해 재생합니다.
1. 플러그인 활성화
섹션 제목: “1. 플러그인 활성화”Edit → Plugins → Animation → PoseSearch → EnableEdit → Plugins → Animation → MotionTrajectory → EnableEdit → Plugins → Animation → ChooserFramework → Enable (선택)2. 핵심 에셋 구조
섹션 제목: “2. 핵심 에셋 구조”PoseSearchSchema — 검색에 사용할 특징(Feature) 정의PoseSearchDatabase — 검색 대상 애니메이션 클립 컬렉션MotionMatchingNode — Animation Blueprint의 검색 실행 노드3. Pose Search Schema 설정
섹션 제목: “3. Pose Search Schema 설정”에디터에서 PoseSearchSchema 에셋 생성:
추가할 Feature Channel:- Position (본 위치 — Root, Hand, Foot)- Velocity (속도 벡터)- Trajectory (미래 예측 이동 경로 — 0.1s, 0.3s, 0.5s)- Phase (걸음 주기 위상 — 보행 품질 향상)4. Pose Search Database 구성
섹션 제목: “4. Pose Search Database 구성”PoseSearchDatabase 에셋 생성→ Schema: 위에서 만든 PoseSearchSchema 연결→ Sequences 추가: - Walk_Forward (Looping) - Walk_Left, Walk_Right - Run_Forward (Looping) - Stop_Walk → Idle - Idle_Breathe (Looping) - Jump_Start, Jump_Land빌드:
Database 에셋 → Build (데이터베이스 사전 계산)5. Animation Blueprint 설정
섹션 제목: “5. Animation Blueprint 설정”Animation Blueprint → AnimGraph에 Motion Matching 노드 추가: - Database: PoseSearchDatabase 연결 - Trajectory: TrajectoryComponent 연결 - Blend Time: 0.1~0.2s (부드러운 전환)6. Trajectory 컴포넌트 C++ 설정
섹션 제목: “6. Trajectory 컴포넌트 C++ 설정”#include "MotionTrajectory.h"#include "MotionTrajectoryCharacterMovement.h"
UCLASS()class AMyCharacter : public ACharacter{ GENERATED_BODY()
UPROPERTY(VisibleAnywhere) UCharacterMovementTrajectoryComponent* TrajectoryComponent;
public: AMyCharacter() { TrajectoryComponent = CreateDefaultSubobject<UCharacterMovementTrajectoryComponent>( TEXT("Trajectory")); }
// 커스텀 이동 의도(Intent) 제공 FTrajectorySampleRange GetFutureSamples() const { return TrajectoryComponent->GetTrajectory(); }};7. Motion Matching 품질 조정
섹션 제목: “7. Motion Matching 품질 조정”// Animation Blueprint C++ 노드 파라미터UPROPERTY(EditAnywhere, Category = "Motion Matching")float PoseContinuityWeight = 0.5f; // 현재 포즈와의 연속성 비중
UPROPERTY(EditAnywhere, Category = "Motion Matching")float TrajectoryWeight = 1.0f; // 궤적 일치 비중
UPROPERTY(EditAnywhere, Category = "Motion Matching")float NotifyWeight = 0.3f; // 발 접지 타이밍 비중비용 함수:
총 비용 = PoseCost × ContinuityWeight + TrajectoryCost × TrajectoryWeight + PhaseCost × PhaseWeight8. Chooser Framework 연동 (선택)
섹션 제목: “8. Chooser Framework 연동 (선택)”Chooser는 상황별로 다른 PoseSearchDatabase를 선택합니다.
Chooser 에셋: Input: bIsCrouching, bIsInWater, CurrentSpeed Output: Default → WalkRunDatabase Crouching → CrouchDatabase InWater → SwimDatabase HighSpeed → SprintDatabase9. 디버그 시각화
섹션 제목: “9. 디버그 시각화”콘솔 명령:a.PoseSearch.ShowDebug 1 — 현재 선택된 클립 표시a.PoseSearch.DrawQuery 1 — 쿼리 특징 벡터 시각화a.PoseSearch.DrawResult 1 — 검색 결과 시각화10. State Machine vs Motion Matching
섹션 제목: “10. State Machine vs Motion Matching”| 항목 | State Machine | Motion Matching |
|---|---|---|
| 설정 | 수십 개 상태 | 데이터베이스 |
| 전환 | 수동 조건 설정 | 자동 최적 검색 |
| 품질 | 전환 팝핑 발생 | 자연스러운 블렌딩 |
| 모캡 활용 | 클립별 편집 | 원본 그대로 활용 |
| 초기 비용 | 낮음 | 높음 (데이터 수집) |
Motion Matching은 방대한 모캡 데이터를 그대로 활용해 자연스러운 캐릭터 이동을 구현합니다. PoseSearchSchema로 검색 특징을 정의하고, Database에 애니메이션을 수집하며, TrajectoryComponent로 미래 이동 경로를 예측 제공하는 것이 핵심입니다. 초기 데이터 수집 비용이 크지만 State Machine 유지보수 비용을 크게 줄여줍니다.