언어:
페이지 정보
엔진 버전:
언리얼 엔진

캐릭터 셋업 개요

언리얼 엔진

Character.png

게임 프로젝트나 장르를 불문하고, 일정 시점에서는 배경을 뛰어다니는 캐릭터에 애니메이션이 필요하게 됩니다. 플레이어가 제어하는 캐릭터일 수도 있고, 어떤 식으로든 월드와 상호작용하는 AI 제어 개체일 수도 있습니다. 아무튼, 그러한 월드의 캐릭터에 애니메이션을 제대로 적용하기 위해서는 그 셋업 방법을 알 필요가 있을 것입니다. 이 문서의 목적은 그 방법을 매우 개괄적으로 알려드리기 위함이며, 구체적인 디테일 예제나 전용 문서에 대해서도 안내해 드리겠습니다. 일단 여기서는 어떤 식으로든 플레이어가 제어할 수 있는 캐릭터를 만들고자 한다는 가정하에 진행하도록 하겠습니다.

이 문서 전반에 걸쳐, 블루프린트로 가능한 여러가지 스크립팅 작업이 언급될 것입니다. 블루프린트에서 할 수 있는 작업은 C++ 에서도 가능하니, 블루프린트 비주얼 스크립팅에만 국한시킬 필요는 없습니다. 이 문서 마지막 섹션에는 C++ 와 블루프린트 양쪽 셋업을 확인할 수 있는 예제 콘텐츠에 대한 레퍼런스가 들어있습니다.

Playable Owen Character 예제는 애니메이션 콘텐츠 예제 문서의 1.10 섹션에서도 찾아볼 수 있습니다.

작업방식 일람

UE4 에서의 캐릭터 셋업을 위한 주요 작업방식은 다음과 같습니다:

  1. 3ds Max 나 Maya 같은 외부 디지털 콘텐츠 제작(DCC) 프로그램을 사용해서 아트 애셋(스켈레탈 메시들)과 애니메이션을 만듭니다.

  2. UE4 에 스켈레탈 메시와 애니메이션을 임포트합니다. 새 스켈레탈 메시에 대한 스켈레톤 애셋을 새로 만들거나, 동일 또는 유사한 스켈레탈 메시에 대한 기존 스켈레톤 애셋을 재사용합니다.

  3. PlayerController 스크립트나 블루프린트를 만들어서 플레이어의 입력을 처리합니다.

  4. 캐릭터나 폰 스크립트 또는 블루프린트를 만들어서 입력을 분석하고 캐릭터의 (스켈레탈 애니메이션이 아닌) 실제 운동을 제어합니다.

  5. 캐릭터에 대한 애니메이션 블루프린트를 생성합니다.

  6. 커스텀 PlayerController 와 기타 커스텀 스크립트 애셋을 활용하는 GameMode 스크립트 또는 블루프린트를 만듭니다.

  7. 게임을 플레이합니다!

이들 각 단계의 완벽한 성공을 위해서는 보통 매우 다양한 세부 단계를 거쳐야 합니다. 이 목록은 그저 전반적인 방식에 대한 개념을 잡기 위한 것일 뿐입니다. 다음 섹션에서는, 이 각 단계가 정확히 무엇을 뜻하는지, 그 실전 적용 방법을 포함해서 알아보도록 하겠습니다.

아트 애셋 만들기

ArtAssets.png

여러 면에서 아트 애셋 제작이야말로 캐릭터 개발 프로세스에 있어 가장 험난한 부분일 것입니다. 일반적으로는 언리얼 엔진을 만지기도 전에 디자인, 모델링, 표면, 리깅, 애니메이션 작업을 하는 데 엄청 많은 시간이 들게 됩니다. 캐릭터 디자인과 애니메이션의 미묘한 차이를 알려드릴 수는 없지만, 그 프로세스에 도움이 되는 툴은 분명히 있습니다.

Maya 리깅 툴

에픽의 아티스트 다수는 Maya를 사용해서 캐릭터 애니메이션 작업을 합니다. 그렇기에 저희 팀에서는 리깅 프로세스 단순화를 위한 고급 리깅 툴을 개발하여, 몇 시간씩 걸리던 작업을 분 단위로 끌어내렸습니다.

애니메이션과 리깅 툴세트 (ART) 는 캐릭터의 스켈레톤 생성, 스켈레톤 배치, 릭 생성은 물론 애니메이터의 작업 속도를 향상시켜주는 종합 툴세트로, 현재 Maya 2013 버전 이상에서 테스트를 마쳤습니다. 포함된 기능은:

  • 사용자에게 모든 과정을 안내해 주는 직관적 유저 인터페이스

  • 완벽한 스켈레톤 생성

  • 직관적인 포지셔닝 릭을 통한 맞춤형 스켈레톤 배치

  • 전체 릭 퍼블리싱과 애니메이션 팀으로의 전송에 걸리는 시간 1분 미만!

  • 최종 캐릭터에 단순한 스키닝 제공 기능

  • 모션 캡처나 애니메이션 데이터 임포트, FBX 익스포트, 포즈 툴, 미러링, 스페이스 전환 등등, 유저 인터페이스까지 완벽 포함된 종합 애니메이션 툴 세트.

자세한 정보는 Maya 애니메이션 리깅 툴세트 문서를 참고해 주시기 바랍니다.

스켈레탈 메시 임포트하기

CharacterViewport.png

FBX 는 오토데스크가 개발하여 소유한 파일 포맷입니다. Autodesk MotionBuilder, Autodesk Maya, Autodesk 3ds Max 같은 디지털 콘텐츠 제작 어플리케이션 사이의 상호운용성을 제공해 주고자 사용됩니다. Autodesk MotionBuilder 소프트웨어는 FBX 를 네이티브 지원하는 반면, Autodesk Maya 와 Autodesk 3ds Max 소프트웨어에는 FBX 플러그인이 포함되어 있습니다.

언리얼 엔진은 FBX 임포트 파이프라인 기능이 내장되어 있어, 그 포맷을 지원하는 디지털 콘텐츠 제작 어플리케이션에서 콘텐츠를 간단히 전송할 수 있습니다.

자세한 정보는 FBX 콘텐츠 파이프라인 , 스켈레탈 메시 문서를 참고해 주시기 바랍니다.

스켈레탈 메시를 UE4 에 제대로 임포트하는 것이 캐릭터 애니메이션 제작 프로세스의 중요한 단계입니다. 언리얼에는 임포트 프로세스 속도를 빠르게 하기 위한 여러가지 옵션이 있는 탄탄한 임포트 시스템이 내장되어 있습니다.

FBX 파일 임포트 관련 상세 정보는 FBX 임포트 옵션 참고서 문서를 참고하시기 바랍니다.

플레이어 컨트롤러 만들기

PlayerController.png

PlayerController (플레이어 컨트롤러)는 특수 유형 스크립트 또는 블루프린트로, 그 주 목적은 플레이어의 입력을 캐릭터를 구동시킬 수 있는 이벤트로 분석해 내는 것입니다. 예를 들어 컨트롤러의 아날로그 스틱을 위쪽으로 어떻게 움직여야 캐릭터를 화면에서 앞쪽으로 밀어주는 이벤트를 발동시키는지 제어할 수 있습니다.

PlayerController 는 언리얼 안에 이미 존재하는 클래스입니다. 에디터에서는 PlayerController 를 부모 클래스로 하여 새 블루프린트를 만든 다음, 그것을 사용하여 플레이어의 입력을 받았을 때 발동되는 이벤트를 구성합니다.

커스텀 블루프린트 PlayerController 예제는 에디터 안에서 새 프로젝트를 시작한 (파일 > 새 프로젝트) 다음 Blueprint Top Down 템플릿을 참고해 보세요. 모든 블루프린트 기반 템플릿에는 (디폴트 플레이어 컨트롤러든 플레이어 컨트롤러 블루프린트든) 일정한 PlayerController 가 들어있지만, 커스터마이징된 예제 확인을 위해서는 Blueprint Top Down 템플릿이 가장 단순하고 적당합니다.

새 프로젝트 안에 있을 때, 클래스 뷰어 안에서 필터를 끈 다음 PlayerController 를 검색하면 됩니다. 이 애셋에 더블클릭하여 열어보면 직접 그 구성 상태를 확인할 수 있습니다.

새 프로젝트 생성 (파일 > 새 프로젝트) 후 C++ Top Down 템플릿을 선택하여 C++ 스크립트로 된 PlayerController 를 확인할 수도 있습니다.

폰 또는 캐릭터 블루프린트 만들기

CharacterBP.png

PlayerController 셋업이 완료되었다면, 이제 플레이어의 입력 처리를 위한 시스템이 준비된 것입니다. 그런데 이제, 그 입력을 가지고 캐릭터가 화면을 돌아다니게 만들 수 있는 무언가로 변환해야 합니다. 즉 입력을 동작으로 변환(translate) (또는 분석(parse))해야 한다는 뜻입니다. 여기서 Pawn 또는 Character 클래스가 등장합니다.

폰이냐 캐릭터냐 선택하기

여기서 후보 클래스가 Pawn 또는 Character 로 둘인 것을 알 수 있습니다. 둘 다 게임 내에서의 개체로 사용되는데, 플레이어의 제어를 받느냐 게임내 AI 의 제어를 받느냐 차이입니다. 주요 차이점은, Character 클래스는 Pawn 클래스의 확장(extension) 으로, 플레이어 피직스, 특정 메시 지원, 게임내 플레이가능 캐릭터 생성시 필요한 일반적인 유형 처리가 추가된 것입니다. 여기서는 Character 클래스를 사용하겠습니다. AI 를 통해 씬을 이리저리 돌아다니는 정도만 해 줘도 되는 간단한 요소에 대해서는, 보통 Pawn 으로 충분합니다.

캐릭터 클래스 셋업

CharacterBPGraph.png

Character 클래스는 PlayerController 에서 발동되는 이벤트로 시작해서, (블루프린트 비주얼 스크립트를 포함한) 스크립트를 사용하여 그 입력으로 실제 무엇을 할것인지, 그 입력을 어떻게 사용하여 캐릭터를 제어할 것인지를 결정합니다. 예를 들어 PlayerController 가 컨트롤러의 아날로그 스틱을 윗방향으로 움직이는 기본적인 이벤트를 만드는 경우, 그 이벤트를 받아 캐릭터를 앞으로 이동시키는 작업을 담당하는 것은 Character 클래스입니다.

Character 클래스에는 스켈레탈 메시에 대한 레퍼런스도 저장되는데, 바로 이 스켈레탈 메시가 게임 플레이 도중 플레이어가 보게 되는 기반이 됩니다. 일인칭 게임의 경우엔 보통 떠다니는 양팔이 되겠으며, 배경에 그림자를 제대로 그려줄 필요가 있는 경우에는 전신이 있을 수도 있습니다. 삼인칭 게임의 경우엔 캐릭터를 나타내는 스켈레탈 메시가 됩니다.

캐릭터의 모션은 보통 물리적인 모양(, 전형적으로 캡슐)에 어떠한 모션을 적용하는 것으로 처리됩니다. 이 모션은 MovementMode (무브먼트 모드)와도 동시에 일어납니다. 무브먼트 모드란 캐릭터가 (걷기, 달리기, 낙하, 수영 등) 무엇을 하고 있었는지 기록을 유지하는 데 사용되는 Enum 입니다. 이 정보가 나중에 스켈레탈 메시에 재생중인 애니메이션을 구동시키는 데 사용됩니다.

커스텀 블루프린트 Character 클래스의 예제로, 에디터에서 새 프로젝트를 시작 (파일 > 새 프로젝트) 한 다음 First Person 또는 Third Person 블루프린트 템플릿 중 하나를 선택합니다. 모든 블루프린트 기반 템플릿에는 어떤 종류든 Character 가 들어있긴 하지만, 전체적인 단순함이나 장르적 공통성으로 인해 1 / 3 인칭 템플릿을 추천합니다.

새 프로젝트 안에 있을 때, 클래스 뷰어 안에서 Character 를 검색한 다음 Game 폴더에 있는 블루프린트로 필터를 적용합니다. 이 애셋에 더블클릭하여 열어보면 직접 그 구성 상태를 확인할 수 있습니다.

새 프로젝트 생성 (파일 > 새 프로젝트) 후 First / Third Person Code 템플릿을 선택하여 C++ 스크립트로 된 Character 를 확인할 수도 있습니다.

애니메이션 블루프린트

AnimBP.png

캐릭터에 애니메이션을 걸어주는 대부분의 주요 작업은 애니메이션 블루프린트에서 합니다.

캐릭터 블루프린트에서 스켈레탈 메시 액터가 월드를 이동하는 방법을 정의한 이후에는, 애니메이션 블루프린트에서 이러한 (속도와 같은) 운동에 따라 구체적인 애니메이션 할당 작업을 시작할 수 있습니다.

각 프레임의 최종 애니메이션 제작을 위해 함께 사용되는 애니메이션 블루프린트의 주요 컴포넌트는 두 가지입니다. 특히 이벤트 그래프 는 값을 업데이트한 다음 그 값을 애님 그래프 에 사용하여 스테이트 머신, 블렌드 스페이스, 또는 기타 노드를 돌릴 수 있으며, 이로 인해 여러 애니메이션 시퀀스나 포즈와의 블렌딩으로 다른 시스템에 Notify (노티파이)를 발동시켜 동적인 애니메이션 주도형 이펙트가 일어나도록 할 수 있습니다.

애니메이션 블루프린트는 캐릭터 셋업에 있어서 가장 복잡한 부분입니다. 실제로 스켈레탈 메시에 적합한 애니메이션이 적용되도록 하기 위해 모든 데이터가 모이는 곳입니다. 애니메이션 블루프린트와 그 능력을 제대로 이해하기 위해서는, 알아둬야 하는 애니메이션 애셋이 여러가지 있습니다:

이들은 그저 빙산의 일각에 불과합니다. 아마도 애니메이션 블루프린트 문서나, First / Third Person 템플릿과 Content Examples 프로젝트에서 찾을 수 있는 예제 콘텐츠에 포함된 애니메이션 블루프린트를 살펴보는 편이 좋을 것입니다.

캐릭터의 모션을 정의하는 애니메이션 블루프린트를 만들고 나면, 캐릭터 블루프린트의 Mesh Component 아래에 있는 Anim Blueprint Generated Class 프로퍼티에 할당해 줘야 할 것입니다. 이 작업은 반드시 해 줘야 하는데, 그 이유는 각 스켈레탈 메시마다 애니메이션 블루프린트가 여럿 있을 수 있고, 캐릭터 블루프린트에서는 필요한 애니메이션과 변수 데이터를 어디에 보내야 하는지 알아야 하기 때문입니다.

게임모드 셋업

GameMode.png

GameMode (게임모드)는 게임을 정의하는 데 사용되는 특수 유형 클래스입니다. 일반적으로는 그저 게임에 필수적인 클래스가 무엇이 될 것인지 정의하는 데 사용되는 프로퍼티 모음이 될 것입니다. 구성해 줘야 하는 주요 프로퍼티는 다음과 같습니다:

  • Default Pawn Class - 게임내 캐릭터에 대해 구성된 Character 클래스가 저장됩니다.

  • HUD Class - 특수한 HUD(눈앞계기판) 클래스가 생성되는 것이 있으면 여기에 저장되는데, 이 문서에서는 다루지 않는 부분입니다.

  • PlayerController Class - 게임내 캐릭터에 대해 구성된 커스텀 PlayerController 클래스가 저장됩니다.

  • Spectator Class - 관람자 또는 그저 동작을 관찰하는 수동형 플레이어를 제어하는 데 사용되는 특수 클래스가 저장됩니다. 이 문서에서는 다루지 않는 부분입니다.

  • Replay Spectator Class - 리플레이 내 관람자 제어에 사용되는 특수 클래스를 담습니다. 이 문서에서는 다루지 않습니다.

  • Game State Class - 게임 플레이 방식에 대한 셋업이나 특별 규칙을 제어하는 클래스입니다. 이 문서에서는 다루지 않는 부분입니다.

  • Player State Class - 연관성이 있는 플레이어 정보를 모든 클라이언트에 리플리케이트시키는 특수 규칙을 정의하는 클래스입니다.

캐릭터 테스트를 위해서는 최소한, Default Pawn Class 와 PlayerController Class 프로퍼티는 구성해 줘야 합니다.

월드 세팅

button_Toolbar_WorldSettings.png

GameMode 셋업을 마치고나서 커스텀 캐릭터로 플레이하기 위한 마지막 단계는, 현재 레벨이 자신의 GameMode 를 사용하는지 확인해 주는 것입니다. 이 작업은 World Settings (월드 세팅) 탭에서 이루어지는데, 메인 툴바에 있는 '월드 세팅' 버튼으로 열 수 있습니다.

월드 세팅 안에서, GameMode Override 를 자신의 GameMode 클래스 이름으로 설정했는지 확인해 주는 것이 좋습니다. 그러고 나면 새 캐릭터로 테스트할 준비를 마친 것입니다.

GameModeSettings.png

정리

지금까지의 셋업 방식을 거슬러 올라가며 정리해 보자면:

  • 레벨의 '월드 세팅'에서 자신의 GameMode 를 설정합니다.

  • GameMode 에서 게임 플레이시 필요한 Pawn (Character) 클래스와 PlayerController 클래스를 지정합니다.

  • Character 클래스:

    • FBX 를 통해 임포트한 스켈레탈 메시를 포함합니다.

    • PlayerController 클래스에서 데이터를 받은 다음 (애니메이션이 아닌) 무브먼트로 변환합니다.

    • 메시 컴포넌트 안에서 스켈레탈 애니메이션을 돌리는 데 어느 애니메이션 블루프린트를 사용할지 저장합니다.

  • 애니메이션 블루프린트:

    • Character 클래스에서 이벤트 그래프로 데이터를 받아들입니다.

    • 그 데이터를 사용해서 스테이트 머신, 블렌드 스페이스, 기타 애셋을 구동시킵니다.

    • 그 애셋에서는 애니메이션 시퀀스(FBX 파일에서의 스켈레탈 애니메이션 데이터)를 사용하여 캐릭터에 애니메이션을 적용합니다.

  • 애니메이션 블루프린트의 최종 결과가 스켈레탈 메시에 적용, 게임내 캐릭터 애니메이션을 확인할 수 있습니다.

포함된 예제

직접 그 구성을 확인하면서 따라해 볼 수 있는 예제가 엔진에 여럿 있습니다. 장르별 게임을 직접 만들어 볼 수 있는 기본 프로젝트인 템플릿은 물론, 저희 에픽의 아티스트와 전문가들이 미리 제작해 둔 콘텐츠 예제인 콘텐츠 예제도 포함시켜 뒀습니다.

템플릿

NewProject.png

언리얼 엔진에서 (파일 > 새 프로젝트 로) 새 프로젝트를 만들 때, 옵션을 통해 템플릿을 선택할 수 있습니다. 사실상 모든 템플릿은 자체적인 게임모드, 캐릭터 블루프린트, 애니메이션 블루프린트와 이 문서에 언급된 모든 애셋을 사용합니다. 단순 명료함을 위해, First Person 또는 Third Person 템플릿을 강력 추천합니다.

참고로 이들 각각의 템플릿은 블루프린트 형태는 물론 코드 형태로도 제공되는데, 개발하기에 편한 방법으로 선택할 수 있도록 하기 위해서입니다. 코드에 익숙한 경우 코드 템플릿을 사용하면 되고, 좀 더 아티스트쪽 개발자인 경우 블루프린트 템플릿쪽이 조금 더 편할 것입니다. 이 둘은 상호 배제적이지 않으니, 블루프린트 템플릿 프로젝트에 코드 클래스를 추가할 수도 있고, 코드 템플릿 프로젝트에 블루프린트 클래스를 추가할 수도 있다는 점만 알아두시면 되겠습니다!

콘텐츠 예제

AnimationCE.png

콘텐츠 예제는 저희 에픽의 아티스트와 전문가가 디자인한 특별판 콘텐츠입니다. ContentExamples 라는 이름의 프로젝트에서 찾을 수 있으며, 마켓플레이스 를 통해 다운로드 가능합니다. 특히나 중요한 부분은 Animation.umap 레벨에서 찾을 수 있는 애셋으로, 캐릭터의 스켈레탈 메시 애니메이션에 대한 여러가지 사용법을 확인할 수 있습니다.