Texture
如何处理ETC压缩完图片质量模糊和ARGB32内存占用太大这种关系?
- 使用ETC压缩的图片尽量减少过渡,这是美术制作时需要注意的,很多情况下并不需要明显的过渡,只是需要半透明而已;
- 当然,有部分过渡色是必须的,这时候就要把相关小图整合到一张RGBA32的图片上;
- 在资源管理上入手。一般情况下,我们是允许部分资源使用RGBA32,但是要注意,及时卸载掉不使用的资源,以保证内存峰值在可控范围内。
- 果ETC压> 缩效果不好的,会使用RGBA32并降一个尺寸规格来压缩,这样虽然图片会模糊点,但是过渡还是平滑的。
ASTC格式并不是所有机型都支持,在Android端只有配有高端Mali芯片的机器才支持,对于不支持的,引擎会将其解压成RGBA32进行处理,所以图片中的内存值过大,很可能是项目在不支持ASTC格式的设备上所看到的结果。
工具
PutGeometryJobFence开销较高
- 就目前我们所优化过的项目而言,推测PutGeometryJobFence是Unity项目的主线程在等子线程的一些网格计算操作完成,其在不同的模块中均有出现(UGUI模块、渲染模块、Mesh.Skin操作、Animator动画模块等等),出现的地方不同,其本身含义也并不相同,不能一概而论。
Transform.set_position的开销很大
- Deep Profiler本身对于耗时的统计影响很大,通常在Deep Profiler下调用次数越多的函数,其耗时的统计就会越明显地偏高,因此,我们首先建议关闭Deep Profiler,同时用Profiler.BeginSample/EndSample将修改Position的代码包进来,再查看其耗时,相对会更加准确。
- CanvasRenderer.OnTransformChanged过多,移动UI元素相比于移动其他的元素确实会有额外的开销。
Unity Profiler中的Canvas.RenderSubBatch是否属于UI上渲染的开销?和重建有关系吗?
- 是UI模块(UGUI)的渲染开销,但是跟UI的重建并无太大关系,主要还是跟UI界面的渲染Draw Call相关。
Clear的耗时过大
- Clear操作一般是用来清除Camera的各种Render Buffer,当图像后处理使用的越多,则同一帧中开辟更多的Buffer的概率也越大,从而造成Clear的开销也较高。
- 项目中Clear耗时较高,且高耗时较为频繁,则建议先关闭图像后处理操作,来查看该情况是否有所好转。然后再逐步开启各个图像后处理操作,逐步定位造成Clear较高的耗时根源
模型&动画
如何降低动画文件的浮点数精度?之前UWA给过思路,但具体怎么个执行方法?
- 动画文件后处理可以做两件事,1)精度压缩,2)scale曲线剔除。比起用工具修改原始fbx文件,这样比较灵活。
实际测试,在开启Optimal压缩的情况下,加上这个后处理,能再节省40%左右。