Discard
Discard
在片元着色器中,根据条件完全放弃(丢弃)当前像素的绘制,功能等同于 GLSL 的 `discard;` 关键字。
核心优势
它是实现“Alpha 测试”(镂空)效果的标准且最高效的方式。它通过将材质视为不透明来从根本上避免了半透明混合的排序问题,并且能通过提早放弃计算来优化性能。
常见用途
使用纹理的 Alpha 通道创建植物、铁丝网等镂空效果。
通过数学函数生成程序化图案,如条纹或棋盘格。
实现模型的动态剖面或切片效果。
根据与摄像机的距离剔除像素,实现简化的 LOD。
如何调整
调整 `Discard` 的效果就是调整触发它的 `conditional` 参数。例如,在镂空效果中,改变用于比较的 `threshold`(阈值)会“腐蚀”或“增厚”物体的可见边缘。在动态剖面效果中,改变 `slice_position` uniform 的值会移动“切割平面”的位置。
代码示例
1// 如果纹理的 alpha 值低于 0.5,则丢弃该像素
2const alpha = texture( map, uv ).a;
3Discard( alpha.lessThan( 0.5 ) );