在现代OpenGL中,模板缓冲区仍然具有重要意义吗?

5
我和一个朋友一直在争论模板缓冲区。简而言之,在OpenGL 3.2+中,我没有找到任何情况下模板缓冲区能够比可编程管线工具提供更多的优势。在现代OpenGL中,是否有任何使用模板缓冲区的用途?【编辑】感谢大家对这个主题的所有输入。

2
如何进行“早期片段测试”以避免运行昂贵的片段着色器? - genpfault
我认为这个链接与此相关:http://gamedev.stackexchange.com/questions/105667/stencil-buffer-vs-conditional-discard-in-fragment-shader - Harish
2
它与以前一样有用,无论您是否使用可编程管线。模板测试作为固定功能的每个片段操作的一部分应用,片段着色器执行后。渲染管线的这一部分仍然不可编程。 - Reto Koradi
3个回答

15

现在可以从片段着色器中对样本模板索引纹理进行采样,因此比以往任何时候都更实用。无论如何,不能争辩模板缓冲区不是可编程管线的一部分。

深度缓冲区用于简单的通过/拒绝片段的处理,正如评论中建议的那样,模板缓冲区也可以这样做。然而,模板缓冲区还可以在多次通过中积累有关测试结果的信息。存在各种逻辑和计数应用程序,例如测量场景的深度复杂性、构造实心几何等。


10
为了给Andon的回答增加一个最近的例子,GTA V使用模板缓冲区来标记玩家角色、汽车、植被等等,就像ID缓冲区一样。
随后,它使用模板缓冲区来例如仅对角色应用次表面散射或将其排除在动态模糊之外。
请参见 GTA V Graphics Study(强烈推荐,非常棒!)
编辑:当然你可以在软件中做到这一点。但是你也可以在软件中进行光栅化或镶嵌……最终关键在于性能。使用depth24stencil8格式,你有一个很好的硬件支持格式,并且模板测试很可能比在片元着色器中进行舍弃更快。

感谢您的研究,这是一篇非常有趣的阅读,我之前从未见过。我会再开放几天,以收集更多想法和意见,但这是一个非常扎实的答案。谢谢。 - claudehenry
1
@claudehenry:有一种有趣的无序透明技术叫做模板路由A缓冲,它使用模板缓冲器将片段排序推迟到多采样帧缓冲器的最终解析。这是一种你无法在软件中实现的技术,它补充了karyon的示例,为像素分配身份。 - Andon M. Coleman

-1

只是为了提供另一个用例,阴影体(又称“模板阴影”)仍然非常相关:https://en.wikipedia.org/wiki/Shadow_volume

它们对于室内场景非常有用,其中阴影应该是像素完美的,并且您不太可能有α测试的树叶搞乱了挤出的阴影体。

虽然阴影贴图更常见,但我认为一旦脑残的Createive / 3DLabs专利在zfail方法上过期,模板阴影将会卷土重来。


3
关键不在于专利,而在于他们要求过高的填充率。阴影映射更易于扩展,并且清晰的阴影并不真实。 - Yakov Galka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接