情怀容易回首,致敬谈何容易。上次发稿已经大半年前了,拖拖拉拉的终于把这个做完了,可以把完整版给大家看看了。
这种耗时的项目就是这样,开局的时候满怀激情,但是给激情买单的要投入大把的精力,时间再消磨着意志。好在上次投稿大家给予了很多的支持,这期间居然还等来了一期久违的魔兽说书节目,这都给了我坚持到底的动力。虽然制作上还是留下了很多遗憾,但是终归是完成了。
在上次的分享里我介绍了一些关于此类精致表情制作的流程和技术原理,也给肌肉模拟挖了坑。不少朋友比较感兴趣,说是想更多的了解一些细节。我就借这次分享来填一些坑。
首先简略回顾一下上期的主要内容吧,免得大家接不上。(看过上期的可以直接跳过)
我们经常看到的表情捕捉演示,演员戴着摄像头,画着标记点,这导致容易产生一个误区——虚拟角色表情动画是靠采集这些标记点的位移信息,用这些位移来控制虚拟角色面部的骨骼位移实现的。其实这样不但无法将表情细节呈现(毕竟那么少的几个点怎么可能驱动上万面的模型来实现等量的细节呢),也无法实现和演员长相区别大的虚拟角色的表情传递。面部的差异会导致这种简陋传递方式无法精准符合解剖结构,例如嘴巴开合,每个人开合的幅度都是有区别的,于是就会导致传递后的角色可能张不开嘴。甚至很多表情会导致特征点变形,变得不像原来的角色了。
然而实际的流程是,首先要为虚拟角色制作集于FACS原理的表情形态AU集合。FACS是一套用科学的方法统计参数化表情运动的理论,定义了表情最小的运动单元AU,以及详细的描述了每一个AU的在面部产生的细节形态变化。这些AU单元就可以灵活的拼组成任何复杂的表情。
演员表演,记录面部视频
通过算法识别视频,将演员的表演解析成一个个AU单元的运动强度参数
将这些AU参数输出给虚拟角色对应的AU单元,有一些高级别项目还会做一个演员形态一样的角色,先把参数输出给这个“演员”,用以和视频对比,以此判断解算输入的参数是否正确。因为有些虚拟角色形态差异很大,直接从虚拟角色上校验不容易查找判断问题到底出在那里,有一个扫描的原始演员表情模型做对比则一目了然,确定原始数据的正确性,提高效率。
我其实在写这篇稿子之初就在想用什么切入点来继续深入探讨表情制作呢?一次无意间在个玩家群里看到大家在争论《天外世界》,《博德之门3》里面人物表情做的很僵硬简陋,为什么不做的精致一些?
有人从技术不过关的角度认为黑曜石,拉瑞安之类的公司做不出来。但我作为一个了解一些表情制作核心技术的人来说,我不认为这中间存在着什么技术壁垒。黑曜石和拉瑞安之所以做不到顽皮狗的精度,我想是另外一个主因——游戏类型。
很多玩家因为不了解表情制作流程的成本,可能以为只要技术过关就可以像拍电影一样批量生产。然而现实并非如此,这背后的人工成本依旧巨大。看看吹了半天的实时虚拟主播有几个能做到很高水平的,别说《最后生还者2》这种级别的游戏了了,就是《天外世界》也比这些实时虚拟主播精度高得多。所以表情制作的成本没有那么低,像《最后生还者2》这种10来个角色,文本量很低的作品当然可以精雕细琢。而CRPG这种动辄100万文本的,几十个登场角色的游戏,精致的表情动画实在是过于奢侈。因此我也想接着成本和效率为切入点来进一步的介绍表情的流程细节。让大家对表情流程有一个更具体的认知,初步了解一下我们为了优化效率做了哪些努力。
现在的这些商业化产品,无论是电影还是游戏都避不开一个话题,效率。再好的效果如果完全脱离了效率和成本的限制,那这个效果都是没有实际商业价值的。
首先是一个很遗憾的现实,以当下的技术条件而言,动态捕捉仍然不能够满足高精度表情制作。也不必迷信国外一线的先进技术,据一些在海外一线工作室的朋友介绍,40%的表情动画工作量仍然是需要手动去解决的,一个大型视效公司动辄就养着几百名动画师。像顽皮狗那种精致的表情背后都是大量的动画师的心血,而不是直接捕捉出来就那么精致。所以如何优化动画师的工具成为了表情制作流程的重中之重。
至于《2077》那种多语言匹配口型,其实只是把视频解算换为语音作为解算信息的来源,但是不得不说还是很呆板机械的,毕竟即便是同一个音我们完全可以用各种带着表情的嘴部细节来展现更有情绪的对白,现实的说话状态其实细节丰富得多,语音能解析出的东西很有限。
那么动画师到底是如何来工作的呢?如上图,最早的工作方式就是从右侧红色列表里找出那个你要用的表情单元,给它一个参数,确定一个关键帧,前后检查动态效果,然后一个关键帧一个关键帧地调节,一帧一帧地修复。
这个列表动辄就是几百个项。先不说你需要多费劲才能找到那个你要的,即便是记住理解每项所对应的形态也是很困难的一件事情。很多时候你两天前做了一个复合表情,想修改它,你可能都忘了当初都用了列表里的那些AU来制作了。
更可怕的是,其实很多的形态独立来看并没有意义,只是在矫正其他多形态复合时使用的,其功逻辑关系又进一步复杂了起来,增加了动画师制作的难度。时至今日仍然有很多技术力不强的公司以这种惨无人道的方式来制作动画。卡通的角色表情少尚可如此来制作,写实类表情细节非常多,这么制作无疑是过于粗放了。
于是技术人员就想,能不能把一些经常会组合在一起的形态通过一个形象的控制器整体控制呢。
例如眼皮,一个眼皮的运动是由睁眼状态的上下左右,左上,右上,左下,右下8个形态组成,以及闭眼状态的8个形态(确实有其他的方法可以实现眼皮联动,但此处讨论的是形态变化较为复杂的写实类角色)。一共16个形态,都通过一个如下图的控制器统一连动,控制器在方框的哪一个方位就对应激活那个方位的形态。这样一来是不是就方便了很多了。
而且控制器也在一个类似头部UI造型里,更容易理解它代表的含义。
以上如果是有过一些动画经验的朋友都会习以为常,因为我们大多数使用的角色都具备这样级别的控制优化。那么下面就要说一些不那么常见,制作起来更有技术含量的优化了。
上一个环节提到了一个通过一个控制器联动多个AU形态的方法,方法虽好但是仍会面临两个问题。
首先,一个表情会带动多个肌肉一起运动,而这些肌肉并不是完全同一时间开始,同一时间结束运动,是有着明显得先后节奏顺序的。而且每个肌肉运动的强度也不尽相同,就是这种形态变化的节奏错落才让我们觉得有柔软的肉感。
所以用一个控制器以同样的节奏带动一群AU单元的方式,会显得有线性僵硬。而全部独立控制单个AU又太繁琐。于是更好的做法就是用表达式来把这种线性的僵硬打破,可以自动实现这种节奏错落的感觉。
例如笑会利用到嘴角肌肉的运动单元,还会用到脸蛋脂肪堆积的运动单元,由于微笑的时候其实并不会明显挤压到脸蛋脂肪,大幅度笑的时候才会,所以脸蛋脂肪的联动效果就要更延后,利用多种函数曲线使其变化更柔软。
其次,一个控制器带动多个表情单元还会导致另外一个问题。
其实FACS当初制定时并没有考虑到制作三维虚拟角色,只是用来做科学研究的,所以它并不是一套制作虚拟角色完美的理论。有一些运动单元的组合在人脸上就是再简单不过的事情,没有继续细分步骤的意义,但是在虚拟角色这种完全靠形态叠加的方式制作的逻辑上就会产生冲突。
例如笑和张嘴,只是两个运动单元,张嘴的时候嘴角被下颚等比的向下拉扯了,但是人们开口大笑的时候嘴角并不会等比地被下颚拉下来,而是小幅被下拉,基本还保持在高位。但是虚拟角色形态制作的时候则做不到这一点,直接叠加的结果就是笑的嘴角会被开口形态等比拉下来,就不像是在笑了。
于是就需要继续细分,在张嘴这个形态里,把嘴角拆分出来,当它和笑的形态叠加的时候可以通过表达式来单独控制这个张嘴嘴角叠加幅度,以此来实现更加自然的融合。
试想这些工作如果都是动画师手动来制作,那每次张嘴笑都要重复这个繁琐的过程。
诸如此类的冲突在面部FACS系统里非常得多,把这些有冲突的区域继续拆分,再通过表达式自动判断叠加逻辑,想捋顺这些关系并不容易,需要很多的产品积累才能做到。
经过这样一番的优化,动画师从最开始操纵几百个独立AU大列表做动画,简化为只是用几十个控制器来制作。外加辅助一些动态的纹理贴图的加持,基本上就可以相对高效地做到一个不错的质量了。好的动画控制系统和差的动画系统的差距就好像给一堆文件重命名,一个是批量操作,一个是逐一操作。
说到这里感觉也啰嗦了不少了,可能有些朋友已经看困了。其实可分享的还有很多,原本并不像介绍的这么枯燥,也是受内容所限吧,深入到具体细节的东西难免会长篇大论。不过能看到这里的相信一定对相关技术感兴趣的朋友了。希望会有些志同道合的朋友继续讨论。
我也再此立一个Flag吧,兽人项目虽然结束了,但是情怀并不会结束,我对于技术的探索也不会结束。接下来打算用更高的标准继续再做一个自己喜欢的角色,更多的制作分享内容就留给新角色吧。
原本想到的是《最后生还者2》乔尔,算是我最喜欢的角色,不过众所周知的一些原因,让我不忍心蹭这个。目前在想到的就是亚瑟·摩根,不知道为什么很喜欢这类对身边的人有担当的英雄。当然大家也可以给我一些建议,最好是稍微久远一点的经典角色,这样才更有重制一下的动力。
最后再次感谢大家的观看,下次会给大家代来更多其他方面的分享。
评论区
共 5 条评论热门最新