跳转到主要内容

图形性能瓶颈卡在哪?一文搞定 CPU 减负、GPU 减压

demi 提交于

<font size="4" style="line-height: 45px;" color="#c200ff"><strong>开始前:定位并理解问题</strong></font>

在做出任何更改前,必须对应用程序进行性能分析以确定问题的根源。若未理解原因就尝试解决性能问题,可能会浪费时间或使问题恶化。此外,与渲染相关的性能问题可能出现在CPU或GPU上。解决这些问题的策略差异很大,因此在采取行动前务必明确问题所在。

Unity Learn网站上的一篇文章全面介绍了图形性能,并包含识别和修复问题的信息:<a href="https://learn.unity.com/article/fixing-performance-problems"><font color="#3a6694">《修复性能问题》</font></a>。如果尚未熟悉该主题,请先阅读此文再遵循本页建议。

<hr>

<font size="4" style="line-height: 45px;" color="#c200ff"><strong>降低CPU的渲染开销</strong></font>

通常,CPU渲染时间的主要来源是向GPU发送渲染指令的开销。渲染指令包括绘制调用(绘制几何体的命令)和在绘制前更改GPU设置的命令。若问题在此,可考虑以下方案:

<font style="line-height: 40px;"><strong>减少Unity渲染的对象数量</strong></font>

<ul><li>简化场景中的对象总数
例如,使用天空盒模拟远处几何体。</li></ul>

<ul><li>强化剔除机制
使用遮挡剔除
隐藏被遮挡的物体,缩短摄像机的远裁剪平面(Camera.farClipPlane),或通过分层设置逐层剔除距离(Camera.layerCullDistances)精细控制。</li></ul>

<font style="line-height: 40px;"><strong>减少单个对象的渲染次数</strong></font>

<ul><li>利用光照贴图预计算光照和阴影
这会增加构建时间、内存占用和存储空间,但能提升运行时性能。</li></ul>

<ul><li>在正向渲染中减少实时逐像素光源数量
详情见正向渲染路径。</li></ul>

<ul><li>谨慎使用实时阴影
实时阴影消耗资源较多,需高效使用。</li></ul>

<ul><li>优化反射探针(Reflection Probes)的使用
参考反射探针性能指南。</li></ul>

<font style="line-height: 40px;"><strong>优化渲染指令的提交效率</strong></font>

通过更高效的“批次”提交指令。

<hr>

<font size="4" style="line-height: 45px;" color="#c200ff"><strong>降低GPU的渲染开销</strong></font>

GPU无法按时完成帧渲染的原因主要有三:

<font style="line-height: 40px;"><strong>填充率瓶颈(GPU绘制像素过多)</strong></font>

<ul><li>减少过度绘制(Overdraw)
常见于UI、粒子和精灵等透明元素重叠区域。在编辑器中启用“Overdraw”模式定位问题。</li></ul>

<ul><li>简化片段着色器
使用内置的移动端(Mobile)或无光照(Unlit)类别着色器。</li></ul>

<ul><li>启用动态分辨率(Dynamic Resolution)
动态调整渲染目标的分辨率。</li></ul>

<font style="line-height: 40px;"><strong>内存带宽瓶颈(显存读写超负荷)</strong></font>

<ul><li>为纹理启用Mipmaps
适用于距离摄像机变化的纹理(如3D场景中的多数纹理)。</li></ul>

<ul><li>使用压缩纹理格式
减少内存占用并提升带宽效率。</li></ul>

<font style="line-height: 40px;"><strong>顶点处理瓶颈(顶点数过多)</strong></font>

<ul><li>优化顶点着色器
参考着色器性能指南。</li></ul>

<ul><li>简化几何体
减少不必要的三角形数量,优化UV接缝和硬边。</li></ul>

<ul><li>使用LOD(Level Of Detail)系统
根据距离动态调整模型细节。</li></ul>

<hr>

<font size="4" style="line-height: 45px;" color="#c200ff"><strong>降低渲染频率</strong></font>

适当降低渲染帧率可减少CPU/GPU负载,节省电量并防止设备过热(尤其在移动端)。适用场景包括菜单界面、回合制游戏等待阶段或静态内容(如车载UI)。注意:为避免输入延迟,可在操作期间临时提高帧率。

注意:VR应用不支持按需渲染,跳帧会导致画面与头部运动不同步,增加晕动症风险。

<hr>
<font color="#9a9a9a">版权声明:本文为CSDN博主「小李也疯狂」的原创文章,</font>
<font color="#9a9a9a">遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。</font>
<a href="https://blog.csdn.net/qq_40882017/article/details/148262558"><font color="#9a9a9a">原文链接:https://blog.csdn.net/qq_40882017/article/details/148262558</font></a&gt;
<br>