SlideShare a Scribd company logo
1 of 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++ 게임 개발의 정석
엔진에서
직접 해보기
감사합니다

More Related Content

What's hot

레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다Lee Dustin
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션QooJuice
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기Jaeseung Ha
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기강 민우
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012devCAT Studio, NEXON
 
TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)
TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)
TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)valhashi
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현Bongseok Cho
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁KWANGIL KIM
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링TonyCms
 
GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자TonyCms
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)포프 김
 
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현MinGeun Park
 
Unreal_GameAbilitySystem.pptx
Unreal_GameAbilitySystem.pptxUnreal_GameAbilitySystem.pptx
Unreal_GameAbilitySystem.pptxTonyCms
 
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지Minjung Ko
 
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017devCAT Studio, NEXON
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들MinGeun Park
 
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Dae Hyek KIM
 
Unreal python
Unreal pythonUnreal python
Unreal pythonTonyCms
 
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...ozlael ozlael
 

What's hot (20)

레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)
TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)
TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링
 
GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
 
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
 
Unreal_GameAbilitySystem.pptx
Unreal_GameAbilitySystem.pptxUnreal_GameAbilitySystem.pptx
Unreal_GameAbilitySystem.pptx
 
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
 
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들
 
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
 
Unreal python
Unreal pythonUnreal python
Unreal python
 
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
 

Similar to 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
 

Similar to 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
 

More from 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
 

More from 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++ 게임 개발의 정석