Unity - 大批量的蒙皮动画优化

Unity - 大批量的蒙皮动画优化


MeshAnimator

之前做的一个PSVR项目,在后期优化时碰到由于场景里有大量蒙皮动画导致CPU时间太高的问题,最终解决办法是采用了一个MeshAnimator的插件。

其原理是,将蒙皮动画烘焙成N份Mesh,播放动画就是替换MeshRenderer的Mesh。然后我们项目的情况是3种角色,4种动画,场景上会出现最大100+的角色,假设此时的DrawCall是100。我们控制一个角色播放一个动画时统一使用同一个Mesh播放序列,既保证了播放同一个动画的角色,其MeshRenderer里的Mesh都是一样的,这样DrawCall最大只有3*4 = 12个。

这其实是一个空间换时间的概念,而且MeshRenderer支持GPU Instancing,再多的角色也不怕。

AnimMap

其次也参考了慕容小匹夫的做法:一个蒙皮动画将其顶点的变化烘焙成一张贴图,运行时在Shader里读取并改变Mesh的顶点,同样支持GPU Instancing(需要手写Shader)。我们采用后对其进行了改进添加了Diffuse光照和阴影,不过由于Shader学艺不精,在环境光采用Gradient模式时,光照有问题,最终还是采用了上面的方案。

MeshAnimator链接:https://assetstore.unity.com/packages/tools/animation/mesh-animator-26009
AnimMap链接:https://www.cnblogs.com/murongxiaopifu/p/7250772.html

你可能感兴趣的:(Unity优化,蒙皮动画优化,MeshAnimator,Unity优化)