《梦幻西游三维版》程序篇:脸部动画技术

石狮子

2022-06-241349次浏览

0评论

7收藏

1点赞

分享

本技术方案,通过对骨骼进行动态修改,动画进行分帧提取,智能融合比例控制等手段,实现了在常见角色口型技术上,叠加表情的效果,使角色动画表现更加丰富。

项目中后期,策划和营销提出产品上线时的核心关键词为千人千面,这就需要角色多样性有指数级的增长,纯靠美术堆砌资源已不现实。当时产品的现状是,美术通过个性化雕琢已经实现了近百个角色,但是这些角色完全是独立设计,没有考虑复用性。

核心的需求要从模型和动画两个方向突破。

模型方面,通过统一部分角色体型,拆分模型组件,实现局部的自由组合,丰富了模型数量。 而后到了动画阶段,发现了多个阻碍性问题。

首先,虽然骨骼的身体部分是公用,但是不同的头部模型,为了支持表情和口型,需要使用不同的蒙皮,骨骼和动画资源。 其次,美术如何在同一张脸上分别制作表情和口型动画资源,而后又如何组合使用。 再次,捏脸和体型变化的需求,美术应该如何参与配合,提供艺术指导。 最后,策划同学如何使用编辑器可以自定义所需的角色并投入到游戏中使用。

首先,保证历史资源的价值不变,新技术应该充分利用历史资源,通过新增额外资源的方式,实现表现数量的增长。

例如已经输出的骨骼文件,仍应该作为新技术的输入,而不需要重新输出。其次,分离多样性的维度,保持正交性。例如,表情和口型控制的骨骼,尽量没有交集,避免非预期的组合效果产生。 最后,流畅和友好的工具,是最终促进资源高速增长的保障。

第一步: 解决蒙皮和骨骼的组合问题

一般而言,一个角色只有一个骨骼,为了满足切换局部模型后需要更新骨骼的需要,提出一种局部骨骼制作并嫁接的技术。

首先,美术在DCC工具中独立制作局部模型,为其创建骨骼、蒙皮、制作局部动画并输出。局部模型输出的骨骼文件称之为子骨架。特别地,需要约定新的局部模型和旧模型之间有一根同名的骨骼,作为二者的嫁接点。在游戏运行时创建角色。同时传入父骨架,子骨架以及嫁接骨骼名。引擎即将父骨架嫁接骨骼的子树删除,将子骨架嫁接骨骼之下的子树移入,同时将子骨架上索引的动画资源,一并加载入父骨架中。最后,子骨架在使用后完全抛弃,父骨架在自身资源ID的基础上,叠加子骨架的ID,作为一个新的ID放入共享池中使用。游戏逻辑上,只要操作播放合并后的动画资源,即可单独控制子骨架动画,或者父骨架动画,或者二者融合叠加动画。

第二步: 表情和口型动画资源制作

首先,在骨骼关系上,尽量分离表情和口型使用的骨骼,例如口型主要控制嘴部附近骨骼。当然,不可避免地,表情如微笑也需要控制嘴部骨骼。另外,眼部骨骼也作为一个集合独立出来。

对于一个脸部,美术只需要建立三个DCC文件,一个制作表情,一个制作口型,一个制作眼部。以表情为例,设计了喜怒哀乐等10种表情,加上默认表情, 一共11种面部状态。为DCC创建11*10 帧,每10帧编辑一种表情。设计10帧间隔的目的是,让相邻表情有一定帧数间隔,避免采样误差。而将所有表情合并为一个动画进行制作,一是方便美术在一个文件中预览不同表情的差异和融合效果,二是节省文件数量,方便管理。游戏运行时,代码只需要算好帧数,对动画进行采样,即可准确获得所需表情姿态。口型资源制作同理。

第三步: 让表情灵动起来

上面制作的表情动作是静态的,实际使用上,虽然可以通过动画融合,实现喜和怒的过渡,但过于生硬。 一个好的表情比如开心,除了嘴巴的开合变化,眼神的转动, 还有肢体的配合。为此,开发了基于时间轴的表情编辑器,美术使用编辑器, 编辑一段表情逻辑,通过在时间轴上组合肢体,表情,和眼神,同时对融合比例进行定制, 即可输出一段”表情”单位,这个单位用于配合音频使用。同时这个单位本质上是一串逻辑,可以应用到所有角色上。

第四步: 让口型动起来

借助AI实验室的研究成果,我们有了口型变化的时序数据,利用Messiah角色编辑器的功能,不需要修改引擎即可实现口型的融合效果,在设计好足够多的控制参数后,由脚本读取口型时序数据,并在指定时间, 向图中传递参数,即可模拟整段话的口型效果。注意时序数据有一定的滞后性,要进行数据采样的预判,如此才能让口型动画和语音完全匹配。

第五步: 调和表情和口型的比例

由于表情和口型在动画中不可避免控制了同名的骨骼,因此在组合使用时,需要权衡二者的融合比例,例如开口笑的同时说话,如果不做调整会不自然。在不同表情和口型同时播放时,会使用美术调试过的数据进行自适应融合比例。

第六步: 导出变形数据

为了支持捏脸和体型变化,需要各个骨骼合理的可调整的范围,包括位移和旋转。设计了一种新的文件格式,美术只需在一个DCC中,间隔若干帧编辑模型变化即可。例如,美术在1-10帧保持模型默认形态,11-20帧,编辑模型可达的最瘦形态,在21-30帧编辑最胖形态。最后,通过自研的插件导出,会将后二者形态与默认形态的骨骼空间差值存储下来。游戏运行时,读取单个或复数差值文件,对齐进行混合插值,将结果叠加在默认形态上,即可实现体型的千变万化。

评论 0

0/1000
网易游学APP
为热爱赋能
扫描二维码下载APP