Unity에서 휴머노이드(Humanoid) 릭과 애니메이션이 포함된 모델을 임포트하는 경우 모델의 뼈대 구조를 애니메이션에 맞게 조정해야 합니다. Unity는 애니메이션을 올바르게 재생할 수 있도록 파일의 각 뼈대를 휴머노이드 아타바에 매핑하여 이 작업을 수행합니다. 그렇기 때문에 모델 파일을 Unity로 임포트하기 전에 준비하는 데 주의를 기울여야 합니다.
인스펙터(Inspector) 창의 릭(Rig) 탭에서 애니메이션 타입(Animation Type) 을 휴머노이드(Humanoid) 로 설정합니다. 아바타 정의(Avatar Definition) 프로퍼티의 기본 설정은 이 모델에서 생성(Create From This Model) 입니다. 이 옵션을 유지하면 Unity는 파일에 정의된 뼈대 집합을 휴머노이드 아바타에 매핑하려고 합니다.
경우에 따라 이 옵션을 Copy From Other Avatar 로 변경하여 다른 모델 파일에 대해 이미 정의된 아바타를 사용할 수 있습니다. 예를 들어 3D 모델링 애플리케이션에서 여러 상이한 애니메이션을 사용하여 메시(스킨)를 생성하면 이 메시를 FBX 파일 하나로 익스포트하고 각 애니메이션을 자체 FBX 파일로 익스포트할 수 있습니다. 이런 파일을 Unity로 임포트하면 임포트하는 첫 파일(일반적으로 메시)에 대해 아바타를 하나만 생성하면 됩니다. 파일에서 동일한 뼈대 구조를 사용하는 한, 해당 아바타를 나머지 파일(예: 모든 애니메이션)에 다시 사용할 수 있습니다.
이 옵션을 사용 설정하면 소스(Source) 프로퍼티를 설정하여 사용할 아바타를 지정해야 합니다.
Skin Weights 프로퍼티를 사용하여 특정 버텍스에 영향을 줄 수 있는 최대 뼈대 수를 변경할 수도 있습니다. 기본적으로 이 프로퍼티는 영향을 줄 수 있는 뼈대를 네 개로 제한하지만, 더 많거나 적게 지정할 수도 있습니다.
Apply 버튼을 클릭하면 Unity는 기존 뼈대 구조를 아바타의 뼈대 구조와 일치시키려고 합니다. 대부분의 경우 릭의 뼈대 간 연결을 분석하여 이 작업을 자동으로 수행할 수 있습니다.
일치시키는 데 성공하면 Configure 메뉴 옆에 체크 표시가 나타납니다. Unity는 아바타 서브 에셋을 프로젝트 뷰에 있는 모델 에셋에 추가하기도 합니다.
일치 성공은 단순히 Unity가 필요한 뼈대를 모두 일치시킬 수 있었음을 의미합니다. 하지만 더 나은 결과를 얻으려면 선택적인 뼈대도 일치시키고 모델을 올바른 T-포즈(T-pose) 로 설정해야 합니다.
Unity가 아바타를 생성할 수 없는 경우 설정(Configure) 버튼 옆에 십자 기호가 표시되고, 프로젝트(Project) 뷰에 아바타 서브 에셋이 표시되지 않습니다.
아바타는 애니메이션 시스템에서 매우 중요한 요소이므로 아바타를 모델 에 적합하게 설정하는 것이 중요합니다.
그렇기 때문에 자동 아바타 생성에 성공하든 실패하든 관계없이 항상 아바타가 유효하고 올바르게 설정되었는지 확인해야 합니다.
Unity가 모델의 아바타를 생성하는 데 실패한 경우 릭(Rig) 탭에서 설정…(Configure …)__ 버튼을 클릭하여 아바타(Avatar) 창을 열고 아바타를 수정해야 합니다.
일치시키는 데 성공한 경우 릭(Rig) 탭에서 설정…(Configure …) 버튼을 클릭하거나 프로젝트(Project) 뷰에서 창을 열 수 있습니다.
아바타를 아직 저장하지 않은 경우 씬을 저장할 것을 요청하는 메시지가 표시됩니다.
그 이유는 설정(Configure) 모드에서 씬(Scene) 뷰는 씬의 나머지 부분을 표시하지 않고 선택한 모델의 뼈대, 근육 및 애니메이션 정보만 표시하는 데 사용되기 때문입니다.
씬을 저장하고 나면 인스펙터(Inspector) 에 뼈대 매핑이 표시된 아바타(Avatar) 창이 나타납니다.
뼈대 매핑이 올바른지 확인하고, Unity가 할당하지 않은 선택적인 뼈대를 모두 매핑해야 합니다.
골격에는 최소한 Unity가 유효한 일치를 생성하기 위해 필요한 뼈대가 있어야 합니다. 아바타와 일치하는 뼈대를 찾을 확률을 높이기 위해, 뼈대가 나타내는 신체 부위를 나타내는 이름을 뼈대에 지정하십시오. 예를 들어 이름을 “LeftArm” 또는 “RightForearm”으로 지정하면 해당 뼈대가 무엇을 제어하는지 분명하게 알 수 있습니다.
모델이 유효한 일치 항목을 생성하지 않는 경우 Unity에서 내부적으로 사용하는 것과 유사한 프로세스를 사용할 수 있습니다.
자동 매핑이 완전히 실패하거나 부분적으로 실패하면 씬(Scene) 뷰 또는 계층 구조(Hierarchy) 뷰에서 뼈대를 드래그하여 수동으로 할당할 수 있습니다. 뼈대가 맞는 것으로 인식되면 아바타 매핑(Avatar Mapping) 탭에 녹색으로 표시되고 그렇지 않으면 빨간색으로 표시됩니다.
T-pose 는 Unity 애니메이션에서 요구되는 기본 포즈이자 3D 모델링 애플리케이션에서 권장되는 모델 포즈입니다. 하지만 T-포즈를 사용하여 캐릭터를 모델링하지 않은 경우 애니메이션이 예상대로 작동하지 않으면 Pose 드롭다운 메뉴에서 Reset 을 선택할 수 있습니다.
뼈대 할당이 올바르지만 캐릭터의 포즈가 올바르지 않으면 “T-포즈가 아닌 캐릭터”라는 메시지가 표시됩니다. Pose 메뉴에서 Enforce T-Pose 를 선택하여 문제 해결을 시도할 수 있습니다. 그래도 포즈가 올바르지 않으면 나머지 뼈대를 수동으로 T-포즈로 회전하여 문제를 해결할 수 있습니다.
마스킹을 하면 클립 내에 있는 애니메이션 데이터의 일부를 무시할 수 있으므로, 클립에서 오브젝트나 캐릭터의 전체가 아닌 일부만 애니메이션화할 수 있습니다. 예를 들어, 팔과 다리의 모션 모두를 포함하는 스탠다드 걷기 애니메이션이 있다고 가정합시다. 하지만 캐릭터가 큰 물체를 양 손으로 들고 있는 경우라면 걸을 때 팔을 흔들지 않는 것이 자연스럽습니다. 이러한 경우에 마스크를 사용하면 걷기 애니메이션 위에 짐 운반 애니메이션을 상반신만 재생시키는 식으로 중첩함으로써, 짐을 들고 걸을 때에도 스탠다드 걷기 애니메이션을 사용할 수 있습니다.
임포트 시간 중이나 런타임에 애니메이션 클립에 마스킹을 적용할 수 있습니다. 임포트하는 중에 마스킹을 적용하면 폐기된 애니메이션 데이터를 빌드에서 제외할 수 있어 파일 크기와 메모리 사용량이 줄어들기 때문에 더 바람직합니다. 또한 런타임에 블렌드할 애니메이션 데이터가 더 적기 때문에 처리 속도도 빨라집니다. 하지만 때로는 임포트 중에 마스킹을 하는 방법이 목적에 부합하지 않을 수 있습니다. 이 경우 아바타 마스크(Avatar Mask) 에셋을 만들고 애니메이터 컨트롤러(Animator Controller) 의 레이어 설정에 사용하여 런타임에 마스크를 적용할 수 있습니다.
빈 아바타 마스크 에셋을 생성하려면 다음 작업 중 하나를 수행합니다.
새 에셋이 Project 뷰에 표시됩니다.
이제 바디의 일부분을 마스크에 추가한 다음 애니메이션(Animation) 탭의 마스크 섹션에서 마스크를 애니메이션 레이어에 추가하거나 마스크에 레퍼런스를 추가할 수 있습니다.