loop
loop
一个核心的流程控制节点,用于在 TSL 中创建结构化的 for 循环,是实现高级迭代算法的基础。
核心优势
将命令式的 for 循环逻辑安全地引入到 TSL 的声明式节点系统中。它将底层的循环语法抽象为清晰的配置和回调,极大地增强了代码的可读性和安全性,并使得在纯 TSL 中实现光线步进、分形和 FBM 噪声等复杂算法成为可能。
常见用途
通过叠加多层噪声来生成 FBM(分形布朗运动)云朵或地形。
作为光线步进(Ray Marching)算法的核心,用于渲染由数学定义的复杂形状。
实现高质量的模糊或辉光效果,通过多次迭代采样周围像素。
生成分形艺术(如曼德博集合),对每个像素点进行反复的数学迭代。
如何调整
调整其 `count` 参数或修改 `loopBody` 回调函数是控制其视觉效果的关键。例如,在 FBM 噪声中,将 `count` 从 2 增加到 8,会使云朵从模糊的大色块变为细节丰富的复杂纹理。同样,在 `loopBody` 内部引入 `time` 节点来动态改变计算逻辑(如移动一个被渲染物体的位置),可以将一个静态的算法(渲染一个球)转变为一个动态的动画效果(一个晃动的球)。
代码示例
1// 一个累加 8 次的循环示例
2const finalValue = loop( { count: 8, initialValue: 0 }, ( { value, i } ) => {
3
4 // value 是上一次迭代的结果, i 是当前循环索引 (0-7)
5 const newValue = value.add( i.mul( 0.1 ) );
6
7 return newValue; // 返回本次迭代更新后的值
8
9} );