深度冲突及W缓冲

来源:互联网 发布:rip的udp端口号是 编辑:程序博客网 时间:2024/05/01 16:22

问题:

当渲染非常接近的平行平面时,会发生,较远屏幕的像素会”刺穿“较近的平面,造成深度冲突。


产生原因:

深度缓冲仅含有有限的精度,因此两个足够接近的平面,起两个深度有可能会变成相同的离散值。究其原因,是裁剪空间的Z深度并非均匀分布于近平面和远平面之间,因为该深度是观察空间z坐标的倒数。而由于1/z曲线的形状,深度缓冲的大部分精度集中于近摄像机的地方。如下图一显示了此特性。




要解决此问题,我们就要在深度缓冲储存观察空间的z坐标,而非裁剪恐惧的z坐标,观察空间z坐标随摄像机距离线性变化,因此使用观察空间z坐标能达到整个深度范围内都均匀精度,此技术成为w缓冲,因为观察恐惧z坐标恰好出现在齐次裁剪空间坐标的w分量里。


注意:w缓冲方式比z缓冲方式稍微耗时一些,因为在w缓冲里我们不能直接对深度插值,深度必须先计算其倒数才能插值,然后再算倒数以存储于w缓冲。