在Unity中,有一个 Offset 设置,它叫 z-fighting ,看名就知道了,是z值之间的战斗
原因是因为我们的不同的多边形共面时,在光栅阶段生成的fragment的屏幕xy坐标一样,但depth值又不一样的浮点误差引起的问题,然后浮点round-off的四舍五入,导致z-fighting。
其实就是2个z值一样,放在同一个平面下的多边形,因为他们的z值极其接近,所以会出现交替显示,闪烁的现象,所以为了不让它继续闪下去,我们可以通过 Offset 来分出它们之间的先后顺序。
计算公式是
finalOffset = s * Factor + d * Unit;
一般不需要考虑这么复杂的事,书写发放一般是下面这样:
Offset 1,1
Offset 2,2
Ofsset -1,-1
Ofsset -2,-2
产生的效果是,数值越小的,距离摄像机越近,数值越大的,距离摄像机越远。
根据这个规律,我们就可以确保z值相同的多边形,显示效果也是有先后顺序的了。
官方文档:https://docs.unity3d.com/Manual/SL-Offset.html