UE4 实时虚拟角色材质篇之 Skin Material(一)

作者:转载小公举
2019-12-29
5 5 0

作者:DanSon Tang

这篇文章将介绍 UE4 中对于数字的人制作,文章中主要谈及材质部分。而对于更多的制作细节会提出来具体的制作思路和使用的设备。

原文来自知乎专栏 UE4 笔记,已取得作者 DanSon Tang 授权发布。

正文

虚幻在 GDC 大会上,公布了两部超真实的虚幻引擎即时演算的面部动作演示 Demo。其中一部是制作团队利用了国内演员姜冰洁的外观,通过精细的面部捕捉,制作了一个面部还原度极高的“数字人(digital human)”Siren。虽然后面虚幻将数字人的工程放了出来,但是更多的技术细节却没有公布。所以国内公司有想法制作一个类似于 Siren 的数字人,但是却始终没有看到成品的出现。对于数字的人制作,我下面文章中主要谈及材质部分。而对于更多的制作细节会提出来具体的制作思路和使用的设备。

在角色制作过程中,有三个部分是目前对于实时渲染来说比较难的一个部分,一:皮肤,二:眼睛,三:毛发。这篇文章中只会提及皮肤部分材质的制作。

对于皮肤而言,效果的好坏很大部分取决于贴图部分的制作。而虚拟角色的贴图却是和整个制作流程挂钩。制作流程的第一部就是模型的制作,就传统的角色制作流程而言,美术们通过 ZBRush 等3D 软件,从形体结构的雕刻,到最终烘培出贴图,利用 texturingxyz,以及 zwrap 都能最终制作出很好的角色。国内外也有很多大神能够通过雕刻制作出很多艺术作品。但是因为角色的形体构造对于一个美术而言,一部分是经验,一部分是自己对于模型造型的把控和自己的审美了。所以很多时候大神的作品最后能够做出灵气,很大部分取决去大神们对于形体细节的刻画。(这里有点跑偏了),紧接着就是越来越开始流行的制作流程,利用扫描来生成模型的形体框架,然后让模型师进行二次修改。这种数字化的流程,第一需要真实的人物来进行拍照扫描。对于扫描流程而言,可以保留人面部的各处细节,而不用像传统的流程通过拼凑的方式来为模型刻画细节。目前主流的扫描软件是 photoscan,360°环绕一个人物进行拍照,将拍好的照片放入 photoscan 中,软件利用算法生成一个比较粗糙的模型。但是这个模型的形体是已经和真实模型一模一样,只是还需要模型师进行后期的处理。而对于贴图的生成,可以在知乎上搜索实时虚拟角色,参考春日老师他们的做法。不过这种方法对于设备,和开发人员要求是比较高的。目前国内也有公司拥有这套设备,不过扫描一次价格还是不便宜。

虽然虚幻放出了虚拟数字人的工程文件,很多人在使用虚拟数字人材质的时候,用起来效果依然不好。这是因为数字人的这套材质大部分的效果都来源于贴图,对于 shader 而言,没有任何难的算法和实现思路。

接下来要讲的思路是,在游戏和电影的制作过程中,如何利用材质帮助美术去刻画角色细节。在开始讲解思路之前,我对于皮肤在材质上需要做的效果大概罗列一下,这都是和美术们多聊天得到的思路再结合暴雪再 GDC 大会上上发表那片 PPT 最终得到的结论

漫反射贴图,法线贴图,粗糙度贴图,高光贴图,AO 贴图,散射贴图,CavityMap。对于 CavityMap 这张贴图而言后面再解释他的用处。当把这些基础贴图连到对应材质球接口过后,我们能看到一个大致的效果。如下图:

看起来总感觉少了些什么,其实就是细节,这种细节来源于毛孔的细节,高光部分的细节,以及散射部分的细节。对于人物面部而言,鼻子,额头的汗和油都会多于脸颊和其他部分,而嘴唇因为会有唾液的原因,嘴唇部分也会比其他地方湿润,所以我们需要把这三部分提取出来画成一张 mask 来分别存到 RGB 三个通道来进行单独制作,对这三部分的高光和粗糙度进行处理。

Mask 贴图如上图所示,鼻子不要整个部分全画,因为只有鼻梁和鼻翼的高光才会更亮一些,因为油层都集中这一部分。

然后就是细节法线的刻画,细节法线贴图有可能美术会给到你,也有可能没有,这个视制作流程不同而不一样。如果没有也不用担心,因为细节法线贴图表现的效果一部分是毛孔,还有就是比如嘴唇的细节皮肤纹路,额头的皮肤纹路等。如果有你可以直接使用,但是如果觉得效果不好,那也可以按照上面的对嘴唇,额头,脸颊部分画 mask 然后对每一个区域叠加法线,因为人面部的不同部位,皮肤纹路会不相同,这部分贴图可以通过 texturingxyz 获得,这上面的贴图也是通过扫描生成的所以细节丰富度会很多。细节法线的 mask 贴图如下图所示:

有了这张 mask 贴图过后,我们对不同区域的细节法线贴图进行单独制作,利用 cavitymap 来制作毛孔的镜面遮挡贴图。如下图所示:

最终的效果

这些细节效果视项目的需求而定。如果想做细节丰富,就区域多分一些,mask 多画一些。然后对不同部位进行处理。

然后就是边缘光的制作,这个通过 frsnel 就能模拟出效果。紧接着就是 AO 贴图作用,AO 主要用来做环境遮蔽,也就是嘴唇封闭的时候,眼袋,以及鼻翼两侧。如果不对 AO 进行调色,如下图所示:

AO 部分会出现黑块,但是人的遮挡部分并不完全是黑色,而是有血色。所以对 AO 进行调色后叠加到漫反射颜色中效果才会正确。如下图所示:

对于游戏而言,漫反射贴图分辨率你可以大一些,粗糙度,高光这些贴图分辨率可以比漫射贴图低一些档次来提高性能,细节部分贴图可以更低。这个视具体的需求来做判断。

暂时就写这么多,总结下思路:

  1. cavitymap 合理运用去做镜面遮挡
  2. 不同部位用 mask 贴图进行划分,一次来分别处理高光,法线,粗糙度,毛孔。
  3. AO 法线需要进行调色处理
  4. 边缘光用 frsnel 实现

下一篇会讲,加入面部捕捉过后,材质需要进行法线,粗糙度进行融合处理,针对不同的面部表情,做出不同的区域划分。

贴一下目前一些效果图: