메타휴먼 DNA(MetaHuman DNA)
메타휴먼 DNA는 에픽게임즈의 고유한 데이터 포맷을 가리킵니다. DNA는 전체 메타휴먼의 헤드, 바디 및 릭을 어셈블하고 환경설정하는 데 필요한 모든 정보를 인코딩한 것입니다.
이 용어는 메모리에 있는 일반적인 데이터와 해당 데이터를 저장용으로 시리얼라이즈한 파일을 가리키는 데 교차적으로 사용됩니다.
DNA는 메타휴먼 헤드 및 바디 지오메트리와 뉴트럴 포즈의 스켈레톤을 여러 레벨 오브 디테일(Level of Detail, LOD)로 인코딩합니다. 또한 각 LOD별로 스킨 웨이트도 개별적으로 인코딩됩니다. 언리얼 엔진에서 메타휴먼 크리에이터에 있는 DCC 익스포트 어셈블리 파이프라인은 캐릭터의 헤드와 바디를 별개의 DNA 파일로 익스포트합니다. Expression Editor는 헤드 DNA 파일만 사용할 수 있으며, 블렌드 셰이프를 포함한 완전하게 리깅된 캐릭터가 필요합니다.
릭 정의에 따라 미리 정해진 개수와 타입의 표정들은 각각 조인트 애니메이션으로 인코딩되며, 세밀한 디테일은 버텍스 단위의 디스플레이스먼트를 통해 보강됩니다. 이 디테일 보강은 LOD0에서만 적용됩니다.
DNA 파일 포맷은 버전이 관리됩니다. Expression Editor는 언리얼 엔진 5.6 이상의 메타휴먼 크리에이터에서 생성된 DNA 파일에만 호환됩니다.
릭 정의
일반적으로 RigDef라고 하는 릭 정의는 셰이프 이름과 개수 등의 릭 파라미터를 정의합니다. Expression Editor를 일반적인 용도로 사용하는 동안에는 RigDef가 영향을 미치는 일이 없어야 합니다.
릭 정의는 버전이 관리됩니다. Expression Editor에서는 릭 정의가 고정되어 있으며, 언리얼 엔진의 메타휴먼 크리에이터에서 사용하는 릭 정의와 일치합니다.
릭 오퍼레이션
메타휴먼은 여러 메시를 포함하며, 이중 가장 중요한 헤드 메시는 '스킨으로 덮인 모든 것'으로 생각할 수 있습니다. 그 외의 메시는 눈과 입의 여러 부분을 나타냅니다. 간단한 설명을 위해 여기서는 헤드 메시만 다루며, 나머지 항목들도 동일한 원칙을 따릅니다.
릭 로직
메타휴먼의 첫 번째 핵심적인 특징은 조인트의 업스트림과 릭 로직입니다. 릭 로직은 언리얼 엔진과 Maya 모두에서 연산자 또는 노드 형태로 제공되며, 수백 개의 의미 기반 채널(예: 눈썹 안쪽을 위아래로 움직이는 동작 등)을 입력으로 받고, 이러한 채널의 노멀 스케일 범위를 여러 조인트의 트랜스포메이션에 매핑합니다. 또한 LOD0에서는 이러한 입력을 버텍스별 디스플레이스먼트(셰이프/모프)와 머티리얼에 연결된 주름 발생 트리거 같은 외부에 연결된 추가 파라미터에도 매핑합니다.
메시 디포메이션
헤드 메시는 공통적인 소프트 스키닝 연산자를 통해 조인트에 스키닝되어 있습니다. 소프트 스키닝에서 중요한 점이나 일반적으로 적용되는 모든 사항이 이 경우에도 동일하게 적용됩니다.
여기에 추가적인 디포메이션 레이어가 Maya 용어로는 '셰이프 애니메이션' 또는 조금 더 정확히는 버텍스별 디스플레이스먼트 맵의 형태로 존재합니다. 이들은 조인트에 의해 움직여지는 거칠고 큰 매스에 미묘한 보정을 더하기 위한 것입니다.
항상 염두에 두어야 할 두 가지가 있습니다. 첫째, 버텍스 단위 셰이프 보간은 선형적이기 때문에 큰 매스를 움직이는 경우 인공적으로 보일 수 있습니다. 둘째, 파라미터 공간 내 중간 범위에서 문제가 발생할 가능성이 훨씬 높습니다. 버텍스 디스플레이스먼트는 LOD 0에서만 사용되며, 낮은 LOD에서는 완전히 무시됩니다.
레벨 오브 디테일(LOD)
메타휴먼에는 LOD 0부터 LOD 7까지 총 8단계의 레벨 오브 디테일(Level of Detail, LOD) 세트가 제공됩니다. LOD 0은 가장 복잡한 수준으로, 토폴로지 밀도나 조인트 수 등 모든 요소가 하위 LOD보다 높습니다. 언리얼 엔진에서는 LOD 0을 가장 높은 디테일을 가진 '최상위' LOD라고 부르며, LOD 7은 가장 낮은 수준의 LOD로 간주됩니다.
모든 LOD에서 작동하는 조인트 세트는 하나뿐입니다. LOD가 낮아질수록 조인트 수는 일부 조인트를 제외하는 방식으로 줄어듭니다. 각 하위 LOD는 전체 조인트 서브셋에서 특정 조인트를 제외하여 구성됩니다.
버텍스 디스플레이스먼트 셰이프는 LOD 0에서만 사용됩니다.
각 LOD는 고유한 지오메트리 세트를 가지며, LOD 간에는 메시가 공유되지 않습니다. 따라서 스키닝 웨이트 할당과 같은 지오메트리 관련 어트리뷰트는 모두 LOD별로 존재합니다.
조인트
스켈레톤은 기본적인 Maya 조인트 세트입니다. 하지만 이러한 조인트는 툴키트에서 각각 다르게 처리됩니다. 특히 각 조인트가 어떤 용도로 사용되는지와 자동화 정도에 따라 차이가 있습니다.
메시와의 관계에서 조인트 위치는 뉴트럴 포즈로 표현되는 바인드 포즈와 다양한 표정들 간에 다릅니다. 바인드 포즈는 어느 정도 체계적으로 다룰 수 있지만, 표정은 기술적인 정확성과 유사성을 위해 시각적으로 검사해야 합니다.
바인드 포즈
표면 조인트는 여러 단계에서 자동으로 배치되며, 이름 그대로 메시의 특정 표면 위치에 최대한 가깝게 배치하는 것이 가장 적합합니다. 이러한 조인트는 스켈레톤의 조인트 대부분을 차지하며, 개별적으로 나열할 필요가 거의 없습니다.
볼륨 조인트는 대부분 헤드에 스키닝되는 모든 조인트를 의미하며, 표면 조인트가 아닙니다.
일부 조인트는 자동으로 배치할 수 있지만 모든 조인트가 그렇지는 않습니다. 수동으로 확인하고 조정해야 하는 조인트가 있다면 바로 이러한 조인트가 해당됩니다. 이름에서 알 수 있듯이 이러한 조인트는 대규모 볼륨을 움직이는 역할을 합니다.
참고로, 바인드 포즈를 업데이트하는 동안 자동으로 배치되는 볼륨 조인트는 다음과 같습니다.
FACIAL_C_Forehead FACIAL_L_ForeheadIn FACIAL_R_ForeheadIn FACIAL_L_ForeheadMid FACIAL_R_ForeheadMid FACIAL_L_ForeheadOut FACIAL_R_ForeheadOut FACIAL_L_EyesackUpper FACIAL_R_EyesackUpper FACIAL_L_EyelidUpperFurrow FACIAL_R_EyelidUpperFurrow FACIAL_L_EyeCornerInner FACIAL_R_EyeCornerInner FACIAL_L_EyeCornerOuter FACIAL_R_EyeCornerOuter | FACIAL_L_EyesackLower FACIAL_R_EyesackLower FACIAL_L_CheekInner FACIAL_R_CheekInner FACIAL_L_CheekOuter FACIAL_R_CheekOuter FACIAL_L_CheekLower FACIAL_R_CheekLower FACIAL_C_NoseLower FACIAL_L_Nostril FACIAL_R_Nostril FACIAL_C_LipUpper FACIAL_L_LipUpper FACIAL_R_LipUpper | FACIAL_L_LipUpperOuter FACIAL_R_LipUpperOuter FACIAL_L_LipCorner FACIAL_R_LipCorner FACIAL_C_LipLower FACIAL_L_LipLower FACIAL_R_LipLower FACIAL_L_LipLowerOuter FACIAL_R_LipLowerOuter FACIAL_L_Jawline FACIAL_R_Jawline FACIAL_L_NasolabialBulge FACIAL_R_NasolabialBulge |
다음은 바인드 포즈를 업데이트하는 동안 자동으로 배치되지 않는 볼륨 조인트입니다.
FACIAL_C_Skull FACIAL_L_EyelidUpperB FACIAL_R_EyelidUpperB FACIAL_L_EyelidUpperA FACIAL_R_EyelidUpperA FACIAL_L_Eye FACIAL_L_EyeParallel FACIAL_L_Pupil FACIAL_R_Eye | FACIAL_R_EyeParallel FACIAL_R_Pupil FACIAL_L_EyelidLowerA FACIAL_R_EyelidLowerA FACIAL_L_EyelidLowerB FACIAL_R_EyelidLowerB FACIAL_C_Nose FACIAL_C_NoseTip FACIAL_C_MouthUpper | FACIAL_C_TeethUpper FACIAL_C_LowerLipRotation FACIAL_C_MouthLower FACIAL_C_TeethLower FACIAL_C_Tongue1 FACIAL_C_Tongue2 FACIAL_C_Tongue3 FACIAL_C_Tongue4 FACIAL_C_Jaw FACIAL_C_Chin |
이 목록에 있는 두 조인트는 추가로 구별되는 특징이 있는데, 바로 FACIAL_L_Pupil과 FACIAL_R_Pupil입니다. 이 두 조인트만 메시에 영향을 미치도록 하기 위해 스케일링 컴포넌트를 동적으로 변경합니다.
바디 조인트도 릭에 포함되어 있지만, 익스포트된 릭에서는 바디 릭 컴포넌트에서 제공됩니다. 이러한 조인트를 변경하는 것은 권장되지 않습니다. 변경해야 하는 경우에는, 해당 변경사항을 바디 릭에 전달할 수 있는 툴을 제공해야 하며, 이 툴은 뉴트럴 포즈 편집 모드에서만 작동합니다.
어떤 이유로든 바디 조인트의 위치를 변경해야 할 경우라도 표정 내에서는 수정해서는 안 됩니다. 표정에서 이러한 조인트를 변경해도 DNA에 전달되지 않으므로 세션에서 보이는 모습과 DNA가 최종적으로 애니메이팅하는 모습이 달라지게 됩니다.
마지막으로, 항상 변경하지 말아야 하는 세 개의 바디 조인트가 있습니다. FACIAL_C_Neck1Root, FACIAL_C_Neck2Root, 그리고 FACIAL_C_FacialRoot입니다. 이 세 조인트는 항상 바디에 맞춰져 있어야 하며, 바디 릭 선택에 따라 달라집니다.
다음은 위 내용이 적용되는 모든 바디 조인트 목록입니다.
spine_04 spine_05 clavicle_pec_l clavicle_pec_r spine_04_latissimus_l spine_04_latissimus_r clavicle_l clavicle_out_l clavicle_scap_l upperarm_l | upperarm_correctiveRoot_l upperarm_out_l upperarm_fwd_l upperarm_in_l upperarm_bck_l clavicle_r clavicle_out_r clavicle_scap_r upperarm_r upperarm_correctiveRoot_r | upperarm_out_r upperarm_fwd_r upperarm_in_r upperarm_bck_r neck_01 neck_02 헤드 FACIAL_C_Neck1Root FACIAL_C_Neck2Root FACIAL_C_FacialRoot |
조인트 일치
조인트 일치는 Expression Editor에서 중요한 오퍼레이션으로, 표정 포즈에서 조인트 위치를 자동으로 수정할 수 있는 유일한 방법입니다.
조인트 목록은 바인드 포즈에서 사용되는 것과 본질적으로 다릅니다.
비선형 솔버 조인트 일치(Non Linear Solver Joint Matching, NLSJM)는 여러 패스로 구성되며, 각 패스는 특정 조인트 목록에 영향을 미칩니다. NLSJM의 대안으로 머신 러닝 기반 조인트 매칭(Machine Learning based Joints Matching, MLJM)이 있으며, 이는 수정할 수 없는 제외 목록에 포함된 조인트를 제외한 모든 조인트에 영향을 미칩니다.
다음과 같은 특정 제외 조인트는 자동으로 위치가 조정되지 않습니다.
neck_01 neck_02 헤드 FACIAL_C_Jaw FACIAL_C_LowerLipRotation FACIAL_L_Eye FACIAL_R_Eye FACIAL_L_EyeParallel FACIAL_R_EyeParallel | FACIAL_L_Pupil FACIAL_R_Pupil FACIAL_L_EyelashesUpperA1 FACIAL_R_EyelashesUpperA1 FACIAL_L_EyelashesUpperA2 FACIAL_R_EyelashesUpperA2 FACIAL_L_EyelashesUpperA3 FACIAL_R_EyelashesUpperA3 | FACIAL_L_EyelashesCornerOuter1 FACIAL_R_EyelashesCornerOuter1 FACIAL_C_Skull FACIAL_C_Nose FACIAL_C_MouthUpper FACIAL_C_MouthLower FACIAL_C_TeethUpper FACIAL_C_TeethLower |
이 목록에 있는 두 조인트는 추가로 구별되는 특징이 있는데, 바로 FACIAL_L_Pupil과 FACIAL_R_Pupil입니다. 이 두 조인트만 메시에 영향을 미치도록 하기 위해 스케일링 컴포넌트를 동적으로 변경합니다.