2014년 4월 10일

UE4 의 애니메이션 리타게팅 소개

저자: * Laurent Delayen

애니메이션 리타게팅이 무엇인지, 그리고 그 사용법은 어떻게 되는지 간단히 얘기해 보겠습니다.

애니메이션 리타게팅은 특정 캐릭터에 대해 만들어진 애니메이션을 재생하고, 비율이 다른 캐릭터에서도 재생할 수 있는 기능입니다.

어떻게 작동하나요?

모든 애니메이션 애셋은 스켈레톤에 바인딩되며, 스켈레톤에서 각 본의 리타게팅 방법을 정의합니다. 이는 매우 중요한데, 리타게팅은 같은 스켈레톤 애셋을 공유하는 스켈레탈 메시끼리만 작동하기 때문입니다!

리타게팅은 본의 '트랜슬레이션' 컴포넌트에 대해서만 이뤄집니다. 본의 로테이션은 항상 애니메이션 데이터에서 옵니다.

본 트랜슬레이션 리타게팅에는 세 가지 세팅이 있습니다:

  • 스켈레톤: 본 트랜슬레이션이 타겟 스켈레탈 메시의 바인드 포즈에서 옵니다.
  • 애니메이션: 본 트랜슬레이션이 애니메이션 데이터에서, 불변 상태로 옵니다.
  • 애니메이션 스케일: 본 트랜슬레이션은 애니메이션 데이터에서 오지만, 스켈레톤의 비율에 따라 그 길이에 스케일을 적용합니다. 이는 타겟 스켈레탈 메시(애니메이션이 재생되고 있는 스켈레톤)와 소스 스켈레탈 메시(애니메이션 제작 기준이 되었던 스켈레톤)의 본 길이 사이의 비율입니다.

그 세팅은 페르소나의 스켈레톤 트리 창에서 설정합니다:

Skeleton Tree

전형적으로 바이페드에 그 세팅을 사용하는 것이 좋습니다:

  • 루트 본, IK 본, 웨폰 본, 마커 유형은 불변 상태로 오도록 "애니메이션" 을 사용합니다.
  • Pelvis (골반)은 "애니메이션 스케일"을 사용하여 애니메이션 중에도 올바른 높이에 오도록 합니다. 그리고 트랜슬레이션의 애니메이션 & 리타게팅도 필요한 다른 본도 마찬가지입니다.
  • 다른 모든 본은 "스켈레톤"을 사용합니다. 타겟 스켈레톤(애니메이션이 재생되고 있는 스켈레탈 메시)에서의 고정된 트랜슬레이션을 사용합니다.

뷰포트의 "표시" 메뉴에서 "NonRetargeted Animation" (리타게팅되지 않은 애니메이션)과 "Bones" (본)을 체크하면 원본과 리타게팅된 애니메이션을 비교할 수 있습니다.

NonRetargeted Animation

이 시각화는 하나의 애셋에서, 그리고 애니메이션 블루프린트에서도 작동합니다.

Original Animation | Retargeted Animation

엔드 이펙터는 리타게팅으로 어떻게 처리될까요? 예를 들어, 키가 더 큰 캐릭터는 더욱 빨리 달리는데, 그래도 같은 비율이 유지될까요?

자동으로 일어나는 작업은 없습니다. 어떤 작업을 하고픈지는 사용자의 결정에 달린 일입니다.

저희는 보통 원본 애니메이션에서 손에 딸린 본 체인을 별도로 두는 것입니다. "Hand IK Bones" 라는 것으로요. 몸통과 팔은 리타게팅 하지만, 그 "Hand IK Bones" 는 하지 않기에 리타게팅 이후에도 동일하게 남습니다. 이런 방식으로 비율이 다른 캐릭터에도 (라이플 재장전 등의 경우) 같은 비율이 유지되는 캐릭터가 가능합니다.

별도의 본 체인을 두면 필요할 때 FK 와 IK 사이의 부드러운 전환을 쉽게 할 수 있습니다 (무기 재장전시에는 Hand IK 를 켜 뒀다가, 주머니의 탄창으로 손을 뻗을 때는 끕니다).

내부적으로 사용하는 시스템은 사실 그보다는 약간 더 복잡한데, 가끔씩 왼손만 오른손의 IK 가 되기를 원하는 반면, 오른손은 그 FK 위치와 IK 회전을 사용하기를 원하기 때문입니다. 이 부분은 별개의 블로그 포스트로 다뤄야 할 부분이겠네요! 아무튼 그런 시스템이 유연하고 정말이지 원하는 만큼 단순하게도 복잡하게도 만들 수 있다는 개념은 잡으셨을 것입니다.

발의 처리도 가끔은 그렇게, 가끔은 다르게도 합니다. 여기서도 본 체인을 두면 어느 시점에서도 FK 와 IK 사이의 전환을 매우 쉽게 할 수 있습니다. 매우 정교한 배경에 발을 딛을 때는 IK 를 켜는 것이 좋겠고, 그냥 뛰어다닐 때는 FK 를 사용하여 () 또는 )( 다리 캐릭터가 되지 않도록 하는 것이 좋습니다.

이것이 퍼포먼스에 어떤 영향을 끼치나요?

애니메이션의 리타게팅 여부는 퍼포먼스에 심각한 차이가 있지 않습니다. 애니메이션 리타게팅 사용의 장점은 전용 애니메이션 세트를 완전히 새로 만들지 않고도 고유 캐릭터 수를 늘릴 수 있다는 데 있습니다. 즉 애니메이션 메모리 예산을 크게 줄일 수 있는 것입니다.

다른 캐릭터용으로 제작된 애니메이션을 섞어 일치시킬 수 있나요?

예, 물론이지요! 애니메이션 저작에 사용되었던 스켈레탈 메시의 바인드 포즈 "리타겟 소스"를 호출합니다. 기본적으로 스켈레톤 애셋은 하나의 기본 "리타겟 소스" (생성되었던 원본 스켈레탈 메시)를 저장합니다.

그러나 키가 큰 캐릭터와 작은 캐릭터가 있다고 칩시다. 어느 애니메이션이 작은 캐릭터를 가지고 저작되었고, 어느 것이 큰 것을 가지고 저작되었는지 알 수 있었으면 할 것입니다. 그런 식으로 엔진은 그 애니메이션을 타겟 스켈레탈 메시에 리타게팅하는 방법을 압니다.

그 작업을 위해 페르소나의 스켈레톤 탭에 "리타겟 소스 매니저"가 있습니다. 우클릭하면 "리타겟 소스"를 새로 추가할 수 있습니다.

Retarget Source

다양한 비율의 캐릭터상에 저작된 애니메이션을 임포트하는 데 사용되는 "리타겟 소스" 전부를 여기에 저장하고 관리하게 됩니다.

그러한 애니메이션을 임포트하고난 후, 프로퍼티에서 그 애니메이션 제작 기준이 된 "리타겟 소스"를 설정합니다.

Animation Asset Details

참고로 이런 걱정을 할 필요는 비율이 다른 캐릭터에 저작된 애니메이션을 합쳐 일치시키려는 경우에나 있습니다. 모든 소스 데이터가 하나의 스켈레탈 메시에서 나오는 경우, 그 스켈레톤 애셋에는 그 "리타겟 소스"가 기본으로 저장됩니다.

다른 캐릭터에 애니메이션을 리타게팅 및 공유하는 법에 대한 간단한 개요가 되었으면 좋겠습니다! 질문이 있으시거나 그냥 잡담이라도, 저희 포럼(영문)이나 네이버 카페에 들러 주시기 바랍니다!