언리얼 - 모션매칭(Motion Matching)

안영욱·2025년 4월 28일
0

언리얼

목록 보기
9/9
post-thumbnail

언리얼 프로젝트를 진행하고 공부하면서 기억하면 좋을만한 내용들을 메모하였습니다.


[이글은 2024 언리얼패스트 모션 매칭 영상을 토대로 작성하였습니다.]

Youtube링크 : https://www.youtube.com/watch?v=MIhnv29csSQ
ppt링크 : https://epiclounge.co.kr/v3/contents/replay_view.php?idx=1325

모션 매칭(Motion Matching)이란?

모션 매칭은 실시간으로 상황에맞는 가장 적절한 포즈를 선택하는 시스템으로
매순간 캐릭터의 상태, 위치, 입력 등을 토대로 애니메니션 데이터 베이스에서 가장 적합한 포즈를 선택하게된다

기존에는 개발자가 하나하나 전환로직을 선택해야했으나
모션매칭에서는 복잡한 로직없이 자연스러운 애니메이션재생이되며
매칭과정이 매프레임 실시간으로 이루어져 자연스럽게 이전동작과의 연속성을 유지할수있다

포트나이트에서 100명의 플레이어와 NPC에 모션매칭을 지원하여 안정성이 실전사례로 검토되었다.

1. 모션 매칭의 기본 구성 요소

모션 매칭을 사용하기위해 기본적으로 필요한 요소들입니다.

1-1. 포즈 서치 스키마

포즈 서치 데이터 베이스와 쿼리 시스템을 모션 매칭에 연결하는데 사용하게된다.
애니메이션의 선택을위해 쿼리에 사용할 데이터를 정의하는 곳으로 생각하면된다.

위치, 속도, 방향들의 매칭을 위한 구성요소들을 채널에 정의를 해둔다 이후 채널들을 조합해 궤적이나 전체 포즈들을 매칭하게된다

예시속 채널들)

  • 궤적 채널 - 사용자의 입력에따라 0.7초뒤에 캐릭터가 어디에있을지를 예상 하거나 과거의 위치, 현재의 위치를 함께 설정할수있다
  • 포즈 채널 - 왼발과 오른발의 속도, 방향, 위치를 설정해두면 애니메이션 포즈별로 데이터베이스에 저장된다

런타임에서는 스키마 기준으로 실시간으로 정보를 수집해 모션 매칭이된다

채널간 가중치를 다르게 줄수있어 자연스러운 매칭을위해 수정할수 있다.


1-2. 포즈 서치 데이터 베이스

스키마 정보를 기반으로 데이타 정보 에셋을 만들고 애니메이션을 추가를 한뒤
각포즈들에서 정의한대로 데이터 베이스에 저장하게된다

(루트모션으로 작업된 애니메이션이 필요하다)

모션 매칭은 애니메이션이 어떤방향으로, 어떤속도로 움직이는지 모르기때문에 루트 모션으로 작업해야한다


1-3. 모션 매칭 노드 & 포즈 히스토리 노드

  • MotionMatching 노드 - 데이터 베이스에서 포즈를 검색하게된다.
  • Pose Histroy 노드 - 실시간으로 매칭할 쿼리 정보를 만들어준다.

2. 기초적인 모션 매칭 연결 가이드

유튜브 링크 : https://youtu.be/MIhnv29csSQ?si=EsbW4CHBTiWckXZw&t=469
7분49초부터 직접 시청을 권장


2-1. 단하나의 데이터베이스 vs 여러 개의 데이터베이스

하나의 데이터베이스에 모든 애니메이션 (대기, 달리기 등등)을 넣어서 작업하는 경우가 많다
하지만 특정시점에 특정애니메이션이 나왔으면하거나
특정 애니메이션 이 자연스럽게 나오길 바라여 스키마의 가중치 값을 수정했을때
다른 애니메이션이 이상해지는 딜레마에 빠질수 있기때문에

각 애니메이션을 동작별로 데이터베이스를 따로 만들어 사용하는것을 권장한다

데이터 베이스별로 스키마 설정도 따로 지정해줄수 있기때문에 다른 동작에 영향없이 가중치를 개별로 설정해 줄수있다.

그렇다면 어떤 애니메이션을 데이터베이스별로 나누는것이 좋을까?
언리얼에서 제공해주는 Game Animation Sample 프로젝트 에서 학습하는것이 좋다.


2-2. Game Animation Sample 프로젝트



유튜브 링크 : https://youtu.be/MIhnv29csSQ?si=TmoPmG1GvNPeLYsw&t=808
13분28초부터 시청하거나 프로젝트를 다운로드받아 실행보는것을 권장


2-3. 리와인드 디버거

유튜브 링크 : https://youtu.be/MIhnv29csSQ?si=6SqL8BQmy1MPAZGr&t=1043
17분24초부터 직접 시청 권장

샘플프로젝트에 어떤식으로 모션 매칭이 사용되고있는지에대해 설명하기전
리와인드 디버거 를 먼저 이해하고 넘어는것이 좋다.

툴 -> 디버그 -> 리와인드 디버거, 리와인드 디버거 디테일 2가지를 모두 체크해주어 사용한다

어떤 애니메이션들이 사용되고있는지 한눈에 볼수으며 이곳에서 문제가되는 애니메이션을 선택하여 볼수있다

이런식으로 애니메이션이 재생될때 어떤 애니메이션이 검색되어 사용되었는지 디버깅할수있는 강력한 도구이다.

애니메이션이 선택되는 기준은 비용이 가장 낮은 것을 선택하게된다.
비용을 측정하는기준은 현재 발의위치, 궤적정보 등등 여러가지 데이터의 오차들을 모은것으로
비용이 낮을수록 오차가적고 비용이 클수록 오차가 크다는것을 의미한다


2-4. 지속 포즈(Continuing Pose)

모션 매칭에서 지속포즈는 연속성과 자연스러운 애니메이션 연결을위한 핵심 메커니즘이다.
현재 재생중인 애니메이션을 유지함으로써 불필요한 전환을 줄일수있도록한다.

작동원리는 매프레임마다 현재 애니메이션이 다음 프레임에서도 적절한지를 평가하고
적합하다고 판단한다면 애니메이션을 지속한다
이과정에서 바이어스 값을 수정해주면서 실질 비용이 더낮아지도록 만들어주어 현재 포즈 유지확률이 높아진다.

  • 캐릭터의 움직임이 더 자연스러워진다
  • 컴퓨터의 계산량을 줄여준다 (매순간 새로운 동작을 찾을 필요가없어짐)

3. 애니메이션 블루프린트

애니메이션을 제어하는 블루프린트이며 캐릭터의 상태값을 가져와 알맞은 데이터 베이스를 참조하도록 설계할수있다


3-1. 선택기 테이블


선택기 평가 노드를 이용해 현재상태를 체크헤 데이터 베이스를 선택 해주는 노드이다


3-2. 인터럽트 모드

애니메이션이 전환될때 일정수준까지 재생후 넘어갈지, 즉시 다음 애니메이션으로 넘어갈지에대해 설정할수 있다


3-3. 모션 매칭과 함께 사용하는 애니메이션 노드*

모션매칭과 함께 사용하여 보다 자연스러운 애니메이션을 만들어주는 노드들이다.
모션매칭 하나만으로는 아직까진 한계가 있기때문에 이런식으로 복합적으로 사용한다.

단순 가산 기울임:

BS를 Addtive로 추가해주어 캐릭터 기울기를 준다 좌우 값에따라 조금씩 기울어지는 모습

마우스 방향에 따른 캐릭터 머리 회전 :

마우스의 방향값으로 캐릭터 의 머리가 회전하는 애니메이션으로 DeadBlend를 이용해 부드러운 블렌드를 보장한다 값에따른 캐릭터 머리의 회전

오프셋 루트 본 :

RootMotion은 캐릭터의 캡슐이동과 애니메이션 동작간의 불일치 를 교정해주는 노드이다

*이때 주의할점은 오프셋 노드에는 충돌검사가 없어 지오메트리와 겹칠수 있다고한다
자세한 내용은 예제의 Get_OffsetRootTotationMode 함수참조

간단한 다리 IK프로세스 :


다리의 방향을 맞추거나 경사도에 발의위치를 맞출때 사용할수 있는 노드이다.

오리엔 테이션 워핑:


캐릭터의 이동방향에 맞춰 발의 방향을 맞춰주는 보간 노드로 발이미끄러져 보이는것을 방지해준다

스티어링 노드:


캐릭터의 미래방향에 맞춰 빠르게 회전하도록 도와준다


4. 캐릭터 블루프린트

벽을넘는 파쿠르 동작들은 이곳에서 관리하게 된다
이때 재생되는 애니메이션은 몽타주를 사용하게된다

Try Traversal Action함수를 참고


4-1. Traversal 동작 분석

유튜브링크 : https://youtu.be/MIhnv29csSQ?si=ciuluDxxjpmmmmMc&t=2170
36분10초부터 시청 권장

모서리부분에 스플라인을용해 미리 세팅된 장애물에대해 파쿠르동작을 수행할수있다
점프키를 누른시점에서 장애물과의 거리, 높이, 깊이 착지지점까지 계산하여
모션매칭 노드에서 적절한 애니메이션을 검색하고 실행하도록 한다.


4-2. 포즈 서치 : 노티파이 스테이트

유튜브 링크 : https://youtu.be/MIhnv29csSQ?si=qpY7QfK3NMfoWzEU&t=2540
44분22초부터 시청 권장

노티파이 스테이트를 이용해 데이터베이스의 특정 구간만 제외시키거나
지속포즈를 계속 유지시킨다는 등 애니메이션의 일정 구간에 여러가지 목적을 주기위해 사용할수있고
샘플 프로젝트에서 몇가지 완성된 기능을 제공하고있다


마치며

모션 매칭에대해 정리해보았습니다 중간중간 노드를 들여다보고 플레이영상을 보며 설명하는 부분은
이미지를 나열하는것보단 영상을 직접 시청하는 편이 많이 도움이될것같아 도입부메모와 간단한 소개만 남겨두었습니다
모션 매칭을 적극적으로 사용하기에는 아직 한계가 있어보이기도 하지만 앞으로 개선될것으로 보입니다
간단한 애니메이션부터 프로젝트에 적용해보며 모션매핑을 사용하는 감을 익혀보아야 할것같습니다.

끝으로 발표해주신 언리얼 테크니컬 아티스트 박성제님께 감사드립니다.

profile
개발자좀 한번해보자

0개의 댓글