saturate
saturate
将输入值约束在 [0, 1] 的标准范围内,是 `clamp(x, 0, 1)` 的常用简写。它主要用于确保光照强度、混合因子等数值的有效性。
核心优势
作为一个在着色器编程中约定俗成的术语,它比 `clamp(x, 0, 1)` 更能清晰地表达“将值处理为规范化因子或强度”的意图,极大地提升了代码的可读性。
常见用途
基础光照计算
控制程序化遮罩
确保材质属性有效
如何调整
saturate 本身不可调,其效果是“削平”超出 [0, 1] 范围的值。例如,将一个在 [-1, 1] 之间振荡的 `sin(time)` 输入 `saturate`,会截断所有负值,将平滑的振荡动画变为一个从0到1再立即跳回0的“弹跳”效果。
代码示例
1// 计算点积,结果可能为负
2const lightIntensity = dot( normalWorld, lightDirection );
3
4// 使用 saturate 确保光照强度不小于0
5const finalColor = saturate( lightIntensity );