개요
보통의 게임제작에서 애니메이션은 캐릭터의 모양새를 내기 위해 단순히 캐릭터에 입혀 재생시키는 것이지, 물리적인 움직임에 관여할 수 없다. 조금 기술적으로 말해보면 대부분의 애니메이션은 캐릭터 루트의 정지 상태를 유지하는 사이클을 통해 처리된다. 하지만 일부 애니메이션의 경우 캐릭터의 이동이 포함되어 있고, 그렇게 되면 플레이어 콜라이더 캡슐 밖으로 캐릭터가 벗어나고 애니메이션이 끝나면 부자연스럽게 돌아오는 문제가 발생하게 된다. 이를 해결하기 위해 주목해봐야 할 것이 바로 루트모션이다.
루트모션이란?
그렇다면 '루트 모션'이란 무엇일까? 간단히 말해 스켈레톤의 루트 본(root born)의 애니메이션을 기준으로 하는 캐릭터의 동작을 말한다. 위와 같은 경우의 처리를 위해서 캐릭터에서 루트의 모션을 취한 다음 캐릭터의 캡슐에 대신 적용해주는 것이다. 여기서 한 가지 주의할 점은 루트 모션을 제대로 사용하기 위해, 캐릭터의 루트 본이 회전 없는 원점(0,0,0)에 있어야 한다는 것이다. 그래야 시스템이 애니메이션 적용 동작(캐릭터)에서 물리적인 움직임(콜라이더)를 분리해 낼 수 있기 때문이다.
설정하기
아직까진 루트 모션에 대해 이해가 잘 되지 않을 수 있다. 이번엔 직접 에디터에서 시각화시켜 확인해보자. 위의 문제가 발생하는 (루트 본이 움직이는) 아무 애니메이션이나 열고, 뷰포트에서 '표시>본'을 선택한다. 버전이 다르다면 '캐릭터>본 그리기>모든계층구조'에서 찾아보자. 애니메이션 프로퍼티에서 'Enable Root Motion'으로 루트 모션을 활성화시키지 않은 경우, 캐릭터의 루트가 움직임에 따라 아래 사진처럼 빨강 선이 표시되는 것을 볼 수 있다. 이 선이 바로 애니메이션의 루트 모션을 나타낸다.
Enable Root Motion을 활성화시키면, 빨강 선이 사라지고 캐릭터가 제자리에서 움직인다. 그 이유는, 캐릭터의 루트는 원래 위치에서 움직이지 않기 때문이다. 좀 더 내부적으로 살펴보면, 언리얼의 루트모션 시스템이 캐릭터 애니메이션의 루트 모션을 계산에 넣게 되면서 이제 같은 모션을 캐릭터의 콜리전 캡슐에 재적용할 수 있게 된 것이다.
루트 모션과 관련된 프로퍼티의 세부 설명은 다음 사진을 참고하자.
문제점
언리얼에서 만들어놓은 저 편리한기능은 Mixamo와 호환되지 않는다. 왜냐하면 Mixamo의 Root는 엉덩이쪽이고 언리얼의 모델들의 Root는 발끝이기 때문이다. Mixamo로 받은 애니메이션에 RootMotion을 적용하면 걷기같은 단순한 동작이야 잘 티가 안나지만 구르기, 점프공격 등 루트의 Z값이 움직이는 모션에선 아주 난리가 난다. 이를 해결하는 방법은 여러가지가 있겠지만 당신이 귀찮음을 감수할 수 있다면 블랜더와 플러그인을 깔아서 Mixamo의 스켈레톤에 root를 발끝으로 씌워주는 것이 제일 현명한 선택이다. 방법은 이분 블로그를 참고하자.
다시한번 분업의 중요성을 깨닫는 순간이다. 졸작마감이 얼마남지 않은 시점에서 당장 보스 AI 짜기도 머리터지는데 애니메이션때문에 고생해야한다니 멘탈이 나갈것같다.
'UE4' 카테고리의 다른 글
[UE4] Behavior Tree (0) | 2023.04.12 |
---|---|
[UE4] Mixamo 애니메이션 리타겟(Retarget) (0) | 2023.04.09 |
[UE4] 상태패턴으로 캐릭터 효율적 관리 구상해보기 (0) | 2023.04.05 |
[UE4] 클래스 이름 변경하는 방법 (0) | 2023.04.05 |
[UE4] UIOnly InputMode에서 Key Input 허용하는 방법 (3) | 2023.03.31 |