select
select
在着色器中实现基本的 'if-then-else' 条件逻辑,允许根据一个布尔条件,在两个不同的输入值或节点网络之间进行选择性输出。
核心优势
它允许在 GPU 上进行逐像素或逐顶点的动态决策,以声明式、可视化的节点方式构建复杂的条件逻辑,同时保持了材质结构的清晰易懂。
常见用途
创建硬边缘遮罩 (Masking)
生成程序化几何图案 (如棋盘格)
实现条件性顶点位移
如何调整
通过调整其三个输入节点来控制:改变 `condNode`(条件节点)会改变效果作用的区域边界;交换 `ifNode` 和 `elseNode` 会反转两种结果的显示区域;将 `ifNode` 或 `elseNode` 从一个简单的值(如颜色)替换为一个复杂的节点链(如动画噪声),可以实现局部动态效果。
代码示例
1// 条件: 像素的世界坐标 Y 值是否大于 0
2const condition = positionWorld.y.greaterThan( 0 );
3
4// 如果条件为真,输出红色,否则输出蓝色
5const finalColor = select(
6 condition, // --> condNode
7 color( 0xff0000 ), // --> ifNode
8 color( 0x0000ff ) // --> elseNode
9);