depth
depth
在 TSL 片元着色器中,提供当前像素位置已渲染场景的深度信息,它抽象了对底层深度纹理的访问。
核心优势
极大地简化了获取场景深度的过程,将复杂的深度预通道、渲染目标配置和坐标转换完全自动化。开发者只需使用此节点,即可在需要时高效地获取深度数据。
常见用途
实现软粒子效果,通过比较粒子与场景深度来消除硬边缘。
作为屏幕空间环境光遮蔽(SSAO)的核心数据源,用于分析几何遮挡关系。
计算水深,以实现水边泡沫或水下光线衰减等效果。
在自定义景深(DOF)后处理中,用作模糊半径的控制器。
如何调整
此节点本身不可调整。它的值由场景中物体的几何布局和相机位置决定。TSL 提供了不同类型的深度节点(如 `depth` 返回非线性深度,`viewportLinearDepth` 返回线性深度),开发者应根据具体计算需求选择合适的节点。
代码示例
1// 获取线性化的场景深度(例如水底深度)
2const sceneDepth = viewportLinearDepth;
3// 获取当前水面的线性深度
4const surfaceDepth = linearDepth( position, camera );
5
6// 计算水深,并用它来混合雾效
7const waterDepth = sceneDepth.sub( surfaceDepth ).max( 0 );
8const fogFactor = smoothstep( 0, 20, waterDepth );
9const finalColor = mix( originalColor, fogColor, fogFactor );