스켈레톤 애셋

UE4 의 스켈레톤 애셋과 애니메이션에 적용되는 방식에 대한 개요입니다.

Windows
MacOS
Linux

디지털 콘텐츠 제작에 익숙하다면, 이미 "스켈레톤"에 익숙한 느낌이 들 것입니다. 대부분의 3D 프로그램에서 스켈레톤이란 종종 캐릭터의 본이나 조인트를 정의하는 데 사용되는 디지털 계층구조식 프레임워크로, 여러가지 면에서 생물학적 스켈레톤(뼈대)와 닮아있습니다. 언리얼 엔진 4 (UE4) 에서, 한 가지 중요한 구분이라면 스켈레톤 애셋은 애니메이션 데이터를 연관 짓기 위한 것이지, 단순히 스켈레탈 메시 내에서 찾을 수 있는 본 계층구조에 지나지 않는 것은 아닙니다. UE4 에서, 스켈레톤 애셋은 본 (조인트) 데이터를 애니메이션 트랙에 연관지어 애니메이션을 구동시키는 역할을 합니다.

MayaSkeleton.png

SkeletonTree.png

예제 Maya 스켈레톤

예제 UE4 스켈레톤 트리

스켈레톤 애셋이 처리하고자 하는 주안점은 애니메이션 데이터이지, 스켈레탈 메시가 아닙니다.

또 한가지 스켈레톤 애셋의 중요한 점은, 스켈레탈 메시가 같은 스켈레톤 애셋을 공유하는 경우 (몇 가지 기본 규칙이 충족되었다 할 때), 계층구조가 정확히 맞아 떨어지지 않아도 애니메이션 데이터를 공유할 수 있습니다. 스켈레탈 메시 사이에 스켈레톤 애셋을 공유하면 캐릭터나 심지어 한 캐릭터의 애니메이션 로직을 정의하는 데 사용된 애니메이션 블루프린트 전체에 걸쳐 애니메이션을 공유하는 것이 가능합니다.

애니메이션 구동 이외에도 스켈레톤 애셋이 담당하는 것은 다음과 같습니다:

  • 애니메이션 리타기팅 - 비율이 다른 캐릭터의 애니메이션 조정이 가능합니다.

  • 소켓 생성 및 저장 - 캐릭터에 무언가를 붙일 수 있습니다.

  • 애님 노티파이 저장 - 애니메이션에 발소리와 같은 이펙트, 파티클 시스템, 심지어 다른 코드를 발동시키는 커스텀 이벤트까지도 추가할 수 있습니다.

  • (머티리얼 파라미터 또는 모프 타깃 구동에 사용할 수 있는) 애니메이션 커브 및 (캐릭터의 애님 몽타주 재생에 사용할 수 있는) 슬롯 이름 저장.

UE4 의 애니메이션이 처음이고 스켈레탈 애셋에 대해 더욱 자세히 이해하고픈 분들은, 스켈레톤 작업 튜토리얼 시리즈를 먼저 확인해 보실 것을 추천합니다:

스켈레톤 애셋 생성

스켈레톤 애셋을 만드는 방법은 주로 스켈레탈 메시를 임포트 할 때 사용됩니다. 스켈레탈 메시를 임포트할 때, FBX 임포트 옵션 창 안에서, Skeleton (스켈레톤) 칸을 비워 두면 임포트중인 스켈레탈 메시를 기반으로 스켈레톤을 자동 생성합니다.

FBXImportOptionsWindow.png

스켈레탈 메시를 임포트한 이후에는, 스켈레톤 애셋이 생성됩니다:

ImportedSkeletalMesh.png

스켈레톤 애셋을 더블클릭하면 스켈레톤 에디터 가 열립니다.

SkeletonEditor.png

엔진에 임포트하는 스켈레탈 메시나 애니메이션은 전부 연관된 스켈레톤 애셋이 필요합니다. FBX 임포트 프로세스 도중, 스켈레톤을 생성하는 대신, (스켈레톤 애셋 공유를 위한 규칙이 충족되었다는 전제 하에) 기존 스켈레톤 애셋을 사용할 수도 있습니다. 스켈레톤의 초기 비율은 그 스켈레톤 생성 기반이 되었던 원본 스켈레탈 메시에 의해 정의되며, 애니메이션 리타기팅 작업을 할 때 고려할 중요한 부분입니다.

스켈레톤 생성 - 컨텍스트 메뉴

스켈레탈 메시의 임포트 프로세스 도중 스켈레톤 애셋을 생성하는 것이 조금 더 일반적이기는 하지만, 우클릭 컨텍스트 메뉴를 통해서도 어떤 내부 메시에서든 스켈레톤을 만들 수 있습니다. 그러면 엔진 내 기존 메시를 가지고 스켈레톤을 새로 만들 수 있습니다. 그 메시에 다른 스켈레톤이 연관된 경우, 단순히 새 스켈레톤으로 링크만 고치고, 그 후 애니메이션이 있으면 새로운 스켈레톤으로 링크 설정합니다.

contextmenu.png

스켈레톤 애셋 사용

스켈레탈 메시의 FBX 임포트 프로세스 도중, 스켈레톤 드롭다운 메뉴를 사용하여 임포트하려는 메시와 연관지을 스켈레톤 애셋을 선택할 수 있습니다:

FBXImportSelectSkeleton.png

스켈레톤 애셋 공유 규칙을 준수했다면, 스켈레탈 메시가 임포트되면서 선택한 스켈레톤 애셋을 할당할 것입니다.

임포트 도중 선택한 스켈레톤 애셋이 임포트하려는 메시와 크게 다르고 규칙을 깨는 경우, 오류 메시지가 뜰 것입니다:

FailedSkeleton.png

바로 이런 경우에 임포트하려는 스켈레탈 메시에 대해서 스켈레톤 애셋을 새로 만들어 주어야 할 것입니다.

스켈레톤 애셋 공유 규칙

스켈레톤 애셋의 중요한 특징 중 하나는, 하나의 스켈레톤 애셋을 다수의 스켈레탈 메시에 사용할 수 있다는 것입니다. 무엇보다도 좋은 점은, 스켈레탈 메시 각각의 본 계층구조가 동일할 필요조차 없다는 것입니다. 그러나 일반적인 구조는 같아야 합니다. 가장 중요한 부분은, 한 스켈레탈 메시의 본 계층구조를 어겨서는 안된다는 것입니다. 즉 본의 이름 및 순서에 일관성이 있어야 한다는 뜻입니다.

이름이 1, 2, 3 인 본 세개짜리 림(limb)을 생각해 봅시다:

ExampleBoneHierarchy.png

두 번째 스켈레탈 메시에 같은 스켈레톤 애셋을 사용하려는 경우, 그 본을 같은 이름 같은 순서대로 유지시켜 줘야 합니다. 하지만 계층구조에 주변 본을 추가하는 것이 가능은 합니다 (그런 추가 본이 없는 캐릭터는 그냥 그 데이터를 사용하지 않을 것입니다). 즉 예를 들어, 이런 식의 계층구조가 가능합니다:

PeripheralBones.png

하지만, 양쪽 스켈레탈 메시가 같은 스켈레탈 애셋을 사용하도록 하려면, 히스토리 순서를 바꾸거나 본 이름을 바꿔서는 안됩니다. 예를 들어 이런 것은 안됩니다:

ReorderedBones.png

이 경우, 두 번째 스켈레탈 메시는 다른 본 계층구조를 사용하므로 새로운 스켈레톤 애셋이 필요할 것입니다.

추가적인 림

계층구조에 지엽적인 본을 추가하는 것이 가능하기 때문에, 추가적인 부속이 있는 스켈레탈 메시 사이에 스켈레톤 애셋을 재사용하는 것도 쉽습니다. 예를 들어, 비슷은 하지만 각기 다른 세 가지 유형의 캐릭터에 애니메이션을 공유하려는 경우, 필수적으로 본 구조(와 본 이름) 만 같으면 다음과 같은 핵심적인 차이도 용납됩니다:

  • 인간 남성 (이 예제의 기본 캐릭터와 유사)

  • 인간 여성에 말총머리

  • 팔이 넷 달린 인간형 캐릭터

이 모든 캐릭터에 같은 스켈레톤 애셋을 사용할 수 있으며, 결과적으로 그 스켈레톤 애셋에는 세 가지 모든 유형에 대한 조인트 계층구조 정보가 포함될 것입니다. 애니메이션은 그 스켈레톤 애셋을 사용하여 각 본을 얼마만큼 회전시킬지 결정합니다. 스켈레탈 메시 디자인이 바탕 본 계층구조가 같도록 되어있기에, 그 사이의 애니메이션도 완벽하게 돌아갈 것입니다. 유일한 차이점이라면, 말총머리나 추가로 달린 두 개의 팔에 대해 별도의 애니메이션이 필요하다는 정도입니다.

스켈레탈 메시에 포함되지 않은 본에 대한 애니메이션 데이터가 수신되는 경우 (즉 같은 스켈레톤 애셋을 사용한 캐릭터에 말총머리 애니메이션이 사용되었는데, 말총머리가 없는 경우), 그 애니메이션 데이터는 무시됩니다.

Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼