루트 모션

언리얼 엔진 4 에서 루트 기반 애니메이션을 처리하는 방식을 살펴봅니다.

Choose your operating system:

Windows

macOS

Linux

보통 게임 애니메이션에서 캐릭터의 콜리전 캡슐(이나 다른 모양)은 컨트롤러가 씬을 통해 돌립니다. 그리고서 이 캡슐에서의 데이터를 사용해서 애니메이션을 돌립니다. 예를 들어 캡슐이 앞으로 이동중이라면, 캐릭터가 자력으로 움직이고 있구나 하는 모양새를 내기 위해 시스템이 자동으로 달리기나 걷기 애니메이션을 캐릭터에 재생시키는 것입니다. 그러나 이러한 동작이 모든 상황에 항상 이상적인 것은 아닙니다. 복잡한 애니메이션으로 콜리전 캡슐을 돌리는 것은 되도 그 반대는 되지 않는 경우가 있을 수 있습니다. 이럴 때 바로 루트 모션 처리가 핵심적인 역할을 합니다.

예를 들어 메시가 전방 돌진 사전 애니메이션 상태에서 플레이어의 특수 공격을 생각해 봅시다. 모든 캐릭터 모션이 플레이어 캡슐을 기반으로 했다면, 그러한 애니메이션은 캐릭터가 캡슐 밖으로 발을 내딛게 만들 것이고, 사실상 콜리전을 잃게 됩니다. 애니메이션 재생이 완료되면 플레이어는 콜리전 위치로 미끄러져 돌아갈 테지요. 이때 보통 모든 계산에서 중심으로 사용되는 것은 캡슐이기에 문제가 됩니다. 캡슐 밖의 캐릭터는 지오메트리를 뚫고 지나갈 것이고, 배경에 대한 반응이 적절히 이루어지지 않을 것입니다. 게다가 애니메이션 종료시 원래 캡슐로 미끄러져 돌아가는 것도 비현실적입니다.

이 개념이 처음이신 분들은 올바른 루트 모션이 왜 그리 중요한지, 설명을 읽는 것만으로는 그리 와닿지 않을 것입니다. 아래는 전방 돌격 후 해머를 내려치는 사전 애니메이션 공격을 하는 캐릭터입니다. 여기서 캐릭터의 전방 이동 애니메이션은 게임에서 처리되는 것이 아니라, 애니메이션 아티스트가 생성한 것입니다.

루트 모션 또다른 예제는 애니메이션 콘텐츠 예제 문서의 1.9 섹션에서 찾아볼 수 있습니다.

루트 모션이란?

간단히 말해 루트 모션이란, 스켈레톤의 루트 본의 애니메이션을 기준으로 하는 캐릭터의 동작을 말합니다. 대부분의 게임내 애니메이션은 캐릭터 루트의 정지 상태를 유지하는 사이클을 통해 처리됩니다. 그렇다고 위의 예제에서 볼 수 있듯이 항상 그런 것은 아닙니다. 이러한 경우의 처리를 위해서는, 캐릭터에서 루트의 모션을 취한 다음 캐릭터의 캡슐에 대신 적용해 줘야 합니다. UE4 에서 루트 모션이 하는 일의 정수가 그것입니다.

루트 모션을 제대로 사용하기 위해 중요한 점 한 가지는, 캐릭터의 루트 본이 (회전 없이 0,0,0 의) 원점에 있어야 하는데, 그래야 시스템이 애니메이션 적용 동작(캐릭터)에서 물리적 운동(캡슐)을 분리해 낼 수 있기 때문입니다.

애니메이션의 루트 모션은 재생 도중 시각화시켜 볼 수 있습니다. 루트 본이 움직이는 아무 애니메이션이나 열고, 뷰포트에서 표시 > 본 을 선택합니다. 애니메이션 프로퍼티에서 'Enable Root Motion' 으로 루트 모션을 활성화시키지 않은 경우, 캐릭터의 루트가 움직임에 따라 빨강 선이 표시되는 것을 볼 수 있습니다. 이 선이 애니메이션의 루트 모션을 나타냅니다.

RootMotionBone.png

루트 모션을 활성화시키면, 빨강 선이 사라집니다. 그 대신 캐릭터가 제자리에서 움직입니다. 그 이유는, 캐릭터의 루트는 더이상 그 원래 위치에서 움직이지 않기 때문입니다. 이 그림에서는 캐릭터의 루트 모션을 켜 두었습니다. 위 그림과 같은 프레임에 있는데도 캐릭터의 위치는 그대로인 것을 볼 수 있습니다.

RootMotionAppliedBone.png

자, 이게 무슨 뜻일까요? 시스템이 캐릭터 애니메이션의 루트 모션을 계산에 넣게 되었으니, 이제 같은 모션을 캐릭터의 콜리전 캡슐에 재적용할 수 있게 된 것입니다. 즉 애니메이터가 의도한 모션 그대로를 유지할 수 있으나, 게임내 콜리전이나 기타 물리 및 게임플레이 이벤트에도 제대로 반응할 수 있다는 뜻입니다 ( 루트 모션 문서를 참고하세요).

루트 모션 켜기

루트 모션은 애니메이션 시퀀스 에 대한 애니메이션 에디터 애님 애셋 디테일 패널에서 켤 수 있습니다.

RootMotion_AssetDetailsOptions.png

루트 모션은 애니메이션 시퀀스별로 처리되며 애니메이션 시퀀스의 애셋 디테일 패널에서 켜고 끌 수 있습니다. 네트워크 게임의 경우, 루트 모션은 애니메이션 몽타주를 사용해야 하는데, 아래 몽타주에서만 루트 모션 부분을 참고하세요.

프로퍼티

설명

EnableRootMotion

루트 모션 활성화 - 이 옵션을 켜면 루트 모션 추출을 허용합니다.

Root Motion Root Lock

루트 모션 루트 잠금 - 루트 모션을 추출할 때 루트 본을 그 위치에 잠급니다 ( Ref Pose : 레퍼런스 포즈의 루트 본 위치 사용, Anim First Frame : 애니메이션 첫 프레임의 루트 본 위치 사용, Zero : 0 프레임의 루트 본 위치 사용).

Force Root Lock

루트 강제 잠금 - 루트 모션이 활성화되지 않아도 루트 본을 강제로 잠글지 여부입니다.

Use Normalized Root Motion Scale

정규화된 루트 본 스케일 사용 - 활성화하면 추출되는 루트 모션에 정규화된 스케일 값을 사용합니다. FVector(1.0, 1.0, 1.0).

루트 모션이 켜졌는지를 정의하는 부분은 애니메이션 시퀀스 안에서 이루어지지지만, 그 시퀀스의 처리 방식은 여전히 애니메이션 블루프린트 안에서 해야 합니다. 애니메이션 블루프린트 안에서 루트 모션을 처리하는 방법은 여러가지 있습니다. 애님 블루프린트 에디터 디테일 패널에서 Root Motion Mode (루트 모션 모드) 드롭다운 메뉴를 통해 정의할 수 있습니다.

RootMotionMode.png

옵션은 다음과 같습니다.

프로퍼티

설명

No Root Motion Extraction

루트 모션 추출 없음 - 루트 모션은 그대로 놔둡니다 (루트 본에 적용됩니다).

Ignore Root Motion

루트 모션 무시 - 루트 모션을 추출(하고 루트 본에서 제거)하지만, 캐릭터에 적용되지는 않습니다.

Root Motion from Everything

모든 것에서 루트 모션 - 아래 참고.

Root Motion from Montages Only

몽타주에서만 루트 모션 - 아래 참고.

모든 것에서 루트 모션

루트 모션 모드로 이 옵션이 설정되면, 최종 캐릭터 포즈에 기여하는 각 애니메이션 애셋(애님 시퀀스, 블렌드스페이스, 애님 몽타주 등)은 (루트 모션을 포함한 것으로 설정된 경우) 그 루트 모션이 추출됩니다. 추출된 루트 모션 각 조각은 포즈에 기여하는 소스 애셋의 가중치에 따라 블렌딩됩니다.

예:

FromEverything.png

위 그림에서 Jog_Loop_Fwd_RM Jog_Loop_Right_RM 의 루트 모션은 각각 0.5 의 가중치로 블렌딩될 것입니다. 이 경우 결과 애니메이션은 맵을 우전방 대각선으로 가로질러 뛰어가는 캐릭터가 될 것입니다.

몽타주에서만 루트 모션

이 메서드는 기능적으로 더욱 많이 제한되어 있는 네트워크 게임용입니다. 제한되지 않은 상황에는 Root Motion from Everything (모든 것에서 루트 모션) 을 쓰는 것이 맞으므로, 이 옵션은 네트워크를 통해 애니메이션이 리플리케이트되지 않는 게임에서만 사용하는 것이 좋습니다.

실제의 루트 모션

아래는 루트 모션 처리를 하지 않았을 때의 문제점과, 애니메이션에 루트 모션이 있을 때의 장점에 대한 분석입니다.

루트 모션 없이

루트 모션이 없으면 (아래와 같은) 공격 애니메이션은 캐릭터를 캡슐에서 멀리 끌어가 버립니다. 그랬다가 캡슐 위치로 끌려오는 휙 끌려오는 것도 보입니다. 이런 일이 발생하는 이유는, 애니메이션 재생이 완료되면 캐릭터 컨트롤러는 캐릭터를 원래 위치로 끌어오기 때문입니다.

캡슐 분리가 나쁜 이유

이 경우에서 해결해야할 문제는 끌려오는 문제뿐만이 아닙니다. 캐릭터가 콜리전 모양을 벗어나고 있기 때문에, 월드 오브젝트를 뚫고 지나가면서 전체적인 연속성을 깨뜨릴 것입니다. 이 예제에서는 캐릭터의 공격 동작이 벽을 뚫고 지나갔다가 되돌아 오는 것을 볼 수 있습니다.

루트 모션이 문제 해결

애니메이션이 루트 모션을 활용하도록 설정하고 나면, 애니메이터가 임시로 구성한 동작이 캡슐의 포스를 돌려주게 됩니다. 이를 통해 애니메이션이 끝나는 지점에서부터 재생을 계속할 수 있습니다. 두 번째로 공격 명령을 내릴 때, 새 위치에서 시작되는 것을 볼 수 있습니다. 물론 카메라를 벗어나지 않도록 먼저 방향을 틀도록 했습니다.

루트 모션과 피직스

캡슐이 따라온다는 것은, 피직스 콜리전을 계속 사용할 수 있으므로 캐릭터가 벽을 뚫고 지나가는 문제를 해결할 수 있을 뿐만 아니라, 캐릭터를 캡슐 위치로 끌어맞춰야 하는 문제도 경감시킬 수 있다는 뜻입니다. 아래 그림에서 애니메이션은 루트 모션을 사용하고 있어서 캡슐이 따라오고, 그로 인해 캐릭터가 벽을 뚫고 지나가지 않고 제대로 충돌하고 있습니다.

캐릭터의 굽히는 애니메이션이 어느정도 벽을 관통하고 있으니 완벽한 것은 아니지 않나 싶어 보일겁니다. 그래도 그런 문제는 벽이나 캐릭터의 콜리전 볼륨 작업을 해 주면 되는 문제이니 쉽게 해결할 수 있습니다. 중요한 점은 캡슐이 모션에 따라붙으므로 캐릭터가 벽을 통과해 지나가거나 끌어붙일 필요가 없다는 점입니다.

루트 모션 도중 캐릭터의 피직스 상태가 고려됩니다. 예를 들어 캐릭터의 피직스가 Walking 또는 Falling 인 경우, 루트 모션의 Z 축은 무시되고 중력이 적용됩니다. 캐릭터는 떨어지거나 경사면을 미끄러지거나 계단을 오르게 됩니다. 캐릭터 피직스가 Flying 인 경우, 루트 모션이 통으로 적용되고, 중력은 무시됩니다.

언리얼 엔진 문서의 미래를 함께 만들어주세요! 더 나은 서비스를 제공할 수 있도록 문서 사용에 대한 피드백을 주세요.
설문조사에 참여해 주세요
건너뛰기