1

I've been reading about reconstructing a fragment's position in world space from a depth buffer, but I was thinking about storing position in a high-precision three channel position buffer. Would doing this be faster than unpacking the position from a depth buffer? What is the cost of reconstructing position from depth?

4

1 回答 1

4

这个问题基本上无法回答,原因有两个:

  1. “从深度重构位置”的方式有多种,具有不同的性能特点。

  2. 非常依赖硬件。

最后一点很重要。您本质上是在比较 a 的纹理提取性能GL_RGBA16F(至少)与GL_DEPTH24_STENCIL8fetch 的性能,然后是一些 ALU 计算。基本上,您是在询问获取每个片段的附加 32 位的成本(24x8 获取和 RGBA16F 获取之间的差异)是否等同于 ALU 计算。

这会随着各种事情而改变。获取内存的性能、纹理缓存大小等都会对纹理获取性能产生影响。ALU 的速度取决于同时运行的数量(即:着色单元的数量)以及时钟速度等。

简而言之,这里的变量太多,无法先验地知道答案。

话虽如此,请考虑历史。

在着色器的早期,在 GeForce 3 天,人们需要重新规范化从顶点着色器传递的法线。他们通过使用立方体贴图而不是通过对法线进行数学计算来做到这一点。为什么?因为它更快。

今天,在桌面或移动空间中几乎没有通用的可编程 GPU 硬件,其中立方体贴图纹理获取比点积、倒数平方根和向量乘法更快。从长远来看,计算性能超过了内存访问性能。

因此,我建议您了解历史并在您的着色器中找到一种快速计算它的方法

于 2013-08-31T02:56:05.133 回答