Unity ZTest 深度測(cè)試 & ZWrite 深度寫入

<轉(zhuǎn)>我也忘了轉(zhuǎn)自哪里,抱歉,感謝原作者

初學(xué)Shader帘腹,一開始對(duì)于渲染隊(duì)列嚎研,ZTest 和 ZWrite一頭霧水蝌蹂,經(jīng)過多方查閱和實(shí)驗(yàn)噩斟,有了一些自己的理解。發(fā)此文與初學(xué)Shader的朋友分享孤个,也算是為自己做個(gè)筆記亩冬。不對(duì)或不足之處歡迎指正。

? ? 不說廢話硼身,直接進(jìn)入正題。?

? ? 首先是實(shí)驗(yàn)場(chǎng)景覆享,一藍(lán)一紅兩個(gè)Cube佳遂。藍(lán)在紅前。

? ? 兩個(gè)方塊所使用的Shader都是最簡(jiǎn)單的 V&F 著色程序撒顿,不同的是藍(lán)色方塊alpha返回值為0.6丑罪,紅色為1。

? ? ?但是藍(lán)色方塊并沒有絲毫透明的效果凤壁,這時(shí)我們?cè)谒{(lán)色方塊的Shader內(nèi)加上這樣一行代碼 :?

? ? ?Blend SrcAlpha OneMinusSrcAlpha 吩屹。

? ? ?稍微解釋一下,這行指令意思就是將本 Shader 計(jì)算出的顏色值(源顏色值拧抖,即藍(lán)色) * 源Alpha值(0.6) + 目標(biāo)顏色值(可以理解為背景色) * (1-0.6)煤搜,從而讓藍(lán)色方塊展示出了40%的透明度。

? ? 然后我們看到了這樣的效果:

? ? 似乎有些透明的樣子了唧席,但是紅色方塊還是顯示不出來擦盾。我們?cè)偌由线@樣一行代碼:

? ? ?Tags {"Queue" = "Transparent"}

? ? 意思是設(shè)置它在渲染隊(duì)列中的值為 Transparent (透明) = 3000,值越小越先渲染淌哟,而后渲染( Queue 值大)的物體會(huì)覆蓋先渲染的物體(紅塊未設(shè)置 Queue 值迹卢,默認(rèn)為?Geometry(幾何體) = 2000)。在理想的世界中徒仓,我們應(yīng)該讓遠(yuǎn)處的物體先渲染腐碱,近處的物體后渲染,這樣遠(yuǎn)處的物體就不會(huì)遮擋住近的物體掉弛。

? ? 接下來我們看到了正確的結(jié)果:

? ? Queue 其他預(yù)定義的值為:Background = 1000 , AlphaTest = 2450症见,Overlay = 4000喂走。默認(rèn)值是Geometry 。

? ? 例如:如果我們想讓遠(yuǎn)處的紅色方塊遮擋住近處的藍(lán)色方塊筒饰,即讓藍(lán)色的先渲染缴啡,紅色的后渲染,只需將紅塊的Queue 也設(shè)置為?Transparent 瓷们,藍(lán)塊的Queue值-1业栅。

? ? 然后我們看看效果:

? ? 好像并沒有什么卵用。谬晕。碘裕。這是為什么呢?

? ? 原因在于這樣兩條指令:

? ? 雖然我們的代碼里并沒有這兩行攒钳,但它們是默認(rèn)存在的帮孔。

? ? ?ZTest ,深度測(cè)試不撑;LEqual 文兢,小于等于。

? ? ?ZWrite 焕檬,深度寫入姆坚,On ,打開实愚。

? ? ?ZTest 可取值為:Greater , GEqual , Less , LEqual , Equal , NotEqual , Always , Never , Off兼呵,默認(rèn)是 LEqual,ZTest Off 等同于 ZTest Always腊敲。

? ???ZWrite 可取值為:On , Off击喂,默認(rèn)是 On。

? ??系統(tǒng)中存在一個(gè)顏色緩沖區(qū)和一個(gè)深度緩沖區(qū)碰辅,分別存儲(chǔ)顏色值和深度值懂昂,來決定畫面上應(yīng)該顯示什么顏色。

? ? 深度值是物體在世界空間中距離攝像機(jī)的遠(yuǎn)近没宾。距離越近忍法,深度值越小榕吼;距離越遠(yuǎn)饿序,深度值越大。

? ? 例如在我們的場(chǎng)景中羹蚣,藍(lán)色方塊比紅色更靠近相機(jī)原探,藍(lán)塊的深度值就比紅塊小。

? ? 假設(shè)藍(lán)塊的深度值為 0.5,紅塊為 0.7咽弦。還記得在上面的例子中徒蟆,我們讓藍(lán)塊在渲染隊(duì)列中排在紅塊前面,系統(tǒng)就先將藍(lán)色值存入了顏色緩沖區(qū)中對(duì)應(yīng)的區(qū)域型型,將深度值 0.5 存入了深度緩沖區(qū)中對(duì)應(yīng)的區(qū)域段审。接下來渲染紅塊,系統(tǒng)會(huì)將紅塊的深度值與深度緩沖區(qū)中的值進(jìn)行比較(這個(gè)過程就是深度測(cè)試)闹蒜,由于默認(rèn)的 ZTest 深度測(cè)試的方式是 LEqual 小于等于寺枉,即深度值小于等于 0.5 的顏色才會(huì)通過測(cè)試。如果通過了測(cè)試绷落,且 ZWirte 處于 On 的狀態(tài)姥闪,該顏色的深度值就會(huì)替代深度緩沖區(qū)中的值,顏色值也會(huì)替代顏色緩沖區(qū)中的值砌烁,從而顯示出新顏色筐喳。

? ? 很顯然,0.7 > 0.5函喉,所以紅色并不能通過測(cè)試避归,紅塊也就不能顯示在藍(lán)塊前面。

? ? 如果我們硬要遠(yuǎn)處的紅塊遮擋住近處的藍(lán)塊管呵,很顯然梳毙,我們應(yīng)該改變或關(guān)閉深度測(cè)試,或者關(guān)閉深度寫入(關(guān)閉了深度測(cè)試或者深度寫入之后撇寞,物體顏色的遮擋關(guān)系就會(huì)和渲染隊(duì)列一致,即排在后面的會(huì)擋住前面的)堂氯。

? ? 接下來我們?cè)囋囮P(guān)閉藍(lán)塊的深度寫入:

? ? 得到了想要的結(jié)果:

? ? 再試試單獨(dú)關(guān)閉紅塊的深度測(cè)試蔑担,注釋藍(lán)塊的深度寫入:

? ? 結(jié)果還是一樣。但如果我們改變紅塊深度測(cè)試的方式呢:

? ? 即深度值大于深度緩沖區(qū)中的值就能通過測(cè)試咽白,還記得我們假設(shè)紅塊深度值為 0.7啤握,藍(lán)塊為 0.5。理論上會(huì)得到我們想要的結(jié)果:

? ? 奇怪的是晶框,紅塊的另一半去哪了排抬?

? ? 答案是被背景擋住了。

? ? 按照距離相機(jī)的遠(yuǎn)近授段,我們可以假設(shè)背景的深度值為 1蹲蒲。在消失的另一半的深度緩沖區(qū)中的深度值應(yīng)該是背景的深度值 1。而我們?cè)O(shè)置了 ZTest Greater侵贵,0.7 < 1届搁,所以紅塊另一半沒有通過深度測(cè)試。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市卡睦,隨后出現(xiàn)的幾起案子宴胧,更是在濱河造成了極大的恐慌,老刑警劉巖表锻,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恕齐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡瞬逊,警方通過查閱死者的電腦和手機(jī)显歧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來码耐,“玉大人追迟,你說我怎么就攤上這事∩龋” “怎么了敦间?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)束铭。 經(jīng)常有香客問我廓块,道長(zhǎng),這世上最難降的妖魔是什么契沫? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任带猴,我火速辦了婚禮,結(jié)果婚禮上懈万,老公的妹妹穿的比我還像新娘拴清。我一直安慰自己,他們只是感情好会通,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布口予。 她就那樣靜靜地躺著,像睡著了一般涕侈。 火紅的嫁衣襯著肌膚如雪沪停。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天裳涛,我揣著相機(jī)與錄音木张,去河邊找鬼。 笑死端三,一個(gè)胖子當(dāng)著我的面吹牛舷礼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播郊闯,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼且轨,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼浮声!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起旋奢,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤泳挥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后至朗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屉符,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年锹引,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矗钟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嫌变,死狀恐怖吨艇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情腾啥,我是刑警寧澤东涡,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站倘待,受9級(jí)特大地震影響疮跑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凸舵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一祖娘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧啊奄,春花似錦渐苏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至峻仇,卻和暖如春公黑,著一層夾襖步出監(jiān)牢的瞬間邑商,已是汗流浹背摄咆。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留人断,地道東北人吭从。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像恶迈,于是被迫代替她去往敵國和親涩金。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谱醇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容