nodeProxyIntent
nodeProxyIntent
用于生成“带意图”的节点代理函数。与 nodeProxy 一样包装 NodeClass,但会在创建后调用 toVarIntent,使结果在编译期优先物化为局部变量或 varying,从而减少重复计算并让 GLSL 更整洁。
核心优势
显式把关键中间值变为可复用变量,降低同一节点实例在多处引用时的重复求值成本,并改进代码可读性;同时保留 scope、factor、参数约束与命名能力。
常见用途
为高开销节点(噪声、纹理采样、复杂表达式)提供“意图版”代理
构建带固定 factor 的 mix 等运算并缓存结果
在需要跨阶段复用的值上显式生成本地变量或 varying
如何调整
签名:nodeProxyIntent(NodeClass, scope?, factor?, settings?)。factor 会被追加为构造参数的最后一位;settings 会通过 Object.assign 合并到新建节点;当 settings.intent===true(由此函数设置)时自动执行 toVarIntent()。可链式:setParameterLength(min[, max]) 用于最小/最大参数数;不足会以 0 填充,超出会被截断(见 verifyParamsLimit);setName(name) 便于报错与展示。建议对高开销且会被多处复用的节点使用该代理以减少重复计算。
代码示例
1<Canvas>
2 <mesh>
3 <sphereGeometry args={[0.5, 128, 128]} />
4 <meshStandardNodeMaterial
5 colorNode={
6 // 将噪声包装为“意图变量”,编译期生成一次并可在更复杂表达式中复用
7 vec3( nodeProxyIntent( NoiseNode )( uv() ) )
8 .mix( vec3(0.2, 0.6, 1.0), 0.6 )
9 }
10 />
11 </mesh>
12</Canvas>