3、shader深度測試(Cull、ZWrite 、ZTest )


剔除和深度測試是渲染法線中的一個流程

Cull:默認情況下,Unity中給的所有Shader都是單面的,它都把反面的渲染給關閉掉了,如果你在開發的過程中需要使用到雙面,只要把cull關閉(off)即可!

ZWrite:深度緩存ZWrite默認情況下都是開啟的,因為我們3D場景中的模型非常多,那么模型與模型之間的前后關系就是由ZWrite來控制的,所以默認情況下要開啟,前面已經介紹過它了

直接看效果來介紹

Cull:Unity中給的所有Shader都是單面的,它都把反面的渲染給關閉掉了,我們來看下圖就知道什么回事了,我們來新建一個Plane,看下它就知道了,

這是cull back時的效果,前面被繪制了,后面被剔除了,unity中默認也是這樣的

當cull為fornt時,只有后面繪制了,前面被剔除了,效果為:

當cull為off時,正反兩面都被繪制了,效果為:

 

ZTest:對這個了解的還不是很透徹,先這樣理解吧,后面了解了,會更新!

如上所述,默認為LEqual,就是繪制前面的對象與現有對象有一段距離的對象,隱藏現有對象后面的對象

LEqual為lessEqual小於等於,可以理解為如果自己的深度小於或者等於某些物體時,就繪制這些物體,反之,進行隱藏處理!

如果為greater時,就繪制那些深度小於自己的物體,而自己所有面積都隱藏,而如果深度大於自己的話,那么自己顯示的面積為:自己和深度大於自己的物體相交的面積部分,而深度大於自己的物體面積全顯示

實例:場景中新建一個cube,再新建一個capsule,分別為兩個物體創建兩個默認的shader,兩個物體的x和y軸是一樣的,

而capsule更靠近攝像機,而cube是會被capsule遮擋的,如圖所示

此時我們設置capsule的ztest為greater,效果如下:

always:表示無論被不被遮住,都一直繪制,一般用在當人物被牆壁等物體遮擋時,要以一種描邊的效果展示:

 


免責聲明!

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



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