viewZToLogarithmicDepth
viewZToLogarithmicDepth
将线性的视图空间Z坐标转换为对数深度值,通过更均匀地分布精度,解决具有巨大深度范围场景中的“Z冲突”(Z-fighting)伪影。
核心优势
通过提供从极近到极远都恒定的相对深度精度,能够稳定渲染具有巨大尺度差异的场景(如太空模拟、开放世界),有效消除远处物体的渲染错误和闪烁。
常见用途
渲染大尺度太空或天文可视化场景
为具有长视距的开放世界游戏或飞行模拟提供深度计算
在建筑或城市级可视化应用中,确保任意缩放级别下的视觉保真度
如何调整
这是一个纯函数,通过改变其输入(主要是摄像机的 near 和 far 属性)来调整。增加 far 会扩展深度范围并提升远处精度;减小 near 则会将精度集中在离摄像机极近的物体上。
代码示例
1
2// 从视图空间位置中获取 z 分量。
3const viewZ = positionView.z;
4
5// 计算对数深度值。
6const logDepth = viewZToLogarithmicDepth( viewZ, cameraNear, cameraFar );
7
8// 将结果赋给材质的 depth 属性。
9material.depth = logDepth;
10