cache
cache
一个核心的性能优化节点,用于避免在单次着色器执行中重复进行昂贵的计算。它会将一个节点的计算结果“缓存”到一个临时变量中,供后续多次使用。
核心优势
在不破坏 TSL 声明式工作流的前提下,自动化地提升性能。开发者只需用 cache() 包裹高成本节点,TSL 就会智能地生成优化的 GLSL 代码,避免手动创建临时变量,从而显著提升复杂材质的渲染帧率(FPS)。
常见用途
缓存程序化噪点:当一个复杂的噪点函数同时用于驱动顶点位移和片元颜色时。
缓存纹理处理结果:当对纹理采样进行复杂调整(如色彩校正)后,其结果需要被用于多个地方(如基础色和透明度)。
缓存复杂的数学公式:当一个计算量大的光照因子(如菲涅尔效应)同时影响漫反射、高光和自发光时。
如何调整
此节点对最终渲染的画面没有任何视觉影响。使用或不使用 cache,渲染出的图像是像素级完全一致的。它的效果体现在性能上:一个未使用 cache 的复杂着色器可能会导致卡顿(低 FPS),而使用 cache 后则会变得流畅(高 FPS)。
代码示例
1// 缓存昂贵的噪点计算
2const noise = cache( fbm( uv.mul(5) ) );
3
4// 将缓存结果同时用于位移和颜色
5const displacedPosition = position.add( normal.mul( noise ) );
6const finalColor = baseColor.mul( noise );