Unity性能优化

"Unity性能优化"

Posted by Gumc on June 21, 2024

所有测试在OnePlus 6T手机上进行。

  1. 原始Profile(禁用Vsync哦) profile
  2. 静态合批 增加SRP合批

    • 前往 Edit > Project Settings > Player - Other Settings
    • 找到Static Batching组,启用。 去掉MaterialPropertyBlock(因为使用MaterialPropertyBlock就不能合批),不使用render.materials而是使用sharedMaterials。 profile
  3. 禁用加速计 这个功能定义Unity从设备读取加速度仪信息的频率,在不需要加速仪的游戏中,将它启动或设置了高于需求的频率,会影响性能表现. Project Settings->Player->IOS->Other Settings - Accelerometer Frequency (android没有这个设置)
  4. GPU Instancing 所有的material勾选GPU Instancing profile
  5. 所有导入的模型启用纹理压缩 xx.obj - Model - Mesh Compression 选择Medium profile 以上似乎没有太大作用
  6. [大招] 禁用Frame Pacing, 关闭Frame Time Stats/OpenGL: Profiler GPU Recorders/ Allow HDR Display Output 打开Graphics Jobs,发现GPU时间太短,而CPU时间却比较长,关闭Graphics Jobs. 降低摄像机的分辨率,URP资产-Quality-Render Scale设置为0.5,表示渲染分辨率是屏幕分辨率的一半 profile | | 1初始 | 2Static Batching | 4GPU Instance | 5Mesh Compression | 6 Frame Pacing等等 | | ———– | —– | —————- | ————- | —————– | ————– | | CPU时间(ms) | 35.65 | 33.06 | 33.71 | 33.52 | 16.49ms | | GPU时间(ms) | 29.55 | 20.98 | 23.59 | 22.82 | 4.22ms? |

关于游戏FPS的基准

需要在每帧上花费 16.7 ms的时间(max(GPU, CPU))才能实现 60 fps,但实际上还需要预留出1/3的时间用于散热,不然手机会持续发烫严重,所以大约每帧花费11.1ms才能实现60fps.