參考鏈接:
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.當深度測試不通過時,該像素會被舍棄,深度緩沖和顏色緩沖無變化;否則,該像素的顏色值會覆蓋掉顏色緩沖的顏色值,然后根據深度寫入來決定是否覆蓋掉深度緩沖中的深度值。