关于性能优化,经历太少,这里先不做论述,只是记录一下一些能够进行性能优化的方法。

多细节层次(LOD)

使用LOD优化技术进行渲染,可以随着某个对象与摄像机的距离增加而减少渲染对象的三角形数量。只要全部的对象不是同时靠近摄像机,LOD 便能降低硬件的负载并提高渲染性能。
在 Unity 中,使用 LOD Group 组件为对象设置 LOD 渲染。

  • 选中某个层级后,通过拖拽或者点击Add按钮来选择相机位于这个层级时应显示的图形
  • 在一个层级上点击右键来增加一个新层级或者删除选定的层级

Mipmap

Mipmap 是图像逐渐减小版本的的列表,用于优化实时3D引擎的性能,当纹理远离相机时使用较小版本的纹理。
在导入纹理时,勾选 Generate Mip Maps选项为当前纹理创建Mipmap。使用Mipmap时会多占用 33% 的内存

如果贴图的基本尺寸是256x256像素的话,它 mipmap 就会有8个层级。每个层级是上一层级的四分之一的大小,依次层级大小就是:128x128;64x64;32x32;16x16;8x8;4x4;2x2;1x1(一个像素)。

因此,使用 Mipmap 时会增加内存占用。不过使用 Mipmap 可以很好的优化性能

因为 mipmap 贴图需要被读取的像素远少于普通贴图,所以渲染的速度得到了提升。而且操作的时间减少了,因为 mipmap 的图片已经是做过抗锯齿处理的,从而减少了实时渲染的负担。放大和缩小纹理也因为 mipmap 而变得更有效率。

建议游戏中的距离相机位置会发生变化的纹理始终使用 Mipmap;(除 GUI 纹理、天空盒、游标外)

各向异性过滤(Anisotropic filtering)

各向异性过滤可以提高从掠射角观察时的纹理质量。此渲染在显卡上非常消耗资源。提高各向异性等级对于地面和地板纹理而言是一种很好的做法。
可在质量设置(Quality Settings)中强制对所有纹理进行各向异性过滤或完全禁用该功能。
导入纹理时通过 Aniso Level 选项来设置各向异性等级。

纹理导入设置对性能及内存的影响

纹理尺寸大小

建议纹理尺寸大小应该每边为2的整数次幂(即2、4…64..2048像素)。
因为使用 NPOT(非2的整数幂)纹理大小时,通常要占用稍微多一点的内存;并且 GPU 的采样速度可更慢。因此,最好使用2的整幂大小的纹理。
如果平台或 GPU 不支持 NPOT 纹理大小,Unity 会对纹理进行缩放和填充以达到一个2的整幂大小。这一过程会使用更多内存并使加载速度变慢。

2的整幂纹理大小,左侧不使用 mipmap,右侧使用 mipmap


NPOT 纹理大小,左侧不使用 mipmap,右侧使用 mipmap

Read/Write Enable

选中这个选项,允许从脚本函数(例如 Texture2D.SetPixels…)中访问纹理数据,但这种情况下会生成纹理数据的副本,使纹理资源所需的内存增加一倍,因此,非绝对必要下不要使用这个属性。

Generate Mip Maps

选中此框,可为当前纹理生成 Mipmap。

  • Border Miip Maps: 选中此框可避免颜色向外渗透到较低 MIP 级别的边缘。
  • Mip Map Filtering
    • Box:切换时淡出 Mipmap 的最简单的方法,随着尺寸减小,MIP 级别将变得更加平滑。
    • Kaiser:随着 Mipmap 的尺寸大小下降,对其应用锐化。如果纹理在远处太模糊,可尝试此选项。
  • Fadeout Mip Maps:滚动条左边的的滚动项表示第一个开始淡出的 MIP 级别。其右边的滚动项表示纹理完全变灰的 MIP 级别。

Aniso Level

以大角度查看时提高纹理质量。

避免频繁的GC

GC何时触发?

  1. 堆内存不足仍进行堆内存分配时
  2. 自动触发,不同的平台运行频率不一样
  3. 强制执行GC(GC.Collect()尽量避免主动调用它)
    因此,在代码中,要尽量避免大量临时变量的生成,或者避免有大量临时变量产生的操作
    其他策略有:
  4. 对需要频繁生成和销毁的对象使用对象池进行缓存
  5. 需要对字符串频繁进行拼接等操作时,使用使用StringBUilder
  6. 循环时尽量使用for,除非必须使用foreach

其他

关于脚本和设置方面的优化策略,这两篇博客写的很不错
Unity性能优化 – 脚本篇(https://wuzhiwei.net/unity_script_optimization/)
Unity性能优化 – 设置篇(https://wuzhiwei.net/unity-settings-optimization/)

未完待续。。。

参考文献


 评论