depthPass
depthPass
depthPass 节点执行一次特殊的渲染过程,不输出颜色,而是将场景中每个像素相对于摄像机的深度信息记录到一张纹理(深度图)中。
核心优势
为着色器提供关键的场景几何数据,是实现屏幕空间环境光遮蔽 (SSAO)、景深 (DoF)、柔和粒子等高级视觉效果和进行 Z-prepass 渲染优化的基础。
常见用途
屏幕空间环境光遮蔽 (SSAO)
景深 (Depth of Field)
柔和粒子与水面交互
自定义阴影
如何调整
depthPass 的效果主要通过在消费其输出的着色器中进行调整。常用方法包括:1) 对采样到的深度值使用 `pow()` 或 `smoothstep()` 等函数进行数学变换,以控制效果(如雾、景深)的强度和过渡范围。2) 在采样深度图时对UV坐标进行偏移,以实现SSAO或扭曲效果。
代码示例
1const depthValue = texture(sceneDepthPass, uv()).r;
2
3// 根据深度计算一个0到1的因子
4const effectFactor = depthValue.smoothstep(0.4, 0.9);
5
6// 基于该因子混合原始颜色与效果颜色
7return mix(sceneColor, effectColor, effectFactor);