UWA

每天一点UWA:第十六周

Posted by 蔡华的博客 on November 19, 2017

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的耗时过大

image

  • Clear操作一般是用来清除Camera的各种Render Buffer,当图像后处理使用的越多,则同一帧中开辟更多的Buffer的概率也越大,从而造成Clear的开销也较高。
  • 项目中Clear耗时较高,且高耗时较为频繁,则建议先关闭图像后处理操作,来查看该情况是否有所好转。然后再逐步开启各个图像后处理操作,逐步定位造成Clear较高的耗时根源

模型&动画

如何降低动画文件的浮点数精度?之前UWA给过思路,但具体怎么个执行方法?

  • 动画文件后处理可以做两件事,1)精度压缩,2)scale曲线剔除。比起用工具修改原始fbx文件,这样比较灵活。 实际测试,在开启Optimal压缩的情况下,加上这个后处理,能再节省40%左右。