SlideShare ist ein Scribd-Unternehmen logo
1 von 32
DevRookie
Unreal
Animation
Montage
2021.03.06
By TonyChoiMS
애니메이션 시스템
Anim Graph
Anim Instance
Anim Montage
참고자료
Index
01
02
03
04
05
애니메이션 시스템
Animation System
- 언리얼 엔진은 캐릭터가 다양한 상황에 적절한 애니메이션을 체계적으로 재생하도록 애니메이션 블루프린트를 제공.
- 애니메이션 블루프린트란, 스켈레탈 메시의 애니메이션을 제어하는 특수한 블루프린트입니다.
1. 애님 인스턴스
- 애니메이션 블루프린트의 기반을 이루는 클래스.
- 스켈레탈 메시를 소유하는 폰의 정보를 받아 Anim Graph가 참조할 데이터를 제공. (BP와 C++모두 제작 가능)
2. 애님 그래프
- 시각적 도구를 사용해 애니메이션 시스템을 제작
- Anim Instance의 변수 값에 따라 변화하는 애니메이션 시스템을 설계하는 공간
애니메이션 시스템
01
4
애님 인스턴스
Anim Instance
Anim Instance란?
- 애니메이션을 만들기 위해 사용되는 데이터들과 그에 대한 명령어 세트를 모아둔 오브젝트 인스턴스.
- Facade 디자인 패턴을 사용해서 만들어진 오브젝트로써, 현재 실행되고 있는 애니메이션과 애니메이션 몽타주들
을 관리하는 오브젝트입니다.
- TryGetPawnOwner() : AnimInstance를 사용중인 Pawn에게 접근할 수 있는 함수로 AnimInstance 클래스에 정
의되어 있습니다.
- 또한 역으로 Pawn에서 스켈레탈 메시 컴포넌트에서 GetAnimInstance() 함수를 사용해서 AnimInstance에 접근
할 수 있습니다.
Anim Instance
03
5
- 주의할 점은 AnimInstance를 가져올 때 생성자시점에서 가져오려고 하면 nullptr를 반환합니다.
- 그렇기 때문에 PostInitializeComponents() 함수 시점에서 호출하는 것이 가장 바람직합니다.
(4.19 이전 버전에서는 확인 필요.)
Anim Instance
03
6
애님 그래프
Anim Graph, State Machine
- Anim Graph는 현재 프레임에 대한 스켈레탈 메시의 최종 포즈를 구하는데 사용됩니다.
- 각각의 애니메이션 블루프린트에는 Anim Graph가 있으며, 그 안에는 애니메이션 노드를
이용해 애니메이션 시퀀스 샘플링, 블렌딩, 스켈레탈 메쉬 컨트롤을 사용한 본 트랜스폼 작업
을 합니다.
- 이벤트 그래프나, 네이티브 코드와 같이 다른곳에서 계산된 값을 사용할 수 있으며, 그것
을 블렌드 스페이스나 다른 블렌드 노드의 입력으로 사용할 수 있습니다.
Anim Graph
02
7
- 기본적으로 멀티 스레드 애니메이션 업데이트 세팅을 사용하고 있습니다. 그렇기 때문에
Anim Graph에 Unsafe한 작업이 이루어지는 경우 컴파일 경고가 나옵니다.
Anim Graph
02
8
- Anim Graph는 스테이트 머신(유한 상태 기계, finite-state
machine, FSM) 기능을 제공합니다.
1. 스테이트 머신은 주로 여러가지 상태(State), 그 상태를 드나드
는 트랜지션(Transition), 그리고 그 상황을 정의하는 룰(Rule)의 망으
로 이루어 집니다.
2. 각 상태는 각각의 룰 세트와 함께 독립된 블루프린트 망으로 간주
됩니다.
State Machine
02
4
- 여기서 State는 캐릭터가 반복해서 재생해야 할 애니메이션 동작이
라고 할 수 있습니다.
- 하나의 State에서 다른 State로 이동하기 위해서는 조건이 필요한데,
이동하는 방향을 트랜지션이라고 하며, 단방향 화살표로 표현됩니다.
- 트랜지션이 실행되기 위한 조건은 룰이라고 표현합니다.
- 스테이트 머신에서는 Locomotion이라고 불리는 애니메이션들을 정
의하게 됩니다.
State Machine
02
4
- Locomotion이란? 생명체나 유기체가 어떠한 위치에서 다른 위치까지 움직이는 방법에 대한 정의를 얘기합니다.
- 기어가기, 미끄러져가기, 달려가기, 점프하기, 걸어가기, 굴러가기, 활공, 날아가기, 헤엄쳐가기, 밀며나아가기.
Locomotion
02
4
- 여기서 State는 스켈레탈 메시가 정기적으로 블렌딩하여 드나드는 애님 그래프의 조직화된 한 부분으로 생각하면
좋을 것 같습니다.
- State를 더블클릭하면 그래프가 열리는데, 그 안에서 최종 애니메이션 포즈를 결정할 수 있습니다.
- 이 안에서 블렌드 스페이스를 포함할 수도 있습니다.
State(상태)
02
4
- 스켈레탈 메시가 한 상태에서 다른 상태로 어떻게 전환되는지 제어할 수 있어야 하는데, 그 때 트랜지션 룰이 사용
됩니다.
- 트랜지션 룰은 상태를 연결하는 와이어를 따라 자동 생성됩니다.
- 트랜지션 룰은 최종 결과값을 TRUE/FALSE 형태로 반환시켜주면 전환 할 수 있는지 여부를 결정합니다.
Transition Rule
02
13
애님 몽타주
Animation Montage
- 몽타주의 사전적 정의는 촬영된 화면이나 인쇄된 조일르 떼어 붙여서 새로운 장면이나 이미지를 만드
는 미술 기법을 의미합니다.
- 스테이트 머신의 확장 없이 특정 상황에서 원하는 애니메이션을 발동시키는 기능을 말합니다.
- 여러 애니메이션 시퀀스들을 하나의 애셋으로 합쳐 새로운 애니메이션을 생성하는 기법입니다.
- 합친 몽타주는 섹션(Section) 단위로 관리가 가능해서 그 일부 또는 조합 재생이 가능합니다.
- 몽타주 안에서는 이벤트를 발생시켜 사운드 큐나 파티클 이펙트 재생, 값 변경 등 게임 로직을 제어할
수 있습니다.
Animation Montage
04
14
이럴 때 사용하면 좋아요!
- 애니메이션 블루프린트의 이벤트 그래프에서 애니메이션 재생 가능.
- 복잡한 애니메이션 시퀀스를 체인으로 묶어 하나의 애니메이션으로 간주
- 특정 애니메이션 일부분만 코드나 블루프린트 스크립트로 반복
- 코드나 블루프린트 스크립트에 따라 여러 애니메이션을 이벤트 기반 전환 처리
- 복잡한 애니메이션 시퀀스를 네임드 슬롯에 할당하여 코드나 블루프린트로 전환
- 코드나 블루프린트 스크립트에 따라 여러가님 애님 시퀀스를 전환
Animation Montage
04
15
Anim to Play로 재생
- 스켈레탈 메시 디테일 패널에서 Animation Mode를 Use
Animation Asset으로 설정합니다.
-하단의 Anim to Play에 원하는 애니메이션 몽타주를 설정합
니다.
- 설정이 끝나면 스켈레탈 메시가 선택된 애니메이션을 자동으
로 재생합니다.
Montage Play
04
4
Anim Instance를 이용한 Montage Play
- 캐릭터의 SkeletalMesh Component의 Animation 탭으로
가서 Animation Mode를 Use Animation Blueprint로 지정합니
다.
- Anim Class 항목에 사용할 Anim Instance를 지정해줍니다.
Montage Play
04
17
1. 몽타주
2. 섹션
3. 엘리먼트 타이밍
4. 노티파이
5. 커브
Animation Montage
04
4
1. 섹션 – 몽타주 내 생성되어 있는 섹션을 표시합니다.
2. 슬롯 – 현재 슬롯에 추가되어 있는 애니메이션을 표시합니다.
3. 그룹/슬롯 – 현재 선택된 애님 그룹 및 슬롯을 표시합니다.
Animation Montage
04
19
1. 섹션 – 몽타주 내 생성되어 있는 섹션을 표시합니다.
- 슬릇을 애니메이션 여러 부분으로 나눌 수 있습니다.
- 각 섹션에는 슬롯의 타임라인 안에 이름과 위치가 있습니다.
- 이름을 사용해서 특정 섹션에 바로 점프하거나, 현재 섹션이 끝나면 다음에 재생하도록 대기열
에 등록할 수 있습니다.
Section
04
20
2. 슬롯 – 현재 슬롯에 추가되어 있는 애니메이션을 표시합니다.
- 애니메이션 시퀀스를 담을 수 있는 트랙입니다.
- 슬롯을 여러 개 만들어둘 경우, 애니메이션 블루프린트의 애님 그래프에서 Slot 노드를 사용하
여 애니메이션 세트를 선택해서 결정할 수 있습니다.
- 다수의 슬롯을 사용할 때 최적의 결과를 얻기 위해서는, 애니메이션 끝에서 끝까지의 길이가 같
도록 맞춰 보시기 바랍니다.
Slot
04
21
3. 그룹/슬롯 – 현재 선택된 애님 그룹 및 슬롯을 표시합니다.
- 그룹 당 하나의 몽타주만 재생 가능합니다.
- 동시에 다른 몽타주를 재생하려는 경우, 그에 맞는 새 그룹을 만들어주면 됩니다.
- 애님 그룹 및 슬롯은 애님 슬롯 매니저 탭 안에 모여 있어 아이콘을 클릭하고 드랍다운 메뉴로 유효한 슬롯 중에서
선택할 수 있습니다.
- 새 몽타주를 생성하면 바로 정상작동 가능하도록 슬롯 노드에 기본적으로 하나의 디플트 슬롯이 갖추어져 있습니
다.
SlotGroup
04
22
- 애니메이션 특정 지점에서 이벤트를 발생시킬 수 있는 기능입니다.
- 이를 통해 콤보 판정, 공격 판정, 사운드 큐, 이펙트 등의 효과를 애니메이션에 맞춰 구현 할 수
있습니다.
- Anim Instance를 C++로 사용하는 경우, 해당 클래스에 ‘AnimNotify_노티파이이름’으로 함수
를 선언해서 로직을 구성하면, 애니메이션이 노티파이 될 때 해당 함수가 호출됩니다.
-
Animation Notify
04
23
- 애님 몽타주는 자손 몽타주(Child Montage)를 생성할 수 있습니다.
- 자손 몽타주는 게임 플레이에 영향을 주지 않고, 다수의 에셋에 노티
파이 등 애님 몽타주의 디테일을 다시 만들 필요 없이, 애니메이션을 편
리하게 다변화 시킬 수 있는 기능입니다.
- 예를 들면 캐릭터의 공격 애니메이션을 다양하게 만들 수도 있고,
착용하고 있는 아이템에 따라 대기 애니메이션에 변화를 줄 수도 있습니
다.
- 자손 몽타주로 생성된 어셋의 이름에는 _Child가 붙습니다.
Child Montage
04
24
- 자손 몽타주에는 모든 속성들이 회색으로 변하게 되어 수정할 수 없는 상태가 됩니다.
- 자손 몽타주로는 또 자손 몽타주를 만들 수 없습니다.
Child Montage
04
4
- 슬롯 트랙에서 설정되있는 애니메이션을 다른 애니메이션으로 대체 하거나, 대체됬던 애니메이션을 다시 부모
애니메이션으로 되돌릴 수 있습니다.(부모 : 녹색, 변경 : 노란색)
- 길이가 다른 애니메이션으로도 대체 할 수 있으며, 엔진에서 대체 애니메이션이 원본과 같은 시간에 비례해서
맞는 부분을 사용하도록 재생 속도, 시작 시간, 끝 시간을 자동 조정해줍니다.
- 단, 섹션의 길이는 조절 할 수 없습니다.
Child Montage
04
26
참고 자료
05
27
- 언리얼엔진 공식 문서
https://docs.unrealengine.com/ko/AnimatingObjects/SkeletalMeshAnimation/An
imMontage/index.html
- BBAGWANG님의 블로그
- 이득우의 언리얼 C++ 게임 개발의 정석
엔진에서
직접 해보기
감사합니다

Weitere ähnliche Inhalte

Was ist angesagt?

GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자TonyCms
 
Umg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation BoxUmg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation Box대영 노
 
언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.Wuwon Yu
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기Yongha Kim
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링TonyCms
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceXionglong Jin
 
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015devCAT Studio, NEXON
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018devCAT Studio, NEXON
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)중선 곽
 
이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012devCAT Studio, NEXON
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architectureJongwon Kim
 
Unreal python
Unreal pythonUnreal python
Unreal pythonTonyCms
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
AAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxAAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxTonyCms
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴예림 임
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션QooJuice
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기Seungjae Lee
 
190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기KWANGIL KIM
 

Was ist angesagt? (20)

GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자
 
Umg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation BoxUmg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation Box
 
언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
Unreal python
Unreal pythonUnreal python
Unreal python
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
AAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxAAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptx
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기
 

Ähnlich wie Unreal animation system

Unity3D - SmoothMoves
Unity3D -  SmoothMovesUnity3D -  SmoothMoves
Unity3D - SmoothMovesSungWook Hong
 
스켈레탈 메시 애니메이션 블루프린트
스켈레탈 메시 애니메이션 블루프린트스켈레탈 메시 애니메이션 블루프린트
스켈레탈 메시 애니메이션 블루프린트Soochan Park
 
언리얼 애니메이션.pptx
언리얼 애니메이션.pptx언리얼 애니메이션.pptx
언리얼 애니메이션.pptxMUUMUMUMU
 
스키닝 애니메이션
스키닝 애니메이션스키닝 애니메이션
스키닝 애니메이션sung suk seo
 
최신영화제작기술 Mit
최신영화제작기술 Mit최신영화제작기술 Mit
최신영화제작기술 Mitheeruem
 
About matinee
About matineeAbout matinee
About matineeTonyCms
 
Unity4 Mecanim 활용
Unity4 Mecanim 활용Unity4 Mecanim 활용
Unity4 Mecanim 활용희운 강
 
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Dong Chan Shin
 
안드로이드스터디 11
안드로이드스터디 11안드로이드스터디 11
안드로이드스터디 11jangpd007
 
역동적인 애니메이션 Ik
역동적인 애니메이션 Ik역동적인 애니메이션 Ik
역동적인 애니메이션 IkKyeongWon Koo
 
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지영준 박
 
유니티에서 MMD 사용해보기
유니티에서 MMD 사용해보기유니티에서 MMD 사용해보기
유니티에서 MMD 사용해보기flashscope
 
[데브루키_언리얼스터디_0525] 애니메이션 노티파이
[데브루키_언리얼스터디_0525] 애니메이션 노티파이[데브루키_언리얼스터디_0525] 애니메이션 노티파이
[데브루키_언리얼스터디_0525] 애니메이션 노티파이MinGeun Park
 
Unity cookbook 9
Unity cookbook 9Unity cookbook 9
Unity cookbook 9Jihun Soh
 

Ähnlich wie Unreal animation system (14)

Unity3D - SmoothMoves
Unity3D -  SmoothMovesUnity3D -  SmoothMoves
Unity3D - SmoothMoves
 
스켈레탈 메시 애니메이션 블루프린트
스켈레탈 메시 애니메이션 블루프린트스켈레탈 메시 애니메이션 블루프린트
스켈레탈 메시 애니메이션 블루프린트
 
언리얼 애니메이션.pptx
언리얼 애니메이션.pptx언리얼 애니메이션.pptx
언리얼 애니메이션.pptx
 
스키닝 애니메이션
스키닝 애니메이션스키닝 애니메이션
스키닝 애니메이션
 
최신영화제작기술 Mit
최신영화제작기술 Mit최신영화제작기술 Mit
최신영화제작기술 Mit
 
About matinee
About matineeAbout matinee
About matinee
 
Unity4 Mecanim 활용
Unity4 Mecanim 활용Unity4 Mecanim 활용
Unity4 Mecanim 활용
 
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
 
안드로이드스터디 11
안드로이드스터디 11안드로이드스터디 11
안드로이드스터디 11
 
역동적인 애니메이션 Ik
역동적인 애니메이션 Ik역동적인 애니메이션 Ik
역동적인 애니메이션 Ik
 
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
 
유니티에서 MMD 사용해보기
유니티에서 MMD 사용해보기유니티에서 MMD 사용해보기
유니티에서 MMD 사용해보기
 
[데브루키_언리얼스터디_0525] 애니메이션 노티파이
[데브루키_언리얼스터디_0525] 애니메이션 노티파이[데브루키_언리얼스터디_0525] 애니메이션 노티파이
[데브루키_언리얼스터디_0525] 애니메이션 노티파이
 
Unity cookbook 9
Unity cookbook 9Unity cookbook 9
Unity cookbook 9
 

Mehr von TonyCms

Unreal_SubSystem.pptx
Unreal_SubSystem.pptxUnreal_SubSystem.pptx
Unreal_SubSystem.pptxTonyCms
 
Effective cpp
Effective cppEffective cpp
Effective cppTonyCms
 
Cpp에서 활용해보는 Lambda식
Cpp에서 활용해보는 Lambda식Cpp에서 활용해보는 Lambda식
Cpp에서 활용해보는 Lambda식TonyCms
 
Unreal perception
Unreal perceptionUnreal perception
Unreal perceptionTonyCms
 
읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.TonyCms
 
Cascade Shadow Map
Cascade Shadow MapCascade Shadow Map
Cascade Shadow MapTonyCms
 

Mehr von TonyCms (6)

Unreal_SubSystem.pptx
Unreal_SubSystem.pptxUnreal_SubSystem.pptx
Unreal_SubSystem.pptx
 
Effective cpp
Effective cppEffective cpp
Effective cpp
 
Cpp에서 활용해보는 Lambda식
Cpp에서 활용해보는 Lambda식Cpp에서 활용해보는 Lambda식
Cpp에서 활용해보는 Lambda식
 
Unreal perception
Unreal perceptionUnreal perception
Unreal perception
 
읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.
 
Cascade Shadow Map
Cascade Shadow MapCascade Shadow Map
Cascade Shadow Map
 

Unreal animation system

  • 2. 애니메이션 시스템 Anim Graph Anim Instance Anim Montage 참고자료 Index 01 02 03 04 05
  • 4. - 언리얼 엔진은 캐릭터가 다양한 상황에 적절한 애니메이션을 체계적으로 재생하도록 애니메이션 블루프린트를 제공. - 애니메이션 블루프린트란, 스켈레탈 메시의 애니메이션을 제어하는 특수한 블루프린트입니다. 1. 애님 인스턴스 - 애니메이션 블루프린트의 기반을 이루는 클래스. - 스켈레탈 메시를 소유하는 폰의 정보를 받아 Anim Graph가 참조할 데이터를 제공. (BP와 C++모두 제작 가능) 2. 애님 그래프 - 시각적 도구를 사용해 애니메이션 시스템을 제작 - Anim Instance의 변수 값에 따라 변화하는 애니메이션 시스템을 설계하는 공간 애니메이션 시스템 01 4
  • 6. Anim Instance란? - 애니메이션을 만들기 위해 사용되는 데이터들과 그에 대한 명령어 세트를 모아둔 오브젝트 인스턴스. - Facade 디자인 패턴을 사용해서 만들어진 오브젝트로써, 현재 실행되고 있는 애니메이션과 애니메이션 몽타주들 을 관리하는 오브젝트입니다. - TryGetPawnOwner() : AnimInstance를 사용중인 Pawn에게 접근할 수 있는 함수로 AnimInstance 클래스에 정 의되어 있습니다. - 또한 역으로 Pawn에서 스켈레탈 메시 컴포넌트에서 GetAnimInstance() 함수를 사용해서 AnimInstance에 접근 할 수 있습니다. Anim Instance 03 5
  • 7. - 주의할 점은 AnimInstance를 가져올 때 생성자시점에서 가져오려고 하면 nullptr를 반환합니다. - 그렇기 때문에 PostInitializeComponents() 함수 시점에서 호출하는 것이 가장 바람직합니다. (4.19 이전 버전에서는 확인 필요.) Anim Instance 03 6
  • 9. - Anim Graph는 현재 프레임에 대한 스켈레탈 메시의 최종 포즈를 구하는데 사용됩니다. - 각각의 애니메이션 블루프린트에는 Anim Graph가 있으며, 그 안에는 애니메이션 노드를 이용해 애니메이션 시퀀스 샘플링, 블렌딩, 스켈레탈 메쉬 컨트롤을 사용한 본 트랜스폼 작업 을 합니다. - 이벤트 그래프나, 네이티브 코드와 같이 다른곳에서 계산된 값을 사용할 수 있으며, 그것 을 블렌드 스페이스나 다른 블렌드 노드의 입력으로 사용할 수 있습니다. Anim Graph 02 7
  • 10. - 기본적으로 멀티 스레드 애니메이션 업데이트 세팅을 사용하고 있습니다. 그렇기 때문에 Anim Graph에 Unsafe한 작업이 이루어지는 경우 컴파일 경고가 나옵니다. Anim Graph 02 8
  • 11. - Anim Graph는 스테이트 머신(유한 상태 기계, finite-state machine, FSM) 기능을 제공합니다. 1. 스테이트 머신은 주로 여러가지 상태(State), 그 상태를 드나드 는 트랜지션(Transition), 그리고 그 상황을 정의하는 룰(Rule)의 망으 로 이루어 집니다. 2. 각 상태는 각각의 룰 세트와 함께 독립된 블루프린트 망으로 간주 됩니다. State Machine 02 4
  • 12. - 여기서 State는 캐릭터가 반복해서 재생해야 할 애니메이션 동작이 라고 할 수 있습니다. - 하나의 State에서 다른 State로 이동하기 위해서는 조건이 필요한데, 이동하는 방향을 트랜지션이라고 하며, 단방향 화살표로 표현됩니다. - 트랜지션이 실행되기 위한 조건은 룰이라고 표현합니다. - 스테이트 머신에서는 Locomotion이라고 불리는 애니메이션들을 정 의하게 됩니다. State Machine 02 4
  • 13. - Locomotion이란? 생명체나 유기체가 어떠한 위치에서 다른 위치까지 움직이는 방법에 대한 정의를 얘기합니다. - 기어가기, 미끄러져가기, 달려가기, 점프하기, 걸어가기, 굴러가기, 활공, 날아가기, 헤엄쳐가기, 밀며나아가기. Locomotion 02 4
  • 14. - 여기서 State는 스켈레탈 메시가 정기적으로 블렌딩하여 드나드는 애님 그래프의 조직화된 한 부분으로 생각하면 좋을 것 같습니다. - State를 더블클릭하면 그래프가 열리는데, 그 안에서 최종 애니메이션 포즈를 결정할 수 있습니다. - 이 안에서 블렌드 스페이스를 포함할 수도 있습니다. State(상태) 02 4
  • 15. - 스켈레탈 메시가 한 상태에서 다른 상태로 어떻게 전환되는지 제어할 수 있어야 하는데, 그 때 트랜지션 룰이 사용 됩니다. - 트랜지션 룰은 상태를 연결하는 와이어를 따라 자동 생성됩니다. - 트랜지션 룰은 최종 결과값을 TRUE/FALSE 형태로 반환시켜주면 전환 할 수 있는지 여부를 결정합니다. Transition Rule 02 13
  • 17. - 몽타주의 사전적 정의는 촬영된 화면이나 인쇄된 조일르 떼어 붙여서 새로운 장면이나 이미지를 만드 는 미술 기법을 의미합니다. - 스테이트 머신의 확장 없이 특정 상황에서 원하는 애니메이션을 발동시키는 기능을 말합니다. - 여러 애니메이션 시퀀스들을 하나의 애셋으로 합쳐 새로운 애니메이션을 생성하는 기법입니다. - 합친 몽타주는 섹션(Section) 단위로 관리가 가능해서 그 일부 또는 조합 재생이 가능합니다. - 몽타주 안에서는 이벤트를 발생시켜 사운드 큐나 파티클 이펙트 재생, 값 변경 등 게임 로직을 제어할 수 있습니다. Animation Montage 04 14
  • 18. 이럴 때 사용하면 좋아요! - 애니메이션 블루프린트의 이벤트 그래프에서 애니메이션 재생 가능. - 복잡한 애니메이션 시퀀스를 체인으로 묶어 하나의 애니메이션으로 간주 - 특정 애니메이션 일부분만 코드나 블루프린트 스크립트로 반복 - 코드나 블루프린트 스크립트에 따라 여러 애니메이션을 이벤트 기반 전환 처리 - 복잡한 애니메이션 시퀀스를 네임드 슬롯에 할당하여 코드나 블루프린트로 전환 - 코드나 블루프린트 스크립트에 따라 여러가님 애님 시퀀스를 전환 Animation Montage 04 15
  • 19. Anim to Play로 재생 - 스켈레탈 메시 디테일 패널에서 Animation Mode를 Use Animation Asset으로 설정합니다. -하단의 Anim to Play에 원하는 애니메이션 몽타주를 설정합 니다. - 설정이 끝나면 스켈레탈 메시가 선택된 애니메이션을 자동으 로 재생합니다. Montage Play 04 4
  • 20. Anim Instance를 이용한 Montage Play - 캐릭터의 SkeletalMesh Component의 Animation 탭으로 가서 Animation Mode를 Use Animation Blueprint로 지정합니 다. - Anim Class 항목에 사용할 Anim Instance를 지정해줍니다. Montage Play 04 17
  • 21. 1. 몽타주 2. 섹션 3. 엘리먼트 타이밍 4. 노티파이 5. 커브 Animation Montage 04 4
  • 22. 1. 섹션 – 몽타주 내 생성되어 있는 섹션을 표시합니다. 2. 슬롯 – 현재 슬롯에 추가되어 있는 애니메이션을 표시합니다. 3. 그룹/슬롯 – 현재 선택된 애님 그룹 및 슬롯을 표시합니다. Animation Montage 04 19
  • 23. 1. 섹션 – 몽타주 내 생성되어 있는 섹션을 표시합니다. - 슬릇을 애니메이션 여러 부분으로 나눌 수 있습니다. - 각 섹션에는 슬롯의 타임라인 안에 이름과 위치가 있습니다. - 이름을 사용해서 특정 섹션에 바로 점프하거나, 현재 섹션이 끝나면 다음에 재생하도록 대기열 에 등록할 수 있습니다. Section 04 20
  • 24. 2. 슬롯 – 현재 슬롯에 추가되어 있는 애니메이션을 표시합니다. - 애니메이션 시퀀스를 담을 수 있는 트랙입니다. - 슬롯을 여러 개 만들어둘 경우, 애니메이션 블루프린트의 애님 그래프에서 Slot 노드를 사용하 여 애니메이션 세트를 선택해서 결정할 수 있습니다. - 다수의 슬롯을 사용할 때 최적의 결과를 얻기 위해서는, 애니메이션 끝에서 끝까지의 길이가 같 도록 맞춰 보시기 바랍니다. Slot 04 21
  • 25. 3. 그룹/슬롯 – 현재 선택된 애님 그룹 및 슬롯을 표시합니다. - 그룹 당 하나의 몽타주만 재생 가능합니다. - 동시에 다른 몽타주를 재생하려는 경우, 그에 맞는 새 그룹을 만들어주면 됩니다. - 애님 그룹 및 슬롯은 애님 슬롯 매니저 탭 안에 모여 있어 아이콘을 클릭하고 드랍다운 메뉴로 유효한 슬롯 중에서 선택할 수 있습니다. - 새 몽타주를 생성하면 바로 정상작동 가능하도록 슬롯 노드에 기본적으로 하나의 디플트 슬롯이 갖추어져 있습니 다. SlotGroup 04 22
  • 26. - 애니메이션 특정 지점에서 이벤트를 발생시킬 수 있는 기능입니다. - 이를 통해 콤보 판정, 공격 판정, 사운드 큐, 이펙트 등의 효과를 애니메이션에 맞춰 구현 할 수 있습니다. - Anim Instance를 C++로 사용하는 경우, 해당 클래스에 ‘AnimNotify_노티파이이름’으로 함수 를 선언해서 로직을 구성하면, 애니메이션이 노티파이 될 때 해당 함수가 호출됩니다. - Animation Notify 04 23
  • 27. - 애님 몽타주는 자손 몽타주(Child Montage)를 생성할 수 있습니다. - 자손 몽타주는 게임 플레이에 영향을 주지 않고, 다수의 에셋에 노티 파이 등 애님 몽타주의 디테일을 다시 만들 필요 없이, 애니메이션을 편 리하게 다변화 시킬 수 있는 기능입니다. - 예를 들면 캐릭터의 공격 애니메이션을 다양하게 만들 수도 있고, 착용하고 있는 아이템에 따라 대기 애니메이션에 변화를 줄 수도 있습니 다. - 자손 몽타주로 생성된 어셋의 이름에는 _Child가 붙습니다. Child Montage 04 24
  • 28. - 자손 몽타주에는 모든 속성들이 회색으로 변하게 되어 수정할 수 없는 상태가 됩니다. - 자손 몽타주로는 또 자손 몽타주를 만들 수 없습니다. Child Montage 04 4
  • 29. - 슬롯 트랙에서 설정되있는 애니메이션을 다른 애니메이션으로 대체 하거나, 대체됬던 애니메이션을 다시 부모 애니메이션으로 되돌릴 수 있습니다.(부모 : 녹색, 변경 : 노란색) - 길이가 다른 애니메이션으로도 대체 할 수 있으며, 엔진에서 대체 애니메이션이 원본과 같은 시간에 비례해서 맞는 부분을 사용하도록 재생 속도, 시작 시간, 끝 시간을 자동 조정해줍니다. - 단, 섹션의 길이는 조절 할 수 없습니다. Child Montage 04 26
  • 30. 참고 자료 05 27 - 언리얼엔진 공식 문서 https://docs.unrealengine.com/ko/AnimatingObjects/SkeletalMeshAnimation/An imMontage/index.html - BBAGWANG님의 블로그 - 이득우의 언리얼 C++ 게임 개발의 정석