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, 不会产生不必要的间隙

- 倾斜三角形: 斜率大, 偏移量也大, 有效解决深度冲突
相关推荐
叶帆14 天前
【YFIOs】用C#开发硬件之设备上云
开发语言·unity·c#
久数君14 天前
AI三维建模工具“造形家”:地理场景三维化的高效解决方案
unity·glb·ai算法·ai三维建模工具·地图框选·造形家·城市建筑模型
会思考的猴子14 天前
Unity VFX 属性 Postion 和 TargetPostion
unity
心前阳光15 天前
Unity资源导入之自动化资源导入
unity·自动化·游戏引擎
心前阳光15 天前
Unity之2021.3.45f2c1发布安卓程序遇到的问题
android·unity·游戏引擎
纪纯15 天前
PicoVR Unity Integration SDK 3.4 常用交互API
unity·游戏引擎·vr·pico
龙智DevSecOps解决方案15 天前
3A 游戏优化技术栈:如何打通引擎级分析工具与 DevOps 持续集成管线?
unity·性能优化·游戏开发·技术美术·perforce·unrealengine
葛兰岱尔15 天前
从 SolidWorks 到 Three.js,从 Inventor 到 Unity——制造业CAD模型“几何-语义一体化“转换,不再是天方夜谭!
开发语言·javascript·unity
玉夏15 天前
【Shader基础】UV 与纹理采样 Part1
unity·着色器·uv
zdr尽职尽责15 天前
Unity录像功能
学习·ui·unity·游戏引擎