언어:
페이지 정보
엔진 버전:
언리얼 엔진

애니메이션 시스템 개요

언리얼 엔진

언리얼 엔진 4(UE4)의 애니메이션 시스템은 여러가지 애니메이션 툴과 에디터로 이루어져 있으며, 스켈레탈 기반 메시 변형 정보를 모프 기반 버텍스 변형 정보와 혼합시켜 복잡한 애니메이션을 만들 수 있습니다. 미리 녹화된 애니메이션 시퀀스 를 재생하고 블렌딩하여 기본 플레이어 움직임에 사실감을 더해주거나, 애님 몽타주 를 사용한 벽이나 돌출부의 스케일 작업같은 맞춤형 특수 동작을 제작하거나, 모프 타깃 을 통해 대미지 이펙트 또는 얼굴 표정을 적용하거나, 스켈레탈 컨트롤 을 사용하여 본의 트랜스폼을 직접 제어하거나, 스테이트 머신 기반 로직을 만들어 캐릭터에 주어진 상황에 맞는 애니메이션을 결정하도록 할 수도 있습니다.

이 문서는 언리얼 엔진 4 의 애니메이션 시스템에 대한 하이 레벨 개요서로써 쓰여졌으며, 언리얼의 애니메이션을 새로 접하신 분들을 주요 대상으로 합니다. 그렇다고 언리얼 엔진에서 스켈레탈 애셋에 애니메이션을 적용하는 방법을 완벽하게 설명해 주는 안내서가 되지는 못합니다. 그보다는 애니메이션 시스템의 여러 부분에 대한 개념을 잡은 다음, 그 부분들이 어떻게 조합되는가, UE4 의 애니메이션이 전보다 얼마나 강력하고 유연해 졌는가 살펴보는 입문서 정도로 생각해 주시기 바랍니다.

용어와 개념

먼저 UE4 의 애니메이션 시스템에 대한 주요 용어와 개념을 알아보는 것으로 시작하겠습니다 (각 제목을 클릭하면 상세 문서를 확인할 수 있습니다):

애니메이션 툴

언리얼 엔진 4 에서 애니메이션 캐릭터를 만들기 위해서는 여러가지 다양한 애니메이션 툴( 또는 에디터들)을 사용해야 하는데, 애니메이션의 특징에 따라 쓰이는 툴이 다릅니다.

예를 들어, 스켈레톤 에디터 는 스켈레탈 메시와 애니메이션을 구동시키는 본( 또는 조인트 계층구조) 관리에 사용되며, 여기서 모든 것이 시작됩니다. 스켈레탈 메시 에디터 는 스켈레톤에 연결된 스켈레탈 메시를 변경하는 데 사용되며, 캐릭터가 겉으로 보이는 모습을 나타냅니다. 애니메이션 에디터 에서는 애니메이션 애셋 생성 및 변경이 가능하며, 애니메이션 애셋의 튜닝/트윅 작업이 이루어지는 곳입니다. 애니메이션 블루프린트 에디터 에서는 캐릭터가 어떤 애니메이션을 언제 사용하는지, 애니메이션 블렌딩은 어떻게 할지 구동시키는 로직을 만들 수 있습니다. 마지막으로 피직스 애셋 에디터 에서는 스켈레탈 메시의 콜리전에 사용할 피직스 바디를 만들고 편집할 수 있습니다.

스켈레톤 애셋

Skeleton (스켈레톤) 이란 본의 위치와 회전값을 계층구조로 나타낸 것으로, 스켈레탈 메시의 변형(deform)에 사용됩니다. UE4 에서 스켈레톤은 스켈레탈 메시에서 추출하여 별도의 애셋으로 만들었습니다. 즉 애니메이션은 스켈레탈 메시가 아니라 스켈레톤에 저장된다는 뜻입니다. 같은 스켈레톤을 사용하면 한 애니메이션을 다수의 스켈레탈 메시에 공유할 수 있습니다.

애니메이션 시퀀스

Animation Sequence (애니메이션 시퀀스)란 스켈레탈 메시에 재생할 수 있는 단일 애니메이션 애셋입니다. 여기에는 일정 시점에서 본의 위치, 회전, 스케일 값을 나타내는 키프레임이 들어갑니다. 이러한 키프레임을 순서대로 재생도 하고 섞기도 하면서 스켈레탈 메시의 본에 부드러운 애니메이션을 줄 수 있습니다.

애니메이션 노티파이

애니메이션 프로그래머는 Animation Notification (애니메이션 노티파이), 또는 AnimNotify (애님 노티파이), 줄여서 그냥 Notify (노티파이)를 통해 애니메이션 시퀀스 도중의 특정 지점에 이벤트가 발생하도록 구성할 수 있습니다. 노티파이는 걷기나 달리기 도중의 발소리같은 이펙트 추가 및 애니메이션 도중 파티클 시스템을 스폰시키는 데 주로 사용됩니다. 하지만 커스텀 노티파이 유형으로 시스템을 확장시켜 어떤 유형의 게임 요구에도 맞출 수 있기에 다른 식으로도 얼마든지 사용할 수 있습니다.

애니메이션 블루프린트

Animation Blueprint (애니메이션 블루프린트)는 스켈레탈 메시 의 애니메이션을 제어하는 특수 블루프린트 입니다. 그래프는 애니메이션 블루프린트 에디터 에서 편집하며, 여기서 애니메이션 블렌딩, 스켈레톤의 본 직접 제어, 로직을 구성하여 각 프레임에 사용할 스켈레탈 메시의 최종 애니메이션을 최종 결정하게 됩니다.

블렌드 스페이스

블렌드 스페이스 (Blend Space) 는 애님 그래프 에서 샘플링할 수 있는 특수 애셋으로, 두 입력값에 따라 애니메이션을 블렌딩시켜 주는 것입니다. 하나의 입력에 따라 두 애니메이션을 섞는 단순 블렌딩은 애니메이션 블루프린트 에서 쓸 수 있는 표준 블렌드 노드 를 사용하면 됩니다. 블렌드 스페이스를 통해 (현재는 둘로 제한되어 있지만) 다수의 값에 따라 다수의 애니메이션을 블렌딩하는 복잡한 작업을 할 수 있습니다.

블렌드 스페이스의 목적은 특정 속성이나 조건에 따라 블렌딩을 할 때마다 별개의 노드를 하드코딩하여 만드는 노고를 덜기 위함입니다. 입력, 애니메이션, 애니메이션 끼리의 블렌딩을 위해 입력을 어떻게 사용할 것인지 등을 애니메이터나 프로그래머가 지정할 수 있도록 하여, 사실상 어떤 유형의 블렌딩도 범용 블렌드 스페이스를 사용해서 이뤄낼 수 있습니다.

애니메이션 몽타주

Animation Montage (애니메이션 몽타주, 혹은 줄여서 그냥 몽타주)는 폭넓은 애니메이션 이펙트가 가능해지는 다목적 툴로써, 주로 코드를 통해서나 블루프린트 비주얼 스크립트 안에서 애니메이션 컨트롤을 노출시키는 데 관련되어 있습니다. 애니메이션의 지능형 루프, 로직 기반 애니메이션 전환, 루트 모션 핸들링, 기타 여러가지 다양한 애니메이션 이펙트를 만드는 데도 사용 가능합니다.

스켈레탈 컨트롤

SkeletalControl (스켈레탈 컨트롤) (또는 SkelControl (스켈 컨트롤))을 통해 스켈레톤 에 있는 본을 직접 제어할 수 있습니다. 애니메이션 블루프린트 안에서 사용되며, 개별 본 제어, IK 체인 생성 등의 작업에 쓰입니다.내재된 스켈레톤에 대한 직접 제어할 수 있다는 것은, 절차적이고 동적으로 구동되는 애니메이션을 만들 수 있다는 것입니다. 하나의 본에 대한 Transform(트랜스폼) 작업이 다른 본을 움직일 수도 있고, 캐릭터에 걷기 애니메이션을 재생할 때 땅에 발을 일치시킬 수도 있습니다. 애니메이션 시퀀스 에 의해 적용된 본 트랜스폼을 조정하거나 완전 덮어쓰는 데 있어 어떠한 종류의 변경도 가능합니다.

스테이트 머신

State Machine (스테이트 머신)은 도식적인 방법으로 스켈레탈 메시의 애니메이션을 일련의 State (스테이트, 상태)로 나눠 볼 수 있습니다. 그렇게 나뉜 상태는 한 상태에서 다른 상태로의 블렌딩 방식을 제어하는 Translation Rule (트랜지션 룰, 전환 규칙)에 의해 관장됩니다. 하나의 툴로써, 복잡한 블루프린트 망을 만들 필요 없이 그래프 하나만 만들면 캐릭터가 가질 수 있는 여러 유형 애니메이션 간의 흐름을 쉽게 제어할 수 있다는 점에서, 스켈레탈 메시 애니메이션의 디자인 프로세스를 크게 단순화시켜 줍니다.

애니메이션 그래프의 개념화 작업을 단순화시켜 주기도 합니다. 어떤 상태가 필요할지, 캐릭터가 한 상태에서 다른 상태로 어떻게 흘러갈지 생각하는 것으로 애니메이션 디자인을 시작하면 됩니다. 이는 캐릭터에 가능한 모든 애니메이션을 알아보기 쉬운 순서도 형식으로 나눠 본다고 생각해 보면 좋습니다. 이 순서도를 통해 스켈레탈 메시의 상태 이동을 확인할 수 있는 것입니다.

예를 들어 캐릭터가 움직이지 않을 때는 "Idle" (빈둥) 상태로 있다가, 캐릭터의 속력이 일정 값 이상을 넘어가면 다른 "Movement" (이동) 상태로 블렌딩할 수 있습니다. 그 상태는 낙하, 점프, 숙이기, 질주 등등 여러가지 있을 수 있구요. 애니메이터와 아티스트는 스테이트 머신을 사용해 애니메이션 망의 데이터 흐름을 빠르게 확인해 볼 수 있습니다.

일부 애니메이션 기능에 대한 예제는 에픽 게임즈 런처의 학습 탭 에서 무료로 받을 수 있는 Content Examples (콘텐츠 예제) 프로젝트에서도 확인할 수 있습니다.

시스템 분해도

다음은 애니메이션 시스템의 특정 부분이 어디서 생성되고 편집되는가에 대한 분해도입니다.

CreationDiagram.png

이 도표는 언리얼에서의 전형적인 애니메이션 캐릭터에 대한 데이터 흐름과 소유를 나타냅니다.

AnimationDiagram.png

애니메이션 디버그 기능

디버그 기능은 플레이 모드시 ` 키를 눌러 콘솔을 띄워 접할 수 있습니다.

스켈레탈 메시 본 렌더링

AnimationShowDebugBones.jpg

스켈레탈 메시 본 을 표시하려면, 콘솔에 ShowDebug Bones 명령을 입력합니다. 위 그림에서 보듯이 본은 개별적인 흰 선으로 나타납니다.

ShowDebug Bones 명령은 플레이 세션 도중 플레이 가능한 캐릭터 관련 정보를 표시해 줍니다. (플레이어 캐릭터 이외) 다른 캐릭터의 디버그 애니메이션을 보려면, viewactor ExampleCharacterID 명령을 사용하면 되며, ExampleCharacterID 는 보고자 하는 캐릭터에 할당된 Character ID 를 말합니다. 이 ID 는 월드 아웃라이너 에서 캐릭터 위에 커서를 올리면 그 ID 이름이 표시됩니다.

현재 viewactor 명령을 사용하면, 카메라가 현재 보고 있는 액터로 이동하여 고정됩니다. 디버깅 도중 카메라를 조작할 필요가 있다면, 이에 대한 우회법은 드롭다운 메뉴에서 에디터에서 플레이 세션을 플레이어 둘 이상으로 실행하여 창 하나는 디버깅 용으로 쓰고 다른 하나는 플레이어 캐릭터 제어용으로 쓰면 됩니다.

본을 흰색 선으로 표시하는 대신, 콘솔에 ShowDebugToggleSubCategory 3DBones 명령을 입력하여 3D 본으로 표시할 수도 있습니다.

애니메이션 디버그 출력

AnimationShowDebugToggle.jpg

애니메이션 디버그 출력 정보는 ShowDebug Animation 콘솔 명령으로 켤 수 있습니다.

표시되는 정보는 다섯 부분으로 나뉘어 있으며, 그 각각은 ShowDebugToggleSubCategory 명령에 아래의 카테고리 이름을 붙여 토글시킬 수 있습니다 (예: ShowDebugToggleSubCategory SyncGroups).

버튼

설명

SyncGroups

현재 최종 포즈에 공헌하고 있는 애니메이션 애셋 싱크 그룹별로 (그룹에 속해있지 않으면 Ungrouped 로) 체계 정리하여 보여줍니다. 기본적으로 이 섹션에 표시된 블렌드 스페이스는 모든 공헌 애니메이션/웨이트를 표시합니다. ShowDebugToggleSubCategory FullBlendspaceDisplay 명령으로 이 칸을 토글시켜 출력이 차지하는 화면 공간을 줄일 수 있습니다.

Montages

현재 캐릭터에 사용중인 몽타주를 나열합니다. 활성 몽타주는 초록으로 강조됩니다.

Curves

애니메이션 재생으로 활성화된 커브 값을 (이름 : 값 짝으로) 나열합니다.

Notifies

현재 발효중인 노티파이 스테이트를 표시합니다.

Graph

활성 포즈 그래프를 표시합니다. 최종 포즈를 나타내는 마지막 (루트) 노드로 시작해서 그 최종 포즈를 이루는 모든 노드가 나열됩니다. 노드는 계층구조가 유지되는 방식으로 표현되어, 사용자는 원본 블루프린트 애셋을 확인할 필요 없이 어떤 노드가 연결되었는지 확인할 수 있습니다. 활성 노드는 (ShowDebugToggleSubCategory FullGraph 명령으로 표시되도록 토글된 경우) 초록색, 비활성 노드는 회색으로 표시됩니다.