linearDepth
linearDepth
linearDepth 节点将 GPU 内部非线性的深度缓冲值转换为一个在 [0, 1] 范围内、与摄像机到物体表面的真实距离成正比的线性值。
核心优势
极大地简化了基于距离的视觉效果(如雾、景深)的开发。它提供了一个直观、可预测的数值,使开发者无需进行复杂的数学转换,从而能更轻松地实现平滑且具有艺术控制力的效果。
常见用途
距离雾效
水下/体积光效果
景深(DoF)计算
软粒子与场景混合
如何调整
linearDepth 节点本身没有参数,对它的调节体现在如何使用其输出值上。通过对其应用数学函数,如 `pow()` 来创建指数效果,或 `smoothstep()` 来精确控制过渡范围,可以自由地改变深度效果的响应曲线。
代码示例
1// 获取当前像素的线性深度值 (0.0 代表近裁剪面, 1.0 代表远裁剪面)
2const fogFactor = linearDepth();
3
4// 直接使用该线性值作为混合权重,混合场景与雾的颜色
5return mix(sceneColor, fogColor, fogFactor);