UE4

[UE4] 애니메이션 몽타주(Animation Montage)

Honey Badger 2022. 10. 19. 15:24

애니메이션 몽타주란?

  애니메이션 몽타주는 폭넓은 애니메이션 이펙트가 가능해지는 다목적 툴로써, 주로 코드를 통해서나 플루프린트 비주얼 스크립트 안에서 애니메이션 컨트롤을 노출시키는 데 관련되어 있다. 몽타주를 사용하면 블루프린트 또는 코드를 통해 애니메이션 애셋을 바로 제어할 수 있다. 여러 애니메이션 시퀀스를 하나의 애셋으로 합칠 수 있으며, 이를 섹션으로 나누어 그 일부 또는 조합 재생이 가능하다. 몽타주 안에서 이벤트를 발동시켜 다양한 로컬이나 리플리케이트 작업을 할 수 있는데, 예를 들면 사운드 큐나 파티클 이펙트 재생, 탄환 수와 같은 플레이어 값 변경, 심지어 네트워크 게임에서 루트 모션 리플리케이션(복제), 애니메이션에 루트 모션이 켜진 경우 가능하다.

 

 

몽타주 활용예시

  로직 기반 애니메이션 전환, 복잡한 애니메이션 시퀀스를 체인으로 묶어 하나의 애니메이션으로 간주, 복잡한 애니메이션 시퀀스를 네임드 슬롯에 할당하여 코드상으로 전환가능. 이해를 돕도록 하나의 예시를 들어보자. 캐릭터가 총알을 장전하는 애니메이션을 만든다고 가정한다. 주어진 애니메이션은 다음과 같다.

 

1. 탄창을 집는 애니메이션

2. 재장전하는 애니메이션

3. 대기상태로 돌아가는 애니메이션

 

  이 세개의 애니메이션을 그냥 이어붙여 사용해도 되지만, 만약 캐릭터가 매번 다른 양의 탄환을 재장전하고 싶다면 2번의 애니메이션의 길이가 매번 달라질 것이다. 이를 몽타주로 구현하면, 하나의 몽타주 안에서 위 세가지의 애니메이션을 합친 후 섹션을 떼어 그 전체 또는 일부를 선택적으로 재생할 수 있게 한다.

  플레이어가 특정 버튼을 누르면 몽타주가 Start섹션에서 시작하도록 정의하고, Loop라는 반복섹션을 Start섹션의 뒤를 따르고 무한반복하도록 설정한다. 플레이어가 재장전 버튼을 놓거나 총에 샷건탄환이 다 채워졌을 시에만 반복을 중지하고 End섹션으로 점프하여 애니메이션을 빠져나오도록 코드적으로 제어할 수 있다.

 

 

몽타주 관련 용어 설명

 

1. 섹션

   각 섹션에는 슬롯의 타임라인 안에 이름과 위치가 있습니다. 이름을 사용하여 특정 섹션으로 바로 점프하거나 현재 섹션이 끝나면 다음에 재생하도록 대기열에 등록할 수 있습니다. 음악에 비유하면 섹션은 노래 같은 것이고 슬롯은 앨범으로 생각하면 됩니다.

2. 슬롯

  몽타주 안에서 슬롯은 애니메이션을 몇이든 담을 수 있는 트랙입니다. 재장전 몽타주 예제로 예를 들면 플레이어가 서있거나 엎드려 있을 때 다양한 재장전 버전을 만들어 별도의 슬롯 안에 각각 넣어두고 애니메이션 플루프린트의 애님 그래프에서 slot노드를 사용하여 각 캐릭터의 자세에 따라 어떤 애니메이션 세트를 사용할 지 결정할 수 있습니다.

3. 그룹

  슬롯 모음으로 그룹당 하나의 몽타주만 재생 가능합니다. 새 몽타주를 생성하면 Slot 노드에 기본적으로 하나의 디폴트 슬롯이 갖추어져 있습니다.

 

 

몽타주 UI

 

1. 몽타주

- 섹션 : 몽타주 내 생성되어 있는 섹션을 표시합니다.

- 슬롯 : 현재 슬롯에 추가되어 있는 애니메이션을 표시합니다.

- 그룹/슬롯 : 현재 선택된 애님 그룹 및 슬롯을 표시합니다.

2. 섹션

섹션 영역에서는 몽타주 영역에서 정의한 섹션 사이의 관계를 수립할 수 있습니다.

 - 디폴트 생성, 비우기 : 디폴트 생성은 모든 섹션 사이 기본 연결을 생성하여 서로간에 연결해주고, 비우기는 모든 연결을 지웁니다.

 - 섹션 버튼 : 이 영역에서는 각 섹션에 대한 버튼을 볼 수 있으며, 이를 통해 섹션 연결에 할당할 수 있습니다.

- 섹션 연결 트랙 : 모든 섹션 미리보기 또는 개별 트랙을 미리보기하여 애니메이션 섹션 사이 관계를 시각화시켜 볼 수 있습니다.

3. 엘리먼트 타이밍

  각기 다른 섹션의 타이밍 정보를 보조합니다. 트랙의 각 노드에는 몽타주 내 오브젝트 발동 순서를 나타내는 번호가 주어져 있으며, 각 색에 따라 빨강은 노티파이 엔딩 마커, 연한 파랑은 브랜칭 포인트, 초록은 몽타주 섹션을 나타냅니다.

4. 노티파이 

  애니메이션 특정 지점에 이벤트를 발생시킬 수 있습니다. 예를 들어 재장전 몽타주에서 클립을 잡아 재장전이 재생 될때마다 사운드를 재생하도록 노티파이를 배치할 수 있습니다.

5. 커브

  애니메이션 재생 도중 머티리얼 파라미터 또는 모프 타깃 값을 변경할 수 있습니다.

 

 

몽타주의 재생

   몽타주 에셋은 필요에 따라 여러가지 방식으로 재생할 수 있습니다. 스켈레탈 메시가 몽타주를 자동 재생하도록 설정하려는 경우 스켈레탈 메시에 대해 Anim to Play로 설정해주면 되고, 몽타주가 어떤 조건을 만족했을 때만 재생되도록 하려면, Play Montage 노드를 사용하여 재생할 몽타주 내 몽타주 또는 섹션을 호출하는 블루프린트 스크립트를 만들면 됩니다. 지정된 조건에 따라 C++ 코드를 통해 재생하도록 할 수도 있습니다

 

노티파이에 관하여

애니메이션을 재생하는 동안 특정 타이밍에 애님 인스턴스에 신호를 보내는 기능이다. 노티파이는 일반 애니메이션과 몽타주 모두 사용가능하다. 사용 예를 들자면 공격애니메이션의 특정 타이밍에 공격 판정을 할 수 있도록 몽타주 시스템에서 애니메이션 노티파이를 지정하고 코드에서 활용할 수 있다.

 

  사진과 같이 노티파이를 추가하면 해당 몽타주 애니메이션을 재생할 때 재생 구간에 위치한 노티파이를 호출하게 되고, 노티파이가 호출되면 언리얼 엔진은 자동으로 애님 인스턴스 클래스의 ‘AnimNotify_노티파이명이라는 이름의 멤버 함수를 찾아서 호출한다. 이때 해당 멤버 함수는 언리얼 런타임이 찾을 수 있도록 반드시 UFUNCTION 매크로가 지정돼야 한다.

 

노티파이 Tick Type 설정

각 노티파이마다 오른쪽 디테일윈도우에서 틱타입을 설정할 수 있다. 틱타입은 다음과 같이 두가지가 존재한다.

1. Branching Point : 섹션을 바꾸거나 몽타주 위치변경에 적합하다.

2. Queued : 주로 타이밍에 민감하지 않은 사운드나 이펙트를 발생시킬 때 사용한다.

'UE4' 카테고리의 다른 글

[UE4] 물리엔진  (0) 2022.10.20
[UE4] 델리게이트(Delegate)  (0) 2022.10.19
[UE4] 디버깅 모드로 에디터 켜기  (0) 2022.10.05
[UE4] GTA 방식의 카메라 구현  (0) 2022.10.05
[UE4] 게임 실행 중 뷰포트에서 콘솔띄우기  (0) 2022.09.30