我和一个朋友一直在争论模板缓冲区的问题。简而言之,我还没有找到一种情况,即模板缓冲区将提供任何优于OpenGL 3.2+中的可编程管道工具的优势。在现代OpenGL中,模板缓冲区有什么用途吗?
[编辑]感谢大家对这个主题的所有投入。
它比以往任何时候都更有用,因为你可以从片段着色器中采样模板索引纹理。甚至不应该认为模板缓冲区不是可编程管道的一部分。
深度缓冲区用于简单的通过/失败片段拒绝,模板缓冲区也可以按照注释中建议的那样做。但是,模板缓冲区也可以在多次传递中积累有关测试结果的信息。各种各样的逻辑和计数应用存在,如测量场景的深度复杂性,构造立体几何等
为Andon的回答添加一个最近的例子,GTA V使用类似于ID缓冲区的模板缓冲区来标记玩家角色,汽车,植被等。
它随后使用模板缓冲,例如,仅对角色应用表面下散射或将他从运动模糊中排除。
查看GTA V图形研究(强烈推荐,这是一个伟大的阅读!)
编辑:当然你可以在软件中做到这一点。但你也可以在软件中进行栅格化或镶嵌……我想最后还是和表现有关。使用depth24stencil8,你有一个很好的硬件支持的格式,并且模板测试很可能比在片段着色器中做丢弃更快。
只是提供另一个用例,阴影体积(又名"模板阴影")仍然非常相关:https://en.wikipedia.org/wiki/Shadow_volume
它们对于阴影应该是像素完美的室内场景很有用,而且你不太可能有经过alpha测试的树叶弄乱挤压的阴影体积。
阴影贴图确实更常见,但我怀疑一旦脑死亡创意/3DLabs的zfail方法专利到期,模板阴影将会卷土重来。