性能优化(15-18)

  1. 1. 移动平台优化顺序
  2. 2. Unity下常见的等待函数(Profiler下)
  3. 3. URP下SSAO的优化
  4. 4. SSAO进一步优化
  5. 5. 反走样方案的发展

 

移动平台优化顺序

  • 先优化ios,再优化android
    • 苹果在ios平台上有比较强大的性能分析工具
    • ios平台的设备较少,不像android那样硬件千差万别,各家的操作系统也五花八门
  • 先共性性能优化,再兼容性方面的性能优化
    • 一般共性的性能问题,ios优化好了,android平台也就差不多了,只需要对特殊的硬件和系统做兼容性优化处理即可

Unity下常见的等待函数(Profiler下)

URP下SSAO的优化

  • 通过开关SSAO,可以看到画面中一些模型的拐角处和连接处的明暗对比会更明显,画面的立体感和层次感会更丰富

  • Downsample选项:选择这个选项可以降低生成中间纹理的分辨率,以降低纹理采样数,这对SSAO整体效率提升是非常明显的
  • 默认在URP下只提供降低1/2分辨率的设置,我们可以尝试修改为原始分辨率的1/4大小,这样整体纹理采样率就会降低到原来的1/16

  • 此外URP中只对AO第一张中间纹理做了降采样处理
  • 我们还可以对其他模糊过程中的中间纹理进行降采样,以降低纹理采样的开销,当然这样降采样会带来视觉表现上的损失
  • 你可以通过扩展SSAO的参数,为每张生成的中间纹理指定降采样系数,并将其暴露到编辑器上,这样通过可视化调整,达到既保障效率又满足视觉表现的平衡
  • After Opaque选项是将计算和应用SSAO放到不透明物体渲染之后,以改善在tiled-based架构的GPU上的效率。考虑到是移动端的优化,虽然它会造成物理理论上的一些不精确,但还是建议开启
  • Source选项是灰的时,是因为工程是延迟渲染的,所以默认就会生成Depth和Normal的信息,用这两个信息可以生成更精确的AO。将Rendering Path改成前向渲染时,我们可以使用Depth生成Normal并计算AO信息,这时我们可以调整生成AO的精度质量
  • Intensity:是AO强度的设置,这个参数是影响混合系数,通过混合系数调整最终AO的混合强度。这个值一般不会影响效率,但我们可以通过它和其他选项配合一起做优化
  • Radius:AO信息计算的采样半径,这个值越大,GPU开销也就越大,一般我们要在可接受的视觉效果范围内,通过调低采样半径,调大AO强度来优化AO显示效果
  • Direct Lighting Strength:直接光影响的强度,这部分一般是指受直接光照的像素,来混合这个影响AO的系数,以此来调整表现效果,这个参数并不影响渲染效率,可以采用默认值
  • Sample Count:采样次数,这个值直接影响采样的循环次数,值越大性能开销也越大,虽然表现效果越好,但性能上是得不偿失的,一般在移动设备上应尽量保障最小采样次数下来调整AO的效果

SSAO进一步优化

  • 使用HBAO(horizon-based ambient occlusion)或基于HBAO魔改的采样更少但AO效果更好的GTAO(Ground Truth Ambient Occlusion)方案替代SSAO
  • 针对SSAO的Shader指令做进一步优化
  • 可以采用烘焙AO到光照贴图的方案替换SSAO方案

反走样方案的发展

  • 反走样主要是为了解决采样不足导致的问题,一般方案选择需要兼顾画面质量与渲染效率权衡的前提下对图像进行增强
  • 反走样方案经过了从第一代SSAA到第二代MSAA、FXAA、SMAA,目前逐步被第三代的TAA以及未来的第四代DLSS所取代
  • 目前Unity的URP下,AA的方案主要还停留在第二代
  • URP中的AA方案
  • 效率:FXAA > SMAA > TAA > MSAA
  • 质量:MSAA > SMAA > TAA > FXAA