TGDC | 实时数字人Siren渲染技术揭秘

解卫博 腾讯互动娱乐 专家工程师

8月11日,由腾讯游戏学院举办的第二届腾讯游戏开发者大会(TGDC)在深圳举行。大会技术论坛中,腾讯互动娱乐NEXT技术中心技术专家解卫博带来了《实时数字人Siren渲染技术揭秘》的主题演讲。演讲中,解卫博大家分享虚拟数字人Siren的制作过程,讲解了如何通过实时渲染和功能开发,将Siren提升至照片级。

 

 

以下是演讲实录:

 

大家都知道,一个母亲怀胎十月才能生一个孩子,这次我们跟好几个跨国团队,用了差不多十个月的时间,诞生了三个虚拟数字人,一个女人和两个男人。

 

 

这次的故事就是围绕这三个人之间展开的,上面的图片其实不是她的写真照,是通过UE4实时渲染出来的,它的名字叫Siren。大家可以通过一个简单的视频看一下Siren有多真实。

 

 

这一整套技术的前身是在SIGGRAPH 2016的Realtime live环节展示的游戏Hellblade,Epic凭借此项突破拿下Realtime live大奖,这个奖项相当于图形学界的“诺贝尔奖”,获得此殊荣足以说明这一整套解决方案是虚拟数字人方面做得最领先的。

 

 

UE4的角色渲染技术也在这次开发中得到了大幅升级,右边的照片是当时开发的paragon-twinblast,在原先的基础皮肤、眼睛、头发都得到了很大的提升。

 

说到电影,国内很多时候拍电影都是有替身的。现在在好莱坞这种情况也是有的,但更多的情况是在技术上走得非常前沿,是用虚拟数字人的概念,把演员的形象数字化,在电影里面真实地反映出来。

 

 

我们看到的很多经典好莱坞角色,都是虚拟的数字人。如《终结者》里,施瓦辛格和年轻的自己对决,实际上这个形象是施瓦辛格扫描,做出来的年轻的形态。还有,在拍《速度与激情8》的时候演员保罗·沃克已经去世了,为了让电影继续拍下去,电影组把他的形象复原了。大家有没有想过这样一个问题,保罗都不在了,怎么还原他的音容笑貌呢?保罗有个跟他长得很像的弟弟,用他弟弟的形象进行3D扫描,再根据保罗的真实形象进行修正。电影行业是通过离线渲染的方式来保障每一帧画面的超高品质,可以做到无法分辨真假的地步。

演员用面部表情捕捉设备来驱动数字人,为了保证表情的质量,后期需要动画进行大量的调整,耗费大量的精力和时间,仅仅渲染一帧图片可能需要1个小时。同时这样的工艺实时性很差,交互性比较差。

近年来硬件计算能力得到大幅度提升,很多复杂的非实时的算法在高端硬件中可以采用,高精度实时渲染也得到了很大的增强,实时面部表情捕捉和动作捕捉也成为了可能。

 

 

左边的图是游戏中渲染出来的Photo realistic角色,玩家可以进行交互,右边的是电影渲染出来的,肉眼分辨不出来真假,但是不具备交互性。Siren项目的初衷就是在中间找到一个平衡点,尽量地把画面质量和表情的表现都接近于电影的水平,但是可以实时交互。

 

 

经常看SIGGRAPH 论文的人可能会留意到很多时候是用一个老头的图片比较,但是我还不知道这个是谁,这次参加Meet Mike这个项目才知道这个人就是Mike。fxguide网站是他开的,里面介绍了大量电影行业的技术,Siren在Mike的基础上继续提升了一些,让渲染的质量比以前更好。

 

这次的内容主要包括两部分,一是Data是怎么生成的,另一方面是Rendering,最后是简单的总结。

 

数据生成

 

 

俗话说“药材好,药才好”,这句话用在数字虚拟人方面再好不过了,模型的精度不足、贴图的质量不高的话,即使渲染的技术再好,也没有办法还原真实的角色。

 

 

下面介绍一下数据是如何生成的。首先是在LightStage里面用照相建模的技术,大概有300多个相机同事对演员拍照,这只是一个示意图,真正的LightStage是在一个球体内放置了几百个相机。

 

 

有了LightStage照片后就可以通过photoscan工具生成3D模型,生出来是一个点云,里面还有一些瑕疵要进行修改,有些地方要进行平滑。

 

比如说耳朵的地方,因为有些地方是遮挡的,照相机在有些地方有缺陷,这里的成像是不对的,所以需要修改好。我们是先做了Mike,再做了Siren,他们之间有非常紧密的关系,可以说Siren的“前世”是Mike,他们模型的Topology一模一样,三角形是一一对应的,它们的UV也是一致的。

Mike跟Siren的Topology一模一样,三角形是一一对应的,Siren可以无缝的morph到Mike身上,它们的UV也是一致的。

 

这些贴图都是Diffusemap,通过扫描软件生成出来的,现在是用8K的,这个分辨率非常高,在游戏里面基本上是1024就够了。

 

渲染提升

 

 

我们在UE4的基础上做了哪些渲染方面的提升,主要是两个部分,How to Prove和How to lmprove。

Prove是做完之后必须要经过严格,甚至说非常变态的验证,证明渲染出来是达到了照片级水准。Improve的重点是在原片渲染的技术上做了哪些提升。

 

 

我们采用了电影行业的LookDev技术,有大量的Reference技术,在还原真实形象的过程中有很多环节,比方说相机、灯光,还有用lightstage做验证,因为一个地方的出错会导致后面的结果越来越糟,所以要单独地验证每一个过程都是正确的。

 

 

首先我们采集了很多的照片,这是lightstage,可以认为是一个球体,里面会有很多盏灯,每次只亮一盏灯,其他灯都熄灭,然后依次循环下来从各个角度来拍这个人,最后要保证的结果是所有角度都是正确的。

 

 

渲染的图片和lightstage是怎么比较的?用了Shotgun RV进行比较,我们可以通过Tile的方式左右比较。wrap是更高级的方式,有一个精度拖条可以拖,最上面是Rendering,最左边的时候就是渲染的照片,可以达到像素的比较,每次做完一个特写都要经过非常严格的验证,用非常严格的方式来证明做出来的东西的确是照片级。

 

 

这幅图片不知道大家有没有看出什么端倪,中间有一条缝,左边是照片,右边是渲染出来的图片,要达到的效果是拖动滚动条的时候很难发现是两张图片,达到以假乱真,这样才能拿出去说我们做的是最棒的。

首先是还原了UE4相机,真实的相机很复杂,游戏里面的相机很简单,但是UE相机有很多选项,可以还原真实的相机。这张图在关卡对比,足以说明UE相机还原真实相机。

 

 

Area ligth的光是这样照过来的,是一个简单的Area  light,UE当时用的时候没有现在4.20开发的Area ligth,我们通过SpotLight点阵的方式来模拟AreaLight,为了验证正确性在离线渲染机渲染了一个灰球,比较了一下是非常接近的,我们认为可以这个方法可以还原Area Light。

 

 

lightstage有300多盏灯,每次只开一盏灯,这几幅图足以说明。在游戏关卡,光源的方向和朝向都跟真实的灯光一模一样,每一个系列从任何一个角度去比较,光照要跟真实的照片非常接近,才可以说这个东西是经过验证的。

   

 

室外的我们拍了环境贴图,还有一些Reference照片,我们会建相应的关卡来模拟,也会在关卡里面验证,outdoor lighting跟渲染出来的是非常接近的。

 

 

我们看一下用哪些手段对它进行提升,从之前的paragon-twinblast到Siren,首先介绍的是dual lobes,双重高光,皮肤表面是很特殊的材质,它有很多层,表面是油性介质,反光非常强烈,下面还有各种油层,一层无法表现皮肤的细节。

 

 

这两张照片的对比,看起来比以前丰富了很多,我们也是想用这样的方法。

Activision的《Next gen Character Rendering》PPT里面提到如何实现,用了两层specular lobe,但是两个lobes是乘了一个系数,一个是按照85%计算,一个是按照15%计算,混合一下就可以了。我们也是通过这种方法,很快就可以实现。我们拿测试数据对比一下,发现变化是微乎其微的。后来我们找了一下原因,Nvidia facework也有这样的功能,大家可以比较一下,这两个还是比较明显的,把这个模型用到我们的引擎里面,后来我们发现是数据的问题,我们的Roughness值太高了,这样即使分成两层计算specular算出来的结果都差不多,blend之后几乎就没有变化了。后面对Roughtness做了一些调整。

 

 

下面看一下Siren,油光发亮的是第二层,除了油光发亮的之外的第一层,两个进行混合,两者之间有非常明显的对比。这个技术大家可能认为是很新的技术,其实不然,在2007年GDC的时候,Nvidia他们当时有一个Advanced Skin Rendering的talk,当时的技术就做了这样的技术尝试,当时用了4个lobes,我们当时也尝试了四层,运算指令没有比以前多一条,因为四层的关系,调起来实在太复杂,最后我们还是放弃了就用两层,现在电影里面也是用了两层,四层是有点太过了,最后我们就是用了两层。

 

 

关于specular模型,之前用GGX模型,大家一直都觉得挺不错的。包括Disney他们也是用GGX模型,但是用了一段时间发现,对于人物这样的材质,GGX的塑料感太强,不足以反映人类皮肤的曝光。Siren项目有一个新加入的TA Peter,在皮克斯工作了十几年,他做了很多皮克斯的电影,一直专注于人物渲染方面,他很明确地说皮克斯就是用beckmann,我们就切到beckmann,发现比以前的皮肤质感好很多。

 

 

这是来自电影行业的经验,我们可以借鉴电影行业的技术用到游戏开发,对我们有很多启发性的应用。关键是这个经验是经过很多皮克斯电影验证的。

 

 

SSS profiles模型,参考了迪士尼的模型,它的结果和高斯模型很接近,只是用迪斯尼这个模型,美术调起来非常地直观,迪士尼电影产品都在用,所以我们就用了这个模型。

 

 

Backlit Transmit,皮肤是半透的,比较薄的地方有散射的效果,UE4原先没有这样的效果,这对皮肤的质感提升很大,我们是通过这些方法来实现的。

 

 

首先看一下Thickness算法,它的计算很简单,从这个地方沿着法线反方向,然后去采这个位置对应的shadow depth,《Next gen Character Rendering》中没有考虑Normal Scale长出来的这一段厚度,我们对它进行了修整,比以前好多了。做完之后用了两个Posisson sample,再加上SSBlur就很平滑了,最后发布的时候用了16次的,其实用8次已经可以了,Siren要追求好的效果,所以用了16次,大家可以自己选择。

 

 

我们还加了Phase Function,当光从后面照过来的时候,从不同的角度看强度是不一样的,Shader Toy里面有很多有意思的Phase Function的demo,模拟一个光线散射出来,角度越大会越暗,在中间角度的观察的时候最亮。

 

皮肤是半通透的材质,光散射过来会产生折射,加入后会多一些细节,可以比较看一下。本来是用这么复杂的prolfile,用6个EXP,实时算很复杂,最后简化成一个。简化成一个会导致最后只有一个颜色,只有亮度的变化。我们采用了不同的方式,简化之后只有一个颜色和EXP,只用一个EXP,红色会稍微暗一点,不会出现从红到黄的变化。

 

 

我们是把原先的backlit的profile混合到profile的尾部,再根据Thickness去查,可以看到变化丰富多了,从稍微有点黄到红的变化,界面用到哪些参数,跟Backlit Transmit有关的,这是跟折射有关的。

 

 

前后的对比,照片、渲染图片的对比,都是非常接近的。把它用在Siren是什么效果,这是有backlit Transmit,质感增强了很多。光照射出来很明显,非常接近真实的结果。

 

 

脸上的皮肤,我们是用了SSS,但是牙齿大部分游戏里面还没有用SSS,牙齿其实是透明度比皮肤还要高,用SSS来做更合理,如果牙齿和皮肤都用SSS,中间就会产生污染,因为牙齿再做SSS的时候,会把嘴唇也影响到,就会有非常明显的Halo,为了去掉Halo,我们想了一个办法。

 

 

牙齿原先Default lit一点都不像牙齿,用了SSS之后觉得这就是牙齿,为了去掉阴影,我们想了很简单的办法,只用一个颜色。如果旁边的prolfile不一样,就用boundary color修复上去,这样相当于是把原先的替换成颜色的渐变。

 

 

眼睛,原先也是没有用SSS,也是用很近似的公式做了,并没有真正用SSS。这次打算用SSS,效果跟原先的不一样,这里的prolfile也是用两层的。

 

 

用SSS,跟牙齿存在同样的问题,它跟皮肤的Profile不一样,也会引起阴影,所以也是需要用同样的方式,对比还是挺明显的。这个眼睛原先看起来没有质感,之所以之前没有做,是因为原先的激光和通道不够,这次通过特殊的方式,预留出一些通道,做出来之后凹凸感比以前强了很多,体现出质感,因为眼睛是心灵的窗户,看着它眼睛的质感很好,就会觉得感情流露地很好。

 

 

脸上的皱纹,我们在捕捉好几个典型的哭、笑、悲哀等8种技术表情,每一个表情是有一定的区域,最后通过一定的方式形成3张贴图。

 

 

材质里面会生成一个Mask,Mask有一堆的参数,做表情的时候会根据面部动产生rig logic的数据,控制额头的皱纹,或者是脸颊的皱纹,最后生成一个最终效果。这个技术在GPU Pro2有一篇文章讲到,讲的是角色渲染,其实跟这个技术是差不多的,它的系数是根据表情是手工填进去的,我们这里是通过更高级的方式,通过计算得到的。

 

 

下面看一下脸上的毛,国内做电影的团队,也是非常有名的公司,他们也来跟我们交流,这个毛是怎么做的?怎么能实时的把毛做的这么好?其实这个毛是通过非常暴力的方式做出来的,这是它的模型,麻雀虽小五脏具全,上面的毛,这个三角形算起来比脸上的三角形还要多,脸一共有4万多,这个就要超过10万多。表情动起来毛就不会随着脸动会穿帮。

 

总结

 

 

这次主要是介绍了Siren的Data pipeline,以及我们在技术上做了哪些优化,Siren静态照片的渲染,动态和动作的捕捉,这几点结合起来是现在实时虚拟数字人能够做到的最好水准。

 

未来已经来了,最近大家应该听说过游戏《底特律:变人》,这个游戏的团队跟我们交流过,里面的角色通过photo扫描出来的,但是渲染的游戏没有我们做的多,精度比Siren低一个级别,但是比一般的游戏高一个级别,3年扫了150个人,这套技术极有可能在游戏里面是未来的趋势。我们现在做的这些渲染技术,已经放到UE4.20了,大家可以免费去用,大家如果下载了4.20在第一页就会有。

 

非常感谢Epic渲染组对我们的帮助,如果大家想跟我们做同样有意义的事情,有兴趣的可以跟我联系,我们这边也有不错的机会。谢谢大家!

阅读与本文标签相同的文章