페이셜 애니메이션 공유하기

포즈 에셋, 애니메이션 블루프린트, 애님 커브를 사용하여 페이셜 애니메이션을 공유하는 방법을 설명합니다.

Choose your operating system:

Windows

macOS

Linux

FacialAnimationSharing.png

프로젝트에 유사한 캐릭터가 여러 명 있고 모두 같은 스켈레톤 에셋을 사용하고 있다면 얼굴 표정에 커브 기반 애니메이션을 사용하는 것이 좋습니다. 그렇게 하면 애니메이션 커브를 공유하고 포즈 에셋으로 구동하여 원하는 얼굴 표정을 만들고 여러 스켈레탈 메시에 공유할 수도 있습니다. 

그러나 주의할 점은 애니메이션 안에 본 트랜스폼 데이터가 없어야 한다는 점입니다. 본 트랜스폼 데이터는 메시 하나의 레퍼런스 포즈만 있어도 다른 메시에서 작동하지 않습니다. 그러므로 메시끼리 커브를 공유하려면 본 트랜스폼은 제거하고 커브만 남긴 후 각 메시의 자체 레퍼런스 포즈로 시작하는 것이 중요합니다. 그러면 여러 얼굴 간에 페이셜 커브를 공유할 수 있습니다. 

다음은 예시 워크플로이며 에셋과 원하는 결과에 따라 워크플로가 달라질 수 있습니다.

마스터 스켈레톤 생성 및 사용하기

가장 먼저 할 일은 베이스 스켈레탈 메시를 임포트해서 마스터 스켈레톤으로 삼을 스켈레톤 에셋을 만드는 것입니다. 이 마스터 스켈레톤은 페이셜 애니메이션을 공유할 모든 스켈레탈 메시에 사용하게 됩니다. 메시를 추가로 임포트하는 경우 스켈레톤 에셋을 공유하려면 본 계층구조가 같아야 하고 명명 규칙도 같아야 합니다.

MasterSkeleton_01.png

스켈레톤에 관한 자세한 내용은 스켈레톤 에셋 문서 페이지를 참조하세요.

포즈 에셋 생성하기

다음으로는 DCC 내에서 포즈를 FBX 시퀀스로 굽고 해당 FBX를 언리얼 엔진으로 임포트합니다. 그러면 각 커브가 최소/최대 블렌드 값으로 설정된 애니메이션 시퀀스가 생깁니다. 

CreatePoseAsset.png

전체 뷰로 보려면 이미지를 클릭하세요.

위의 임포트된 애니메이션 시퀀스에는 모든 커브와 특정 프레임에서의 커브 최댓값이 포함되어 있습니다.

모든 커브 데이터를 포함한 시퀀스를 가져왔으면 이 애니메이션 시퀀스로부터 포즈 에셋을 생성하여 애니메이션 커브 데이터를 캐릭터의 실제 페이셜 애니메이션으로 변환하는 데 사용할 수 있습니다. 

AnimationSequence_02.png

애니메이션 시퀀스를 우클릭하면 컨텍스트 메뉴에서 포즈 에셋을 만들 수 있습니다.

포즈 에셋 안에서 각 이름을 직접 입력하거나 클립보드에 저장된 데이터를 복사한 후 붙여넣는 방법으로 포즈 이름을 정의해야 합니다. 

다음은 58프레임 애니메이션 시퀀스에서 나오는 전체 포즈 목록이며 임포트한 포즈가 나와 있습니다. 

Facial_Poses.png

이것을 포즈 에셋에서 포즈 이름으로 적용할 수 있습니다. 

PoseAssetBlank.png

그러면 스켈레톤 에셋과 함께 저장된 애님 커브(Anim Curves) 창에서 이 커브를 볼 수 있습니다. 

MasterSkeletonImage.png

전체 뷰로 보려면 이미지를 클릭하세요.

마스터 스켈레톤을 사용하는 모든 캐릭터가 이 커브에 액세스할 수 있고 각 커브에 표현된 서로 다른 값으로 각자의 페이셜 애니메이션을 구동할 수 있으며 포즈 에셋이 모든 커브 데이터를 각 캐릭터의 실제 애니메이션 포즈로 변환할 수 있습니다. 

AnimationSequence_03.png

위에서 jaw_open_pose의 디폴트값을 0에서 1로 변경하자 캐릭터가 입을 벌렸습니다.

포즈 이름을 포즈 에셋에 입력할 때 사용하지 않는 커브는 애님 커브 창에서 삭제하여 미사용 커브가 차지하는 부분을 최소화하는 것이 좋습니다.

아래 포즈 에셋에는 모든 포즈 이름이 나오며 애님 커브 창에도 표시됩니다.

PoseRename1-1.png

Pose_0I_eye 로 변경하면 Pose_0 은 애님 커브 안의 커브로 남습니다. 이 커브를 우클릭하여 커브 삭제(Delete Curve) 를 선택하면 삭제할 수 있습니다.

PoseRename2.png

부모/자손 애니메이션 블루프린트 구축하기

포즈 에셋을 만들었다면 이제 캐릭터의 애니메이션 블루프린트 를 만드는 것이 좋습니다. 이 블루프린트는 커브 기반 애니메이션을 활용합니다. 그리고 최종적으로 Pose Asset 노드(포즈 에셋을 할당하는 노드)를 활용하여 커브 데이터를 캐릭터가 사용할 수 있는 포즈로 변환합니다. 

전체 뷰로 보려면 이미지를 클릭하세요.

커브 기반 애니메이션을 최종 애니메이션 포즈에 바로 연결하면 애니메이션 포즈는 아직 커브를 포즈 데이터로 변환하지 못합니다. 이때 Pose Asset 노드가 등장하고 애니메이션을 인터셉트하여 커브를 캐릭터가 사용할 수 있는 실제 포즈 데이터로 올바르게 변환합니다. 

추가 캐릭터가 있는 경우, 자손 애니메이션 블루프린트를 이 마스터 애니메이션 블루프린트에서 만들어 추가 캐릭터에 할당하면 캐릭터마다 고유한 포즈 에셋 데이터로 포즈 에셋을 오버라이드할 수 있습니다. 그러면 캐릭터별 델타가 달성되어 가령 고함지르는 표정이 다양한 비율로 올바르게 표현됩니다. 

전체 뷰로 보려면 이미지를 클릭하세요.

위 그림은 마스터를 기반으로 자손 애니메이션 블루프린트를 사용하는 추가 캐릭터입니다.

자손 AnimBP 안에서 포즈 에셋을 오버라이드하여 이 캐릭터 고유의 포즈 에셋을 사용하게 만들었으니, 이제 델타를 사용하여 이 캐릭터만의 페이셜 포즈를 구동할 수 있으며 플레이되는 애니메이션은 부모로부터 나옵니다.

애니메이션 가져오기

캐릭터의 페이셜 애니메이션을 가져오기 시작할 땐 일반적으로 커브 기반 페이셜 애니메이션 외에 캐릭터 본 기반의 바디 애니메이션도 필요합니다. 바디 애니메이션을 공유하면서 페이셜 애니메이션은 커브로 구동하고 싶다면, 페이셜 애니메이션에서 모든 본 트랙을 제거하고 커브만 남겨야 합니다. 아니면 애니메이션 모디파이어를 사용하여 지정된 본 트랙을 제거하고 얼굴의 커브를 구동해야 합니다. 

작동 방법을 설명하기 위해 아래의 애니메이션 시퀀스를 예로 들겠습니다: 

BringInAnimation_01.png

애니메이션 시퀀스에는 모든 커브가 있고 커브에 키 값이 지정되어 다양한 페이셜 포즈를 나타냅니다. 문제는 커브가 본 기반 애니메이션 상단에서도 플레이되므로 중복 트랜스폼이 되어 원하는 결과가 나오지 않는다는 점입니다. 이 경우 본 트랜스폼을 제거하고 커브만 남겨야 합니다. 

애니메이션의 '에셋(Asset)' 메뉴에서 모든 '본 트랙 제거(Remove All Bone Tracks)'를 선택하여 제거할 수 있습니다: 

BringInAnimation_04.png

또한, 바디 애니메이션을 공유하지만, 페이스는 커브로만 구동하고자 할 경우에도 애니메이션 모디파이어를 사용하여 특정 본을 제거하면 됩니다. 일반적으로 바디 애니메이션은 본 기반으로 하고 페이셜 애니메이션은 커브 기반으로 제어하고 싶을 때 애니메이션 모디파이어를 사용합니다. 

BringInAnimation_02.png

모디파이어가 적용되자 애니메이션 시퀀스와 제거할 특정 본 트랙(및 그 자손) 구성이 완료된 모습입니다.

부모 클래스를 애니메이션 모디파이어로 설정한 상태로 블루프린트를 만들면 애니메이션 모디파이어를 만들 수 있습니다.

임포트한 어느 애니메이션에서든 애니메이션 모디파이어 섹션으로 이동한 후, 생성한 애니메이션 모디파이어를 적용하여 본 트랜스폼을 제거할 수 있습니다. 

BringInAnimation_03.png

애니메이션 모디파이어를 추가한 후 적용 버튼을 클릭하여 모디파이어를 적용합니다.

커브만 남은 상태에서 애니메이션 블루프린트 내에서 포즈 에셋을 통해 애니메이션을 실행하면 공유 가능한 커브 기반 포즈를 얻을 수 있습니다. 아래에서는 커브 기반 애니메이션을 최종 애니메이션 포즈에 바로 연결했습니다. 그러나 포즈는 커브를 어떻게 처리하는지 모르기 때문에 사용되지 않습니다. 그러니 이것을 포즈 에셋에 연결해서 커브를 구동해 봅니다. 그러면 캐릭터가 얼굴 표정을 짓게 됩니다. 

각 캐릭터는 자손 애니메이션 블루프린트와 자체적으로 할당된 포즈 에셋을 사용하기 때문에 이제 관련 델타를 사용하여 페이셜 애니메이션을 공유할 수 있습니다. 본 트랜스폼이 없고 애니메이션이 순전히 커브로만 구동되기 때문에 중복 트랜스폼이 발생하지 않습니다. 그리고 이것을 추가적인 모든 본 기반 애니메이션 데이터(예: 풀 바디 애니메이션)와 블렌딩할 수 있습니다. 

언리얼 엔진의 이전 버전을 위해 작성된 페이지입니다. 현재 언리얼 엔진 5 버전을 위해 업데이트되지 않았습니다.