A presentation at 넥슨 개발자 컨퍼런스 2008 in May 2008 in Seoul, South Korea by Jubok Kim
차세대 애니메이션 기법을 MMO 액션에 적용하기 넥슨 데브캣 스튜디오 3실 M2팀 테크니컬 디렉터 김주복
넥슨 8년차 2001 마비노기 프로그래머 2003 마비노기 프로그래밍팀 팀장 2005 그룹웨어 개발팀 팀장 2006~ M2팀 테크니컬 디렉터 “이건 뭐 좀 만든 게 있어야…”
난이도 대상 강연내용
개발중 이 강연 내용은 현재 개발 중인 게임의 구현 방식에 대한 것으로, 최종 게임에서는 강연 내용과 다른 형태로 구현되어 있을 수도 있습니다.
차세대? XBOX720?
GTA4 사실 다룰 내용은 현 세대 Assassin’s Creed Uncharted:Drake’s Fortune
콘솔현세대 ≒ 온라인차세대?
발전 방향을 예측 콘솔 현세대 기술 ≒ 온라인 차세대 기술
왜 하필 애니메이션?
그래픽 퀄리티?
콘솔 대세 장르는 액션
액션=애니메이션
애니메이션=세일즈포인트 Assassin’s Creed
예를 들어…
정교한 근접 액션 Robert Ludlum’s The Bourne Conspiracy
Assassin’s Creed
주변 환경과 인터랙션 Tom Clancy’s Splinter Cell : Conviction
Autodesk HumanIK
다양한 리액션 Uncharted : Drake’s Fortune
Grand Theft Auto IV
NaturalMotion Euphoria
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
Crysis, 12’7”
“뭐 이리들 힘줘서 만드냐…”
복잡성의 관리
이동 트랜지션 리타게팅 발맞추기 델타 애니메이션 페이셜 모션 랙돌 제어 뱅킹 천 시뮬레이션 지글본 (힌지본) IK … 이쯤 하려면 만들 게 많다
하지만 진짜 문제는…
프로그래머 애니메이터 기획자 애니메이션 시스템
대세는 다이어그램
Morpheme NaturalMotion
Havok:Behavior Havok
UnrealEd3 Epic Games
아랍어도 아닌데 이쪽으로 읽는다;;; 아이들 애니메이션 자세히 보면…
제자리 방향 전환 블렌딩
제자리 방향 전환 블렌딩 활성화
이동 속도에 따른 블렌딩
조준 포즈의 델타애니메이션
델타 애니메이션? 애디티브 애니메이션 (Uncharted) 옵셋 블렌딩 (UnrealEd3)
=
트로이카 모션 엄폐/평상 선택 이동속도 조준모드 엄폐모드 선택 약간 더 복잡하지만 마커스도 마찬가지 서서엄폐 앉아서 엄폐
애니메이터 주도 개발 Morpheme의 레퍼런스 게임, BackBreaker의 그래프
끝?
도입 vs 자체개발
액션의 반응성, 갖고 있는 리소스, 차세대스러운 룩 목표?
주요 요구사항 : ex) IK, 지글본, 페이셜 모션
사람은 정속으로 움직이지 않는다 발 미끄러짐 방지
뱅킹, 트랜지션 등에 아티스트, 기획자가 접근 가능해야 한다 유연한 블렌딩 시스템
가능한 한 적은 수의 애니메이션 애셋을 저작한다 모션 리타게팅
레이어 0 레이어 1 레이어 2 레이어 3 기본 본 구조 손 디포머블 본 장비품 슬롯 커스터마이즈 가능한 높은 품질의 애니메이션을 지원한다 레이어드 프레임워크
페이셜 모션 지글본 IK 애니메이터 손을 덜 쓰고 모션에 풍부함을 제공한다 절차적 기법 적용
리타게팅 미들웨어와의 궁합 프레임워크의 잦은 변경 데드 레커닝과의 조합 액션 주도권 문제 즉시 동기화 기능 필요 엔진 리소스와 호환성 스크립트로 루아를 강제함 독특한 라이센싱 모델 그래프 에디팅 노하우 필요 성능 문제에 대한 신뢰도 게임의 핵심적 부분 여타 기능과 조합 가능성 도입의 걸림돌?
발은 맞아야 하지만 애니메이션이 캐릭터 위치를 결정해서는 안 된다 애니메이션 vs 로직
장비품 장착과 LOD에 따라서 본 계층 구조가 극단적으로 변한다 캐릭터 커스터마이즈
이미 개발된 코드, 도입한 미들웨어와 얼마나 잘 붙어줄 것인가? 통합 용이성
과연?
설계: 1차시도 생각이란 걸 좀 해봐…
마비노기 1과 거의 유사한 구조
애니메이터 애니메이션 Information Track 애니메이션 오리진 캐릭터 로코모션 카메라 로코모션 로직 애니메이션 어드밴스 프로세서 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 디렉션 블렌더 구조 애드온 무브 프로세서 쳐다보기 블렌더
애니메이터 애니메이션 Information Track 애니메이션 오리진 카메라 타겟의 위치, 블렌딩할 캐릭터의 위치 캐릭터 로코모션 카메라 로코모션 애니메이션 플레이어 어드밴스 프로세서 로직 애니메이션 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 애니메이션 메타 정보 디렉션 블렌더 애드온 무브 프로세서 쳐다보기 블렌더
애니메이터 애니메이션 Information Track 애니메이션 오리진 캐릭터 로코모션 발맞춤 처리 등의 노하우를 애니메이션과 분리 애니메이션 플레이어 카메라 로코모션 어드밴스 프로세서 로직 애니메이션 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 외부 솔루션 통합 디렉션 블렌더 애드온 무브 프로세서 쳐다보기 블렌더
애니메이터 애니메이션 Information Track 애니메이션 오리진 캐릭터 로코모션 애니메이션 전이시의 블렌딩을 처리 카메라 로코모션 애니메이션 플레이어 어드밴스 프로세서 로직 애니메이션 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 디렉션 블렌더 트랜지션 처리 애드온 무브 프로세서 쳐다보기 블렌더
애니메이 터 애니메이션 Information Track 애니메이션 오리진 루프 끝이나 정지 시 애니메이션 피봇과 캐릭터 위치 불일치 문제 캐릭터 로코모션 카메라 로코모션 애니메이션 플레이어 다른 모션으로 교체 애니메이션 피봇 그 사이의 이동치를 실제로 적용 어드밴스 프로세서 로직 애니메이션 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 디렉션 블렌더 새 애니메이션 피봇 발맞춤 처리 애드온 무브 프로세서 쳐다보기 블렌더
애니메이터 애니메이션 Information Track 애니메이션 오리진 회전 시 캐릭터 위치와 애니메이션 피봇의 불일치 문제 캐릭터 로코모션 카메라 로코모션 애니메이션 피봇 애니메이션 플레이어 로직 애니메이션 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 애니메이션 피봇 발맞춤 처리 어드밴스 프로세서 디렉션 블렌더 애드온 무브 프로세서 쳐다보기 블렌더
애니메이터 애니메이션 Information Track 애니메이션 오리진 캐릭터 로코모션 맞아서 날아가는 처리, 쳐다보기 등 카메라 로코모션 애니메이션 플레이어 어드밴스 프로세서 로직 애니메이션 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 절차적 모션 처리 디렉션 블렌더 애드온 무브 프로세서 쳐다보기 블렌더
문제점?
애니메이터 애니메이션 Information Track 애니메이션 오리진 캐릭터 로코모션 카메라 로코모션 리타게터 로직 애니메이션 지글본 프로세서 디포머블 프로세서 믹서 어드밴스 프로세서 스탠스 프로세서 트랜스폼 블렌더 포지션 블렌더 … 디렉션 블렌더 어디에? 애드온 무브 프로세서 쳐다보기 블렌더
확장이 거의 불가능 개별 기능을 구현하는 건 쉬운 반면, 상호 의존성이 매우 높아 변경 및 확장에 취약한 구조
설계: 2차시도 무조건 단순하게 만들자
Uncharted Animation:An In-depth Look at the Character Animation Workflow and Pipeline 모티브
애니메이 터 애니메이션 레이어 스택 애니메이션 레이어 베이스 애니메이션 애니메이션 소스 – 트랙 플레이어 어드밴스 프로세서 기본 트랜스폼 블렌더 블렌드 오퍼레이션 애니메이션 레이어 쳐다보기 (몸) 애니메이션 소스 – 1 프레임 포즈 플레이어 어드밴스 프로세서 애니메이션 레이어 더하기 트랜스폼 블렌더 블렌드 오퍼레이션 몸 좌우로 기울이기 애니메이션 소스 – 1 프레임 포즈 플레이어 어드밴스 프로세서 더하기 트랜스폼 블렌더 블렌드 오퍼레이션 애니메이션 레이어 숨쉬기 애니메이션 소스 – 트랙 플레이어 단순한 구조 어드밴스 프로세서 더하기 트랜스폼 블렌더 포지션 블렌더 디렉션 블렌더 블렌드 오퍼레이션 스탠스 프로세서
애니메이 터 애니메이션 레이어 스택 애니메이션 레이어 베이스 애니메이션 애니메이션 소스 – 트랙 플레이어 어드밴스 프로세서 기본 트랜스폼 블렌더 블렌드 오퍼레이션 애니메이션 레이어 쳐다보기 (몸) 애니메이션 소스 – 1 프레임 포즈 플레이어 어드밴스 프로세서 애니메이션 레이어 더하기 트랜스폼 블렌더 블렌드 오퍼레이션 몸 좌우로 기울이기 애니메이션 소스 – 1 프레임 포즈 플레이어 어드밴스 프로세서 더하기 트랜스폼 블렌더 블렌드 오퍼레이션 애니메이션 레이어 숨쉬기 애니메이션 소스 – 트랙 플레이어 어드밴스 프로세서 기존과 동일한 부분 더하기 트랜스폼 블렌더 포지션 블렌더 디렉션 블렌더 블렌드 오퍼레이션 스탠스 프로세서
애니메이 터 애니메이션 레이어 스택 애니메이션 레이어 베이스 애니메이션 애니메이션 소스 – 트랙 플레이어 어드밴스 프로세서 기본 트랜스폼 블렌더 블렌드 오퍼레이션 애니메이션 레이어 쳐다보기 (몸) 애니메이션 소스 – 1 프레임 포즈 플레이어 어드밴스 프로세서 애니메이션 레이어 더하기 트랜스폼 블렌더 블렌드 오퍼레이션 몸 좌우로 기울이기 애니메이션 소스 – 1 프레임 포즈 플레이어 어드밴스 프로세서 더하기 트랜스폼 블렌더 블렌드 오퍼레이션 애니메이션 레이어 숨쉬기 애니메이션 소스 – 트랙 플레이어 단순함+ 확장성 어드밴스 프로세서 더하기 트랜스폼 블렌더 포지션 블렌더 디렉션 블렌더 블렌드 오퍼레이션 스탠스 프로세서
믹싱 만으론 뭔가 부족하다 트랜지션 시의 동작 정의 재생 속도 스케일링 리타게팅 커스터마이즈 프레임워크
설계: 3차시도 잘 하는 놈 따라 하면 되는 거 아냐
이 시점에 도입 vs 자체 구현 고민을 했다 노골적인 카피
논 블렌딩 트랜지션 액션 블렌딩 트랜지션 액션 액션 모션 애니메이션이 끝나면 스테이트 애니메이션 명시적 전이 장비변경 아이들 모션 전력질주 도입부 if 이동속도 == 달리기 장비변경 모션 달리기 전이 조건 판단 if 이동속도 == 걷기 if 이동속도 == 전력질주 if 이동속도 == 0 if 이동속도 == 전력질주 애니메이션이 끝나면 애니메이션이 끝나면 전력질주 if 이동속도 == 달리기 애니메이션이 끝나면 전력질주 종료부 애니메이션이 끝나면 스프린트 턴백 애니메이션이 끝나면 if 이동속도 == 0 if 이동방향 많이 바뀜 상태구분 초안 (일부) 전력질주달리기 전이
아이들 if 이동속도 == 달리기 if 이동속도 == 전력질주 AnimationPlayer 아이들 포즈 AnimationMixer Retargeter LookAt AnimationPlayer 숨쉬기 애디티브 달리기 AnimationPlayer 출력 if 이동속도 == 걷기 AnimationPlayer 좌측 틸팅 애디티브 if 이동속도 == 전력질주 틸팅 팩터 달리기 애니메이션 AnimationMixer if 이동속도 == 0 AnimationMixer AnimationPlayer 숨쉬기 애디티브 AnimationPlayer 우측 틸팅 애디티브 Retargeter LookAt 출력 개별 상태 회로 구성 초안 (일부)
실제 구현
IAnimationDevice Input Pin Pose Output Pin
IAnimationDevice Pose Input Pin ConnectInputDevice DisconnectInputDevice BuildTraversal UpdateFirstPass GetAndClearPivotDisplacement UpdateSecondPass GetPose … Output Pin
PassThruDevice Input Pin Output Pin 주어진 애니메이션 포즈를 그대로 통과시키는 디바이스
Animation AdvanceProcessor IAnimationPlayer Output Pin 이전에 구현된 부분을 재활용한 통상의 애니메이션 소스
Layer0 Pose SRT (Layer0) SRT W_Animation Layer1 Hand SRT AdvanceProcessor IAnimationPlayer IAnimationPlayer IAnimationPlayer etc 실제로는 약간 더 복잡하다 Output Pin SRT (Layer1) SRT SRT SRT
2-Way Mixer Input Pins Output Pin Blending Operation Blending Factor 쉽게 구현이 가능한 2개 입력을 가진 애니메이션 믹서
TransitionBlender Input Pin LastPose Output Pin 애니메이션 변경 시의 트랜지션을 처리해주는 블렌더
AnimState : PassThru Input Pin Transitions Output Pin AnimStateMachine AnimStates TransitionBlender Transition Signal 애니메이션 스테이트 머신 구현 처리기 Output Pin
Retargeter Output Pin Target Framework 체격이 다른 프레임워크 간에 모션을 공유할 수 있게 하는 리타게터
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
피봇이동 처리?
IAnimationDevice Input Pin Pose Output Pin ConnectInputDevice DisconnectInputDevice BuildTraversal UpdateFirstPass GetAndClearPivotDisplacement UpdateSecondPass GetPose
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 피봇 이동 처리 경로
JiggleProcessor Input Pin Output Pin 주어진 포즈 중 일부를 지글본으로 처리하는 디바이스
지글본은 월드에서 처리된다
IAnimationDevice Pose Input Pin ConnectInputDevice DisconnectInputDevice BuildTraversal UpdateFirstPass GetAndClearPivotDisplacement UpdateSecondPass GetPose Output Pin
상태 관리는 사실 게임 액션 로직이 대부분 수행해준다 액션 처리의 주도권 문제
전투 액션 스테이트 머신과 애니메이션 스테이트 머신의 생김새가 유사 중복인가 그렇지 않은가
설계: 4차시도 소박하게 하자는 컨셉으로 현재 진행중
방향?
애니메이션 시스템에서 상태 관리를 덜어내자 기능 축소
HumanRun Animation HumanRun Animation HumanBankLeft BankingMixer Animation AnimState Running RunOut HumanBankRight Sprint 로직 제어 편의성과 모션 유연성의 절충안 유연한 단일 모션 모델
HumanRun Animation HumanRun Animation HumanBankLeft Animation BankingMixer AnimState Running RunOut HumanBankRight Sprint 모든 스테이트 전이가 아니라 특정 모션에 진입/진출할 때로 한정 트랜지션 속성 단순화
IParameterPool 방향 전환 크기 패드 입력 방향 마우스 클릭 현재 방향 캐릭터 상태 쳐다보기 타겟 방향 전환 크기 HumanRun Animation HumanRun Animation HumanBankLeft 블렌드 팩터 BankingMixer Animation AnimState Running RunOut HumanBankRight Sprint 그래프 컨트롤 제어 구조를 일반화 파라메터 와이어링
이제 실제로 디자이너가 쓸 수 있도록 하자 그래프 인터페이스 도입
잘 굴러가 줄 것인가?
결론
레퍼런스 $ 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]
Q&A 질문이 있어도 없어도 감사합니다
View 차세대 애니메이션 기법을 MMO 액션에 적용하기 on Notist.
Dismiss
콘솔 게임의 애니메이션 기법을 MMO 환경에서 구현하기 위한 방안에 대한 연구 결과를 공유합니다.