Animation Retargeting 이란?

애니메이션 리타기팅은 같은 스켈레톤 애셋을 공유하거나 비율이 크게 다른 캐릭터간에 애니메이션을 재사용할 수 있도록 해 주는 기능이다.

리타기팅을 통해 애니메이션이 적용될 소켈레톤에 모양이 다른 캐릭터의 애니메이션을 사용할 경우, 일부분이 손실되거나 불필요하게 변형되지 않도록 할 수 있다.

다른 스켈레톤을 사용하는 캐릭터끼리도 특정 조건 하에 애니메이션을 공유할 수 있다.

비슷한 본 계층구조를 공유하고, 한 스켈레톤에서 다른 스켈레톤으로 애니메이션 데이터를 전달하는 데 쓰이는 리그(Rig) 라는 공유 애셋을 사용해야한다.

애니메이션 리타겟팅을 사용하는 이유

모두 다 같은 인간형 캐릭터이지만, 크기와 모양이 달라 공유하기 힘든 세가지의 캐릭터가 있다고 치자.

각각, 표준 캐릭터, 작고 뚱뚱한 캐릭터, 크고 홀쭉한 캐릭터 라고 칭하겠다.

리타겟팅을 하지 않은 경우

같은 스켈레톤 애셋을 공유하는 스켈레탈 메시들은 같은 애니메이션을 사용할 수 있다.

표준 캐릭터의 애니메이션을 모두에게 넣어 사용할 경우, 둘 다 표준 캐릭터의 스켈레탈 메시 기준에 맞추다보니 작은 캐릭터는 늘어나고, 큰 캐릭터는 줄어들었다.

위처럼 비율이 다른 경우에 아주 보기 흉하다. 절대로 저렇게 그대로 사용하면 안된다.

리타겟팅을 진행한 경우

리타겟팅을 적용했더니, 리타겟팅용 방정식을 통해 비율 차이가 계산되어, 캐릭터의 애니메이션들이 제대로 플레이된다.

리타겟팅되기 전의 소스 애니메이션과의 차이를 보고싶다면, 뷰포트 옵션에서 표시 -> 리타겟팅되지않은 애니메이션을 체크하면 된다.

갈록색인 원래 스켈레톤과, 흰색으로 표시되는 리타겟팅된 스켈레톤의 차이가 확연히 보이게 된다.

애니메이션 리타겟팅 사용해보기

리타겟팅을 한 번 사용해 보도록 하겠다.

나는 인피니티 블레이드 게임에서 Warrior 라는 캐릭터를 가져와 충성충성 ^^7 하는 애니메이션을 리타겟팅 해보겠다.

아래가 기본적인 충성 애니메이션이다.

Warrior 캐릭터는 이미 언리얼 마네킹과 거의 비슷한 본 구조를 갖고있어 특별히 무언가 더 해줄 필요 없이 그냥 사용할 수 있지만, 정석대로 해보겠다.

먼저 Warrior의 스켈레탈 메시를 찾아 열어준다.

상단에 있는 툴바에서 리타깃 매니저를 눌러 리타깃 매니저창을 켠다.

리타깃 매니저가 켜지면 왼쪽 아래에 릭 셋업에서 기본 카테고리에 있는 인간형 릭을 선택한다.

그럼 언리얼 마네킹처럼 인간형 본 구조가 소스 스켈레톤 구조에 어느정도 맞춰 적용된다. 이대로 저장을 하면 되는데, 추후에 이상하다면 본을 일일히 직접 수정하던가 해야한다. 그 부분은 엄청난 고통이므로… 가능하면 비슷한 캐릭터의 경우 이대로 안된다면 자동 매핑버튼을 한 번 눌러보고 그래도 이상하면 그때부터 수동 본 리타겟팅 작업을 하길 바란다.

인간형 릭이 설정되었다면 저장한다. 그리고 원본 캐릭터도 동일한 인간형 릭을 선택해 저장해준다.

이 리타겟팅은 스켈레톤의 원본 소스를 전혀 바꾸지 않는다. 그저 리타겟팅을 편하게 하기 위한 인터페이스를 설정하는 것이라고 보면 된다.

이제 리타게팅 준비가 끝났다. 리타겟팅 하고싶은 애니메이션을 오른쪽 클릭해 애님 애셋 리타깃-> 애님 애셋 복제후 리타겟 버튼을 눌러서 리타겟팅을 진행하면된다.

리타게팅용 릭을 맞춘 SK_Mannequine_Skeleton이 보인다. 선택 후 리타깃 버튼을 눌러주면된다.

누름과 동시에 새로운 애니메이션이 생겨나고, 드디어 리타깃된 애니메이션을 볼 수 있게되었다.

비교 시연을 위해 나는 Skeletal Mesh Actor를 사용하겠다.

씬에 적당히 배치를 한 뒤 스켈레탈 메시를 골라준다. 원본 스켈레탈 메시와, 리타깃된 스켈레탈 메시를 가져와 총 2개를 마련해 보여주겠다.

스켈레탈 메시를 고르고 Animation Mode를 Use Animation Asset을 고른다.

두 캐릭터 모두 설정을 끝내 씬에 배치가 끝났다.

결과물

충성!

리타겟팅 작동 원리

애니메이션은 스켈레톤 애셋에 바인딩된다.

스켈레톤 애셋은 그저 본 이름과 계층구조 데이터로 된 리스트일 뿐이지만, 스켈레톤 애셋의 정의에 사용되는 원본 스켈레탈 메시의 초기 비율도 저장한다.

참고로, 중요한 내용은, 리타겟팅 시스템에서 타겟을 새로 잡는 것은 본의 트랜슬레이션 컴포넌트 뿐이다. 본의 로테이션은 항상 애니메이션 데이터에서 온다.

스켈레톤 애셋의 비율을 정의하는 데는 원본 스켈레탈 메시가 사용되기때문에, 그 스켈레톤 애셋을 사용하면서 비율이 다른 스켈레탈 메시는 리타겟팅을 해줘야 정상적으로 작동된다.

그렇지 않고서는 비율이 다른 스켈레탈 메시가 원본 메시의 트랜슬레이션 데이터를 사용하려 할 것이고, 글 초기에 본 것 같은 유형의 오류가 발생할 것이다.

이 문제를 해결하기 위해서, 스켈레톤 에디터의 스켈레톤 트리에는 본 사이의 트랜슬레이션 리타기팅 처리 방식을 바꾸기 위한 세팅이 몇가지 제공된다.

사용하기전 스켈레톤 트리 아래에 있는 옵션 메뉴에서 리타기팅 옵션 표시를 체크해줘야한다.

본 트랜슬레이션 리타기팅용 세팅은 세가지이다.

  • 애니메이션 – 본 트랜슬레이션은 애니메이션 데이터에서 오며, 변경되지 않는다.
  • 스켈레톤 – 본 트랜슬레이션은 타깃 스켈레톤의 바인드 포즈에서 온다.
  • 스케일적용 애니메이션 – 본 트랜슬레이션은 애니메이션 데이터에서 오나, 스켈레톤의 비율대로 스케일을 조절한다. 그 비율은, (애니메이션을 재생하고 있는) 타깃 스켈레톤과 (애니메이션 저작의 기반이 된) 원본 스켈레톤의 본 길이 비율이다.

애니메이션 리타기팅이 된 애니메이션과 되지 않은 애니메이션을 사용하는 데 있어서 큰 퍼포먼스 차이는 없다.

애니메이션 리타기팅의 장점은, 고유 캐릭터가 여럿 있는 경우에도 별도의 애니메이션을 완전히 새로 만들 필요가 없어 애니메이션 메모리 사용을 크게 줄일 수 있다는 점이다.

같은 스켈레톤 애셋을 공유하지 않는 캐릭터의 애니메이션 리타기팅 처리 프로세스에는, 한 스켈레톤에서 다른 스켈레톤으로 애니메이션 데이터를 전달하는 데 쓰이는 특수 애셋 릭 을 할당하는 작업이 필요하다.

각 캐릭터에 할당된 스켈레톤 애셋은 공유된 릭 애셋을 활용하여 소스에서 의도된 타깃으로 데이터를 올바르게 전송한다.

릭 할당은 스켈레톤 에디터 의 리타깃 매니저 에서 하며, 같은 릭을 양쪽 스켈레톤 애셋에 할당해야 한다.

더 자세한 정보는 공식 문서에서 확인하면 된다.

https://api.unrealengine.com/KOR/Engine/Animation/AnimationRetargeting/index.html