상세 컨텐츠

본문 제목

언리얼4 애니메이션 노티파이, 애니매이션 사운드 처리

게임엔진관련/언리얼 엔진

by AlrepondTech 2016. 10. 18. 15:29

본문

반응형
728x170

 

 

=================================

=================================

=================================

 

 

 

출처: https://docs.unrealengine.com/latest/KOR/Engine/Animation/Sequences/Notifies/index.html

 

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

노티파이 유형

다양한 유형의 노티파이 가 다양한 이벤트를 발동시킵니다. 노티파이를 통해 카메라 이펙트, 파티클 이펙트, 사운드 등을 모두 애니메이션 도중의 일정 시점에 발동시킬 수 있습니다. 노티파이 추가는 노티파이 트랙 에서 애니메이션의 노티파이 발생 지점에 우클릭 한 뒤 추가하고자 하는 노티파이 유형을 선택하면 됩니다.

노티파이 추가/편집 관련 상세 정보는, 애니메이션 시퀀스 편집하기 문서를 참고하세요.

Play Particle Effect

Play Particle Effect 노티파이는 주어진 소켓 위치와 애니메이션의 타임라인 상의 일정 지점에 파티클 시스템을 스폰시켜 플레이합니다. 플레이어가 움직일 때 발 주변에 먼지가 표시되게 한다던가, 플레이어가 니트로 부스트를 사용하면 배기관에서 화염이 분출되는 등의 효과를 내는 데 좋습니다.

 

Play Particle Effect 노티파이는 애니메이션 블루프린트를 사용해서 작동방식을 제어하지 않습니다. 그 대신 디테일 패널에 정의된 간단한 프로퍼티 몇 가지를 사용하여 어떤 파티클 시스템을 사용할 것인지, 파티클의 원점은 어느 소켓으로 할 것인지를 결정합니다.

 

 
프로퍼티 설명
Socket Name 파티클 시스템의 스폰 지점으로 사용될 스켈레탈 메시 소켓입니다.
PSTemplate 노티파이의 시간상 설정된 지점에 스폰되는 파티클 시스템입니다.
Attached 이펙트를 본/소켓에 붙일지를 결정합니다.
Location Offset 소켓에서의 위치 오프셋입니다.
Rotation Offset 소켓에서의 회전 오프셋입니다.
Notify Color 노티파이 바에 표시되는 통지의 색을 변경합니다.

구성이 완료되면, 소켓 위치를 스폰 지점으로 사용하여 연관된 파티클 시스템을 재생합니다.

 

Play Sound

애니메이션에 사운드 이펙트 싱크를 맞추는 데는 Play Sound 노티파이가 단순한 것이 딱입니다. Play Particle Effect 와 매우 흡사하게, 이 노티파이 역시 디테일 패널에서 설정할 수 있는 몇 가지 단순한 프로퍼티를 통해 빠르고 쉽게 사운드 이펙트 셋업이 가능합니다. 이를 통해 로봇이 움직일 때의 기계음, 캐릭터 모션 도중 발생하는 천의 펄럭임, 기타 비슷한 효과를 낼 수 있습니다.

 

Play Sound 노티파이는 디테일 패널에 정의된 몇 가지 단순한 프로퍼티를 통해 어떤 사운드 이펙트를 사용할지, 원점이 될 소켓이나 본은 무엇인지를 결정합니다.

 

 
프로퍼티 설명
Attach Name 사운드 이펙트의 스폰 지점으로 사용할 스켈레탈 메시 소켓이나 본 이름입니다.
Volume Multiplier 사운드 이펙트의 볼륨에 적용되는 스케일 배수입니다.
Pitch Multiplier 사운드 이펙트의 핏치에 적용되는 스케일 배수입니다.
Follow 체크하면 사운드 이펙트 소스가 스태틱 메시의 이동을 따라갑니다. 체크하지 않으면
사운드는 스폰된 자리에 머물러 있습니다.
Notify Color 노티파이 바의 노티파이 색을 변경합니다.

Custom Notify

Custom Notify (커스텀 노티파이)는 애니메이션의 일정 시점에서 아티스트가 애니메이션 블루프린트를 가지고 할 수 있는 어떤 작업도 담아낼 수 있는 역할을 합니다. 커스텀 노티파이는 노티파이 트랙에 우클릭한 다음 맥락 메뉴에서 New Notify 를 선택하여 만들 수 있습니다.

 

커스텀 노티파이는 스켈레탈 메시의 애니메이션 블루프린트 에 대한 스테이트 머신 에서 이벤트 그래프나 트랜지션 그래프 내 같은 이름의 노티파이 이벤트 를 만들어줍니다. 커스텀 노티파이를 추가하려면, 이벤트나 트랜지션 그래프 아무데나 우클릭 해 보면 애니메이션 노티파이 이벤트를 추가하는 구역이 있습니다.

 

Custom Notify 추가후 이벤트 노드가 그래프에 추가되어 노티파이가 호출되면 실행됩니다.

 

노티파이 스테이트

AnimNotifyState, 줄여서 노티파이 스테이트 는 위의 표준 노티파이와 매우 비슷한 방식으로 작동하는데, Start (시작) / "Tick" (틱) / End (끝) 의 세 가지 이벤트가 있습니다. 시작과 끝은 말 그대로 노티파이의 시작과 끝에서 발동되며, 애니메이션에서 그에 맞는 때가 오면 그 안의 이벤트 그래프가 발동됩니다. 틱은 끝 이벤트에 걸릴 때까지 애니메이션이 업데이트될 때마다 발동됩니다. 보통 노티파이와 노티파이 스테이트의 주요한 차이점이라면, 노티파이 스테이트는 자체적으로 자체적으로 독립된 블루프린트 라는 점입니다.

노티파이 스테이트(는 네이티브 노티파이 스테이트 와 같으나 애니메이션 도중 발생시킬 필요가 있는 로직을 제공할 수 있는 커스텀 블루프린트라는 점에서 다릅니다) 생성은 일반 노티파이 추가와 똑같습니다. 애니메이션의 노티파이 트랙 에 우클릭 한 다음 노티파이 스테이트 추가... 를 선택한 뒤 커스텀 노티파이를 선택하면 됩니다.

커스텀 노티파이를 사용하려면, 먼저 AnimNotifyState 클래스의 블루프린트 클래스를 생성 해야 합니다.

 

MyAnimNotifyState 라는 (위의) AnimNotifyState 블루프린트 클래스는 애니메이션에서 사용할 노티파이 스테이트로 선택할 수 있도록 생성되었습니다. 애님 노티파이 스테이트 블루프린트를 생성한 이후로는, 열어서 노티파이 사용 방식을 정의하는 함수 구현을 시작하면 됩니다 (아래).

 

 

 

 

반응형

 

 

728x90

 

 

모든 함수를 구현할 필요는 없지만, 최소한 Received Notify Tick 또는 Received Notify Start / Received Notify End 는 구현해 줘야 합니다. Received Notify Start 나 Received Notify End 중 하나만 구현한다면, 그냥 표준 애니메이션 노티파이를 사용해도 될 것입니다.

 

노티파이 오버라이드 시작입니다.

 

노티파이 오버라이드 끝입니다.

 

노티파이 틱 오버라이드 입니다.

아래는 오버라이드 함수에서 각 핀 유형이 어떻게 사용되는지에 대한 설명입니다:

 
설명
Mesh Comp 이 AnimNotifyState 를 발동시키는 애니메이션 시퀀스나 몽타주의 스켈레탈 메시
컴포넌트 입니다.
Anim Seq 이 AnimNotifyState 를 발동시키는 애니메이션
시퀀스입니다.
Frame Delta Time Received Notify Tick 함수에서만, 지난 애니메이션 업데이트 이후 경과된
시간을 알려줍니다.

현재 블루프린트 안에서 AnimNotifyState 의 길이를 구할 수 있는 방법은 없습니다.

규칙

  • 반드시 NotifyBegin 이벤트로 시작합니다.
  • 반드시 NotifyEnd 이벤트로 끝납니다.
  • NotifyBegin 과 NotifyEnd 이벤트 사이에 NotifyTick 이벤트가 있어야 합니다.
  • 여러가지 애님 (보통) 노티파이(나 스테이트) 사이의 순서는 보장되지 않습니다. 두 개의 AnimNotifyState 를 서로 붙여 놓는다면, 다음 것이 시작되기 전에 먼저 것이 끝난다는 보장이 없습니다. 이런 식으로는 서로의 노티파이에 의존하지 않는 개별적인 동작에만 사용하시기 바랍니다.
  • 음수 재생 속도는 지원되지 않습니다. 무조건 NotifyBegin 가 먼저, NotifyEnd 가 마지막에 호출됩니다.

순서와 로직

AnimNotifyState 가 먼저 발동되면 Start 블루프린트가 호출되고, 같은 프레임 업데이트시 Tick 블루프린트가 호출됩니다. 그 이후의  마다 Tick 블루프린트만 호출됩니다. 마지막  업데이트시 Tick 블루프린트 호출 이후 End 블루프린트가 호출됩니다.

즉 실용적인 용도로 무언가를 매 프레임마다 변경하는 작업은 Tick 블루프린트에 들어가야 합니다.  시작 전 변수, 플래그, 프로퍼티 등을 일정한 값으로 설정할 필요가 있는 경우, Start 블루프린트로 가야 합니다. 마지막으로 최종  이후 변수, 플래그, 프로퍼티를 변경하는 데는 End 블루프린트를 사용하면 됩니다.

네이티브 노티파이 스테이트

Notify State 를 추가하려고 선택할 때, Timed Particle Effect (시간차 파티클 이펙트) 또는 애니메이션 트레일 형태의 두 가지 네이티브 노티파이 스테이트 중 하나를 할당할 수도 있습니다.

 

시간차 파티클 이펙트

Timed Particle Effect 는 애니메이션의 일정 시점에서 파티클 이펙트 를 재생할 수 있다는 점에서 Play Particle Effect (파티클 이펙트 재생) 노티파이와 비슷하지만, Timed Particle Effect 로는 노티파이 자체내에서 이펙트의 길이를 정의할 수 있다는 점이 다릅니다.

 

위 그림에서 Timed Particle Effect 가 애니메이션에 할당되어 있습니다. (파랑 화살표시가 된) 끝( 또는 시작)에 있는 핸들 바에 클릭한 다음 끌면 이펙트 길이를 늘이거나 줄일 수 있습니다.

애니메이션 트레일

Animation Trails (또는 줄여서 AnimTrail, 애님 트레일)은 씬에 움직이는 오브젝트 뒤로 자취를 남길 수 있도록 해 주는 이미터입니다. 매 틱마다 스켈레탈 메시 상의 두 소켓 위치를 샘플링한 다음, 그 소켓 사이의 트라이앵글을 자취 길이만큼 깁습니다.

애님 트레일 이미터를 사용하는 방법은:

  1. AnimTrail 타입 데이터 포함 이미터가 들어있는 파티클 시스템 을 만듭니다.
  2. 애니메이션에 Trail 유형의 노티파이 스테이트를 생성하여 추가합니다.

애님 트레일을 추가한 이후에는 디테일 패널에서 프로퍼티 조정이 가능합니다.

 

 
프로퍼티 설명
PSTemplate PS 템플릿 - 위에 설명된 애님 트레일이 들어있는 파티클 시스템입니다.
First Socket Name 첫 소켓 이름 - 트레일을 정의하는 첫 본/소켓 이름입니다.
Second Socket Name 둘째 소켓 이름 - 트레일을 정의하는 둘째 본/소켓 이름입니다.

위의 프로퍼티는 필수지만 아래는 옵션입니다. 애니메이션 도중 트레일의 폭을 변경할 수 있도록 해 줍니다. 필요한 대로 이동되는 소켓에 트레일을 붙일 수도 있지만 이상적이지는 않습니다. 이 메소드는 폭 스케일 값을 

제공하는 것을 기반으로 합니다. 폭 스케일이 1.0 이면 트레일의 폭을 똑같이 유지하고, 0.0 은 트레일 폭을 0 으로 만듭니다.

 
프로퍼티 설명
Width Scale Curve 폭 스케일 커브 - 폭 값이 매 틱마다 샘플링되는 커브에서 옵니다. 이 프로퍼티는
그 커브의 이름입니다.
그 커브 생성에 대한 것은 아래 디테일을 참고해 주시기 바랍니다.
Width Scale Mode 폭 스케일 모드 - 폭이 적용되는 방식을 변경합니다. 아래 그림은 그 작동 방식을 보여줍니다.
예제에서는 가운데 0 에서 1 로 갔다가 다시 0 으로 돌아오는 사인같은 곡선을 보여줍니다.

 

왼쪽 그림은 중앙에서 바깥쪽으로 스케일이 커지는 중앙에서, 가운데는 첫 소켓에서부터 스케일이 작아지는 첫 소켓에서, 오른쪽은 두 번째 소켓에서부터 스케일이 작아지는 둘째 소켓에서 를 나타냅니다.

디버그 렌더링 옵션도 있습니다:

 
프로퍼티 설명
Render Geometry 지오메트리 렌더링 - 메인 트레일 지오메트리의 렌더링을 토글합니다.
Render Spawn Points 스폰 포인트 렌더링 - 트레일의 주요 스폰 지점, 예로 매 틱마다 소켓에서 샘플링되는 위치에 대한 디버그 렌더링을 토글합니다.
Render Tangents 탄젠트 렌더링 - 커브 탄젠트의 디버그 렌더링을 토글합니다.
Render Tessellation 테셀레이션 렌더링 - 커브의 모든 버텍스에 대한 디버그 렌더링을 토글합니다. 스폰 지점 사이의 커브 테셀레이션이 어떻게 되고 있는지 보여줍니다.

부가 노티파이 프로퍼티

각 노티파이 유형의 디테일 패널 Anim Notify 섹션에서 변경할 수 있는 프로퍼티에 추가로 (적용 가능한 경우) 노티파이 사용 방식을 정의할 수 있는 추가 프로퍼티는 아래와 같습니다.

 

 

Trigger Settings (트리거 세팅)

Notify Trigger Chance 노티파이 트리거 확률 - 노티파이 발동 확률을 정의합니다 (0=발동 안됨, 1=항상 발동).
Trigger on Dedicated Server 데디케이티드 서버에서 트리거 - 끄면 이 노티파이는 데디케이티드 서버에서는 생략됩니다.
Notify Filter Type 노티파이 필터 유형 - 노티파이 필터링(발동 중지)을 위한 메소드를 정의합니다. 메시의 현재 LOD 에 따른 필터링을 하도록 설정할 수 있습니다.
Event (이벤트)
Trigger Weight Threshold 트리거 가중 한계치 - 애니메이션 시퀀스의 가중치가 얼마나 되어야 노티파이가 발동되는지를 결정합니다.
Montage Tick Type 몽타주 틱 유형 - 노티파이 처리 방식을 결정하는 메소드로, Queued (대기열 방식)인지 Branching Point (분기점 방식)인지 결정합니다 (아래 몽타주 틱 유형 참고).
Anim Link (애님 링크)
Slot 슬롯 - LinkedMontage 안에 현재 사용되고 있는 슬롯 인덱스입니다.
Link Method 링크 메소드 - 시간 계산 메소드를 결정합니다. Absolute (절대치는 이동 없이 지정된 시간에 머무릅니다), Relative (상대치는 세그먼트를 따라 이동하되, 세그먼트의 크기가 변할 때는 이동하지 않습니다), Proportional (비율치는 세그먼트와 함께 이동하며, 세그먼트 내내 일정 비율로 유지됩니다).

몽타주 틱 유형

Montage Tipe Type (몽타주 틱 유형) 중 Queued (대기열 방식)과 Branching Point (분기점 방식)의 주요 차이점은, 대기열 방식은 비동기식인 반면, 분기점 방식은 동기식입니다. 최종 사용자 입장에서 이게 무슨 뜻이냐면, 분기점 방식은 애니메이션 타임라인 상의 위치를 지정하는 데 있어 정밀도가 훨씬 높다는 뜻입니다.

특정 애니메이션의 매우 정확한 지점으로 점프를 해야 할 필요가 있을 경우라면 정밀도가 높아야 합니다. 대기열 방식으로도 같은 작업을 할 수는 있지만, 그 비동기 속성으로 인해 이벤트 발동이 다른 애니메이션 프레임에서 일어날 수 있으므로, 동작에 버벅임이나 끊김이 발생할 수 있습니다.

분기점 방식은 그 동기적 속성과 그로 인한 정밀도로 인해 대기열 방식보다 퍼포먼스 비용이 높습니다. 이벤트가 애니메이션 타임라인 상의 정확한 지점에 발동해야 하는 경우, 이를테면 다른 애니메이션으로 직접 점프할 때 프레임 단위로 일치해야 하는 경우에만 사용해야 합니다. 한 (또는 그 미만의) 프레임 정도 어긋나도 괜찮은 경우, 대기열 방식을 사용하는 것이 좋습니다.

 

 

 

 

=================================

=================================

=================================

 

 

반응형
그리드형


관련글 더보기

댓글 영역