frameId
frameId
在 TSL 着色器中提供一个每次渲染时都会自动递增的无符号整数(帧计数器),用于实现离散的、逐帧变化的逻辑。
核心优势
将帧计数过程完全自动化,开发者无需任何手动 uniform 更新即可在着色器中获得一个可靠的整数。这使得实现需要精确逐帧切换状态的效果(如抖动、定格动画)变得简单、高效且确定。
常见用途
在时间抗锯齿(TAA)中,通过判断帧的奇偶来切换采样模式。
作为程序化噪声的种子,以在每一帧生成不同的静态图案,从而模拟闪烁或老电影雪花效果。
通过整数除法量化时间,创建定格动画或步进式效果。
在调试时用作条件触发器,以在特定一帧改变物体外观来捕捉状态。
如何调整
此节点的值不可调整;它是由渲染器提供的、自动递增的帧计数器。其效果由你如何使用它来驱动逻辑决定,尤其是通过取模(mod)或比较运算来触发离散的、逐帧的状态变化。
代码示例
1// 判断当前帧号是否为偶数
2const isEvenFrame = equal( mod( frameId, uint(2) ), uint(0) );
3
4// 根据帧的奇偶在两种颜色间瞬间切换
5outputNode.color = cond( isEvenFrame, color('red'), color('blue') );