js
js
允许将一段每一帧都在 CPU 端执行的 JavaScript 代码的计算结果,无缝地注入到 GPU 端的着色器中。
核心优势
核心价值在于将值的“JS 计算逻辑”与其在着色器中的“使用位置”紧密绑定,极大地简化了从 JS 状态(如鼠标位置、UI滑块)到 GPU 的数据传递,避免了手动创建和更新 uniform 的样板代码。
常见用途
创建自驱动的简单动画(如使用 `performance.now()`)
实现实时的用户交互(如跟踪鼠标位置)
连接外部数据源(如音频可视化)
集成调试工具(如 lil-gui 控制的参数)
如何调整
通过改变其 `src` 代码所依赖的外部 JavaScript 变量来调整。例如,在更新鼠标位置的 JS 代码中为其增加一个正弦波扰动,屏幕上由 `js('mousePos')` 驱动的光斑就会在跟随鼠标的同时产生抖动效果,而 TSL 代码本身无需任何改动。
代码示例
1// 假设 'mousePos' 是一个在 JS 中被实时更新的 Vector2 变量
2const mouseNode = js('mousePos').xy;
3
4// 根据片元与鼠标的距离,创建一个圆形光斑
5const dist = mouseNode.distance(uv());
6const spotlight = smoothstep(0.5, 0.1, dist);