ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Unreal] 언리얼 모션 매칭 Motion Matching #1 - Motion Matching 의 기본 요소
    쾌락없는 책임 (공부)/Unreal 2025. 6. 28. 15:29
    반응형

    언리얼 공식 문서

    https://dev.epicgames.com/documentation/ko-kr/unreal-engine/motion-matching-in-unreal-engine
     

    개요

    언리얼 5에 오면서 많은 기능들이 모듈화 되고 변경되는 등 에픽에서 여러 시도들을 많이 하고 있습니다. 이중 애니메이션에 대한 부분도 빼놓을 수 없습니다. Motion Matching 같은 경우 개인적으로 사내에서 이야기가 나와 알게 되었으며 개인 프로젝트에서도 충분히 쓸 수 있겠다 싶어 개인적으로도 많이 보게 되었습니다. 모션 매칭을 넣으면서 사이드 프로젝트에서 진행하면서 배운 것들을 시리즈물로 적어보려 합니다.
     

    이번 이야기 간단 요약

    현재 포스트는 기본 요소만 소개를 할 것이라 아래 표만 간단하게 보고 넘어가도 좋습니다. 감이 있으신 분들은 바로 아실만한 요소들입니다.

     

    이름 약어 / 접두어 역할
    Pose Search Sechma PSS_ 애니메이션에서 어떠한 정보들을 가져올지 분류하는 데이터.
    루트모션을 기반으로 속도, 방향 등을 기록하며 이 기록들은 채널에서 이루어짐.
    Pose Search Database PSD_ 위 스키마를 바탕으로 애니메이션들을 모아 둔 데이터베이스.
    스키마에 따른 정보가 있다.
    Pose Search Normalization Set PSN_ 검색을 용이하게 하기 위한 세트

     

    모션 매칭이란

    모션 매칭은 기존 애니메이션과 다르게 플레이어의 속도, 본의 위치 등의 정보들을 바탕으로 애니메이션을 찾아내는(Matching) 새로운 방식이라 보면 됩니다. 예를 들어 기존 언리얼에서 달리기 애니메이션을 하기 위해서는 BlendSpace를 만들고 개발자가 캐릭터 속도를 계산한 뒤 Anim Blueprint에서 연결을 해 주어야 합니다. 대신 모션 매칭에서는 이것들을 전부 알아서 해주는 것이죠.
    물론 그냥 되는 것들은 아니고 이에 대한 대가로 모든 애니메이션은 루트모션이어야 한다는 조건이 생기게 됩니다.
    (모션 워핑도 그렇고 최근 들어 루트모션을 전제로 나오는 플러그인들이 많아지는 것 같습니다.)
     

    모션 매칭을 위해 만든 Pose Search Database. Database 가 뭔지는 이후 설명합니다.

     
    그러면 이런 모션 매칭을 사용하면 어떠한 장점들이 있는가. 여러 군데에서도 이야기를 하겠지만 저의 개인적인 생각을 이야기해 보면

    • (장점) 루트 모션을 기반으로 하기에 애니메이터 입장에서 더욱 의도되는 애니메이션을 만들기가 쉽습니다.
      • 물론 개발자인 저로써는 루트모션이 좋은 건지 알 수는 없습니다...
      • 단 루트모션으로 플레이어가 움직이는 느낌은 아닙니다. 추후 이야기 하는 다른 애님 노드들의 설명에서 다루겠습니다.
    • (장점) Anim Blueprint 가 간소화 됩니다. 이전과는 다르게 State 들을 제작할 필요 없이 추후 이야기할 테이블(Chooser Table)만 잘 조정하면 기본적인 애니메이션들에 대응이 가능합니다.
    • (장점) 추후 있을 Chooser Table과 함께 활용하면 애니메이션의 LOD를 적용하기 쉬워집니다.
    • (단점) 기존 애님 State 가 익숙하다면 Motion Matching 이 제한적이고 디버깅이 불편해 보일 수 있습니다.
      • 단 디버깅의 경우 추후 포스팅할 Rewind Debugger에 의해 상쇄되는 느낌이 있습니다.

     
    그러면 이런 모션 매칭을 구성하는 요소들에 대해서 짚고 넘어가겠습니다.
     

    모션 매칭을 위한 요소 - PSS, PSD, PSN

    모션 매칭은 애니메이션 데이터 세트에서 정보에 기반한 애니메이션 포즈를 선택...
    - Unreal 공식 문서

     
    공식 문서의 설명을 보았을 때 모션 매칭을 상상해 보면 애니메이션의 정보에 따라 애니메이션이 담긴 데이터 세트에서 애니메이션을 구해야 하는 것으로 보입니다.
     
    그러면 어떤 것들이 필요할지 예상할 수 있는데 '애니메이션을 정보화하는 요소', '애니메이션을 저장하는 데이터 세트'가 필요할 것입니다. 이들은 각각 Pose Search Schema, Pose Search Database입니다.
    (각 요소들의 약어가 PSS, PSD, PSN이라 헷갈릴 수 있습니다)
     

    PSS - Pose Search Schema

    Pose Search Schema(이하 스키마)는 애니메이션들을 어떻게 분류할지 정하는 방식을 의미합니다. 각종 하위 채널들을 통해 채널에서 전제한 연산을 바탕해 데이터베이스 내 애니메이션들을 분석하게 됩니다. 채널 같은 기본적인 요소들은 미리 준비되어 있으며 언리얼의 공식 독스를 읽는 것을 추천드립니다.

     


     저 같은 경우 언리얼 샘플을 기반으로 따라갔으며 Default, Idle, Jump, Stop 4가지의 스키마를 준비한 뒤 데이터 베이스 생성 시 적절하게 연결해 주었습니다.

     

     

    스키마 내부에서는 이런 채널들을 할당해 어떻게 애니메이션들을 분석할지 지정 가능합니다. 에픽의 샘플에서는 위 채널들을 거의 사용하였기에 해당 채널들에 대한 설명만 간단히 해보겠습니다.

    채널명 설명
    Trajectory Channel 이후 설명할 Trajectory 와 함께 사용되는 채널입니다.
    Group  Channel 해당 채널 자체로는 하는 일이 없으며 하위 채널들을 묶는 역할을 합니다.
    Position  Channel 다른 본을 기준으로 특정 본이 어느 위치에 있는지를 분석합니다. 주로 foot_l,r 을 비교해 발 방향을 결정하는데 사용합니다.
    Velocity  Channel 캐릭터의 현재 포즈, 지속 포즈를 기반으로 캐릭터, 월드 스페이스에서 속도를 계산합니다.
    Heading  Channel 애니메이션의 방향을 분석할 수 있습니다. 보통 Pelvis 를 기반으로 합니다.

     

    그 외 채널들도 있으며 상황에 따라 적절한 조합으로 가능할 것 같으나 저 같은 경우 현재 Locomotion에서만 주로 사용 중이라 그 외의 채널들의 경우 차차 공부해 나갈 예정입니다.

     

    PSD - Pose Search Database

    Pose Search Database(이하 데이터베이스)는 애니메이션들의 정보들을 저장해 두는 정보 객체라고 보면 됩니다. 관련해서 개발자는 PSD를 생성해 애니메이션을 끌어놓기만 하면 스키마에 따라 정보를 기록합니다. 즉, 데이터베이스 내 애니메이션들의 정보를 알기 위한 '스키마'가 필수적으로 필요하게 됩니다.

     

    에디터에서 우클릭 -> Animation -> Motion Matching -> Pose Search Database

     

    에디터에서 데이터베이스 생성 시 당연히 스키마를 지정해야 합니다. 이를 통해 데이터베이스를 만들기 전 적절한 스키마를 만들어둬야 한다는 걸 알 수 있습니다.
     
    단, 데이터베이스를 만든 뒤 스키마를 데이터베이스에서 제거가 가능한데 이 경우 에디터에서 오류들이 발생하게 되고 의도치 않게 크래쉬가 날 수 있으니 스키마는 계속 유지해야 합니다.
     
    스키마가 있다면 애니메이션을 넣었을 때 스키마에 따라 정보를 기록하게 됩니다. 애니메이션은 'Asset List'에 드래그 앤 드롭으로 넣을 수 있으며 애님 시퀀스 외 몽타주 등의 것들도 넣을 수 있습니다.

     

     
    위 사진과 같이 스키마에서 지정한 정보들이 기록이 됩니다. 해당 데이터베이스의 스키마는 Trajectory 채널, 그룹 채널 안에 Position, Position, Velocity, Heading 채널들을 가지고 있어 'Data Details' 패널에서 채널에 맞게 정보들이 기록되는 걸 확인할 수 있습니다.
     

    PSD 의 에디터 디테일 화면

     

    데이터베이스에 만들면 각종 변수들을 지정할 수 있습니다.
     

    변수명 설명
    Schema 해당 데이터베이스 내 애니메이션들을 분류할 방법에 대한 정의
     Continuing Pose Cost Bias 현재 선택된 애니메이션에 가중치를 줘 현재 재생중인 애니메이션을 더 선택하게 할지, 적게 선택하게 할지 가중치를 줍니다.
    음수로 줄 수록 현재 애니메이션이 유지될 가능성이 크며 양수일수록 변경될 확률이 커집니다.
     Base Cost Bias 현재 데이터베이스 내 모든 애니메이션들에 가중치를 주며 음수일수록 현재 데이터베이스의 애니메이션들이 더 잘 선택되고 양수일수록 적게 선택됩니다.
    이는 모션 매칭 시 여러 데이터베이스들을 바탕으로 할 수도 있으니 생긴 값으로 해당 데이터베이스가 더 많이 보이게 하고 싶다면 음수를 넣으면 됩니다,
     Looping Cost Bias 루핑 애니메이션들에 가중치를 줄 수 있습니다. 음수로 줄 수록 루핑 애니메이션이 선택될 가능성이 높고 양수일수록 적어진다고 합니다.
    에픽의 샘플들의 값이 높지 않아 값은 적게 유지하는게 좋아 보입니다.
     Exclude from Database Parameters 애니메이션의 첫/마지막 프레임중 어디까지 평가할 지 설정 가능합니다. 블랜딩을 시도할때 해당 부분을 제외하고 계산하게 됩니다.
     Additional Extrapolation Time 애니메이션 블랜딩 할 때 사용 가능한 값이며 애니메이션의 추가 시간을 주거나 값을 줄여 적게 나오게 할 수 있습니다.
    Tags Pivoting, Turning 등의 특수한 데이터베이스를 '사용중이다' 를 알고 싶다면 Tags 의 변수들로 구별이 가능하며 해당 태그들은 FGameplayTag 와는 관계가 없는 FName 변수입니다.
    Normalization Set PSN 을 지정할 수 있으며 필수가 아닙니다. 다만 지정하면 탐색 시 더 효율적이게 됩니다.

     

    PSN - Pose Search Normalization


    해당 에셋의 경우 필수적으로 들어가야 하는 요소가 아닙니다. 모션 매칭에서 데이터베이스를 찾을 시 빠르게 찾을 수 있도록 도와주는 요소라고 합니다. 다만 해당 부분들의 경우 어떠한 식으로 애니메이션을 빠르게 찾아주는지 파악해두지 못했고 에픽의 샘플인 Game Animation Sample에서도 단순히 애니메이션 데이터베이스들을 다 넣어두기만 하여 큰 참고를 하지는 못했습니다.

    추가적인 사용처가 파악되는 경우 글에 보충해 두도록 하겠습니다.

     

    애니메이션 블루프린트 세팅

    해당 시점 즈음 와서 애니메이션 블루프린트 세팅을 하여 기본적인 설정이 가능합니다. 아직은 Trajectory 등의 기능들을 활용하지 않으니 MotionMatching, PoseHistory 만 있으면 설정이 가능합니다.

     

    기본적인 모션 매칭 노드(좌) 와 현재 프로젝트에서 설정한 노드(우)

     

     

    제 프로젝트에서 사용한 모션 매칭 노드입니다. 해당 노드를 클릭하고 Detail에 보면 더 많은 정보들을 볼 수 있습니다. 사실 모션 매칭의 경우 진가는 '어떠한 애니메이션들을 바탕으로 모션 매칭을 시도할 것인가'가 진가이며 현재 당장 결과물을 보기 위해서는 'DataBase'에 기본 땅 PSD 들을 넣어두면 볼 수 있습니다.

    (자세한 이야기는 다음 글 - Chooser Table에서 다루겠습니다.)

     

     

     

    이후 나오는 애니메이션을 Pose History에 연결한 뒤 확인 가능합니다. Pose History 노드의 경우 모션 매칭을 더 용이하게 하기 위해 정보들을 기록해 두는 노드라고 보시면 됩니다.

     

    해당 시점 이후의 이야기

    기본적인 모션 매칭의 기능들은 위 작업만으로 가능합니다. 다만 실질적인 게임에서는 이보다 더 많은 경우의 수가 있습니다. 이것들을 보완하기 위해 여러 추가적인 것들을 알아야 하는데 요약하자면 탐색을 좀 더 용이하게 할 선택기 테이블(Chooser Table), 움직임을 더 예측하기 변하게 할 Trajectory, 편하게 디버깅할 수 있는 방법들 등… 여러 가지 알아야 할 것들이 있기에 해당하는 것들을 찬찬히 보고 제 생각들을 정리해 보겠습니다.

     

     

    참고 자료

    반응형

    댓글

Designed by Tistory.