MetaHuman DNA
MetaHuman DNA是我们的一种专有数据格式。 DNA编码了组装和配置完整MetaHuman头部、身体及其绑定所需的所有信息。
其与(内存中的)一般数据以及将相同数据序列化后存入存储设备的文件可以视为同义。
DNA会在各个细节级别(LOD)上对MetaHuman头部和身体的几何体及其中性姿势的骨架进行编码。 蒙皮权重也会按各LOD分别编码。 虚幻引擎MetaHuman Creator的DCC导出组装管线会将角色的头部和身体导出为单独的DNA文件。 表情编辑器只能使用头部DNA文件,并且需要完全绑定好的角色(包括混合形状)。
由绑定定义(Rig Definition)设置的预定数量和类型的表情会被编码为一组关节动画,每个表情配一个关节动画,并通过逐顶点的位移来增强以呈现更精细的细节(后者仅适用于LOD 0)。
DNA文件格式存在版本差异。 表情编辑器仅兼容虚幻引擎5.6或更高版本中由MetaHuman Creator创建的DNA文件。
绑定定义
绑定定义(Rig Definition,通常称为RigDef)设置了一些绑定参数,如形状的名称和编号等。 在表情编辑器的正常使用过程中,通常不会出现需要考虑RigDef的情况。
绑定定义存在版本差异。 在表情编辑器中,绑定定义是静态的,并且与虚幻引擎MetaHuman Creator中所用的绑定定义保持一致。
绑定操作
MetaHuman自带多个网格体,其中最重要的网格体(即头部网格体)可以看作是"所有被皮肤覆盖的部分";其他网格体则代表了眼睛和嘴巴的各个部分。 为简单起见,我们只讨论头部网格体。其他网格体都遵循同样的原则。
绑定逻辑
MetaHuman的第一个显著特征位于关节的上游,即绑定逻辑(RigLogic)。 绑定逻辑在虚幻引擎和Maya中都是作为运算符/节点提供的,它会使用数百个有语意的通道(例如,眉毛内侧的上下移动等),并将它们的法线尺度运行映射到许多关节的变换中,以及映射到(在LOD 0时)逐顶点位移(形状/形态)以及其他一些外部连接的参数中(例如与材质挂钩的皱纹触发等)。
网格体变形
头部网格体经由普通的软蒙皮运算符被蒙皮到关节上。 软蒙皮的所有重要事项和一般适用事项对网格体变形也同样适用。
网格体变形还有一层以"形状动画(Maya用语)"形式应用的变形,即逐顶点的置换贴图。 这些都是为了对随关节移动的粗大物体进行细致的修改。
有两点值得始终牢记:逐顶点形状插值是线性的,因此在移动较大物体时会显得不自然,而且更有可能出现中间范围(参数空间)的问题。 顶点位移也仅在LOD 0适用,在较低的LOD中会被完全忽略。
细节级别(LOD)
MetaHuman拥有从LOD 0到LOD 7的8个细节级别(LOD)设置。 LOD 0的复杂度最高,之后的所有效果依次下降(拓扑密度、关节数量等)。我们将LOD 0称为"最高"LOD,即最高细节级别,而LOD 7则是最低级别。
所有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 |
关节匹配
关节匹配是表情编辑器中的一项关键操作,也是自动修改表情姿势中的关节位置的唯一方法。
关节列表的性质与绑定姿势不同。
非线性解算器关节匹配(NLSJM)包括了多个通道,每个通道都会影响一列特定的关节。 与NLSJM不同的是,基于机器学习的关节匹配(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。 只有这两个关节会动态地改变缩放组件以影响网格体。