Choose your operating system:
Windows
macOS
Linux
3Lateral为Siren、Andy Serkis和Osiris Black©提供的图像和角色。
之前,我们已经通过照片级真实的角色示例演示了角色方法,例如Epic自家出品的游戏《虚幻争霸》中的角色。之后,我们探索并改进了如何通过一系列措施来设计更让人信服的角色:利用高品质角色着色方法,使用演员的数据扫描,改进几何体工作流程,最终改进虚幻引擎4(UE4)的渲染能力。
作为角色探索的一部分,我们开发了若干数字人类(和一个非人类)来驱动工作流程和渲染改进,以产生高度逼真、高度可信的角色。下面将全面介绍我们的工作流程和新实施的功能。
此外,请记住这些功能和方法并未明确限制于只能在高端机器上使用。它们可以应用于许多品质良好且可实现FPS的实时游戏和项目。
如需自行查看部分改进,可以从Epic Games启动程序的"学习(Learn)"选项卡中下载"数字人类(Digital Humans)"项目。该项目包含了《虚幻争霸》中的原始照片级真实的角色半身像以及SIGGRAPH 2017首次亮相的Mike Seymour数字人类。
数字人类表演、
改进的角色渲染功能
在开发数字人类角色的过程中,Epic开发或改进了以下功能:
使用新的高光模型。
使用反向散射的光线传输。
次表面轮廓的接触阴影改进。
通过材质后期处理实现对屏幕空间间接反射近似值的短距离动态辐照度。
对虹膜使用单独的法线贴图,增加眼部细节。
下面每一节通过相应的皮肤、毛发和眼部部分详细介绍这些新开发的功能或改进。
皮肤着色
角色皮肤使用UE4的次表面轮廓着色模型。
请注意,这些项目使用材质函数来设置皮肤材质的基础。采用这种方法有如下几个原因:它提供了一种可反复使用的材质编写方法,我们可以使用遮罩,随着材质的变化在材质中融入动画。通过材质函数,美术可以采用标准化开发方法,因为当一个函数发生更改时,使用该函数的所有材质都会自动反映出这项更改。
你可以在 /Content/Characters/Mike/Functions 中查看Mike Seymour半身人像的一些材质函数。
皮肤着色方法
为保持可信度和高品质的逼真度,数字人类全部使用从本体(即本示例中的Mike Seymour)面部扫描产生的4K纹理分辨率。在获取数字扫描后,Epic的美术已经对纹理进行了清理、调整或生成操作。
角色的皮肤设置可以使用各种纹理和遮罩来实现所需的面貌。这里显示的纹理是用于实现我们的数字人类面貌的核心纹理:漫射(反射)、粗糙度、高光度、散射和法线贴图。
纹理 |
名称 |
说明 |
---|---|---|
|
漫射 |
漫射贴图提供材质的底色。在4K纹理分辨率下,你会看到表层皮肤下面的细小毛细血管。任何变暗的皱纹都会突出法线贴图提供的纹理。(T_head_diffuse_neutral) |
|
粗糙度 |
粗糙度贴图并不是由美术绘制的。而是使用UE4中的一个流程将法线转换为粗糙度。(Toksvig_MikeMesoNormal) |
|
高光度 |
高光度贴图用于调节皮肤表面上可见的镜面高光亮度。必须注意的是,高光度的默认值是0.5。在皮肤可能会拉紧一点的地方,该贴图可以增强高光度,而在我们不希望看到反射的地方会减弱高光度,例如毛孔中心和皱纹里面。(Mike_T_specular_neutral) |
|
散射 |
散射贴图控制散射到皮肤表面的光线数量。较暗的地方展现出非常少的散射,例如面颊,而较亮的地方将获得更多的感知散射,例如鼻子、眼部和耳朵。你会注意到这其实是一个简易型面罩,在耳朵、眼部、鼻子和嘴部附近,我们希望获得最多的散射光线。其他区域虽然较暗,但足以获得散射效果,就像真实世界的皮肤一样。 散射颜色由指定给皮肤材质的次表面轮廓次表面轮廓明暗处理模型资源管理。(T_head_sss_ao_mask) |
|
法线 |
法线贴图通过扰乱像素法线为表面提供触感纹理。在我们的数字人类中,我们在材质设置中混合和组合了多种法线贴图,以捕捉普通和微观级别的皮肤细节。 |
双镜叶高光(Dual Lobe Specular)
双镜叶高光度 为两个独立的高光镜叶提供粗糙度值,二者组合后形成最终结果。当二者组合后,会为皮肤提供非常出色的亚像素微频效果,呈现出一种自然面貌。
该视图使用单一光源和黑色底色以呈现混合镜叶效果。
在 双镜叶(Dual Specular) 部分下面的次表面轮廓资源中,你可以调节每个高光镜叶的粗糙度和二者的混合比例。
使用反向散射(正向散射)的光线传输
光线现在支持在表面上 传输。这称为反向散射,因为这是一种背光源效果。但是,实际上却是一种"正向散射",因为光线是朝向视野方向散射的。我们使用单一散射方法,利用指数衰减从阴影贴图采集深度样本。然后,使用Henyey Greenstein相位函数和该函数上的表面折射率(IOR)为散射增加一点形状。
当你设置好次表面散射轮廓并指定给材质后,可以对光线启用 传输 以增加背光源效果,具体方法是在 高级(Advanced) 卷栏属性中的 光线(Light) 部分中启用 传输(Transmission)。
你可以在材质中使用遮罩,通过阻挡来控制允许散射的传输量,类似于不透明度或粗糙度区域的遮罩用法。然后,在次表面散射轮廓中,可以通过以下属性控制传输:
边界溢色(Boundary Color Bleed)
在对牙齿和眼球使用散射的嘴部和眼部周围的区域中,我们使用一个新属性 边界溢色。它定义一个次表面材质与另一个材质的混合程度。
次表面散射是一种屏幕空间效果,通常会在包含其他次表面材质的区域引起光晕式瑕疵,类似于上面的示例,来自嘴唇的部分光线混合到了牙齿周围的区域。
短距离动态辐照度
另一个数字人类角色改进是减少鼻子和眼眶周围角落区域的深色(黑色和灰色)颜色量。为了让面貌更加自然,使用了屏幕空间间接反射近似值方法。材质后期处理用于实现短距离动态全局光照,通过采集从面颊间接反射到鼻子再到眼部角落的光线,改善照明和可信性。
屏幕空间辐照度设置为后期处理材质,因此可以用于它影响的任何对象(请参见以下示例)。你可以在位于数字人类项目 Content\Shared\UtilityMaterials 中的 ScreenSpaceRealIrr 材质中查看该材质。
从自发光材质投射短距离动态全局光照的屏幕空间辐照度材质后期处理。
毛发着色
毛发着色通过UE4 毛发 着色模型方法处理。该着色器是一个物理着色模型,基于Eugene d'Eon、Steve Marschner和Johannes Hanika的研究,目前已被Weta Digital采用。该着色器通过非匀质高光度、通过表面的光线折射和通过多条发束的光线散射来估算从毛发表面反射的光线。
要使用UE4的毛发着色器,请将材质的 着色模型(Shading Model) 属性设置为 毛发(Hair)。
毛发和高光度
在真实的世界中,毛发往往有多种高光效果:一种表示光线颜色,一种表示毛发显色和光线颜色的混合。在本文中,为方便说明,我们将它们分别称为主高光和次高光。毛发着色器利用高度逼真的结果估算相同的效果。
较亮的棕色头发表示次高光。
较浅的头发表示主高光。
UE4中的近似值算法以真实世界为样本创建了这些类似效果。光线照射到毛发表面时,不仅仅是反射而已。毛发是半透明的,因此部分光线可以穿透毛发,在毛发内部多次反射后照射出来。毛发着色器按照光线与头发交互可能形成的三种路线对此进行估算,如下图所示:
编号 |
说明 |
---|---|
0 |
毛囊生长方向(发根到发尖)。 |
1 |
仅反射路线,光线从毛发表面反射出去。这样产生的是主高光。 |
2 |
传输-传输路线,光线照射并穿透毛囊,然后从另一边照射出去。这是光线在一定发量中的散射过程。 |
3 |
传输-反射-传输路线,光线进入毛囊,从内表面边界反射出来,然后再照射出来。这样产生的是次高光。 |
如图所示,一条发束并不是完美的圆柱体或管道。在现实中,毛发更像是一堆堆的圆锥体叠加而成。这意味着,从毛发表面反射出来的光线与绝对光滑的毛发相比,将有不同的散射方式。此外,由于每条发束通常都指向不同的方向,因此高光也不是统一的,而是根据头发的指向独立产生。这通常称为 非匀质高光度,UE4的毛发着色器也支持这一功能。
眼部着色
人们通常将眼睛比作"心灵之窗"。观看者是否能将一个角色看作真人,极大程度上取决于角色的眼睛。UE4中的眼部着色器是专为眼睛表面带来逼真的渲染效果而设计的,从美术角度授予用户对眼球各个生理部分的完全掌控权。
UE4中的眼部着色器技术性较强,在其设计中,着色器代码、材质、几何体形状和几何体UV布局之间有着 非常强烈的 依赖关系。如果没有丰富的着色器开发经验,不建议 使用该着色器从头开始构建眼部结构。为此,我们强烈建议创建真实人类眼睛的用户,从该示例获取眼部几何体,并 原样 使用该眼部材质,替换必要的纹理来达到你的目的。
照片级真实角色项目使用的是静态网格体PhotorealEyeGeo。你可以通过FBX从该项目中将该网格体导出到你选择的DCC应用,以在你自己的项目中使用。
眼睛生物学
为了充分理解眼睛的功能,最好稍微学习一些眼睛生物学知识。你在这里看到的每个部分在眼睛设置中都有相应表示,所有部分都可以使用应用于示例角色眼睛的材质实例(MI_EyeRefractive_Bust)中的公开参数进行修改。
下面是一个快速知识点复习:
编号 |
名称 |
说明 |
---|---|---|
1 |
巩膜 |
巩膜也称为"眼白"。眼睛的这一部分通常非常湿润,包含少量的触感纹理。 |
2 |
角膜缘 |
角膜缘存在于虹膜和巩膜之间的深色环形。有些眼睛中的角膜缘更为明显,从侧面看时往往会消退。 |
3 |
虹膜 |
虹膜是围绕在眼睛中心周围的一圈色环。如果某个人有"绿"眼睛,就是因为虹膜主要是绿色的。在真实的眼睛中,虹膜是类似肌肉的纤维结构,有扩张和收缩功能,以让更多光线进入瞳孔或者不让光线进入瞳孔。还需要注意的是,在真实世界中,虹膜实际上更像是圆盘或锥形,不会向眼部其余部分突出。 |
4 |
瞳孔 |
瞳孔是眼睛中心的黑点。这是一个孔,光线穿过这个孔后才会被视网膜的视杆和视锥捕捉到。 |
5 |
角膜 |
角膜是位于虹膜表面上的一层透明的、充满液体的圆顶结构。 |
眼睛中的折射——演变
由于眼球充满了液体,因此会折射照射进来的任何光线。在真实世界中从多个角度观察眼球时就会看到这种效果。虹膜和瞳孔会因为折射而变形,因为它们是透过角膜观看的。游戏和电影中用来解决这个问题的传统方法是创建两层独立的眼睛表面,一层提供巩膜、虹膜和瞳孔,另一层位于顶部,提供角膜和眼睛的总体湿润度。这样底层表面透过湿润层观看时就会产生折射。Epic在技术演示《A Boy and His Kite》中的男孩眼睛中采用的就是这种方法。下图显示了两层表面的示意图。
通过使用眼部着色模型,利用一层表面甚至可以实现更真实的效果。通过角膜表面实现光线折射完全在着色器内部处理,因此而不再需要底层几何体。你可以打开M_EyeRefractive材质实例并调整 折射开/关(Refraction On/Off) 属性来自行实验。
眼部着色器参数
眼部着色器较为复杂,而且我们建议原样使用,为此我们包含了对该材质中构建的美术参数的详细分解说明。下面是MI_EyeRefractiveMike_R材质实例中可以调整的眼部着色器参数。我们也尽量包含了一些建议的参数范围。
名称 |
说明 |
|||
---|---|---|---|---|
静态开关参数值 |
||||
使用眼部突出(Use Eye Bulge) |
根据眼球几何体是否使用物理建模的角膜突出来调整着色器的折射属性。 |
|||
矢量参数值 |
||||
眼角深色 |
为眼睛颜色的黑暗度设置颜色值,可以使用 阴影硬度(Shadow Hardness) 和 阴影半径(Shadow Radius) 的标量变量控制。 |
|||
标量参数值 |
||||
深度标尺(Depth Scale) |
用于控制角膜下方的虹膜折射深度。 |
|||
扁平法线(Flatten Normal) |
该值控制眼睛法线贴图的扁平程度,主要集中于巩膜。 |
|||
折射率(IOR) |
角膜下面的液体的折射率。控制折射程度。 |
|||
虹膜凹度指数(Iris Concavity Power) |
与 虹膜凹度标尺(Iris Concavity Scale) 结合使用,控制光线通过角膜时在虹膜表面上计算出的光线焦散的形态和量。在通常只在实际照亮的场景中可见,难以在材质实例编辑器中显现。 |
|||
虹膜凹度标尺(Iris Concavity Scale) |
与 虹膜凹度指数(Iris Concavity Power) 结合使用,控制光线通过角膜时在虹膜表面上计算出的光线焦散的形态和量。在通常只在实际照亮的场景中可见,难以在材质实例编辑器中显现。 |
|||
虹膜UV半径(Iris UV Radius) |
控制眼球虹膜的整体大小。 |
|||
虹膜亮度(Iris Brightness) |
控制虹膜亮度。 |
|||
虹膜置换标尺UV(IrisDispScaleUV) |
使用虹膜法线贴图时调节虹膜置换。 |
|||
虹膜粗糙度 (Iris Roughness) |
该值决定角膜(即紧靠虹膜的上表面)上的亮度。 |
|||
角膜缘深色标尺(Limbus Dark Scale) |
控制角膜缘深色环状区的大小。 |
|||
角膜缘指数(Limbus Power) |
控制角膜缘区域的整体暗度。过高的数值将使整个角膜缘区域变暗。 |
|||
角膜缘UV宽度颜色(Limbus UV Width Color) |
控制角膜缘的取样大小,或用于显示角膜缘所分配的眼睛表面的量。这是一个十分精妙的设置,调整时需深思熟虑。 |
|||
角膜缘UV宽度着色(Limbus UV Width Shading) |
控制光线对角膜缘着色影响的程度。这是一个十分精妙的设置,调整时需深思熟虑。 |
|||
法线UV标尺(Normal UV Scale) |
控制眼睛表面所用的法线贴图纹理的大小。 |
|||
瞳孔标尺(Pupil Scale) |
控制瞳孔大小。这是用于扩大眼睛的设置。 |
|||
折射开/关(Refraction On/Off) |
在着色器的折射和非折射版本之间进行混合。 |
|||
围绕中心缩放(Scale By Center) |
从中心调整整个虹膜/瞳孔区域的大小。 |
|||
巩膜亮度(Sclera Brightness) |
控制巩膜(即眼白)的明亮度。 |
|||
巩膜粗糙度(Sclera Roughness) |
控制巩膜的材质粗糙度值。 |
|||
阴影硬度(Shadow Hardness) |
控制巩膜内外颜色之间混合的锐度。与阴影半径(Shadow Radius)搭配使用可以决定巩膜表面的着色,估算出眼睑在眼球表面投射次表面散射阴影的效果。 |
|||
阴影半径(Shadow Radius) |
控制巩膜内外颜色之间混的大小。与 阴影硬度(Shadow Hardness) 搭配使用。 |
|||
高光度虹膜(Specularity Iris) |
控制角膜上(虹膜和瞳孔)的高光度水平。 |
|||
高光度巩膜(Specularity Sclera) |
控制巩膜上的高光度水平。 |
|||
纹理参数值 |
||||
虹膜颜色(Iris Color) |
请参阅下文的眼部纹理。 |
|||
虹膜法线贴图(Iris Normal Map) |
请参阅下文的眼部纹理。 |
|||
巩膜颜色(Sclera Color) |
请参阅下文的眼部纹理。 |
眼睛虹膜法线
对于眼睛,目前提供了双法线支持,通过 虹膜法线(Iris Normal) 可以丰富眼睛细节,增加光线方向性。
这张照片中的眼睛还使用了边界溢色改进,以减轻材质之间的漏光现象。
要启用虹膜法线,可以将下列控制台变量添加到`DefaultEngine.ini`:
r.IrisNormal=1
虹膜法线会输入到材质中的 透明涂层底部法线(Clear Coat Bottom Normal) 节点。
单击查看大图。
眼部纹理
你为眼部创建的许多纹理都将基于上述创建的UV布局,但虹膜法线例外。主要可编辑的纹理列表包括:
纹理 |
名称 |
说明 |
---|---|---|
|
巩膜贴图(Sclera Map) |
巩膜贴图控制眼白的颜色,以及眼睛边缘呈现的静脉和组织颜色。例如,如果需要角色的眼睛布满血丝,则需要修改的就是这个纹理。 (Sclera_Tweak_R) |
|
中平面置换贴图(Mid Plane Displacement Map) |
中平面置换贴图用于锁定穿透眼睛中心的平面,并用作虹膜深度偏移调节的基础。 (T_EyeMidPlaneDisplacement) |
|
法线贴图(Normal Map) |
法线贴图的作用与所有着色器中法线贴图的作用相同——提供触觉纹理变化。在示例角色的眼睛设置中,它在眼睛的湿润表面上生成凹凸感。 (iris08_leftEye_nml) |
|
切线贴图(Tangent Map) |
切线贴图用于控制表面在切线空间中流动的方向。在示例角色的眼睛设置中,它用于突出角膜与巩膜相交方向的变化。 (T_Eye_N) |
|
虹膜贴图(Iris Map) |
虹膜纹理较为独特,它与UV布局不相符。相反,这种纹理将填充整个分辨率。UV和透明遮罩用于控制整体虹膜大小以及瞳孔大小。如果你自建虹膜贴图,尽量使瞳孔大小接近所提供纹理的比例。 (eye_iris_clr) |
请注意,切线贴图不直接连到法线贴图输入。而是连接到一个必须单独创建的切线输出节点,如主材质所示。
眼部柔和环境阴影
有两种方法可以实现眼部柔和环境阴影,让眼部看起来自然可信。在真实世界中,眼睛与眼睑或泪腺(泪阜)等其他组织接触时将出现十分柔和的阴影。这种柔和的原因是眼睛自身为半透明,光线将散射穿过眼睛。为模拟这种效果,你可以使用下面的其中一种方法:在眼睑下使用一片薄薄的几何体,或为半透明材质启用接触阴影。根据你自己的角色和想要实现的外观,你可能会发现一种方法比另一种效果更好。
请注意,这两种方法均使用边界溢色来柔化眼周区域(就像嘴部区域一样),以减少次表面散射屏幕空间限制引起的光晕式瑕疵。
眼部环境光遮蔽
帮助模拟眼部逼真阴影效果的方法是放置一片薄薄的几何体来盖住眼睛。它提供近似遮蔽,在眼睛上创造出一种更深层次的真实感。
应用于这个薄片的材质名为MI_Eye_Occlusion_Mike,可以在示例角色模型的材质元素17插槽中找到。
请注意,我们没有在Mike的半身人像中使用这种方法。而是开发并使用了适合于半透明材质的接触阴影,我们觉得这种方法更适于此角色。你可以在材质实例中对变量 阴影量(Shadow Amount) 应用值来启用接触阴影。
用于环境阴影的眼部几何体。
如果你要自己为角色眼睛编写内容,很可能需要自行构建这部分几何体。需要注意的是,它应该恰好填充到睁开眼睑的区域,并且其UV应恰好填充3D建模应用程序中的0-1 UV空间。
适合于半透明材质的接触阴影
半透明材质可以启用 接触阴影。此功能使用类似于光源接触阴影的功能,但不会链接到光源接触阴影参数。这是屏幕空间效果,可以作为几何体的补充,也可以取代几何体,让眼睛看起来牢牢地长在眼眶中,提高可信度。
你可以在材质的 细节(Details) 面板中,主材质节点的 半透明度(Translucency) 选项卡下启用接触阴影:
材质方法
下面是我们在创建数字人类的过程中学习到的一些关键知识点。
法线贴图
用于为角色创建照片级真实的可信皮肤的法线贴图有两种类型:中等(即中型)法线和微观法线。
中等法线
中等法线表示皮肤的中等程度细节,例如眼周、嘴唇和前额的明显皱纹。需要使用多个中等法线,并以不同的动画姿势为其制作动画。
姿势拆分为多个不同的法线贴图(请参见下图)。它们受动画驱动,因此当主体产生动作或奔跑时,将触发相应的法线并在不同的姿势中进行混合。这有助于在处理当中创建真实可信的结果。
Andy Serkis面部捕捉表演驱动的动作和遮罩法线贴图。
微观法线
微观法线表示皮肤的微小细节,例如毛孔和小瑕疵。这些细节来源于两个途径,一是主体的扫描数据,一是高光度贴图。
粗糙度贴图
粗糙度贴图是使用"法线转粗糙度"方法根据法线贴图生成的。在纹理编辑器内部,你可以将任意纹理应用于复合纹理插槽,并设置纹理模式以使其成为粗糙度的基础。
在该示例中,我们对名为Toksvig_mesoNormal的中等法线纹理应用了这种法线,从绿色通道生成了粗糙度纹理,取代了手绘粗糙度。通过使用这种方法和带动画的法线,我们获得了要制作动画的微观和中等法线的所有粗糙度贴图基础。带动画的法线还有助于皮肤在不同动画姿势中展开或收缩所引起的粗糙度量的转变,再次提高了角色的可信度和真实感。
菲涅尔边缘粗糙度
为柔化粗糙度贴图的边缘,在边缘上使用菲涅尔来近似出面部绒毛。
下面的示例演示了我们如何使用通过材质实例控制的标量参数来控制边缘粗糙度。
粗糙度边缘遮罩
对于无法通过摄像头捕捉到的皮肤粗糙度变化,我们为这些纳米级变化创建了绘制区域遮罩。其中涉及了研究捕捉信息,以及具有一定的艺术资质才能将粗糙度与参照匹配起来。
基于IOR常量的皮肤高光度
皮肤高光度使用的常量值基于皮肤的折射率(IOR)。我们使用它的原因是绘制高光度实际上并不准确。
腔洞贴图
由于我们不能对皮肤的每一个置换进行光线追踪,因此排除了这种高光度,根据主体置换贴图生成贴图来分解结果。其作用与高光度遮蔽类似,菲涅尔边缘处的效果会减弱。
头皮和头发遮蔽
除了使用腔洞贴图,头发也必须烘焙到高光度贴图中,因为我们的数字人类角色使用样条来表示头发,而不是卡片。对于大量几何体而言,渲染头发样条开销极大,因此UE4中的头发没有那么厚,这样可以让一些光线穿射过去。使用遮蔽遮罩可以防止发生一些漏光(甚至可能防止所有漏光)。
由于我们无法对每个可能的遮蔽点实现光线追踪(开销原因),因此这种遮蔽会烘焙到高光度贴图中。对比示例(请参见下文)显示了所发生遮蔽量极其细微的差异。根据你的模型和头发的设置方式,可以看到存在较多或较少漏光现象的不同结果。
头发
对于我们创建的大部分数字人类,我们都使用了多边形样条,这样就可以制作绘制头发和系统生成头发。由于这种方法的UV布局方式独特,因此美术可以根据需要使用Maya等应用程序在头皮上绘制头发。我们还添加了每根头发的噪点变化来呈现不同发束的长短,同时也为了显现出发束长度上的粗糙度和颜色变化。
由于头发并不是完美的圆柱体,因此我们想在发束长度上采用不同的切线,为头发增加一些"扭曲度"。
UE4中"扭曲"头发的最终结果。
绒毛
为了模拟皮肤上的短绒毛,绒毛需要极其精细。
为创造出这种效果,我们结合使用了半透明着色器模型与自发光材质。我们没有使用毛发着色模型,因为使用毛发着色模型的高光度难以匹配,即在许多情况下不是太亮就是太暗。通过使用半透明自发光着色器,我们从底色入手,然后通过加深、提亮尖部和表面法线取样来增加一些变化,从而增加细致的菲涅尔边缘。
使用像素深度偏移(Pixel Depth Offset)
像素深度偏移(PDO)不是特定于毛发着色模型的属性。对于毛发,我们使用PDO来混合发际线边缘,使其看起来不那么粗糙。像素深度偏移会让像素看起来远离摄像机而退去,沿着表面创造出一种人造深度感。由于头发是由一些简单的几何体构成的,因此使用PDO可以为头发整体形状提供一种三角形的深度感。它还会打破头发几何体平面与头皮接触的相交点(请参见下图)。
数据采集和角色建模方法
获得正确的角色外观的另一个重要部分是如何捕捉主体信息以及主体的行为方式,我们与3Lateral合作采集了这些高品质结果。这些捕捉技巧和流程类似于当代电影中使用的表演捕捉方法。
我们使用下列组合实现了我们的结果:
详细的面部扫描
牙科模具
通过多镜头设置捕捉表演
紧贴捕捉演员肖像的传感器
扫描数据是最接近3D中主体真实面貌的信息。在建模端执行的任何调整或清理操作都会用来解释它"应该是怎样的",并会影响从这一刻开始的动画和材质比较。美术在查看这些扫描数据时,其一部分工作是保持扫描数据的完整性。这包括补充甚至更正系统无法捕捉准确细节的地方,例如嘴部、上眼睑周围或耳朵。这通常需要具备良好的艺术技巧,深刻理解解剖学(但不必掌握所有相关知识),参考捕捉十分重要,是精确重现主体必不可少的。
(从左到右)原始扫描数据、投射了扫描细节的新拓扑、在中间拓扑基础上增加了置换。
在该示例中,你会看到原始扫描数据是如何获取、重新拓扑并清理以准确反应主体(即本例中的Andy Serkis)的。
面部捕捉
通过捕捉演员表演的过程,我们捕捉了50种不同的FACS(面部动画编码系统)姿势,每一种姿势都有助于明确面部的不同肌肉群。该信息让我们能够为不同纹理创建物理上精准的数据,例如漫射、法线、高光度、环境光遮蔽和半透明度。
微观几何体
面部极其细微的细节(如毛孔和小瑕疵)是根据演员表演的每个动作捕捉到的。该细节是使用微观法线贴图混合带动画的演员姿势的基础,以提供表演期间面部形状和皱纹变化的精准细节。
置换贴图
置换贴图是扫描期间使用从多个照明方向采集的法线根据三级法线信息创建的。当我们获得该贴图后,就可以将其应用于造型应用程序,例如ZBrush或Mudbox。扫描的精准度构成了捕捉的宏观细节(或真实状况)。但是,这些三级细节的强度并不是固定的,需要根据主体的参考照片用肉眼观察匹配。
多种纹理贴图
为用于数字人类角色而创建的纹理贴图是美术创建的纹理贴图和根据原始扫描数据创建的纹理贴图的组合版。下面是有关我们如何采集不同类型纹理的一些详细说明。
反射(漫射)
该纹理是在扫描时将头发投射到头皮而采集的。美术将根据需要清理该纹理的任何区域。
法线
这包括两种贴图,一种根据高多边形模型烘焙的基本贴图,一种采集皮肤详细微观结构的微观法线。
创建遮罩也是为了从分解过多的部分区域剔除微观细节,例如变得过于紧致的鼻尖周围,或者泪腺和内眼睑的眼周附近。
除了这些具体的贴图之外,我们还使用了一些绘制的区域性遮罩来控制角色面貌。对于头发,我们使用了头皮和腔洞遮蔽贴图,为了更好地控制次表面散射,我们使用了一些厚度遮罩来控制光线传输量。
嘴部和眼部设置
对于嘴部和眼部,我们使用的方法类似于照片级真实角色的设置方法,唯一不同的是我们在眼部和嘴部周围额外使用了一些几何体,以便更好地混合材质或提供更好的接触阴影。
以下是我们用于四个数字人类角色的几何体设置示例。
泪腺弯液面(泪腺)
泪阜混合网格体
眼睑遮蔽和模糊网格体
眼球
牙龈
牙齿/牙龈模糊网格体
牙齿
喷溅唾液
舌头
这种设置与支持几何体的结合就打造了角色的可信度。
眼部编写方法
在开发数字人类角色时,我们在模型中使用了一些不同方法和材质提升了角色眼部的逼真度。如上所述,许多眼部设置与材质设置和采集的参考资料之间存在着相互依赖的关系。我们强烈建议使用我们的眼部设置作为你的起点。以下概括了我们为实现照片级真实面貌结果所做的操作:
在构建你自己的眼部时,我们强烈建议你使用该项目中提供的实际眼部几何体和材质。此处的大多数信息都将基于该具体的眼部几何体和材质。PhotorealEyeGeo 网格体可以作为FBX文件从项目中导出,然后导入到你选择的建模应用程序,以便用于你自己的角色和项目。
形状和UV布局
与真实世界的人类眼部十分相似,眼部网格体也没有建模成一个完美的球体。它前面是一个独特的圆顶,用于表示角膜,让眼睛呈现一个鸡蛋形状。
在该图中,你可以看到眼部几何体的侧视图。请注意前面的角膜隆起区域。
UV布局位于0-1 UV空间中间,投影方向是直接看向眼睛角膜中。
有关眼部的附加提示
以下是有关所用眼部几何体和材质方法的一些额外详细信息。
眼球几何体
除了为角膜内置的眼部几何体的突出之外,我们还在眼部靠近鼻子的附近增加了一个突出,这基于我们获取的主体眼睛详细扫描数据。
泪阜混合几何体
该几何体用于柔化头部几何体向眼球几何体的过渡。
泪腺液体几何体
这表示聚集在眼睛下面和下眼睑处的湿润度。
遮蔽和模糊几何体
该几何体用于让眼睛更好地与头部结合在一起。
嘴部编写方法
对于嘴部周围的区域,我们使用的方法类似于眼部。对于牙龈和牙齿,我们在牙齿和牙龈周围使用了模糊网格体来更真实地将它们混合起来。我们在某些角色中增加了喷溅唾液来提高可信度。
Mike Seymour头部的这些部位还不能用于呈现,因为这是静态网格体。此外,它还不包括某些几何体,例如用于牙龈或喷溅唾液的模糊网格体,我们后续的数字人类将包含这些几何体。请查看如何设置眼部模糊网格体以将眼部和头部融合起来,以此了解你自己该如何设置。
毛发编写方法
我们在为数字人类编写毛发时结合使用了多种方法,例如使用卡片和样条来实现极具真实感和可信度的数字人类面貌。在创建角色的所有毛发时,我们使用了Maya XGen以交互方式整饰角色的毛发(Mike Seymour),或者使用导向曲线来确定毛发位置(Siren)。之后,使用了Maya Arnold来渲染出稍后要在UE4材质中使用所需的任何纹理。
在Siren的示例(下图)中,我们使用了毛发卡片和层叠于卡片之上的毛发样条来产生她的头发。这让我们能够减少因其头发长度而需要的几何体,并使用最合适两种方法的方式:减少因其头发厚度而引起的漏光现象,减少与实时渲染其毛发关联的开销。
Siren的毛发层(从左到右)毛发卡片、毛发样条和额外短毛发样条。
毛发样条
我们将毛发样条转换为薄多边形样条(或锚床)。当使用XGen完成这个操作后,锚床会面朝摄像机。在从XGen导出之前,我们确保它是禁用的,以便能够顺利地在UE4中使用。
层叠于毛发卡片之上的样条毛发。
由于毛发已经转换为多边形样条,我们将使用三个UV集:一个控制发根、发尖和发色,一个控制区域性遮罩,一个存储烘焙毛发环境光遮蔽。
UV 1
该UV是在关闭平铺选项时由XGen自动生成的。对于所有发束,每个UV壳都是重叠的,然后用来全局控制发根和发尖宽度以及发色。
UV 2
该UV集为手绘遮罩等启用区域性控制,或者如果想要为颜色变化增加噪点,也可以在此完成。
UV贴图是使用模拟头皮的一些技巧生成的。
整饰过的XGen Primitives使用默认UV设置转换为几何体。
我们重新选择了XGen整饰并添加了XGen修饰符,将毛发缩减到非常短(类似于发茬)。由于XGen不会根据顶点颜色或长度更改其拓扑顺序,因此可以稍后创建混合形状。缩短的毛发再次使用默认设置转换为多边形样条。
然后,我们使用基于缩短后毛发的第二个UV并传输头皮几何体,之后将这些UV传输到场景空间。
最后,我们用重叠毛发UV和头皮式布局创建了混合,这样我们就有了带两个UV集的一个毛发网格体,其中一个UV集是全局的,另一个提供对其外观的精细控制。
UV 3
该UV用于通过在单一纹理中平铺所有多边形样条来实现烘焙毛发环境光遮蔽。这里唯一需要注意的是,该贴图必须足够大才能捕捉受影响的像素,以便正确显示AO。
毛发卡片
在为角色创建毛发卡片以获得正确外观时,对毛发使用了XGen,我们使用了Arnold渲染出不同的纹理。
渲染到纹理层的毛发示例。
为模拟头骨的倾斜度,避免毛发看起来像玩偶毛发,我们使用了倾斜平面作为毛发的表面,以分解纹理根部,让它们拥有不一样的长度。你可以各种发根中看到这种效果,尤其是中间的示例(参见上图)。
漫射纹理是使用Arnold渲染出来的,它主要是平坦的,增加了小幅光线变化、用于高光度遮蔽的环境光遮蔽纹理和用于将头发与头皮混合的发根/发尖渐变。头发中的任何高光度都是使用UE4自己的材质毛发着色模型处理的。
我们倾向于手动放置毛发卡片来产生所需的结果。使用系统生成方法或实例化通常需要更多的时间进行清理。
附加信息
如果你需要进一步了解我们是如何实现和创建数字人类角色的,可以在下面观看我们在SIGGRAPH和GDC发表的各种演讲的视频。
参与的合作伙伴
3Lateral与Epic Games团队紧密合作,并为我们的数字人类演示和"A Boy and His Kite"开放世界演示提供了详细的扫描数据、动画贴图、设备等。
对于Andy Serkis和Osiris Black©,提供了3D扫描、角色、概念、生物、面部、电影、游戏和动作。
对于Siren,提供了3D扫描、面部和动作捕捉。
对于The Kid,提供了概念和动作。