Unite 2017 | 基于Animation Instancing的大规模人群模拟
在Unite 2017的国内技术专场,Unity技术团队为参会者们带来了Unity引擎功能相关的技术分享。今天这篇文章,将由Unity技术支持工程师金晓宇为大家分享基于Animation Instancing的人群模拟技术,对于大型MMO游戏非常实用。
在实际开发中,可能经常会遇到类似需求:一个体育场中有大量的观众,或者有成百上千的僵尸在街道上游荡。对于这些类似的需求,如果采用传统的动画方式,CPU计算骨骼和蒙皮的压力会非常大。因为每一个角色都要有一个骨骼和蒙皮的计算过程,即使他们都播放的是同一个动画;除此之外,每个角色都至少有一个DrawCall,频繁的向GPU提交数据也为CPU带来了更多的压力。
上图是运用Animation Instancing的一个场景截图,这个场景中大约有30000个角色,每个角色有1~2千面,帧数可以稳定在60帧。Animation Instancing对于骨骼动画的限制较小,场景中的角色类型丰富,动画多样,非常适用于模拟大规模群体动画。
分析
本质上讲,Animation Instancing可以看做是GPU Instancing的扩展。因为他们的基本原理是相同的,只是在实现方法和细节上有所区别。我们都知道,GPU Instancing不支持带有骨骼动画的Mesh。这是因为带有骨骼动画的Mesh由于骨骼驱动蒙皮的原因其顶点数据(坐标)是不同的。