차세대 애니메이션 기법을 MMO 액션에 적용하기

A presentation at 넥슨 개발자 컨퍼런스 2008 in May 2008 in Seoul, South Korea by Jubok Kim

Slide 1

Slide 1

차세대 애니메이션 기법을 MMO 액션에 적용하기 넥슨 데브캣 스튜디오 3실 M2팀 테크니컬 디렉터 김주복

Slide 2

Slide 2

넥슨 8년차 2001 마비노기 프로그래머 2003 마비노기 프로그래밍팀 팀장 2005 그룹웨어 개발팀 팀장 2006~ M2팀 테크니컬 디렉터 “이건 뭐 좀 만든 게 있어야…”

Slide 3

Slide 3

난이도 대상 강연내용

Slide 4

Slide 4

난이도 대상 강연내용

Slide 5

Slide 5

개발중 이 강연 내용은 현재 개발 중인 게임의 구현 방식에 대한 것으로, 최종 게임에서는 강연 내용과 다른 형태로 구현되어 있을 수도 있습니다.

Slide 6

Slide 6

차세대? XBOX720?

Slide 7

Slide 7

GTA4 사실 다룰 내용은 현 세대 Assassin’s Creed Uncharted:Drake’s Fortune

Slide 8

Slide 8

Slide 9

Slide 9

콘솔현세대 ≒ 온라인차세대?

Slide 10

Slide 10

발전 방향을 예측 콘솔 현세대 기술 ≒ 온라인 차세대 기술

Slide 11

Slide 11

왜 하필 애니메이션?

Slide 12

Slide 12

그래픽 퀄리티?

Slide 13

Slide 13

콘솔 대세 장르는 액션

Slide 14

Slide 14

액션=애니메이션

Slide 15

Slide 15

애니메이션=세일즈포인트 Assassin’s Creed

Slide 16

Slide 16

예를 들어…

Slide 17

Slide 17

정교한 근접 액션 Robert Ludlum’s The Bourne Conspiracy

Slide 18

Slide 18

Assassin’s Creed

Slide 19

Slide 19

주변 환경과 인터랙션 Tom Clancy’s Splinter Cell : Conviction

Slide 20

Slide 20

Slide 21

Slide 21

Autodesk HumanIK

Slide 22

Slide 22

다양한 리액션 Uncharted : Drake’s Fortune

Slide 23

Slide 23

Grand Theft Auto IV

Slide 24

Slide 24

NaturalMotion Euphoria

Slide 25

Slide 25

Wait & Idles Transitions Movement Cycle breakers Other Total animations 10 108 14 12 24 168 Banking L&R Walk Slow Idles Walk Normal Wait High L Start Turn Side Walk L&R Wait High R Start straight Stealth Wait Low L Stop Jog &Run Walk stop Turn on spot Wait Low R Run turns Sprint Walk breaker Oriented move 자연스러운 평상 동작 Assassin’s Creed

Slide 26

Slide 26

Crysis, 12’7”

Slide 27

Slide 27

“뭐 이리들 힘줘서 만드냐…”

Slide 28

Slide 28

복잡성의 관리

Slide 29

Slide 29

이동 트랜지션 리타게팅 발맞추기 델타 애니메이션 페이셜 모션 랙돌 제어 뱅킹 천 시뮬레이션 지글본 (힌지본) IK … 이쯤 하려면 만들 게 많다

Slide 30

Slide 30

하지만 진짜 문제는…

Slide 31

Slide 31

프로그래머 애니메이터 기획자 애니메이션 시스템

Slide 32

Slide 32

Slide 33

Slide 33

대세는 다이어그램

Slide 34

Slide 34

Morpheme NaturalMotion

Slide 35

Slide 35

Havok:Behavior Havok

Slide 36

Slide 36

UnrealEd3 Epic Games

Slide 37

Slide 37

아랍어도 아닌데 이쪽으로 읽는다;;; 아이들 애니메이션 자세히 보면…

Slide 38

Slide 38

제자리 방향 전환 블렌딩

Slide 39

Slide 39

제자리 방향 전환 블렌딩 활성화

Slide 40

Slide 40

이동 속도에 따른 블렌딩

Slide 41

Slide 41

조준 포즈의 델타애니메이션

Slide 42

Slide 42

델타 애니메이션? 애디티브 애니메이션 (Uncharted) 옵셋 블렌딩 (UnrealEd3)

Slide 43

Slide 43

=

  • 0.5 ×δ= δ

Slide 44

Slide 44

=

  • 0.5 ×δ= δ

Slide 45

Slide 45

트로이카 모션 엄폐/평상 선택 이동속도 조준모드 엄폐모드 선택 약간 더 복잡하지만 마커스도 마찬가지 서서엄폐 앉아서 엄폐

Slide 46

Slide 46

애니메이터 주도 개발 Morpheme의 레퍼런스 게임, BackBreaker의 그래프

Slide 47

Slide 47

끝?

Slide 48

Slide 48

Slide 49

Slide 49

도입 vs 자체개발

Slide 50

Slide 50

액션의 반응성, 갖고 있는 리소스, 차세대스러운 룩 목표?

Slide 51

Slide 51

주요 요구사항 : ex) IK, 지글본, 페이셜 모션

Slide 52

Slide 52

사람은 정속으로 움직이지 않는다 발 미끄러짐 방지

Slide 53

Slide 53

뱅킹, 트랜지션 등에 아티스트, 기획자가 접근 가능해야 한다 유연한 블렌딩 시스템

Slide 54

Slide 54

가능한 한 적은 수의 애니메이션 애셋을 저작한다 모션 리타게팅

Slide 55

Slide 55

레이어 0 레이어 1 레이어 2 레이어 3 기본 본 구조 손 디포머블 본 장비품 슬롯 커스터마이즈 가능한 높은 품질의 애니메이션을 지원한다 레이어드 프레임워크

Slide 56

Slide 56

페이셜 모션 지글본 IK 애니메이터 손을 덜 쓰고 모션에 풍부함을 제공한다 절차적 기법 적용

Slide 57

Slide 57

리타게팅 미들웨어와의 궁합 프레임워크의 잦은 변경 데드 레커닝과의 조합 액션 주도권 문제 즉시 동기화 기능 필요 엔진 리소스와 호환성 스크립트로 루아를 강제함 독특한 라이센싱 모델 그래프 에디팅 노하우 필요 성능 문제에 대한 신뢰도 게임의 핵심적 부분 여타 기능과 조합 가능성 도입의 걸림돌?

Slide 58

Slide 58

발은 맞아야 하지만 애니메이션이 캐릭터 위치를 결정해서는 안 된다 애니메이션 vs 로직

Slide 59

Slide 59

장비품 장착과 LOD에 따라서 본 계층 구조가 극단적으로 변한다 캐릭터 커스터마이즈

Slide 60

Slide 60

이미 개발된 코드, 도입한 미들웨어와 얼마나 잘 붙어줄 것인가? 통합 용이성

Slide 61

Slide 61

과연?

Slide 62

Slide 62

Slide 63

Slide 63

설계: 1차시도 생각이란 걸 좀 해봐…

Slide 64

Slide 64

마비노기 1과 거의 유사한 구조

Slide 65

Slide 65

애니메이터 애니메이션 Information Track 애니메이션 오리진 캐릭터 로코모션 카메라 로코모션 로직 애니메이션 어드밴스 프로세서 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 디렉션 블렌더 구조 애드온 무브 프로세서 쳐다보기 블렌더

Slide 66

Slide 66

애니메이터 애니메이션 Information Track 애니메이션 오리진 카메라 타겟의 위치, 블렌딩할 캐릭터의 위치 캐릭터 로코모션 카메라 로코모션 애니메이션 플레이어 어드밴스 프로세서 로직 애니메이션 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 애니메이션 메타 정보 디렉션 블렌더 애드온 무브 프로세서 쳐다보기 블렌더

Slide 67

Slide 67

애니메이터 애니메이션 Information Track 애니메이션 오리진 캐릭터 로코모션 발맞춤 처리 등의 노하우를 애니메이션과 분리 애니메이션 플레이어 카메라 로코모션 어드밴스 프로세서 로직 애니메이션 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 외부 솔루션 통합 디렉션 블렌더 애드온 무브 프로세서 쳐다보기 블렌더

Slide 68

Slide 68

애니메이터 애니메이션 Information Track 애니메이션 오리진 캐릭터 로코모션 애니메이션 전이시의 블렌딩을 처리 카메라 로코모션 애니메이션 플레이어 어드밴스 프로세서 로직 애니메이션 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 디렉션 블렌더 트랜지션 처리 애드온 무브 프로세서 쳐다보기 블렌더

Slide 69

Slide 69

애니메이 터 애니메이션 Information Track 애니메이션 오리진 루프 끝이나 정지 시 애니메이션 피봇과 캐릭터 위치 불일치 문제 캐릭터 로코모션 카메라 로코모션 애니메이션 플레이어 다른 모션으로 교체 애니메이션 피봇 그 사이의 이동치를 실제로 적용 어드밴스 프로세서 로직 애니메이션 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 디렉션 블렌더 새 애니메이션 피봇 발맞춤 처리 애드온 무브 프로세서 쳐다보기 블렌더

Slide 70

Slide 70

애니메이터 애니메이션 Information Track 애니메이션 오리진 회전 시 캐릭터 위치와 애니메이션 피봇의 불일치 문제 캐릭터 로코모션 카메라 로코모션 애니메이션 피봇 애니메이션 플레이어 로직 애니메이션 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 애니메이션 피봇 발맞춤 처리 어드밴스 프로세서 디렉션 블렌더 애드온 무브 프로세서 쳐다보기 블렌더

Slide 71

Slide 71

애니메이터 애니메이션 Information Track 애니메이션 오리진 캐릭터 로코모션 맞아서 날아가는 처리, 쳐다보기 등 카메라 로코모션 애니메이션 플레이어 어드밴스 프로세서 로직 애니메이션 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 절차적 모션 처리 디렉션 블렌더 애드온 무브 프로세서 쳐다보기 블렌더

Slide 72

Slide 72

문제점?

Slide 73

Slide 73

주요 요구사항 : ex) IK, 지글본, 페이셜 모션

Slide 74

Slide 74

애니메이터 애니메이션 Information Track 애니메이션 오리진 캐릭터 로코모션 카메라 로코모션 리타게터 로직 애니메이션 지글본 프로세서 디포머블 프로세서 믹서 어드밴스 프로세서 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 … 디렉션 블렌더 어디에? 애드온 무브 프로세서 쳐다보기 블렌더

Slide 75

Slide 75

확장이 거의 불가능 개별 기능을 구현하는 건 쉬운 반면, 상호 의존성이 매우 높아 변경 및 확장에 취약한 구조

Slide 76

Slide 76

설계: 2차시도 무조건 단순하게 만들자

Slide 77

Slide 77

Uncharted Animation:An In-depth Look at the Character Animation Workflow and Pipeline 모티브

Slide 78

Slide 78

애니메이 터 애니메이션 레이어 스택 애니메이션 레이어 베이스 애니메이션 애니메이션 소스 – 트랙 플레이어 어드밴스 프로세서 기본 트랜스폼 블렌더 블렌드 오퍼레이션 애니메이션 레이어 쳐다보기 (몸) 애니메이션 소스 – 1 프레임 포즈 플레이어 어드밴스 프로세서 애니메이션 레이어 더하기 트랜스폼 블렌더 블렌드 오퍼레이션 몸 좌우로 기울이기 애니메이션 소스 – 1 프레임 포즈 플레이어 어드밴스 프로세서 더하기 트랜스폼 블렌더 블렌드 오퍼레이션 애니메이션 레이어 숨쉬기 애니메이션 소스 – 트랙 플레이어 단순한 구조 어드밴스 프로세서 더하기 트랜스폼 블렌더 포지션 블렌더 디렉션 블렌더 블렌드 오퍼레이션 스탠스 프로세서

Slide 79

Slide 79

애니메이 터 애니메이션 레이어 스택 애니메이션 레이어 베이스 애니메이션 애니메이션 소스 – 트랙 플레이어 어드밴스 프로세서 기본 트랜스폼 블렌더 블렌드 오퍼레이션 애니메이션 레이어 쳐다보기 (몸) 애니메이션 소스 – 1 프레임 포즈 플레이어 어드밴스 프로세서 애니메이션 레이어 더하기 트랜스폼 블렌더 블렌드 오퍼레이션 몸 좌우로 기울이기 애니메이션 소스 – 1 프레임 포즈 플레이어 어드밴스 프로세서 더하기 트랜스폼 블렌더 블렌드 오퍼레이션 애니메이션 레이어 숨쉬기 애니메이션 소스 – 트랙 플레이어 어드밴스 프로세서 기존과 동일한 부분 더하기 트랜스폼 블렌더 포지션 블렌더 디렉션 블렌더 블렌드 오퍼레이션 스탠스 프로세서

Slide 80

Slide 80

애니메이 터 애니메이션 레이어 스택 애니메이션 레이어 베이스 애니메이션 애니메이션 소스 – 트랙 플레이어 어드밴스 프로세서 기본 트랜스폼 블렌더 블렌드 오퍼레이션 애니메이션 레이어 쳐다보기 (몸) 애니메이션 소스 – 1 프레임 포즈 플레이어 어드밴스 프로세서 애니메이션 레이어 더하기 트랜스폼 블렌더 블렌드 오퍼레이션 몸 좌우로 기울이기 애니메이션 소스 – 1 프레임 포즈 플레이어 어드밴스 프로세서 더하기 트랜스폼 블렌더 블렌드 오퍼레이션 애니메이션 레이어 숨쉬기 애니메이션 소스 – 트랙 플레이어 단순함+ 확장성 어드밴스 프로세서 더하기 트랜스폼 블렌더 포지션 블렌더 디렉션 블렌더 블렌드 오퍼레이션 스탠스 프로세서

Slide 81

Slide 81

문제점?

Slide 82

Slide 82

주요 요구사항 : ex) IK, 지글본, 페이셜 모션

Slide 83

Slide 83

믹싱 만으론 뭔가 부족하다 트랜지션 시의 동작 정의 재생 속도 스케일링 리타게팅 커스터마이즈 프레임워크

Slide 84

Slide 84

설계: 3차시도 잘 하는 놈 따라 하면 되는 거 아냐

Slide 85

Slide 85

이 시점에 도입 vs 자체 구현 고민을 했다 노골적인 카피

Slide 86

Slide 86

논 블렌딩 트랜지션 액션 블렌딩 트랜지션 액션 액션 모션 애니메이션이 끝나면 스테이트 애니메이션 명시적 전이 장비변경 아이들 모션 전력질주 도입부 if 이동속도 == 달리기 장비변경 모션 달리기 전이 조건 판단 if 이동속도 == 걷기 if 이동속도 == 전력질주 if 이동속도 == 0 if 이동속도 == 전력질주 애니메이션이 끝나면 애니메이션이 끝나면 전력질주 if 이동속도 == 달리기 애니메이션이 끝나면 전력질주 종료부 애니메이션이 끝나면 스프린트 턴백 애니메이션이 끝나면 if 이동속도 == 0 if 이동방향 많이 바뀜 상태구분 초안 (일부) 전력질주달리기 전이

Slide 87

Slide 87

아이들 if 이동속도 == 달리기 if 이동속도 == 전력질주 AnimationPlayer 아이들 포즈 AnimationMixer Retargeter LookAt AnimationPlayer 숨쉬기 애디티브 달리기 AnimationPlayer 출력 if 이동속도 == 걷기 AnimationPlayer 좌측 틸팅 애디티브 if 이동속도 == 전력질주 틸팅 팩터 달리기 애니메이션 AnimationMixer if 이동속도 == 0 AnimationMixer AnimationPlayer 숨쉬기 애디티브 AnimationPlayer 우측 틸팅 애디티브 Retargeter LookAt 출력 개별 상태 회로 구성 초안 (일부)

Slide 88

Slide 88

실제 구현

Slide 89

Slide 89

IAnimationDevice Input Pin Pose Output Pin

Slide 90

Slide 90

IAnimationDevice Input Pin Pose Output Pin

Slide 91

Slide 91

IAnimationDevice Pose Input Pin ConnectInputDevice DisconnectInputDevice BuildTraversal UpdateFirstPass GetAndClearPivotDisplacement UpdateSecondPass GetPose … Output Pin

Slide 92

Slide 92

PassThruDevice Input Pin Output Pin 주어진 애니메이션 포즈를 그대로 통과시키는 디바이스

Slide 93

Slide 93

Animation AdvanceProcessor IAnimationPlayer Output Pin 이전에 구현된 부분을 재활용한 통상의 애니메이션 소스

Slide 94

Slide 94

Layer0 Pose SRT (Layer0) SRT W_Animation Layer1 Hand SRT AdvanceProcessor IAnimationPlayer IAnimationPlayer IAnimationPlayer etc 실제로는 약간 더 복잡하다 Output Pin SRT (Layer1) SRT SRT SRT

Slide 95

Slide 95

2-Way Mixer Input Pins Output Pin Blending Operation Blending Factor 쉽게 구현이 가능한 2개 입력을 가진 애니메이션 믹서

Slide 96

Slide 96

TransitionBlender Input Pin LastPose Output Pin 애니메이션 변경 시의 트랜지션을 처리해주는 블렌더

Slide 97

Slide 97

AnimState : PassThru Input Pin Transitions Output Pin AnimStateMachine AnimStates TransitionBlender Transition Signal 애니메이션 스테이트 머신 구현 처리기 Output Pin

Slide 98

Slide 98

Retargeter Output Pin Target Framework 체격이 다른 프레임워크 간에 모션을 공유할 수 있게 하는 리타게터

Slide 99

Slide 99

AnimStateMachine Animation HumanIdle 데이터 코드 AnimState Idle Run Sprint Attack Animation HumanRun Animation HumanBankLeft BankingMixer AnimState Running Retargeter RunOut Animation HumanBankRight Sprint Animation HumanIdle AnimState RunOut ReturnToIdle Run Sprint 테스트 그래프 (일부) Animator StanceProcessor

Slide 100

Slide 100

피봇이동 처리?

Slide 101

Slide 101

IAnimationDevice Input Pin Pose Output Pin ConnectInputDevice DisconnectInputDevice BuildTraversal UpdateFirstPass GetAndClearPivotDisplacement UpdateSecondPass GetPose

Slide 102

Slide 102

AnimStateMachine Animation HumanIdle AnimState Idle Run Sprint Attack 피봇 이동발생 피봇 이동을 믹싱 비율만큼 조정 Animation HumanRun Animation HumanBankLeft BankingMixer AnimState Running 리타게팅 비율대로 조정 Retargeter 전체 캐릭터의 피봇을 이동 HumanBankRight Sprint HumanIdle StanceProcessor RunOut Animation Animation Animator AnimState RunOut 그대로 통과 ReturnToIdle Run Sprint 피봇 이동 처리 경로

Slide 103

Slide 103

JiggleProcessor Input Pin Output Pin 주어진 포즈 중 일부를 지글본으로 처리하는 디바이스

Slide 104

Slide 104

지글본은 월드에서 처리된다

Slide 105

Slide 105

IAnimationDevice Pose Input Pin ConnectInputDevice DisconnectInputDevice BuildTraversal UpdateFirstPass GetAndClearPivotDisplacement UpdateSecondPass GetPose Output Pin

Slide 106

Slide 106

주요 요구사항 : ex) IK, 지글본, 페이셜 모션

Slide 107

Slide 107

Slide 108

Slide 108

Slide 109

Slide 109

문제점?

Slide 110

Slide 110

상태 관리는 사실 게임 액션 로직이 대부분 수행해준다 액션 처리의 주도권 문제

Slide 111

Slide 111

전투 액션 스테이트 머신과 애니메이션 스테이트 머신의 생김새가 유사 중복인가 그렇지 않은가

Slide 112

Slide 112

설계: 4차시도 소박하게 하자는 컨셉으로 현재 진행중

Slide 113

Slide 113

방향?

Slide 114

Slide 114

애니메이션 시스템에서 상태 관리를 덜어내자 기능 축소

Slide 115

Slide 115

HumanRun Animation HumanRun Animation HumanBankLeft BankingMixer Animation AnimState Running RunOut HumanBankRight Sprint 로직 제어 편의성과 모션 유연성의 절충안 유연한 단일 모션 모델

Slide 116

Slide 116

HumanRun Animation HumanRun Animation HumanBankLeft Animation BankingMixer AnimState Running RunOut HumanBankRight Sprint 모든 스테이트 전이가 아니라 특정 모션에 진입/진출할 때로 한정 트랜지션 속성 단순화

Slide 117

Slide 117

IParameterPool 방향 전환 크기 패드 입력 방향 마우스 클릭 현재 방향 캐릭터 상태 쳐다보기 타겟 방향 전환 크기 HumanRun Animation HumanRun Animation HumanBankLeft 블렌드 팩터 BankingMixer Animation AnimState Running RunOut HumanBankRight Sprint 그래프 컨트롤 제어 구조를 일반화 파라메터 와이어링

Slide 118

Slide 118

이제 실제로 디자이너가 쓸 수 있도록 하자 그래프 인터페이스 도입

Slide 119

Slide 119

잘 굴러가 줄 것인가?

Slide 120

Slide 120

결론

Slide 121

Slide 121

Slide 122

Slide 122

레퍼런스 $ j i g g l e b o n e , T h e Va l v e D e v e l o p e r C o m m u n i t y Character Pipeline Advances for Next-Gen Games, Christopher Evans, Hanno Hagedorn [ G D C 2 0 0 7 ] Concepts in Animating Sam Fisher & friends, Eric Bibeau, Gilles Monteil [GDC2005] Creating a Character in Uncharted:Drake’s Fortune, Christian Gyrling [GDC2008] E u p h o r i a , N a t u r a l M o t i o n , h t t p : / / w w w. n a t u r a l m o t i o n . c o m / e u p h o r i a . h t m Helper Joints:Advanced Deformations on RunTime Characters, Jason Parks [GDC2005] HumanIK, Autodesk, http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=9491249 Taming the Mob : Creating Believable Crowds, Sylvain Bernard, James Therien [GDC2008] Uncharted Animation:An In-depth Look at the Character Animation Workflow and Pipeline, J e r e m y L a i - Ya t e s , J u d d S i m a n t o v [ G D C 2 0 0 8 ] 게으른 아티스트의 캐릭터 파이프라인 개발 경험담, 김충효 [NDC2008] 차세대 게임 개발을 위한 실시간 비주얼 그래프 편집, 김성익 [NDC2008]

Slide 123

Slide 123

Q&A 질문이 있어도 없어도 감사합니다