透明物體的深度寫入問題

通常來說袱瓮,透明物體是不需要寫深度的,例如:

  • 透明物體與非透明物體間的渲染不會(huì)有問題
    因?yàn)樗型该魑矬w會(huì)在所有非透明物體之后渲染稽荧。

  • 大多數(shù)情況下,透明物體之間的渲染也不會(huì)有問題
    因?yàn)槌冢型该魑矬w按由遠(yuǎn)及近的順序渲染,所以不會(huì)出現(xiàn)前面的透明物體擋住后面的透明物體岸蜗,導(dǎo)致后面的透明物體不顯示尉咕。

但有些情況下,透明物體必須要寫深度璃岳,例如:

  • 兩個(gè)透明物體間有交叉
    如果不寫深度年缎,深度則無法正確比較,就會(huì)出現(xiàn)遮擋關(guān)系錯(cuò)誤的現(xiàn)象铃慷。

圖1為俯視角度看兩面片的實(shí)際位置關(guān)系单芜。紅色透明面片與藍(lán)色透明面片相交,一部分紅色面片在前犁柜,另一部分紅色面片在后洲鸠。

1

圖2為不寫深度時(shí)相機(jī)渲染的結(jié)果。藍(lán)色面片完全遮住了紅色面片馋缅,與實(shí)際的前后關(guān)系不符扒腕。

2

圖3為兩個(gè)面片都寫入深度之后的渲染結(jié)果,看似正常萤悴,但會(huì)發(fā)現(xiàn)透過左側(cè)紅色的面片看不到紫色的面片了袜匿。因?yàn)榧t色面片先繪制,寫了深度稚疹,當(dāng)紫色面片繪制時(shí)深度測(cè)試失敗居灯,會(huì)被丟棄。

3
  • 自身有交叉的透明物體
4.png

圖4為模型透明效果内狗。想要保證透明物體的渲染結(jié)果正確怪嫌,必須要讓遠(yuǎn)離相機(jī)的面先繪制,近相機(jī)的面后繪制柳沙。然而一個(gè)物體內(nèi)部所有三角面的渲染順序是由mesh中定義的三角面順序決定的岩灭,所以無法保證前后渲染關(guān)系。此時(shí)如果不借助寫深度赂鲤,是無法實(shí)現(xiàn)正確的渲染的噪径。

思路:模型要跟自身深度值比較,在一個(gè)Pass內(nèi)不可能做到数初。所以先用一個(gè)pass記錄模型的深度值找爱。第二個(gè)pass再跟上一個(gè)pass中記錄的自身深度進(jìn)行比較。這樣就可以分清面片的前后關(guān)系了泡孩。

5

圖5是修改后的渲染結(jié)果车摄,這才正常。

Shader "Transparent"
{
    Properties
    {
        _MainTex("MainTex", 2D) = "white"{}

        _Alpha("Alpha", Range(0,1)) = 1
    }

    SubShader
    {
        Tags{"Queue"="Transparent" "RenderType"="Opaque"}
        LOD 200
        Cull Back
        
        Pass 
        {
            ZWrite On
            ColorMask
        }

        Pass
        {
            ZWrite Off
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
                
                #include "UnityCG.cginc"
                #pragma vertex vert
                #pragma fragment frag

                sampler2D _MainTex;
                half _Alpha;

                struct V2F
                {
                    float4 pos:POSITION;
                    float2 uv:TEXCOORD0;
                };

                V2F vert(appdata_img i)
                {
                    V2F o;

                    o.pos = UnityObjectToClipPos(i.vertex);
                    o.uv = i.texcoord;

                    return o;
                }

                fixed4 frag(V2F i):COLOR
                {
                    fixed4 col = tex2D(_MainTex, i.uv);
                    col.a = _Alpha;

                    return col;
                }

            ENDCG
        }
    }
}

透明渲染寫深度總結(jié)

  • 不寫深度
    a. 當(dāng)一個(gè)物體自身沒有穿插,兩個(gè)物體間沒有穿插時(shí)吮播,不寫深度沒有問題变屁。

    b. 當(dāng)兩個(gè)物體間有穿插時(shí),會(huì)導(dǎo)致一個(gè)物體完全擋住另外一個(gè)物體意狠,與現(xiàn)實(shí)不符粟关。

  • 寫深度
    a. 當(dāng)一個(gè)物體自身有穿插時(shí),使用兩個(gè)pass环戈,才可以保證透明正常誊役,且不會(huì)透過物體的正面看到后面的面。

    b. 但是寫了深度后谷市,這兩個(gè)物體穿插時(shí),會(huì)導(dǎo)致不能透過一個(gè)角色看到另外一個(gè)角色击孩。

兩物體沒有穿插時(shí)正常
兩物體有穿插時(shí)就不正常了

最后

  • 正常情況下迫悠,透明物體渲染不需要寫深度
  • 特殊情況下,根據(jù)需求才寫深度巩梢,雖然會(huì)帶來小問題创泄,但也還可以接受。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末括蝠,一起剝皮案震驚了整個(gè)濱河市鞠抑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忌警,老刑警劉巖搁拙,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異法绵,居然都是意外死亡箕速,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門朋譬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盐茎,“玉大人,你說我怎么就攤上這事徙赢∽帜” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵狡赐,是天一觀的道長(zhǎng)窑业。 經(jīng)常有香客問我,道長(zhǎng)枕屉,這世上最難降的妖魔是什么数冬? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上拐纱,老公的妹妹穿的比我還像新娘铜异。我一直安慰自己,他們只是感情好秸架,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布揍庄。 她就那樣靜靜地躺著,像睡著了一般东抹。 火紅的嫁衣襯著肌膚如雪蚂子。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天缭黔,我揣著相機(jī)與錄音食茎,去河邊找鬼。 笑死馏谨,一個(gè)胖子當(dāng)著我的面吹牛别渔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惧互,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼哎媚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了喊儡?” 一聲冷哼從身側(cè)響起拨与,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎艾猜,沒想到半個(gè)月后买喧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡匆赃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年岗喉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炸庞。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钱床,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出埠居,到底是詐尸還是另有隱情查牌,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布滥壕,位于F島的核電站纸颜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏绎橘。R本人自食惡果不足惜胁孙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一唠倦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涮较,春花似錦稠鼻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至闺属,卻和暖如春慌盯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掂器。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工亚皂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人国瓮。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓灭必,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親巍膘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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