Unity URP 优化技巧
URP的优化技巧

URP项目的优化技巧汇总,由于篇幅问题,部分优化中的原理会在其他文章中详细介绍。
版本
- URP: 10.10.1
Bloom优化
关闭HQ
HQ选项能够让Bloom效果更加平滑。这是因为开启HQ后,降采样前会对原图进行一次Blur,然后再升采样时会有部分采用双向三次插值
采样。
HQ开启带来更好的效果,随之而来也带来更大的性能消耗。具体统计数据可以查看URP Bloom效果文章,里面有更详细的分析。
所以关闭HQ可以带来2~3ms(小米9)的减少,而效果往往不会相差太多。
降迭代
URP的Bloom算法是通过多次降采样和多次升采样来进行Blur操作的,而往往需要多次迭代来达到Blur的效果。 但迭代次数多意味着需要多次Blit,而每次Blit都需要等待上一次的结果,所以也无法做到并行处理,而随着迭代次数增多,Blit的尺寸越来越小,后面的Blit并没有充分利用GPU的算力。 而越往后的低尺寸Blur,实际上并不会对最终效果做出很大权重的贡献。
综合上述情况,URP Bloom提供了Skip Iterations
的选项,可以减少原有的迭代次数:
//PostProcessPass.CS
// Determine the iteration count
int maxSize = Mathf.Max(tw, th);
int iterations = Mathf.FloorToInt(Mathf.Log(maxSize, 2f) - 1);
iterations -= m_Bloom.skipIterations.value;
与关闭HQ
一样,具体统计数据可以查看URP Bloom效果文章,里面有更详细的分析。
所以减少迭代次数可以带来1~2ms(小米9)的减少,而效果往往不会相差太多。 当然,迭代次数减少也不是越小越好的,需要根据实际情况考虑。
降采样
Bloom后处理本来就有降采样处理。首先会降1/4(宽高各1/2),然后再逐级下降。
这个操作本来就已经能降低采样规模,不过还可以进一步减少。
就是在首次降采样时可以更激进的使用1/8~1/16,这样每级的采样纹理会更较小,可以减少带宽。
//PostProcessPass.CS
void SetupBloom(CommandBuffer cmd, int source, Material uberMaterial)
{
int tw;
int th;
if (m_Bloom.downSample.value)
{
// Start at quarter-res
tw = m_Descriptor.width >> 2;
th = m_Descriptor.height >> 2;
}
else
{
// Start at half-res
tw = m_Descriptor.width >> 1;
th = m_Descriptor.height >> 1;
}
//...
}
值得注意,这么做并不是没有缺点的: 纹理越小,锯齿感越明显。特别在高强度的情况下特别明显。
评论
还沒有留言。