wgslFn
wgslFn
用于将一段包含明确输入和输出的原生 WGSL 代码封装成一个可重用的、模块化的函数节点,以便在节点图中多次调用。
核心优势
核心优势是代码的模块化与重用。它允许将复杂的算法封装成一个独立的函数节点,该节点可在材质图中被多次、多处调用,从而极大地简化了节点图结构,并提高了代码的可维护性。
常见用途
构建可重用的程序化噪声函数库
封装复杂的颜色校正或滤镜算法
创建共享的数学工具函数(如范围映射)
如何调整
调整此节点主要有两种方式:1. 直接修改传入构造函数的 WGSL 源码字符串,以从根本上改变函数的核心算法。 2. 在每次调用 `.call()` 方法时传入不同的 TSL 节点或值作为参数,以在不改变算法本身的情况下,参数化地控制该次调用的输出结果。
代码示例
1// 1. 使用 wgslFn 定义一个可重用的函数节点
2const remapFn = wgslFn(`
3 fn remap( v: f32, inMin: f32, inMax: f32, outMin: f32, outMax: f32 ) -> f32 {
4 return outMin + ( v - inMin ) * ( outMax - outMin ) / ( inMax - inMin );
5 }
6`);
7
8// 2. 多次调用该函数以分别扭曲 UV 的 x 和 y 分量
9const remappedU = remapFn.call( { v: uv().x, inMin: 0, inMax: 1, outMin: -1, outMax: 1 } );
10const remappedV = remapFn.call( { v: uv().y, inMin: 0, inMax: 1, outMin: 0.2, outMax: 0.8 } );
11
12const distortedUV = vec2( remappedU, remappedV );