콘텐츠로 이동

UE5 Motion Matching 애니메이션

Motion Matching은 UE5 5.2에서 정식 도입된 데이터 중심 애니메이션 시스템입니다. 전통적인 Animation State Machine 대신 방대한 모션 캡처 데이터베이스에서 현재 캐릭터 상태와 가장 유사한 포즈를 실시간으로 검색해 재생합니다.


Edit → Plugins → Animation → PoseSearch → Enable
Edit → Plugins → Animation → MotionTrajectory → Enable
Edit → Plugins → Animation → ChooserFramework → Enable (선택)

PoseSearchSchema — 검색에 사용할 특징(Feature) 정의
PoseSearchDatabase — 검색 대상 애니메이션 클립 컬렉션
MotionMatchingNode — Animation Blueprint의 검색 실행 노드

에디터에서 PoseSearchSchema 에셋 생성:

추가할 Feature Channel:
- Position (본 위치 — Root, Hand, Foot)
- Velocity (속도 벡터)
- Trajectory (미래 예측 이동 경로 — 0.1s, 0.3s, 0.5s)
- Phase (걸음 주기 위상 — 보행 품질 향상)

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 (데이터베이스 사전 계산)

Animation Blueprint → AnimGraph에 Motion Matching 노드 추가:
- Database: PoseSearchDatabase 연결
- Trajectory: TrajectoryComponent 연결
- Blend Time: 0.1~0.2s (부드러운 전환)

#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();
}
};

// 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 × PhaseWeight

Chooser는 상황별로 다른 PoseSearchDatabase를 선택합니다.

Chooser 에셋:
Input: bIsCrouching, bIsInWater, CurrentSpeed
Output:
Default → WalkRunDatabase
Crouching → CrouchDatabase
InWater → SwimDatabase
HighSpeed → SprintDatabase

콘솔 명령:
a.PoseSearch.ShowDebug 1 — 현재 선택된 클립 표시
a.PoseSearch.DrawQuery 1 — 쿼리 특징 벡터 시각화
a.PoseSearch.DrawResult 1 — 검색 결과 시각화

항목State MachineMotion Matching
설정수십 개 상태데이터베이스
전환수동 조건 설정자동 최적 검색
품질전환 팝핑 발생자연스러운 블렌딩
모캡 활용클립별 편집원본 그대로 활용
초기 비용낮음높음 (데이터 수집)

Motion Matching은 방대한 모캡 데이터를 그대로 활용해 자연스러운 캐릭터 이동을 구현합니다. PoseSearchSchema로 검색 특징을 정의하고, Database에 애니메이션을 수집하며, TrajectoryComponent로 미래 이동 경로를 예측 제공하는 것이 핵심입니다. 초기 데이터 수집 비용이 크지만 State Machine 유지보수 비용을 크게 줄여줍니다.