2013-10-21 516 views
1

我正在使用SharpDX,并且我想在深度缓冲区中执行抗锯齿。我需要将深度缓冲区存储为纹理以便稍后使用它。所以如果这个纹理是一个Texture2DMS,这是一个好主意吗?或者我应该采取另一种方法?DirectX11中Texture2D和Texture2DMS之间的区别

我真正想实现的是:

1)深度缓冲缩放

2)深度测试超级采样

(术语我在本文的第3.2节发现:http://gfx.cs.princeton.edu/pubs/Cole_2010_TFM/cole_tfm_preprint.pdf

+0

你能澄清你在第1点和第2点的意思吗? “缩放”是什么意思?关于超级抽样,MSAA本质上总是超级抽样深度。 – MooseBoys

+0

我很难澄清这一点,因为我在一篇论文中看到了这一点,而且我不完全知道这意味着什么,我想也许这是一个常见术语。我在第3.2节(可见性测试)结束处发现它:http://gfx.cs.princeton.edu/pubs/Cole_2010_TFM/cole_tfm_preprint.pdf – c4sh

+0

您是否试图实施本文中描述的线渲染技术?如果是这样,请在您的问题文本中澄清。如果没有,您尝试实现哪种渲染技术需要高于正常分辨率的深度缓冲区? – MooseBoys

回答

1

因为这个过程不需要颜色,所以你应该让渲染目标解除绑定,并使用“空白”像素着色器。对于深度,你应该创建一个2倍或4倍的Texture2D(非MS) (或其他一些2N x)将要使用的最终渲染目标的宽度和高度。这并不是真正的“超级取样”(因为pre-pass是一个没有实际像素输出的独立阶段),但它是相似的。

对于第二阶段,本文要求从预处理中完成高分辨率深度缓冲区的多个样本。如果你遵循上面的尺寸,每个像素将对应于一些(2N)^ 2深度值。您需要阅读这些值并对其进行平均。幸运的是,使用SampleCmpCOMPARISON采样器类型有一个硬件加速的方法来执行此操作(称为PCF)。这样会对2x2图章进行采样,将每个值与指定值进行比较(此处传递第二阶段计算的深度,并且不要忘记添加一些ε值(例如1e-5)),并返回平均结果。执行2x2标记以覆盖与此像素关联的第一阶段深度缓冲区的整个区域,并对结果进行平均。最终结果表示当前线的脊椎有多少对应于预通路的最前面的深度。由于PCF的平滑过滤行为,随着线条变得可见,它们将慢慢淡入,而不是本文中描述的别名“虚线”效果。

+0

我对如何呈现纹理并在其中放置深度信息有点遗憾。你可以指点我的资源教程,可以帮助我吗?我见过这个:http://www.rastertek.com/dx11tut22.html ...看起来相当不错,但它是渲染正常场景而不是深度。 – c4sh

+0

@ c4sh这并不是说你要渲染纹理的深度。相反,您正在执行标准渲染过程,并且仅限深度视图。这会导致深度被正常写入,而不会呈现颜色。这与渲染普通场景一次相同,只是不使用生成的渲染目标数据,而是具有更好的性能。 – MooseBoys