Root Motion 이란?

루트 모션은 스켈레톤 Root 본의 애니메이션을 기준으로 하는 캐릭터의 동작을 말한다.

보통 게임 애니메이션에서 캐릭터의 콜리전은 컨트롤러가 씬을 통해 돌린다. 그리고 나서 캡슐에서의 데이터를 사용해서 애니메이션을 돌린다.

예를 들어 캐릭터의 콜리전을 담당하는 캡슐 모양의 콜리전 메쉬가 있다고 치자.

그 캡슐이 앞으로 이동중이면, 캐릭터가 자력으로 움직이는 것 처럼, 시스템에서 자동으로 달리기나 걷기 애니메이션을 재생시키도록 한다.

하지만, 이러한 동작들이 모든 상황에 항상 이상적인 것은 아니다. 복잡한 애니메이션으로 콜리전 캡슐을 돌리는 것은 가능해도, 그 반대는 가능하지 않은 경우가 있다. 이럴 때 바로 루트 모션처리가 핵심적인 역할을 한다.

예를 들어 특정한 메시 뒤에 붙어 플레이어가 뒷걸음질 치다 빠르게 앞으로 돌진하는 애니메이션을 재생할 때, 플레이어는 메시의 뒤로 사라지게 되어있다. 애니메이션이 끝나면 플레이어는 또 다시 원점으로 돌아오게 될것이다. 이러한 문제는 캡슐을 모든 계산에서 중심으로 사용하는 것으로 인해 발생된다.

이런 경우의 처리를 위해서는, 캐릭터의 루트 모션을 취한 다음 캐릭터의 캡슐에 변경점을 적용해줘야한다. 루트 모션은 결국 역동적인 좌표 이동을 애니메이터가 직접 제어 하기 위해 만들어졌고, 최상위 루트 노드의 위치 변화량을 캐릭터 월드 좌표에 곧 바로 반영해서 벽을 뚫고 가버린다던지 하는 이러한 문제를 해결하기 위한 방법이다.

루트모션이 없는 경우

루트모션이 있는 경우

루트모션 사용 방법

먼저 루트 모션을 사용할 캐릭터의 Bone Hierarchy (본 계층 구조)에서 최상단의 본의 이름이 Root 인지 확인하라.

Root 가 아닐 경우 루트모션이 전혀 동작하지 않으며, 이상한 형태로 보일 것이다.

캐릭터의 본 구조가 잘 되어있다면, 애니메이션 에디터를 켜서 애님 애셋 디테일 패널에서 EnableRootMotion을 켜주면 된다.

루트모션은 애니메이션 시퀀스별로 처리되며 애니메이션 시퀀스의 애샛 디테일 패널에서 켜고 끌 수 있다.

루트모션은 꺼진 상태에서는 캡슐에 아무런 데이터도 전송하지 않으니 애니메이션은 위치 값에 맞게 이동하고 있지만, Enable Root Motion 을 체크해 루트 모션을 사용할 경우에, 루트 모션은 이제 스켈레탈 메시의 root 본의 위치 값을 캡슐에 전송하기 때문에 제자리에 위의 영상처럼 멈춘다.

Force Root Lock

루트모션에 루트 락을 걸면 더이상 캡슐에게 root 본의 변화량을 전달하지 않게 되므로, 애니메이션만 두고 프로그래머나 기타 편집자들이 직접 애니메이션에 대한 연출을 진행해줄 수 있게 된다.

회전값, 위치 등등을 입맛에 맞게 바꿀 수 있게 되므로 특정 상황에서 매우 유용하게 쓰일 수 있다.

Root Motion Root Lock

루트 락을 거는 방법의 종류에는 3가지가 있다.

첫째로는 RefPose 이며, 스켈레탈 메시의 스켈레톤에서 가장 기본적인 포즈를 기준으로 하는 루트 본 데이터의 상대값으로 루트모션을 진행하는 방법이다.

두번째는 Anim First Frame은 Animation의 첫 프레임에서의 root 본 데이터값을 상대값으로 루트모션을 진행하는 방법이다.

세번째는 Zero 이며, 이는 곧 FTransform::Identity 와 같이 영점좌표를 기준으로 하게 되는 설정이다.