If
If
在着色器中实现条件逻辑(if...else 分支),允许根据特定条件执行不同的计算或返回不同的值。
核心优势
以声明式、可读性高的方式实现控制流,可被直接编译为高效的原生 GLSL if...else 语句。这使得 GPU 能利用动态分支优化,跳过不必要的计算,相比于用数学函数模拟条件判断,性能更高、功能更强。
常见用途
根据蒙版(Mask)贴图混合不同的材质或纹理。
在循环(如光线步进)中,根据命中条件使用 Break 或 Continue 控制流程。
作为功能开关,根据 uniform 变量启用或禁用昂贵的视觉效果(如体积雾)。
通过条件性地丢弃(Discard)像素,实现溶解、裁剪等几何特效。
如何调整
调整 If 节点的逻辑会产生最直接的视觉变化。调整 `conditional` 输入(如改变比较的阈值)会改变效果作用的区域边界,例如移动雪山上的雪线。改变 `then` 或 `else` 分支连接的节点,则会完全替换掉满足或不满足条件时所呈现的视觉内容,例如将苔藓颜色替换为岩石纹理。
代码示例
1const condition = normal.dot( up ).greaterThan( 0.7 );
2const finalColor = If( condition, color('white') ).else( color('green') );