在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值相同的多邊形,顯示效果也是有先後順序的了。