诸如模糊、屏幕空间环境光遮蔽(SSAO)、辉光等图像过滤操作通常使用像素着色器和类似所谓“收集”的操作来完成,其中每次像素着色器调用会发起多次纹理读取以访问邻近的像素值,并计算出一个像素的结果。这种方法在理论上存在效率低下的问题:许多冗余的读取会被执行,附近的着色器调用会重新获取许多相同的纹素。
另一种方法是使用计算着色器。这种方法有潜在的优势,即能够在一组着色器调用之间共享少量内存。例如,我们可以让每次调用只读取一个纹素并将其存储在共享内存中,然后在此基础上计算结果。这可能会更快,也可能不会。
问题是,在什么情况下(如果有的话)使用计算着色器的方式实际上比使用像素着色器的方式更快?这是否取决于核的大小、滤波操作的类型等因素?我知道关于效率方面的问题会因不同的GPU型号而异,但我很感兴趣了解是否存在共性的趋势。