我正在看我将如何在延迟照明渲染器中实现抗锯齿。所以三次通过,几何通道,光照累积通道,然后是用于着色的第二个几何通道。Multisampling,如何读回“独特”texels
对于正常的多重采样MSAA,目标是仅对多边形边上的像素进行多重采样。并且对于每个三角形,只将片段着色器的结果写入其覆盖的子像素。但是,当然这是一个已知的问题,这对延迟照明来说有点问题。
目标是避免评估第二和第三遍中的所有子像素,因为这基本上是超级采样。如果有人知道另一种(更好/可能)实现的方式,我非常希望听到它。但是这里是我的想法:
如果你能在第一遍中制作片段着色器,只写入三角形覆盖的第一个子像素。它允许您忽略光照过程中的未写入的纹理元素。然后最后在第二个几何通道中,以某种方式读取后面只有三角形匹配的第一个子像素,这是我们原先写入的那个子像素,然后进行照明(现在写入所有覆盖的像素,因此结果可以解决)。这样,只有“独特”纹理元素才会在第2和第3遍中被评估。
有人可以说如何做到这一点可以在glsl(或确认它是不可能的)?我真的不明白为什么这在理论上是不可能的,但也没有看到任何方式在glsl中做到这一点。
好的,我看到重叠问题。但是,如果您在第一遍中写入所有涵盖的样本,则在光照传递中检测重复值并仅写入每组中的第一个。然后在第二个几何传递样本中,第一个覆盖的子像素(因为我们重用深度缓冲区而工作)。 唯一的开销是检测照明着色器中的重复项。唯一的问题是,重复可能是重复的。但即使你在光照过程中进行超取样,与超取样相比,几何通道仍然会有时间增加? – Aedoro