viewZToPerspectiveDepth
viewZToPerspectiveDepth
为透视相机执行标准的非线性(双曲)变换,将视图空间的Z坐标转换为GPU所需的、范围在[0, 1]的深度值。
核心优势
以符合人眼感知的方式分布深度精度,将大部分精度分配给近处物体,这对于绝大多数实时3D应用来说,是防止前景中产生Z冲突(Z-fighting)的高效方法。
常见用途
作为绝大多数3D游戏(第一/三人称、RPG等)中的默认深度计算方式
渲染真实的3D产品可视化与在线配置器
在建筑或室内设计漫游中计算深度,以模拟逼真的空间透视
如何调整
这是一个纯函数,通过改变摄像机的`near`和`far`属性来调整。关键是保持`far`与`near`的比率尽可能小。一个过大的比率会导致严重的远处Z冲突,而一个较小的比率能更有效地分布精度,缓解此问题。
代码示例
1
2// 获取视图空间位置的 z 分量。
3const viewZ = positionView.z;
4
5// 计算透视校正后的深度值。
6const perspectiveDepth = viewZToPerspectiveDepth( viewZ, cameraNear, cameraFar );
7
8// 将计算结果赋给材质的 depth 属性。
9material.depth = perspectiveDepth;
10