bypass
bypass
一个工具节点,它在传递一个主数据值通过节点链的同时,执行一个独立的动作(即副作用),从而有效地将“数据流”与“行为流”分离开来。
核心优势
它允许在不打断 TSL 声明式、链式调用的前提下,优雅地执行命令式操作(最常见的是为变量赋值)。这极大地提高了代码的可读性和组织性,是处理副作用的标准方式。
常见用途
为变量赋值:在复杂的计算链中,将一个中间结果存储在变量(VarNode)中供后续使用。
执行预计算:在渲染管线的早期计算并存储一些值(如光照因子),但主流程本身并不需要这个值。
创建无损调试探针:将节点链中的某个中间结果赋值给一个调试变量,而不影响主计算的流程。
如何调整
此节点的直接输出值永远等于其第一个参数(returnNode)。视觉变化来自于其第二个参数(callNode)所产生的副作用。例如,你可以让一个红色通过 bypass,同时其副作用是将一个噪点值存入变量。这个变量随后可以被用于其他计算,从而间接地影响最终画面,而 bypass 本身只是“透明”地传递了那个红色。
代码示例
1// 创建一个变量用于存储副作用的结果
2const myVar = vec3().toVar();
3
4// bypass() 执行 myVar.assign() 操作,但其自身的输出值等于 someColor
5const flow = bypass( someColor, myVar.assign( uv().extend(0) ) );