mx_separate
mx_separate
将向量/颜色等复合输入拆分为单个通道(x/y/z/w 或 r/g/b/a),同时兼容 'outx/outy/outz/outw' 与数字索引;未指定或无法识别的通道时返回原输入。
核心优势
提供统一且宽容的通道访问接口,用一处 API 覆盖多种别名和静态索引写法,减少样板与别名/大小写错误;底层使用 .element(),语义清晰、可读性强。
常见用途
从 uv() 拆出 x 或 y 通道分别驱动颜色混合/粗糙度等参数。
从 vec4 提取 a 通道用于透明度/遮罩计算。
在素材打包(如将数据放在 r/g/b/a)时按通道取用参与不同运算。
将三维向量的不同轴向分量分别送入不同的节点网络。
如何调整
第二参数用于选择分量:'x'|'y'|'z'|'w' 或 'r'|'g'|'b'|'a';也接受带前缀的 'outx'...'outw';或传入静态数字索引 0–3。省略或传入无法识别的值将直接返回原始 in1。注意:索引必须是静态数字(非动态节点)。
代码示例
1
2<Canvas>
3 <mesh>
4 <sphereGeometry args={[0.5, 128, 128]} />
5 {/* 将 uv 拆分为 x/y 通道并分别驱动材质 */}
6 <meshStandardNodeMaterial
7 colorNode={mix(color(0x2e90ff), color(0xff7a59), mx_separate(uv(), 'x'))}
8 metalnessNode={mx_separate(uv(), 1)}
9 roughnessNode={mx_separate(vec3(0.2, 0.8, 0.5), 'g')}
10 />
11 </mesh>
12</Canvas>
13