为了能够提供更好的产品,做出更好的游戏,腾讯公司在技术方面不断的学习、进取,不断的跟各个领域、各个公司做一些合作。在今年的GDC上,腾讯NEXT Studio和Epic Games合作研发的实时高保真数字人Siren首次向公众发布。整个演示全部为实时演算,Siren的眼睛、皮肤、头发,看起来都栩栩如生;讲起话来表情丰富,一颦一笑几乎与真人无异。

在2018TGDC上,在Siren项目中主导了渲染特性和功能的开发,最终将Siren渲染提升到照片级,来自腾讯互动娱乐NEXT技术中心的技术专家解卫博先生从美术和技术的角度,分享了虚拟数据人的制作过程。以下是演讲实录:

103310a3js070wajm300ll.jpg
我今天演讲的题目是数字人Siren的渲染技术。大家都知道,一个母亲怀胎十月才能生一个孩子,这次我们跟好几个跨国团队,用了差不多十个月的时间,诞生了三个虚拟数字人,一个女人和两男人。

这次的故事就是围绕这三个人之间展开,(PPT)这位美女叫江冰洁(谐音),这个图片其实不是她的写真照,是通过实时渲染引擎渲染出来的,它的名字叫Siren。大家可以通过一个简单的视频看一下这个Siren有多真实?

Siren是一个真实的女性,这一套技术在2016的时候(11:20)当时最重要的环节展示了这个技术,并且摘取了当时Siggraph大奖,这个奖在图形学界非常有重量级的奖项,足以说明这一套技术实时虚拟数字人方面是做的最领先的。UE借次机会把角色渲染提升到一个质量。右边的照片是当时开发的paragon-twinblast,在原先的基础皮肤、眼睛、头发都得到了很大的提升。

说到电影国内很多时候拍电影都是有替身的。现在在好莱坞这种情况也是有的,但更多的情况是在技术上走的非常前沿,是用虚拟数字人的概念,把演员的形象数字化,在电影里面真实的反映出来。其实我们现在看到的很多电影角色都是虚拟的数字人,我们通过一个短片看一下,电影《终结者》施瓦辛格和年轻时候的形象在对打,实际上这个形象是根据施瓦辛格扫描出来并做了一个修改变成年轻的形态,这是网格结构、切图(PPT),可以看出是一个虚拟的数字人,不是真实的人。《速度与8》,Paul在拍电影的时候这个人已经不在人世了,为了让电影继续拍下去,电影组把这个人的形象复员了。好奇的人肯定会问,这个人都不在了,怎么复员他的形象?Paul非常幸运,他有一个弟弟跟他长的很像,剧组根据他弟弟的形象做了3D扫描,在原先照片的技术上做了修改,尽量看起来跟真人很像,最后才有了《速度与8》Paul的戏。电影里面两分钟的戏最后要修的话有可能要经过几个月的时间,是没有什么交互性。

左边的图是Real的角色,右边的是电影渲染出来的,肉眼分辨不出来真假,但是没有很多交互性。Siren的技术是在中间找到一个平衡点,尽量的把画面质量和表情接近于电影的水平,但是可以实时交互。

我们在做这个项目的时候,一共诞生了2个数字人,第一个叫Mike, fxguide(谐音)网站是他开的。Siren在Mike的基础上继续提升了一些,让渲染的质量比以前更好。

这次的内容主要包括两部分,一是Data是怎么生成的,另一方面是Rendering,最后是简单的总结。实话说药材好药才好,这句话用在数字虚拟人方面再好不过了,模型的精度、切度、还原度没有做好,做出来的很多东西,即使渲染的技术再好,渲染出来也没有办法还原真实的角色。

下面介绍一下数据是如何生成的。首先是在Rendering里面用照相建模的技术,很多相机开着,这只是一个示意图,真正的是有很多摄像机。把人拍下来,通过photoscan工具生成3D模型,生出来是一个简单的数据,里面还有一些瑕疵要进行修改,有些地方要进行平滑。比如说耳朵的地方,因为有些地方是遮挡的,照相机在有些地方有缺陷,这里的成像是不对的,所以需要修改好。我们是先做了Mike,再做了Siren,他们之间有非常紧密的关系,Mike跟Siren的Topology一模一样,三角形是一一对应的,Siren可以无缝的morph到make身上,Mike也可以无缝的morph身上,它们的UV也是一致的。

这些贴图都是Diffusemap,通过扫描软件生成出来的,现在是用8K的,这个分辨率非常高。在游戏里面基本上是1024就够了,但是为了追求非常高的细节,特写的时候看皮肤或眼睛,为了让有无限高的细节用了8K的细节。

我们在UE4的基础上做了哪些渲染方面的提升,主要是包括两个部分,How to Prove和How to lmprove,How to Prove是做完一个东西之后必须要经过严格,甚至说非常的验证,证明做的东西是达到了照相机的水平。Improve,重点是在原片渲染的技术上做了哪些提升。因为How to Prove 这个阶段是在我们每次做完一个之后都要做非常严格。我之前一直做游戏渲染,游戏渲染的验证很简单,每次看起来跟渲染的人比较像,但是在做这个的过程中学了很多东西。

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

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

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

这幅图片不知道大家有没有看出什么端倪,这中间有一条缝,左边是照片,右边是Rendering,要达到的效果是拖动滚动条的时候很难发现是两张图片,达到以假乱真,这样才能拿出去说我们做的是最棒的。首先是还原了UE4相机,真实的相机很复杂,游戏里面的相机很简单,但是UE相机有很多选项,可以真实还原真实的相机。这张图在关卡对比,足以说明UE相机还原真实相机。

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

lightstage有300多盏灯,每次只开一盏灯,这几幅图足以说明。再看一下这段视频,lightstage扫描出来的,300盏灯,每次只开一盏灯,依次循环拍出来的系列。(PPT)在游戏关卡,光源的方向和朝向都跟真实的lighting摆光一模一样,每一个系列从任何一个角度去比较,光照要跟真实的照片非常接近,才可以说这个东西是经过验证的。

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

我们看一下用哪些手段对它进行提升,从先的paragon-twinblast到Siren,首先介绍的是dual lobes,双重曝光,皮肤表是很特殊的材质,它有很多层,表面是油性介质,反光非常强烈,下面还有各种油层,一层是无法表现皮肤的。这两张照片是的对比(PPT),看起来比以前丰富了很多,我们也是想用这样的方法。PPT里面提到很简单,用了两层,但是两个lobes是称了一个系数,一个是按照85%做,一个是按照15%做,混合一下就可以了。我们也是通过这种方法,很快就可以得到验证。我们拿测试数据设一下,发现变化是微乎其微的。后来我们找了原因,Nvidia facework也有这样的功能,大家可以比较一下,这两个还是比较明显的,把这个模型倒到我们的引擎里面,后来我们发现是数据的问题,我们的Reference亮了,这样及时分析两层的specular算法差不多,lobes之后也是差不多的。后面对Reference做了一些调整。

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

关于specular模型,之前用GGX模型,大家一直都觉得挺不错的。包括皮克斯他们也是用GGX模型,但是用了一段时间发现,对于人物这样的材质,GGX的塑料感太强,不足以反映人类皮肤的曝光。Peter在皮克斯工作了十几年,他做了很多皮克斯的电影,一直专注于人物渲染方面,他可以很明确的说皮克斯就是用beckmann,我们就切到beckmann,发现比以前的皮肤质感好很多。这是来自电影行业的经验,我们可以借鉴电影行业的技术用到游戏开发,对我们有很多启发性的应用。关键是这个想法,可以很明确的告诉你用了就是好。

reflectance profiles模型,参考了迪士尼的模型,它在两个模型之间其实是比较类似的,只是用迪斯尼这个模型,迪士尼电影产品都在用,美术调起来非常的直观,所以我们就用了这个模型。

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

Thickness算法,它的计算很简单,(PPT),从这个地方沿着法线反方向,实际上没有考虑长出来的这一段厚度,我们对它进行了修整,比以前好多了。做完之后用了两个Posisson sample,再加上SSBlur就很平滑了,最后发布的时候用了16次的,其实用8次已经可以了,Siren要追求好的效果,所以用了16次,大家可以自己选择。

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

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

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

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

脸上的皮肤,我们是用了SSS,但是牙齿大部分游戏里面还没有用SSS,牙齿其实是透明度比皮肤还要高,用SSS来做更合理,如果牙齿和皮肤都用SSS,中间就会产生污染,因为牙齿再做SSS的时候,会把嘴唇也影响到,就会有非常明确的阴影,为了去掉阴影,我们想了一个办法。牙齿原先Default lit一点都不像牙齿,用了SSS之后觉得这就是牙齿,为了去掉阴影,我们想了很简单的办法,只用一个颜色。如果旁边的prolfile不一样,就用boundary color修复上去,这样相当于是把原先的替换成颜色的渐变。

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

脸上的皱纹,我们在捕捉好几个典型的哭、笑、悲哀等8种技术表情,每一个表情是有一定的区域,最后通过一定的方式形成3张贴图。材质里面会生成一个Mask,Mask有一堆的参数,做表情的时候会根据面部动产生rig的数据,控制额头的皱纹,或者是脸颊的皱纹,最后生成一个最终效果。这个技术在Siggraph有一篇文章讲到,讲的是角色渲染,其实跟这个技术是差不多的,它的系数是hack(谐音),表情是填进去的,我们这里是通过更高级的方式,它是通过Reference算出来的。

下面看一下脸上的毛,俗话说嘴上没毛办事不牢,用到虚拟数字人上应该改一改,脸上没毛平淡无聊,脸看起来光秃秃的,没有毛茸茸的质感,我们加了毛,跟之前的对比好了很多。关于这个毛,国内做电影的团队,也是非常有名的公司,他们也来跟我们交流,这个毛是怎么做的?怎么能实时的把毛做的这么好?其实这个毛是通过非常暴力的方式做出来的,这是它的模型,麻雀虽小五脏具全,上面的毛,这个三角形算起来比脸上的三角形还要多,脸一共有4万多,这个就要超过10万多。表情动起来毛也会随着脸动会穿帮。

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

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

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

提问:刚刚看完也觉得非常震撼,不知道有没有考虑这之后的应用场景是怎么样?比如说更偏虚拟偶像类,把表情、说的话都定义好,还是偏智能交互,加一些NLP的技术有一些对话,场景上是怎么考虑的?

解卫博:虚拟偶像是未来很大的方向,有可能会有offline,也有可能是可以交互的,两个形式都会有。还有一个形式,现在next那边有扫描建模实验室,我们后面会尝试,比如说对我们组的员工进行真实的扫描,把它扫描到游戏里面,然后把Siren渲染,还有数据开发上的生成,都用进去,我们希望后面能达到DETROIT变人的质量,他们在3D游戏人的渲染树立了标杆,我们首先想把这个东西落实跟他们看齐,后面再看能不能比它们做的更好一些。

提问:首先感谢你的分享,我觉得技术非常酷。我也研究过这一块的内容,我是做游戏的,还是考虑到游戏这边的需求,不知道您这个demo,内存消耗、配置、复杂度、贴图方面的数据能分享一下吗?在什么机器上大概可以达到什么样的帧,DETROIT游戏我玩过,您目前的Demo的数据能不能分享一下?比如说内存、效能方面的、复杂度方面。

解卫博:这些问题我们一开始都是考虑的,做这些问题一开始就打算集成到UE里面,发布给游戏开发者用的。如果现在用了4.20的版本,这些渲染的特性都可以用,里面有一个Mike的数据包,下载之后,很多材质都有。Siren跟Mike一共有4万个面部,对游戏来说的确是有点高,但是DETROIT没有这么高,具体多少他们没有透露,我们目测估计一半都不到。对于一个模型来说,一个脸部估计是3000多,那是好几年前的,现在硬件比以前快很多,现在做10000的脸部应该没有什么问题,一般的显卡都可以跑起来,不用太担心性能消耗的问题。我们的Siren最大的性能消耗不是在脸部、皮肤,而是在头发,头发是非常耗功耗,头发非常真实,类似于线,面部有4000,但是头发有30多万。在游戏里面不能用这么暴力的方式来做,游戏考虑插片的方式,要考虑到性价比最高的方法。脸部、眼睛、牙齿的渲染对性能开销是不高的,甚至在手机上都可以用。

提问:刚才听了你的讲座,大部分是关于脸部建模的问题,在服装方面可以做到对人进行扫描之后进行虚拟试衣的功能码?

解卫博:服装上面我们是自己建模,扫模特的时候基本上是穿着短裤扫的。

提问:服装是后期加进去的?

解卫博:对,服装是后期加工制作的,对于Siren来说主要是扫了脸,身体是在外面花2万块钱就可以扫,我们内部正在做的项目,先扫那个人,那个人去美国出差了,我们找了一个形体跟他相似的人,只穿一条短裤就可以把身材模型扫出来。

提问:其实是可以扫一个人的身体和另一个人的头拼接起来?

解卫博:对。

提问:脖子部分怎么处理呢?

解卫博:我们有专门的技术可以处理的。

提问:你讲的主要是渲染的方面,我们实际看到Siren Demo是动起来的,它怎么绑定的?用到的绑定有多复杂?动画是如何采集的,面部表情这一块是怎么达到特别自然的状态。

解卫博:我们在腾讯GDOC的时候,除了Siren的渲染,还讲了动画,这次演讲是必须要有非常更明确的主题,因为我本身是做渲染方面比较多,所以这次只讲了渲染,没有讲绑定和动画方面的内容。有需求的话可以再聊一聊。

锐亚教育

锐亚教育,游戏论坛|地下城守护者3|机核网|织田non|Everspace|血与冰淇淋|cha研|永远忠诚|游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营|