stack
stack
在 TSL 节点图中引入一个可变的、有状态的局部变量,解决了在声明式环境中难以通过多个步骤逐步构建或修改一个值的问题。
核心优势
它允许用一种清晰的、自上而下的命令式流程来组织复杂的着色器逻辑,极大地提升了节点图的可读性,并简化了需要累加或分层叠加的效果(如程序化噪声)的实现。
常见用途
分层构建程序化噪声 (FBM)
顺序应用多个顶点变形效果
像 Photoshop 图层一样混合效果
如何调整
通过改变赋给它的【内容】和【顺序】来调整。增加更多的 `.assign()` 操作可以为效果添加更多细节层次(如叠加噪声)。改变 `.assign()` 语句的顺序则会彻底改变效果的合成逻辑,如同在 Photoshop 中调整图层顺序一样,产生完全不同的视觉结果。
代码示例
1// 1. 创建 stack 节点作为可变容器
2const resultStack = stack();
3
4// 2. 计算一个初始圆形并赋值给 stack
5const circle = distance( uv(), vec2( 0.5 ) );
6resultStack.assign( circle );
7
8// 3. 基于 stack 当前值创建波纹, 并将结果叠加回去
9const ripples = sin( resultStack.mul( 50.0 ) ).mul( 0.05 );
10resultStack.assign( resultStack.add( ripples ) );