模板缓冲区在现代 OpenGL 中是否仍然相关?

Is the stencil buffer still relevant in modern OpenGL?

我和一个朋友一直在为模板缓冲区争论不休。简而言之,我还没有找到模板缓冲区比 OpenGL 3.2+ 中的可编程管线工具有任何优势的情况。现代 OpenGL 中的模板缓冲区有什么用处吗?

[编辑]

感谢大家对此主题的所有投入。

它比以往任何时候都更有用,因为您可以从片段着色器中采样模板索引纹理。甚至不应该争论模板缓冲区不是可编程管道的一部分。

深度缓冲区用于简单的pass/fail片段拒绝,模板缓冲区也可以按照评论中的建议进行。但是,模板缓冲区还可以累积有关多次通过的测试结果的信息。存在各种逻辑和计数应用程序,例如测量场景的深度复杂性、建设性实体几何等。

在 Andon 的回答中添加一个最近的例子,GTA V 使用类似于 ID 缓冲区的模板缓冲区来标记玩家角色、汽车、植被等。

它随后使用模板缓冲区,例如仅对角色应用次表面散射或将其排除在运动模糊之外。

请参阅 GTA V Graphics Study(强烈推荐,读起来很棒!)

编辑:当然你可以在软件中做到这一点。但是您也可以在软件中进行光栅化或镶嵌细分……我想最后它与性能有关。有了 depth24stencil8,你就有了一个很好的硬件支持的格式,而且模板测试很可能比在片段着色器中做丢弃更快。

只是为了提供另一个用例,影子卷(又名 "stencil shadows")仍然非常相关:https://en.wikipedia.org/wiki/Shadow_volume

它们对于阴影应该是像素完美的室内场景很有用,并且您不太可能让经过 alpha 测试的树叶弄乱挤出的阴影体积。

阴影贴图确实更常见,但我怀疑一旦脑死亡 Createive/3DLabs zfail 方法的专利到期,模板阴影会卷土重来。