Unity中Shader的深度偏移Offset


前言

该操作是在深度测试时操作,并不是在深度缓冲区中实现


一、深度偏移一般用于什么时候

1、深度偏移一般用于两个模型 重合在同一平面时,在其中一个模型上使用深度偏移后,就能区别出两个模型的深度,从而消除闪动

2、虽然,可以让两个模型在深度上错开一点点,来解决这个闪动的物体,但是,在需求就是需要在同一平面下就行不通

3、产生的原因

在这里插入图片描述在这里插入图片描述

在深度缓冲区中,值为 0 到 0.7 的时候,深度分的很细,所以深度的精度值就很高,在模型距离摄像机很近时重合于一个平面时就会出现分不清该先渲染谁的问题

请添加图片描述

二、解决的办法

法1、错开模型一点点

法2、使用深度偏移Offset

Offset Factor, Units
深度偏移,offset = (m * factor) + (r * units),默认值为0,0
m:指多边形的深度斜率(在光栅化阶段计算得出)中的最大值,多边形越是与近裁剪面平行,m值就越接近0。
r:表示能产生在窗口坐标系的深度值中可分辨的差异的最小值,r是由具体实现OpenGL的平台指定的一个常量。
结论:一个大于0的offset会把模型推远,一个小于0的offset会把模型拉近。

对于Offset,我们就记住 大于0 推远 ,小于0 推近
offset = (m * factor) + (r * units)
那么对于公式中 m 和 r 我们无法控制,但是都大于0
那么改变 factor 和 units 正负值即可

3、测试 推远 和 拉近

推远:

Offset 1,1

在这里插入图片描述
拉近:

Offset -1,-1

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楠溪泽岸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值