开始前:定位并理解问题
在做出任何更改前,必须对应用程序进行性能分析以确定问题的根源。若未理解原因就尝试解决性能问题,可能会浪费时间或使问题恶化。此外,与渲染相关的性能问题可能出现在CPU或GPU上。解决这些问题的策略差异很大,因此在采取行动前务必明确问题所在。
Unity Learn网站上的一篇文章全面介绍了图形性能,并包含识别和修复问题的信息:《修复性能问题》。如果尚未熟悉该主题,请先阅读此文再遵循本页建议。
降低CPU的渲染开销
通常,CPU渲染时间的主要来源是向GPU发送渲染指令的开销。渲染指令包括绘制调用(绘制几何体的命令)和在绘制前更改GPU设置的命令。若问题在此,可考虑以下方案:
减少Unity渲染的对象数量
- 简化场景中的对象总数
例如,使用天空盒模拟远处几何体。
- 强化剔除机制
使用遮挡剔除
隐藏被遮挡的物体,缩短摄像机的远裁剪平面(Camera.farClipPlane),或通过分层设置逐层剔除距离(Camera.layerCullDistances)精细控制。
减少单个对象的渲染次数
- 利用光照贴图预计算光照和阴影
这会增加构建时间、内存占用和存储空间,但能提升运行时性能。
- 在正向渲染中减少实时逐像素光源数量
详情见正向渲染路径。
- 谨慎使用实时阴影
实时阴影消耗资源较多,需高效使用。
- 优化反射探针(Reflection Probes)的使用
参考反射探针性能指南。
优化渲染指令的提交效率
通过更高效的“批次”提交指令。
降低GPU的渲染开销
GPU无法按时完成帧渲染的原因主要有三:
填充率瓶颈(GPU绘制像素过多)
- 减少过度绘制(Overdraw)
常见于UI、粒子和精灵等透明元素重叠区域。在编辑器中启用“Overdraw”模式定位问题。
- 简化片段着色器
使用内置的移动端(Mobile)或无光照(Unlit)类别着色器。
- 启用动态分辨率(Dynamic Resolution)
动态调整渲染目标的分辨率。
内存带宽瓶颈(显存读写超负荷)
- 为纹理启用Mipmaps
适用于距离摄像机变化的纹理(如3D场景中的多数纹理)。
- 使用压缩纹理格式
减少内存占用并提升带宽效率。
顶点处理瓶颈(顶点数过多)
- 优化顶点着色器
参考着色器性能指南。
- 简化几何体
减少不必要的三角形数量,优化UV接缝和硬边。
- 使用LOD(Level Of Detail)系统
根据距离动态调整模型细节。
降低渲染频率
适当降低渲染帧率可减少CPU/GPU负载,节省电量并防止设备过热(尤其在移动端)。适用场景包括菜单界面、回合制游戏等待阶段或静态内容(如车载UI)。注意:为避免输入延迟,可在操作期间临时提高帧率。
注意:VR应用不支持按需渲染,跳帧会导致画面与头部运动不同步,增加晕动症风险。
版权声明:本文为CSDN博主「小李也疯狂」的原创文章,
遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40882017/article/details/148262558





