针对URP项目的GPU优化建议(二)


在unity项目中,使用URP渲染管线时,需要针对不同的情况做一些GPU渲染优化,以平衡性能和效果。

一、SSAO

参考:Unity性能优化学习笔记(3)SSAO优化
在这里插入图片描述
Downsample:选择这个选项可以降低生成中间纹理的分辨率以降低纹理采样数,这对 SSAO 整体效率提升是非常明显的。默认在 URP 下只提供降低 1/ 2 分辨率的设置。可以通过修改 URP 源码来调整这个值,以降低更大倍数的采样。可以尝试修改为原始分辨率的 1/ 4 大小,这样整体纹理采样率就会降低到原来的 1/ 16。此外, URP 中只对AO第一张中间纹理做了降采样处理。我们还可以对其他模糊过程中的中间纹理进行降采样,以降低纹理采样的开销。当然,这样降采样会带来视觉表现上的损失。可以通过扩展 SSAO 参数,为每张生成的中间纹理指定降采样系数,并将其暴露到编辑器上。这样通过可视化调整达到既保障效率又满足视觉表现的平衡;

After Opaque:将计算和应用 SSAO 放到不透明物体渲染之后,以改善在GPU 上的效率。考虑到是移动端的优化,虽然它会造成物理理论上的一些不精确,但还是建议开启;

Source

Normal Quality

Intensity:这个参数只影响混合系数,通过混合系数调整最终 AO 的混合强度,这个值一般不会影响效率,但我们可以通过它和其他选项配合一起做优化强度;

Radius:AO 信息计算的采样半径,这个值越大, GPU 开销也就越大。一般我们要在可接受的视觉效果范围内,通过调低采样半径,调大 AO 强度来优化 AO 显示效果;

Direct Lighting Strength:直接光影响的强度,这部分一般是指受直接光光照的像素来混合这个影响 AO 的系数,以此来调整表现效果。这个参数并不影响渲染效率,可以采用默认值;

Sample Count:采样次数,这个值直接影响采样的循环次数,这个值越大,性能开销也就越大,虽然表现效果越好,但在性能上是得不偿失的。一般在移动设备上要尽量保证最小采样次数下来调整 AO 的效果。

二、Volume

参考:Unity项目性能优化实战「八」——后期处理与管线精简
在这里插入图片描述
针对Unity URP中的体积(Volume)后处理,可以考虑以下一些优化策略:

  1. 体积后处理的分辨率:对于性能较低的设备,可以降低体积后处理效果的分辨率,以减少计算量和内存占用。
  2. 体积纹理的优化:对于体积光、雾等效果所使用的体积纹理,可以优化其分辨率和精度,以降低性能开销。
  3. GPU Instancing:如果场景中存在多个体积效果,可以考虑使用GPU
    Instancing技术来批量渲染这些效果,以减少渲染调用次数。
  4. Level of Detail(LOD):针对体积效果,可以考虑实现LOD系统,根据相机距离和效果的重要性动态调整效果的质量和计算量。
  5. 减少冗余计算:通过合并相邻区域的体积效果计算等方法,减少不必要的重复计算,以提高效率。
  6. 硬件适配:根据目标平台的硬件性能、内存情况等,调整体积效果的参数和质量,以保证在不同设备上都能有良好的性能表现。
  7. 使用Shader优化:使用合适的Shader编写方式,通过减少不必要的计算和优化渲染管线,来提高体积效果的渲染性能。

三、遮挡剔除(Occlusion Culling)

参考:Unity - 遮挡剔除(Occlusion Culling)优化

在这里插入图片描述
在Unity中,使用遮挡剔除(Occlusion Culling)可以在渲染场景时减少不可见物体的渲染负荷,提高渲染性能。然而,在某些情况下,你可能会观察到遮挡剔除后 Draw Call 增加的情况,可能有以下原因:

  1. 粒度较细的剔除区域:如果设置了精细的剔除区域,导致特别多的剔除区域,这可能会增加 Draw Call
    的数量。因为在进行遮挡剔除时,对于每个剔除区域都需要进行一次渲染调用。
  2. 动态物体:遮挡剔除主要针对静态物体,对于动态物体的处理相对有限。如果场景中有大量的动态物体,尤其是动态物体在剔除区域边界上移动,可能会导致额外的
    Draw Call。
  3. 复杂的遮挡剔除设置:不正确的设置遮挡剔除参数也可能导致 Draw Call 的增加。例如,过于激进的剔除设置可能会导致频繁的重新渲染。
  4. 精细的物体分割:在一些情况下,为了实现更精细的遮挡剔除效果,可能会将物体分割成更小的部分,这可能会增加 Draw Call 的数量。

猜你喜欢

转载自blog.csdn.net/weixin_43559607/article/details/135089479