Shader-透明效果-透明度混合

透明度混合相較于透明度測試更加復雜一些助泽,透明度混合可以得到真正的半透明效果楞慈,使用當前片元和透明度作為混合因子旺嬉,與已經(jīng)存儲在顏色緩沖區(qū)的顏色值進行混合,得到新的顏色本冲。透明度混合需要關(guān)閉深度寫入准脂,這使得我們需要關(guān)注物體的渲染順序。
我們使用Unity的混合指令Blend檬洞,想實現(xiàn)半透明的效果就要把當前自身的顏色和已經(jīng)存在的顏色緩沖中的顏色進行混合狸膏,混合時使用的函數(shù)就是該指令決定的。

ShaderLab Blend指令
Blend Off關(guān)閉混合
Blend SrcFactor DstFactor開啟混合疮胖,并設(shè)置混合因子环戈。源顏色乘SrcFactor闷板,目標顏色乘以DstFactor澎灸,再將兩者相加后存入顏色緩存中。

Blend.PNG

相較于透明度測試遮晚,代碼部分改變性昭,Tags的Queue標簽設(shè)置為Transparent,RenderType標簽讓Shader歸入提前定義的組县遣,我們通過ZWriteOff關(guān)閉深度寫入糜颠,Blend設(shè)置兩個混合因子。
在fragment中萧求,我們返回的的Color值包括一個Alpha值其兴。

Shader "Unlit/AlphaBlend"
{
    Properties{
        _Color("Main Tint",Color) = (1,1,1,1)
        _MainTex("Main Tex", 2D) = "white"{}
        _AlphaScale("Alpha Scale", Range(0,1)) = 1
    }
        SubShader{
            Tags{"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent"}
            Pass{
                Tags{"LightMode" = "ForwardBase"}
                ZWrite Off
                Blend SrcAlpha OneMinusSrcAlpha

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

                fixed4 _Color;
                sampler2D _MainTex;
                float4 _MainTex_ST;
                fixed _AlphaScale;

                struct a2v {
                    float4 vertex : POSITION;
                    fixed3 normal : NORMAL;
                    float4 texcoord : TEXCOORD0;
                };

                struct v2f {
                    float4 pos : SV_POSITION;
                    float3 worldNormal : TEXCOORD0;
                    float3 worldPos : TEXCOORD1;
                    float2 uv : TEXCOORD2;
                };

                v2f vert(a2v v) {
                    v2f o;
                    o.pos = UnityObjectToClipPos(v.vertex);
                    o.worldNormal = UnityObjectToWorldNormal(v.normal);
                    o.worldPos = mul(unity_ObjectToWorld, v.vertex);
                    o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
                    return o;
                }

                fixed4 frag(v2f i) :SV_Target{
                    fixed3 worldNormal = normalize(i.worldNormal);
                    fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));
                    fixed4 texColor = tex2D(_MainTex, i.uv);
                    fixed3 albedo = texColor.rgb * _Color.rgb;
                    fixed3 diffuse = _LightColor0.rgb * albedo * max(0, dot(worldNormal, worldLightDir));
                    fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT * albedo;
                    return fixed4(diffuse + ambient, texColor.a * _AlphaScale);
                }
                ENDCG
            }
        }
}
AplhaBlendTest.PNG

透明度混合的雙面渲染
Cull Back是默認的,背對攝像機的一面不會被渲染
Cull Front 是面向攝像機的不會渲染

Pass{
                Tags{"LightMode" = "ForwardBase"}
                Cull Front
Pass{
                Tags{"LightMode" = "ForwardBase"}
                Cull Back

我們改動代碼夸政,先渲染背面元旬,再渲染正面,可以得到下面的結(jié)果

AlphaBlendCull.PNG
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市匀归,隨后出現(xiàn)的幾起案子坑资,更是在濱河造成了極大的恐慌,老刑警劉巖穆端,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袱贮,死亡現(xiàn)場離奇詭異,居然都是意外死亡体啰,警方通過查閱死者的電腦和手機攒巍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荒勇,“玉大人窑业,你說我怎么就攤上這事≌硖耄” “怎么了常柄?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長搀擂。 經(jīng)常有香客問我西潘,道長,這世上最難降的妖魔是什么哨颂? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任喷市,我火速辦了婚禮,結(jié)果婚禮上威恼,老公的妹妹穿的比我還像新娘品姓。我一直安慰自己,他們只是感情好箫措,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布腹备。 她就那樣靜靜地躺著,像睡著了一般斤蔓。 火紅的嫁衣襯著肌膚如雪植酥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天弦牡,我揣著相機與錄音友驮,去河邊找鬼。 笑死驾锰,一個胖子當著我的面吹牛卸留,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播椭豫,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼耻瑟,長吁一口氣:“原來是場噩夢啊……” “哼买喧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起匆赃,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤淤毛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后算柳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體低淡,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年瞬项,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔗蹋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡囱淋,死狀恐怖猪杭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妥衣,我是刑警寧澤皂吮,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站税手,受9級特大地震影響蜂筹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芦倒,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一艺挪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧兵扬,春花似錦麻裳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至俱箱,卻和暖如春国瓮,著一層夾襖步出監(jiān)牢的瞬間灭必,已是汗流浹背狞谱。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留禁漓,地道東北人跟衅。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像播歼,于是被迫代替她去往敵國和親伶跷。 傳聞我的和親對象是個殘疾皇子掰读,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353