关于《荒野乱斗》的表情方案研究

直入主题吧,首先我们来分析下荒野乱斗的面部表情实现。

荒野乱斗的角色表情非常丰富细腻,跟游戏角色的整体画风非常搭,五官没有特别的模型支撑,基本上都是紧贴面部,以相对扁平化的方式出现。

对于这种无网格结构的表情展示,不太适合用骨骼动画去表现,很多二次元游戏会针对表情做一套贴脸的BlendShape网格,荒野乱斗的表情方案看起来也更加接近这种方式。

但是经过观察,荒野乱斗的角色表情与面部非常贴合,没有看到任何悬浮网格,似乎就是动态贴图,动态细腻,也不像是序列帧。

那么他们到底是怎样实现的呢?~ 直接来抓帧看个究竟吧~

很快找到答案了,在某个阶段游戏内在一张RT上渲染了3个mesh,这3个mesh构成了一个张动态的面部表情帧。

然后把这张表情RT叠加到角色的面部网格的基础贴图上即可。(这套功能没有使用2UV,荒野乱斗角色面部表情UV刚好占整个角色UV的1/4,只需要按约定将表情贴图展开在该象限即可)

而mesh上展示的表情资源,都在这样一张表情图集上:

这样所有角色都可以使用一张表情图集,并且图集之间可以共享眼珠或者嘴巴之类的差异不大的部分像素,类似UI图集的使用,但因为表情mesh相对比较精细,所以图集的密度可以做得很高,没必要像UI一样使用矩形格子进行素材分隔。部分纯色且锐利的部分,甚至可以直接用网格进行表现,比如尖尖的牙齿、三角的眉毛,如此还可以降低表情图集的尺寸~

既然最终输出是RT,那么中间过程的表情mesh使用骨骼动画方案或者BlendShape动画方案甚至两个方案混用就可以随意选择了。很不错的思路。

但是由于渲染RT仍然是比较费资源的操作,所以只有在展示界面才会使用该方案,在游戏对局内角色数量增多,虽然仍然使用与展示大厅相同的角色网格,但是放置表情的RT被替换为了一张静态小图,不再展示动态表情。

 

那么方案基本上摸透了,接下来我们来尝试一下怎样在Unity里具体实现

做方案跟做研究不一样,方案除了实现原理之外,还要考虑美术工作流程的便利性,可维护性,与程序逻辑的兼容性。

在这套流程里的难点主要是表情动画如何方便的与角色动画协同播放,并且方便动画师随时维护修改。

 

 

 

未完待续…