【表情动画】Activiion 的双目面捕流程
撇开高精度表情捕捉,传统手k流程,想把人脸的photorealisc rendering做好,blendshape绑定数量上到1K+,可以把动画师累死。绝迹2的bs绑定大概300多个bs的规模,类似于snapper的绑定思路,一个动画师一天只能k一秒表情动画。所以说高精度表情动画是个费劲的活,jelo在《BS表情绑定的巨大理论缺陷及解决方案》提到的技术可以产生高精度4D点云数据,但是呢,4D点云数据没办法直接用到游戏,主要是数据量太大,以5000点的人脸来算,5000*3*4bytes*30 fps 这是一秒的数据量1.7MB,一小时就是6个GB。FACEGOOD有个3A用户,过场动画做完大概是120GB数据,非常恐怖。
除了数据量太大,在动画流程中,动画师对动画效果必须要可控,直接跑点云是没办法二次优化的。Activision 搞了一个双目面捕,跟FACEGOOD的双目有些类似,都是计算出4D点云。他们在二次优化的解决思路上跟FACEGOOD有些不同,Activision用的方法是降维到PCA空间,再到表情控制器,这样游戏中跑的还是控制器权重,如果bs量级足够,就可以很好地还原演员表演,可以大大节省动画师工作量,但是如果bs量级上不去,又由于bs存在的先天性缺陷,僵尸脸跟微表情丢失很严重。
流程一览
Activision 这个流程跟USC paul那伙人有些关系,流程做的挺重的,首先拿Light Stage扫了材质跟模型,主要是为了得到演员的高精度表情bs,用于计算表情权重,扫描的成本非常高,大约20万一个,实际上是可以自动化的,类似于我们Avatar Studio平台的AutoFace。。流程上几家的双目4D方案都差不多,只是在个别环节有些差别(Dynamixyz那套双目除外,那个跟单目没啥区别,计算出来的还是权重并非4D点云)。
Activision 用两个普通的rgb摄像头重建了密集点云,精度还是可以的,类似路线还有Di4D。
密集点云主要是用来计算表情权重,演员脸上的mark点,投影到点云,得到3D点,再计算表情权重,精度自然要比2d点的最小二乘拟合(公式1)要好很多(faceware、dynamxyz),后者当表情基多起来之后,因为存在大量近似的表情基会产生线性相关,就出现了开关嘴等问题。
产品化痛点
技术的产品化最难的是产品的鲁棒性,真实的面捕场景是非常复杂的,所以实际拍到的视频问题很多,最大的问题就是镜头晃动,晃动会导致数据抖动。用过faceware或者dynamixyz的朋友应该都有体会,演员动作大了,数据就抽抽,后期修的工作量很大。
2D点云面对这种数据是无解的,这种晃动不是简单的平移,还有3D旋转。所以在3D空间,在3D点云基础上镜头的晃动就可以解决了。点云应用到游戏,要解决数据压缩,点云降维到控制器有一些办法。Activision的做法是用PCA做了降维,计算出来的表情权重要比公式1好很多。对于公式1的解释,可以参考《BS表情绑定的巨大理论缺陷及解决方案》。
经过PCA(Principal components analysis)处理后,所有表情基最大限度保留了演员的高频表情特征,最终映射到控制器的过程就是PCA权重的线性组合,计算高效,只是一次简单的矩阵乘法即可,同时PCA还具有天然的数据降噪能力,很大程度上消除了噪音。但是在jelo看来,这个流程缺陷也是很明显的,bs的先天性缺陷导致,最终动画效果完全依赖于bs数量级。但是bs数量级上去了,游戏角色的资产又会非常重,是个难题。降维跟精度是个悖论,维度降低了,鲁棒性高,但是精度会丢失,我们有一个很好的思路,以后单独分享。
最终数据,左是生数据,右是调优之后。