2013-08-31 63 views
1

我一直在阅读关于从深度缓冲区重构世界空间中片段的位置,但我正在考虑将位置存储在高精度三通道位置缓冲区中。这样做会比从深度缓冲区解压缩位置更快吗?从深度重建位置的成本是多少?深度vs位置

+0

也许我错过了一个细节或者它可能被省略了,但是我在3维空间中的位置与1维空间的深度并不相同。您无法从1维数据重建3D坐标。它就像问我住在哪里,我回应了20英里的机场。 20英里的方式......在2D空间中,深度等于圆的半径。 – mwjohnson

+1

@mwjohnson给定逆向投影矩阵和深度纹理上样本位置的坐标,您可以从深度重建位置。对不起,我没有说清楚。它有时以延迟着色方式完成。 – Abaab

+1

在桌面GPU上,根据深度重建位置是最佳选择。所有的商业图形引擎都这样做,它节省了大量内存带宽。 –

回答

4

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

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

  2. 它是硬件依赖。

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

这会随着各种事情而改变。提取内存,纹理缓存大小等等的性能都会对纹理获取性能产生影响。并且ALU的速度取决于一次将有多少人在飞行(即:着色单元的数量)以及时钟速度等等。

总之,这里有太多的变数,知道先验答案。

这就是说,考虑历史。

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

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

所以我会建议与历史一起去寻找quick means of computing it in your shader

+2

是的,我记得当我离开这个行业一段时间后被人嘲笑,并询问正常化立方体地图发生了什么:)我们走过了一段很长的路。回顾一下,有趣的是,从查找纹理中获取的代价远远小于一个非常重要的操作(包括'DP3','RSQ'和'MUL'的一系列指令)。 –