1

我正在使用 SharpDX,我想在深度缓冲区中进行抗锯齿。我需要将深度缓冲区存储为纹理以供以后使用。那么,如果这个纹理是一个 Texture2DMS 是个好主意吗?还是我应该采取另一种方法?

我真正想要实现的是:

1)深度缓冲缩放

2)深度测试超采样

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

4

1 回答 1

1

该论文要求进行深度预通行证。由于此通道不需要颜色,因此您应该不绑定渲染目标,并使用“空”像素着色器。对于深度,您应该在您将要使用的最终渲染目标的宽度和高度的 2x 或 4x(或其他 2Nx)处创建一个 Texture2D(不是 MS)。这并不是真正的“超级采样”(因为预通是一个没有实际像素输出的独立阶段),但它是相似的。

对于第二阶段,论文要求从预通行证中对高分辨率深度缓冲区进行多个样本。如果您按照上面的尺寸设置,每个像素将对应一些 (2N)^2 深度值。您需要读取这些值并将它们平均。幸运的是,有一种硬件加速方法(称为 PCF)使用带有COMPARISON的SampleCmp采样器类型。这会采样一个 2x2 的标记,将每个值与指定值进行比较(在此处传入第二阶段计算的深度,并且不要忘记添加一些 epsilon 值(例如 1e-5)),然后返回平均结果。执行 2x2 标记以覆盖与该像素相关的第一阶段深度缓冲区的整个区域,并对结果进行平均。最终结果表示当前行的脊椎有多少对应于预通道的最前面深度。由于 PCF 的平滑过滤行为,当线条变得可见时,它们会慢慢淡入,这与论文中描述的混叠“虚线”效果相反。

于 2013-10-22T17:41:36.937 回答