perspectiveDepthToViewZ
perspectiveDepthToViewZ
将透视相机渲染出的非线性 [0, 1] 深度值,转换为线性的、具有物理意义的视图空间 Z 坐标。
核心优势
将复杂的深度逆运算封装为单个函数,为高级后期处理(如 SSAO、景深)提供了必需的线性深度数据,使其实现逻辑更直观、更符合物理直觉。
常见用途
自定义雾效或水下效果
从深度图重建世界坐标(用于延迟渲染、SSAO)
实现精确的景深(Depth of Field)效果
如何调整
这是一个精确的数学转换工具,其 `near` 和 `far` 参数必须严格匹配生成深度图的摄像机属性。任何不匹配都会导致错误的转换。例如,若提供一个比原始相机更小的 `far` 值,会导致深度被“压扁”,使远处的雾效比预期更早出现且更浓。
代码示例
1// 从深度纹理中采样非线性深度值
2const nonLinearDepth = depthTexture.uv( uv() ).r;
3
4// 将其转换为线性的视图空间 Z 坐标
5const viewZ = perspectiveDepthToViewZ( nonLinearDepth, cameraNear, cameraFar );