https://docs.unrealengine.com/5.0/ko/animation-in-lyra-sample-game-in-unreal-engine/

 

라이라의 애니메이션

라이라의 애니메이션 시스템에 관한 개요입니다

docs.unrealengine.com

대부분의 프로젝트에서 그렇듯이 라이라의 캐릭터 애니메이션은 애니메이션 블루프린트 시스템을 사용하여 만들어진다.

 

ABP_Mannequin_Base 블루프린트에 적혀있는 코멘트에 따르면 해당 Anim Graph는 Montage와 애니메이션 레이어의 시작점을 제공하여 혼합하여 재생할 수 있게 해준다. 이러한 접근으로 무기가 로드될 때 애니메이션을 로드하도록 할 수 있다. 예를 들어 Weapon은 필요한 Montage와 애니메이션 레이어에 대한 참조를 갖고 있기 때문에 Weapon이 로드될 때 애니메이션 데이터들이 같이 로드되도록 한다. 

 

블루프린트 스레드 세이프 업데이트 애니메이션 

 

최적의 퍼포먼스를 위해 라이라에서는 이벤트 그래프 대신 멀티 스레드 애니메이션을 사용하여 애니메이션 값을 계산한다.

C++를 통해 애니메이션 업데이트 방법이나 발생 시기를 제어할 수 있도록 해주면, 퍼포먼스를 향상시킬 수 있다.

많은 애니메이션 작업을 워커 스레드에서 돌릴 수 있도록 해주는 프로젝트 세팅

프로젝트 세팅 > Engine > General Settings > Anim Blueprints > Allow Multi Threaded Animation Update 체크

 

ABP_Mannequin_Base의 함수 목록, 모두 블루프린트에 정의되어 있다.

스레드 세이프 함수를 사용할 때는 이벤트 그래프에서와 달리 직접 데이터에 액세스할 수 없다. 대신에 Property Access를 사용하여 데이터에 접근하는 편이 낫다.

 

서브 애니메이션 인스턴스 / 애니메이션 레이어 / 애니메이션 블루프린트 링크

캐릭터의 애니메이션 블루프린트가 복잡해지기 시작하면서, 다른 애니메이션 블루프린트 안의 애니메이션 블루프린트 일부를 재사용하고플 수가 있습니다. 그럴 때 노드 망을 다시 만들기 보다는, 망을 별도의 애니메이션 블루프린트로 나눈 뒤 Sub Anim Instance (서브 애님 인스턴스)를 사용하여 필요할 때 그 애니메이션 블루프린트에 접근하도록 할 수 있습니다.

 

애니메이션 블루프린트 링크(Animation Blueprint Linking) 시스템은 서브 애님 인스턴스의 익스텐션입니다. 이 익스텐션은 애니메이션 그래프의 서브섹션을 동적으로 전환하도록 지원하여 멀티 유저 협업 및 메모리 절감을 실현합니다. 애니메이션 블루프린트가 사용하지 않는 애니메이션 에셋을 더 이상 로드하지 않게 되기 때문입니다.

 

애니메이션 블루프린트 링크(Animation Blueprint Linking) 시스템은 애니메이션 그래프의 여러 하위 섹션이 동적으로 전환되게 합니다. 링크된 레이어 애니메이션 블루프린트(Linked Layer Animation Blueprints)를 통해 메인 애니메이션 블루프린트의 여러 곳을 오버라이드할 수 있습니다.

라이라에서 이는 플레이어가 들고 있는 무기에 따라 로코모션 행동, 애니메이션 에셋, 포즈 수정이 달라질 수 있음을 뜻합니다. 

 

서브 애님 인스턴스 사용

다른 애니메이션 블루프린트 안에서 서브 애니메이션 블루프린트 인스턴스를 사용하는 방법을 안내합니다.

docs.unrealengine.com

 

1. 애니메이션 레이어 인터페이스 애셋 : 레이어 수, 이름, 속하는 그룹, 레이어 Input 등을 정의할 수 있다.

2. 링크할 애니메이션 블루프린트에서 애니메이션 레이어 인터페이스를 추가한다.

3. 마스터 애니메이션 블루프린트에도 애니메이션 레이어 인터페이스를 추가한다.

4. 마스터 애니메이션 블루프린트에서 Input Pose 노드를 Output Pose 노드에 연결한다. (링크된 애니메이션 블루프린트 포즈를 그대로 받아서 사용)

 

디폴트(Default) 스테이트 머신이 포즈를 링크된 애니메이션 레이어를 통해 Output Pose 노드로 전달할 것입니다. 애님 클래스 레이어 링크(Link Anim Class Layers) 를 호출하면 기저 애니메이션 블루프린트가 실행됩니다.

Linked Anim Layer 노드는 인스턴스 클래스(Instance Class) 프로퍼티를 가지며 이를 사용하여 디폴트 레이어 오버라이드를 지정할 수 있습니다. 이는 로직을 다수의 애니메이션 블루프린트로 나누고 싶을 때 특히 유용합니다. 예를 들어 자주 변경되는 IK 로직이 있는 경우 이를 별도의 애니메이션 블루프린트로 옮기고 메인 애니메이션 블루프린트에서 기본으로 실행되도록 설정할 수 있습니다.

 

캐릭터의 메시 컴포넌트에서 Anim Class Layer를 Link, Unllink할 수 있다. 

  

애니메이션 레이어 및 링크된 애니메이션 블루프린트는 복잡한 캐릭터 내에서 확장성과 조직을 유지하는 데 유용할 수 있습니다. 레이어와 링크된 애니메이션 블루프린트를 사용하면 로직을 애니메이션 블루프린트 내에서 레이어로 분리하거나 아예 다른 애니메이션 블루프린트로 나누고 마스터 애니메이션 블루프린트 내에서 링크할 수 있습니다.

 

ALI_ItemAnimLayers 는 애니메이션 블루프린트에서 애니메이션을 오버라이드할 수 있는 곳을 지정하는 애님 레이어 인터페이스(Anim Layer Interface)입니다. 라이라에서 이 작업은 에임과 스켈레톤 제어를 위한 레이어뿐 아니라 로코모션 스테이트에 대해서도 수행됩니다.

 

ABP_ItemAnimLayersBase 는 모든 무기가 사용하는 링크된 레이어 애니메이션 블루프린트의 베이스입니다. 

ㄴ ALI_ItemAnimLayers 인터페이스를 상속받는다.

 

Anim Node 함수

라이라에서는 애님 노드 함수를 사용하여 스테이트별 로직을 생성한다.

애니메이션 포즈 출력 노드에서는 3가지 종류의 함수를 설정할 수 있다.

 

1. OnInitialUpdate : 노드가 처음 업데이트되기 전에 호출되는 함수

2. OnBecomeRelevant : 노드에 연관성이 생길 때 호출되는 함수 

3. OnUpdate : 노드가 업데이트될 때 호출하는 함수

 

예시로 Idle state의 최종 출력 포즈를 계산하는데 Update Idle State 함수를 OnUpdate에 등록한다.

 

State Aliases

캐릭터가 다수의 애니메이션 스테이트로 트랜지션되어야 할 수 있는데, 트랜지션 로직을 단순화(트랜지션 수 Line 수를 줄여준다.) 하는 동시에 스테이트 사이의 개별 트랜지션을 각각 제어할 수 있게 해준다.

 

디테일 패널에서 Jump State로 직접 트랜지션될 수 있는 로코모션 스테이트를 볼 수 있다.

 

상단 / 하단 바디 레이어링

블렌드 노드(Blend Nodes)는 애니메이션을 블렌딩하는 데 사용됩니다. 라이라에 사용되는 로코모션 애니메이션은 대부분 풀 바디입니다. 즉, 애니메이션이 전체 스켈레톤에서 재생되고(jog_fwd 애니메이션 등), 플레이어가 언제든지 사용할 수 있는 다양한 상단 바디 액션과 결합됩니다(무기 발사 또는 재장전 애니메이션 등).

이 작업은 AnimBP_Mannequin_Base > AnimGraph 를 연 다음 상단 바디/하단 바디 분할(Upper/Lower Body Split) 코멘트로 가서 볼 수 있는 본 별로 레이어드 블렌딩(Layered Blend Per Bone) 노드를 사용하여 수행됩니다.

 

Layered blend per bone 노드의 디테일 패널에서 블렌드와 관련된 개별 본의 가중치를 명시적으로 제어할 수 있는 블렌드 마스크를 볼 수 있다.

 

메인 애니메이션 블루프린트에서 데이터 액세스하기

ABP_ItemAnimLayersBase 애니메이션 블루프린트에는 메인 애님 블루프린트 스레드 세이프 얻기(Get Main Anim BPThreadSafe) 라는 커스텀 함수가 있습니다. 메인 애니메이션 블루프린트(AnimBP_Mannequin_Base )에 대한 레퍼런스를 얻는 데 사용되는 함수입니다.

 

이렇게 하면 프로퍼티 액세스를 사용하여 모든 데이터에 액세스할 수 있다.

 

애니메이션 선택을 위해 애님 노드 함수 사용하기

 

Linked Layer Child Animation Blueprint

라이라의 모든 무기에는 ABP_ItemAnimLayersBase 로부터 상속받는 자손 애니메이션 블루프린트가 있습니다. 애니메이터는 아래 있는 ABP_PistolAnimLayers 애니메이션 블루프린트 이미지에 보이는 것처럼 애니메이션을 삽입하고 무기별로 모든 변수를 편집할 수 있습니다.

 

디스턴스 매칭, 스트라이드 워핑, 오리엔테이션 워핑

디스턴스 매칭(Distance Matching) 은 애니메이션 에셋과 게임플레이 간에 모션을 일치시키기 어려운 경우(시작, 중지, 착지 애니메이션과 같은 로코모션 애니메이션 에셋 등)에 애니메이션의 재생 속도를 조절합니다

싱크를 맞춰 플레이어가 미끄러지는 것처럼 보이지 않게 한다.

 

Stride Warping(스트라이드 워핑)은 캐릭터가 달리기(Jog) 스테이트에 들어갈 때처럼 재생 속도로 캐릭터의 보폭을 조절할 수 없는 경우에 보폭을 동적으로 조절하기 위해 사용됩니다.

 

이 두 가지 기법을 결합하면, 한 기법을 다른 기법보다 우선하도록 동적으로 선택할 수 있습니다. start 스테이트에 먼저 디스턴스 매칭을 사용하여 포즈를 유지한 후, jog 스테이트에 가까워지면 스트라이드 워핑을 사용하여 블렌딩합니다.

 

스트라이드 워핑

오리엔테이션 워핑(Orientation Warping)은 캐릭터 움직임의 루트 모션 각도와 함께 사용하며, 캐릭터의 바디 하단을 구부려 루트 모션 각도에 일치시킵니다. 라이라에서는 네 가지 기본 방향에 대하여 횡이동 애니메이션이 생성됩니다. 플레이어가 360도로 자유롭게 움직일 수 있으므로 오리엔테이션 워핑을 사용해 캐릭터의 포즈를 프로시저럴 방식으로 조절했습니다. 애니메이션의 범위가 제한되기 때문에 이 기법은 start 스테이트에서 사용됩니다.

 

게임플레이 태그 바인딩

라이라는 대부분의 플레이어 행동에 대해 게임플레이 어빌리티 시스템(Gameplay Ability System)을 사용합니다. 애니메이션 블루프린트의 이러한 이벤트에는 게임플레이 태그(Gameplay Tag) 바인딩을 사용해 응답할 수 있습니다. AnimBP_Mannequin_Base 블루프린트 안에서 게임플레이 태그로 이동하려면 클래스 디폴트(Class Defaults) > 디테일(Details) > 게임플레이 태그(Gameplay Tags) > 게임플레이 태그 프로퍼티 맵(Gameplay Tag Property Map) 으로 갑니다.

+ Recent posts