Break
Break
在 `Loop` 循环内部,根据特定条件立即终止循环,功能等同于编程语言中的 `break;` 关键字。
核心优势
它为 TSL 的循环提供了必要的动态控制能力,允许算法在满足特定条件时提前退出,从而避免不必要的计算。这对于光线步进等性能敏感且迭代次数不确定的算法至关重要。
常见用途
在光线步进(Ray Marching)中,当光线击中物体(距离小于阈值)时,立即 `Break` 循环。
在搜索算法中,一旦找到目标,就 `Break` 循环以停止进一步的搜索。
在效果累加循环中,当后续迭代的贡献变得微不足道时,`Break` 以优化性能。
如何调整
Break 节点本身不可配置,因为它不接受任何参数。它的行为完全由触发它的 `If` 条件决定。调整该条件(例如,在光线步进中改变命中距离的阈值)会改变循环提前终止的时机,从而影响算法的精度和性能。
代码示例
1Loop( { end: MAX_STEPS }, () => {
2
3 const dist = sceneSDF( currentPos );
4
5 // 如果击中物体,就跳出循环
6 If( dist.lessThan( HIT_EPSILON ), Break() );
7
8 // ...否则,继续步进
9 currentPos.addAssign( rayDir.mul( dist ) );
10
11} );