Unreal Engine Animation

최종 수정 (2020-05-01)

애니메이션

애니메이션 블루프린트

  • 캐릭터가 다양한 상황에 적절한 애니메이션을 체계적으로 재생하도록 도와주는 애니메이션 시스템 제작 도구
  • 애님 그래프(Anim Graph)와 애님 인스턴스(Anim Instance)로 구성된다.

애님 인스턴스

  • 시각적 도구를 사용해 애니메이션 시스템을 제작하도록 설계
  • 스켈레탈 메시를 소유하는 폰의 정보를 받아 애님 그래프가 참조할 데이터를 제공.
  • 블루프린트와 C++로 제작 가능
  • 틱마다 호출되는 NativeAnimationUpdate 가상함수 제공

애님 그래프

  • 애니메이션 블루프린트의 기반을 이룸.
  • 애님 인스턴스의 변수 값에 따라 변화하는 애니메이션 시스템을 설계하는 공간.
  • 블루프린트로만 제작 가능
  • 스테이트 머신(State Machine 제공)

  • 스테이트 머신(State Machine)
  • 유한 상태 기계(FSM)
  • 기계가 반복 수행해야 하는 동작을 설계한 단위인 스테이트(State)를 정의하는 것으로 시작.
  • 스테이트 머신은 여러개의 스테이트를 설계할 수 있는데, 그 중 하나의 스테이트만 지정해 해당 스테이트에서 지정한 동작을 반복수행한다.
  • 애니메이션 시스템에서는 캐릭터가 반복해서 재생해야 할 애니메이션 동작을 의미함.
  • 하나의 스테이트에서 다른 스테이트로 이동하기 위한 조건이 필요한데, 이를 트랜지션(Transition)이라고 한다.
  • 시작지점인 Entry와 연결된 스테이트를 특별히 ‘시작 스테이트’라고 한다.

애니메이션 리타겟

  • 언리얼에서 제공하는 기능으로, 인간형 캐릭터의 경우 스켈레톤의 구성이 달라도 애니메이션을 교환할 수 있도록 제공하는 기능

애니메이션 몽타주

  • Asset의 일종
  • 몽타주란, 촬영된 화면이나 인쇄된 종이를 떼어 붙여서 새로운 장면이나 이미지를 만드는 미술 기법을 의미한다.
  • 여러 애니메이션 클립들의 일부를 떼어내고 붙여서 새로운 애니메이션을 생성하는 기법(여러개의 시퀀스를 합쳐서 재생시켜주는 기능)
  • 스테이트 머신의 확장 없이 특정 상황에서 원하는 애니메이션을 발동시킬 수 있는 기능.
  • 시작, 루프, 끝 애니메이션을 나눠서 섹션 구간별 이벤트를 발생시킬 수 있는 섹션 기능
  • 몽타주는 섹션(Section)을 단위로 애니메이션을 관리한다.
  • 애니메이션 몽타주가 실행되기 이전의 애니메이션 포즈들을 모두 삭제 후, 애니메이션 몽타주에 저장되있는 애니메이션들을 사용한다.
  • 일정 타이밍에 소리를 출력하거나, 이펙트를 출력하는 등, 시점을 잡을 수 있다.
  • 커스텀 커브 기능
  • Pawn이 애니메이션 블루프린트한테 바로 명령을 내릴 수 있다.

  • 프로세스 : 애니메이션 몽타주 생성 -> 스켈레톤 선택 -> 몽타쥬에 원하는 애니메이션을 정의 후, 캐릭터 블루프린트에서 해당 이벤트가 발생했을 경우 skeletal mesh를 통해서 애니메이션 블루프린트를 가져와서 montage play 함수를 호출한다. -> 애니메이션 블루프린트로 가서 애니메이션 컴포넌트를 최종 애니메이션 포즈로 입력하는 사이에 Montage의 DefaultSlot을 통과하게 중간에 배치한다.

### 몽타주 Tick Type

  • Branching Point : 해당 프레임에 즉각적으로 반응하는 방식. 섹션을 바꾸거나 몽타주 위치 변경을 원할 경우에 적합합니다.
  • Queued : 비동기 방식으로 신호를 받는 방식. 타이밍에 민감하지 않은 사운드나 이펙트를 발생시킬 때 사용하는 것이 적합합니다.

애니메이션 노티파이

  • 애니메이션을 재생하는 동안 특정 타이밍에 애님 인스턴스에게 신호를 보내는 기능이다.
  • 애니메이션 블루프린트의 노티파이 섹션에서 우클릭 후 노티파이 추가를 하면 원하는 시점에 애님 인스턴스에게 알림을 보낼 수 있는 노티파이가 추가된다.
  • 노티파이가 호출되면 엔젠에서 애님 인스턴스 클래스 내부의 ‘AnimNotify_노티파이명’ 으로 작성된 멤버함수를 찾아서 호출한다.
  • 이 때, 해당 멤버 함수는 반드시 UFUNCTION 매크로가 지정되어 있어야 한다.

함수

  • Skeletal Mesh -> Get Anim Instance : 스켈레탈 매쉬에 있는 애니메이션 블루프린트를 가져온다.
  • Get Anim Instance -> Montage Play : 생성해놓은 애니메이션 몽타주를 실행한다.
  • Montage_IsPlaying : 현재 몽타주가 재생되고 있는지 파악 (리턴값 bool)
  • 본 마다 레이어로 블렌딩 -> Mesh Space Rotation : 본의 좌표 기준으로 할 것인지, 컴포넌트 스페이스 기준으로 할 것인지 정하는 옵션

델리게이트

  • 특정 객체가 해야 할 로직을 다른 객체가 대신 처리할 수 있도록 만드는 보편적인 설계의 개념을 의미한다.
  • 언리얼에서 델리게이트는 C++ 객체에서만 사용할 수 있는 델리게이트와 C++와 블루프린트 객체가 모두 사용할 수 있는 델리게이트로 나뉜다.
  • 블루프린트 오브젝트는 멤버 함수에 대한 정보를 저장하고 로딩하는 직렬화(Serialization) 매커니즘이 들어있기 때문에 일반 C++ 언어가 관리하는 방법으로 멤버 함수를 관리할 수 없다.
  • 그렇기 떄문에 블루프린트와 관련된 C++ 함수는 모두 UFUNCTION 매크로를 사용해야 한다.
  • 이렇게 블루프린트 객체와도 연동하는 델리게이트를 언리얼 엔진에서는 다이나믹 델리게이트(Dynamic Delegate) 라고 한다.
  • 언리얼 엔진에서 델리게이트의 선언은 언리얼이 제공하는 매크로를 통해 정의되며, 이를 시그니처(Signature)라고 한다.
  • 델리게이트를 통해 이용 객체가 어떤 것인지 몰라도 델리게이트에 연결된 함수만 호출하면 되므로, 의존성 없는 설계를 할 수 있다.

멀티캐스트 델리게이트

  • 등록 되어 있는 모든 함수에게 알려주는 기능을 하는 델리게이트.(Broadcast)
 Date: April 5, 2018
 Tags:  Unreal

Previous
⏪ Unreal Engine Actor

Next
Unreal Engine Character에 대해서.. ⏩