我正在研究如何在延迟照明渲染器中实现抗锯齿。所以三个通道,一个几何通道,一个光照累积通道,然后是第二个用于着色的几何通道。
使用正常的多重采样 MSAA,目标是仅对多边形边缘上的像素进行多重采样。对于每个三角形,只将片段着色器的结果写入它所覆盖的子像素。但当然,这是一个已知问题,这对于延迟照明来说有点问题。
目标是避免评估第 2 次和第 3 次中的所有子像素,因为这基本上是超级采样。如果有人知道实现这一目标的另一种(更好/可能的)方法,我非常想听听。但这是我的想法:
如果您可以在第一遍中使片段着色器仅写入三角形覆盖的第一个子像素。它允许您忽略光照通道中未写入的纹素。然后最后在第二个几何通道中,以某种方式仅读取三角形匹配的第一个子像素,这是我们最初写入的子像素,然后进行照明(现在正常写入所有覆盖的纹素,所以结果可以解决)。这样,在第 2 次和第 3 次传递中只会评估“独特”的纹素。
有人可以说如何在 glsl 中做到这一点(或确认这是不可能的)吗?我真的看不出这在理论上是不可能的原因,但也看不到在 glsl 中这样做的任何方法。