1.Offset
1.Offset
Offset用于解决3D 渲染中的深度冲突a. Units: 产生一个固定的偏移量, 与多边形斜率无关b. Factor: 根据多边形斜率产生可变的偏移量, 斜率越大, 偏移越大c. 上面的值小于0 , 则靠近相机; 大于0 , 表示远离相机
1 ) . 为什么倾斜的面更容易发生深度冲突? a. 深度缓冲区的值可以简化为该公式表示: depth = A + B * ( 1 / z) , z是视图空间的z坐标b. 线性变换满足: - 可加性: T ( u + v) = T ( u) + T ( v) - 齐次性: T ( c * u) = c * T ( u) c. 对于depth = A + B * ( 1 / z)
注: "靠近近裁剪面的区域: 深度值精度很高; 靠近远裁剪面的区域: 深度值精度很低" 假设有两个斜面几乎平行: a. 斜面1 的实际深度:501.0 , 502.0 , 503.0 .. . b. 斜面2 的实际深度:501.1 , 502.1 , 503.1 .. . 在深度缓冲区中, 这些值可能都被量化为: 501 , 502 , 503 .. . ( 因为远处精度不足) 结果: GPU无法区分哪个在前面, 导致深度测试结果随机变化 → Z- fighting
2 ) . 假设我们有两个三角形, 一个正对相机, 一个倾斜很大a. 使用固定偏移Units = 1 : - 正对相机的三角形: 可能不需要偏移, 但我们还是给了1 个单位的偏移, 这可能导致它与其他物体分离- 倾斜三角形: 1 个单位的偏移可能不够, 深度冲突依然存在b. 使用Factor = 1 , Units = 0 - 正对相机的三角形: 斜率很小, 偏移量 ≈ 0 , 不会产生不必要的间隙- 倾斜三角形: 斜率大, 偏移量也大, 有效解决深度冲突