![7347064ce70d7c2d9f2f0e61ebae5f6d.png](https://img-blog.csdnimg.cn/img_convert/7347064ce70d7c2d9f2f0e61ebae5f6d.png)
本篇记录在unity开发过程中的优化项。不定时更新。
1,骨骼动画选项:
----------------------------------------------------------------------------------------------
首先我们先理解一下Unity里面的“骨骼动画”。它的概念很贴近现实中的“骨骼”的含义:常见的模型被分解为两个部分:骨骼Bones和蒙皮Mesh。这些以“关节”结构连接在一起的骨头为模型构建起了一套骨架;随着骨架结构的运动变化,模型表面的蒙皮网格也会随着骨架的变动而发生改变.
在Unity中,如果导入的模型有骨骼动画,那么Unity就会自动为对应的网格添加上Skinned Mesh Renderer,来渲染这些骨骼动画。蒙皮网格渲染器组件会将模型的网格(Mesh)与骨骼节点绑定起来,当骨骼动画播放时,网格的顶点会随着它所绑定的骨骼进行运动,这便形成了“皮肤”随骨骼运动的效果.
![b71a402206384a2dae7d03877c7f912c.png](https://img-blog.csdnimg.cn/img_convert/b71a402206384a2dae7d03877c7f912c.png)
运动向量(Motion Vector)的概念来源于视频压缩领域,通俗地理解,运动向量描述了在屏幕空间中,每个像素所对应的物体在连续两帧之间的运动“速度”,该“速度”值等于该像素块在这帧的位置减去在上一帧的位置,也就是当前像素下的片元在相邻两帧之间,屏幕空间位置的差。
Unity中,在Mesh Renderer与Skinned Mesh Renderer组件中都可以开启Motion Vector,用以获取物体的运动信息。若开启,相机会在渲染管线中增加一个motion vector pass,将运动向量渲染在一个Buffer当中,用户可以将Shader脚本中这个Buffer用于后处理特效。Motion Vector一般会用于运动模糊这样的后处理特效、基于时间的抗锯齿算法(temporal antialiasing)等。但是Motion Vector带来的显存中的双倍buffer开销和运算量开销是不容忽视的。而Skinned Motion Vector在移动端项目当中的应用也是很少的,一般不建议开启。
2.AnimationClip
在项目的实际运行中,AnimationClip资源是运行时加载频率最高的资源之一。AnimationClip的压缩格式决定了其包体大小、运行时占用内存大小以及加载效率。
![62f51061d1468a80a98e2721c3f7da71.png](https://img-blog.csdnimg.cn/img_convert/62f51061d1468a80a98e2721c3f7da71.png)
Optimal压缩方法虽然可能会造成动画质量稍有降低的问题,但内存占用是最低的,所以是我们最推荐的方案。
单个AnimatorController下挂载的AnimationState数量过大,会给CPU运算带来一定的压力.所以做的时候注意animationState的数量,一般不要超过30.在展示模型界面上只用到展示动作的时候可以考虑将动画分开,只加载单个展示动画。同时动画的精度也可以做一定限制,可降低包体大小和内存使用。
-----------------------------------------------------------------------------------------------