mx_ifgreater
mx_ifgreater
比较 value1 与 value2,并在 in1 与 in2 之间选择。按此实现,若 value1 > value2,则输出 in2,否则输出 in1(因使用比较结果作为 mix 的系数)。支持标量与向量逐分量比较。
核心优势
将“比较+选择”合并为单节点,无需 If 分支,便于在表达式中内联并可向量化应用。
常见用途
基于阈值在两种颜色或两条材质路径间切换
用高度/法线/光照等量生成二值蒙版做选择
用噪声或贴图作为条件实现硬切换混合
在顶点/片元阶段做轻量逻辑分流
如何调整
1) 改变 value1/value2 或其来源(如阈值 uniform)以移动切换边界;2) 交换 in1 与 in2 可翻转选择;3) 若需“value1>value2 选 in1”的传统语义,调用顺序改为 mx_ifgreater(value1, value2, in2, in1) 或改写为 value2.greaterThan(value1).mix(in1, in2);4) in1 与 in2 需同类型;5) 若需软过渡,改用 smoothstep 等生成连续系数后再 mix。
代码示例
1// 按高度阈值切换两种颜色(注意:value1>value2 时选择 in2)
2const threshold = uniform( 0.0 );
3const result = mx_ifgreater(
4 positionWorld.y,
5 threshold,
6 color( '#1e90ff' ), // 低于阈值
7 color( '#ff6347' ) // 高于阈值(被选中)
8);
9
10material.colorNode = result;