2.1 ShaderLab - 渲染状态

1.Offset


1.Offset

csharp 复制代码
Offset用于解决3D渲染中的深度冲突

a.Units: 产生一个固定的偏移量, 与多边形斜率无关

b.Factor: 根据多边形斜率产生可变的偏移量, 斜率越大, 偏移越大

c.上面的值小于0, 则靠近相机; 大于0, 表示远离相机

csharp 复制代码
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)
csharp 复制代码
注: "靠近近裁剪面的区域: 深度值精度很高; 靠近远裁剪面的区域: 深度值精度很低"

假设有两个斜面几乎平行: 

a.斜面1的实际深度:501.0, 502.0, 503.0...

b.斜面2的实际深度:501.1, 502.1, 503.1...

在深度缓冲区中, 这些值可能都被量化为: 501, 502, 503...(因为远处精度不足)

结果: GPU无法区分哪个在前面, 导致深度测试结果随机变化 → Z-fighting

csharp 复制代码
2).假设我们有两个三角形, 一个正对相机, 一个倾斜很大

a.使用固定偏移Units = 1:

- 正对相机的三角形: 可能不需要偏移, 但我们还是给了1个单位的偏移, 这可能导致它与其他物体分离

- 倾斜三角形: 1个单位的偏移可能不够, 深度冲突依然存在

b.使用Factor = 1, Units = 0

- 正对相机的三角形: 斜率很小, 偏移量 ≈ 0, 不会产生不必要的间隙

- 倾斜三角形: 斜率大, 偏移量也大, 有效解决深度冲突
相关推荐
mxwin35 分钟前
Unity Shader中CastShadows 和 ReceiveShadows 在代码中的区分
unity·游戏引擎·shader
努力长头发的程序猿4 小时前
Unity2D当中的A*寻路算法
算法·unity·c#
RReality15 小时前
【Unity Shader URP】Matcap 材质捕捉实战教程
java·ui·unity·游戏引擎·图形渲染·材质
魔士于安15 小时前
unity urp材质球大全
游戏·unity·游戏引擎·材质·贴图·模型
南無忘码至尊18 小时前
Unity学习90天 - 第 6 天 -学习物理 Material + 重力与阻力并实现弹跳球和冰面滑动效果
学习·unity·游戏引擎
mxwin21 小时前
Unity 单通道立体渲染(Single Pass Instanced)对 Shader 顶点布局的特殊要求
unity·游戏引擎·shader
魔士于安1 天前
unity 低多边形 无人小村 木质建筑 晾衣架 盆子手推车,桌子椅子,罐子,水井
游戏·unity·游戏引擎·贴图·模型
RReality1 天前
【Unity Shader URP】简易卡通着色(Simple Toon)实战教程
ui·unity·游戏引擎·图形渲染·材质
魔士于安1 天前
unity 骷髅人 连招 武器 刀光 扭曲空气
游戏·unity·游戏引擎·贴图·模型
瑞瑞小安1 天前
Unity功能篇:文本框随文字内容动态调整
ui·unity