模板缓冲区VS在片段着色器中有条件放弃

我有一个连续的高度映射网格来表示风景。 我还有1个可以说在这个景观上由另外的模型表示的10口井。 我想要达到的目的是在井旁的地方创造一个真实的景观洞。

我以两种方式看到解决scheme:

  1. 模板缓冲区中绘制孔,然后在片段着色器中使用它来丢弃景观片段。

  2. 发送一系列的制服(vec2),然后有条件地丢弃碎片,如果他们靠近这些穴位。

问题是如果我擅长矩形孔,想要获得最佳性能,我应该select什么样的方式?

现代硬件使用与早期深度相同的基于瓦片的方法执行早期模板testing。 它可以在片段着色器阶段之前拒绝大量的片段。 这意味着着色器单元不会浪费时间来计算它们正在抛出的数据。

您可以为每个像素添加额外的8位内存(在现代硬件上几乎不存在问题),但对于任何模板testing失败的碎片,您都可以完全跳过片段着色器阶段。 最好的解决scheme是可以广泛地拒绝大量工作的解决scheme。 你的片段着色器越复杂,使用模板拒绝就越能受益。

在模板缓冲区中绘制孔,然后在片段着色器中使用它来丢弃横向片段

但是,从技术角度来说,这就是你在脚下自己射击的地方。 您需要真正的现代硬件来从片段着色器中对模板缓冲区进行采样。 它一直是一个固定functiontesting,为了获得最佳性能,您应该保持这种状态。

尽早使用固定functiontesting,而不是将自己的可编程testing作为着色器本身的一部分。 这是获得上述好处的唯一途径。 丢弃在片段着色器中会产生大量不必要的工作,只要固定functiontesting就足够了就应该避免。