[UnityShader基礎]02.深度測試 & 深度寫入


參考鏈接:

https://blog.csdn.net/v_xchen_v/article/details/79380222

 

前面說到了渲染隊列,對於兩個不透明的物體A和B,它們處於同一個渲染隊列中。假如它們一前一后地擺放着,當先渲染A再渲染B,那么B顯示在前面;當先渲染B再渲染A,那么A顯示在前面。因此,單靠渲染隊列還是無法很好解決物體間的遮擋關系,這時就需要利用深度這個東西了。

 

1.深度

指該像素距離攝像機的距離。離攝像機越遠,深度越大。

 

2.深度緩沖 & 顏色緩沖

深度緩沖中存儲着每個像素對應的深度值。

顏色緩沖中存儲着每個像素對應的顏色值。

 

3.深度測試

將像素的深度與深度緩沖的深度進行比較。如果通過了深度測試,就有機會去改寫深度緩沖的對應值;否則該像素會被舍棄。

語法如下:

ZTest Less | Greater | LEqual | GEqual | Equal | NotEqual | Always

默認值為LEqual,小於等於。即表示如果像素的深度小於等於深度緩沖的深度,則通過了深度測試。

 

4.深度寫入

是否要將像素的深度寫入到深度緩沖中。前提是通過了深度測試。

語法如下:

ZWrite On | Off

默認值為On,即寫入深度緩沖。

 

5.總結

a.根據這兩個默認值,可以知道,離攝像機近的會遮擋住離攝像機遠的,因此也就解決了最開始說的兩個物體的遮擋問題:假如A在前B在后,當先渲染A再渲染B,在渲染B時B不能通過深度測試從而被舍棄;當先渲染B再渲染A,在渲染A時A通過深度測試從而覆蓋了B。因此對於不透明物體間的遮擋,通過這兩個默認值就可以得到很好的處理。

 

b.當深度測試不通過時,該像素會被舍棄,深度緩沖和顏色緩沖無變化;否則,該像素的顏色值會覆蓋掉顏色緩沖的顏色值,然后根據深度寫入來決定是否覆蓋掉深度緩沖中的深度值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM