Unity中Shader的深度偏移Offset

文章目录

  • 前言
  • 一、深度偏移一般用于什么时候
    • 1、深度偏移一般用于两个模型 重合在同一平面时,在其中一个模型上使用深度偏移后,就能区别出两个模型的深度,从而消除闪动
    • 2、虽然,可以让两个模型在深度上错开一点点,来解决这个闪动的物体,但是,在需求就是需要在同一平面下就行不通
    • 3、产生的原因
    • 请添加图片描述
  • 二、解决的办法
    • 法1、错开模型一点点
    • 法2、使用深度偏移Offset
    • 3、测试 推远 和 拉近


前言

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


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

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

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

3、产生的原因

Unity中Shader的深度偏移Offset_第1张图片Unity中Shader的深度偏移Offset_第2张图片

在深度缓冲区中,值为 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

Unity中Shader的深度偏移Offset_第3张图片
拉近:

Offset -1,-1

Unity中Shader的深度偏移Offset_第4张图片

你可能感兴趣的:(Unity,unity,游戏引擎)