unity shader 透明設(shè)置 alpha 和 cutoff alpha

設(shè)置3D模型透明 alpha

目錄
1. 普通透明設(shè)置準(zhǔn)備
2. 普通透明設(shè)置實(shí)現(xiàn)
3. 普通透明設(shè)置說(shuō)明

4. cutoff準(zhǔn)備
5. cutoff實(shí)現(xiàn)
6. cutoff說(shuō)明

Unity默認(rèn)使用的shader不能設(shè)置3D對(duì)象的透明和和半透明瘟裸,我們只需要做簡(jiǎn)單的修改就可以實(shí)現(xiàn)這個(gè)功能。

普通透明設(shè)置準(zhǔn)備
  1. 新建一個(gè) Stander surface shader 和一個(gè)材質(zhì)material,命名為NormalAlpha枪眉,把新建的shader綁定在這個(gè)材質(zhì)上甸饱。
  2. 準(zhǔn)備一個(gè)簡(jiǎn)單的模型和對(duì)應(yīng)的貼圖惨远,這里是從asset store下載了一個(gè)卡通車(chē)模型偷厦。
  3. 把新建的material 賦給卡通車(chē)模型霹肝。
普通透明設(shè)置實(shí)現(xiàn)
  1. 添加渲染隊(duì)列標(biāo)簽申钩,把這個(gè)標(biāo)簽添加到tags{}中。

    "Queue"="Transparent"

  2. 在#pragma編譯指令后添加參數(shù) alpha

    #pragma surface surf Lambert alpha 
    
  3. 使用顏色值的最后一位設(shè)置顏色值痹升,附上surf函數(shù)建炫。

void surf (Input IN, inout SurfaceOutput o) {
    // Albedo comes from a texture tinted by color
    fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
    o.Albedo = c.rgb;
    o.Alpha = c.a;
}

可以通過(guò)屬相面板的顏色值來(lái)控制透明度,因?yàn)?code>o.Alpha = c.a;疼蛾。也可以直接設(shè)定透明度,比如o.Alpha = 0.5;艺配。

完整代碼

代碼已經(jīng)上傳到github,https://github.com/superzhan/shaderProj察郁。
透明控制的代碼在A(yíng)lpha文件夾下。

Shader "Custom/Alpha/NormalAlpha" {
    Properties {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        
    }
    SubShader {
        Tags { "RenderType"="Opaque" "Queue"="Transparent" }
        LOD 200
        
        CGPROGRAM
        
        //再最后添加alpha參數(shù)转唉,就可以實(shí)現(xiàn)模型的透明設(shè)置
        #pragma surface surf Lambert alpha 

        // Use shader model 3.0 target, to get nicer looking lighting
        #pragma target 3.0

        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
        };

        
        fixed4 _Color;

        void surf (Input IN, inout SurfaceOutput o) {
            // Albedo comes from a texture tinted by color
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    } 
    FallBack "Diffuse"
}

普通透明設(shè)置說(shuō)明

透明的設(shè)置很簡(jiǎn)單皮钠,主要是添加渲染隊(duì)列的tag和在編譯指令后添加alpha參數(shù),最后在surf函數(shù)中設(shè)置輸出的SurfaceOutput的alpha值赠法。這里本來(lái)使用unity5 的默認(rèn)光照模型麦轰,但設(shè)置透明的時(shí)候出來(lái)點(diǎn)問(wèn)題,然后就改成了Lambert光照模型砖织,surf函數(shù)的輸出結(jié)構(gòu)也改成了SurfaceOutput款侵。

.
.
.
.
.

cutoff alpha 通道透明設(shè)置

cutoff alpha的功能是當(dāng)alpha值小于某個(gè)值的時(shí)候,就把這個(gè)像素點(diǎn)設(shè)置成完全透明侧纯。用來(lái)實(shí)現(xiàn)某些效果新锈,比如腐爛消失等。

cutoff準(zhǔn)備
  1. 新建一個(gè) Stander surface shader 和一個(gè)材質(zhì)material,命名為CutoffAlpha眶熬,把新建的shader綁定在這個(gè)材質(zhì)上妹笆。
  2. 準(zhǔn)備一個(gè)簡(jiǎn)單的模型和對(duì)應(yīng)的貼圖,這里是從asset store下載了一個(gè)卡通車(chē)模型娜氏。
  3. 把新建的material 賦給卡通車(chē)模型拳缠。
cutoff實(shí)現(xiàn)
  1. 添加渲染隊(duì)列標(biāo)簽,把這個(gè)標(biāo)簽添加到tags{}中贸弥。

    "Queue"="Transparent"

  2. 在Properties添加一個(gè)屬性,用于控制alpha的范圍窟坐,當(dāng)alpha小于這個(gè)數(shù)值時(shí),就會(huì)把像素點(diǎn)設(shè)置透明茂腥。

    _Cutoff("Cutoff Value",Range(0,1.1))=0.5
    
  3. 在#pragma編譯指令后添加參數(shù) alphatest:_Cutoff 狸涌。 冒號(hào)后的_Cutoff就是屬性中的數(shù)值。

    #pragma surface surf Lambert alphatest:_Cutoff 
    
  4. 在surf函數(shù)中設(shè)置要變更的顏色通道最岗。

void surf (Input IN, inout SurfaceOutput o) {
    // Albedo comes from a texture tinted by color
    fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
    o.Albedo = c.rgb;
        
    //這里使用藍(lán)色通道
    o.Alpha = c.b;
}

附上完整代碼

代碼已經(jīng)上傳到github,https://github.com/superzhan/shaderProj帕胆。
透明控制的代碼在A(yíng)lpha文件夾下。

Shader "Custom/Alpha/CutoffAlpha" {
    Properties {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Cutoff("Cutoff Value",Range(0,1.1))=0.5
        
    }
    SubShader {
        Tags { "RenderType"="Opaque" "Queue"="Transparent" }
        LOD 200
        
        CGPROGRAM
        
        #pragma surface surf Lambert alphatest:_Cutoff

        // Use shader model 3.0 target, to get nicer looking lighting
        #pragma target 3.0

        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
        };

        fixed4 _Color;

        void surf (Input IN, inout SurfaceOutput o) {
            // Albedo comes from a texture tinted by color
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            
            o.Alpha = c.b;
        }
        ENDCG
    } 
    FallBack "Diffuse"
}

img
img
img
cutoff說(shuō)明

當(dāng)設(shè)置alphatest:_Cutoff后般渡,o.Alpha輸出結(jié)構(gòu)的透明值小于_Cutoff懒豹,這個(gè)像素點(diǎn)就會(huì)完全透明芙盘。在surf函數(shù)中的o.Alpha = c.b可以設(shè)置為o.Alpha = c.r或者o.Alpha = c.b,不同的貼圖顏色會(huì)有不同的效果,需要根據(jù)具體的情況做調(diào)整脸秽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末儒老,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子记餐,更是在濱河造成了極大的恐慌驮樊,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件片酝,死亡現(xiàn)場(chǎng)離奇詭異囚衔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)雕沿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)练湿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人审轮,你說(shuō)我怎么就攤上這事肥哎。” “怎么了疾渣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵篡诽,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我稳衬,道長(zhǎng)霞捡,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任薄疚,我火速辦了婚禮碧信,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘街夭。我一直安慰自己砰碴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布板丽。 她就那樣靜靜地躺著呈枉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪埃碱。 梳的紋絲不亂的頭發(fā)上猖辫,一...
    開(kāi)封第一講書(shū)人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音砚殿,去河邊找鬼啃憎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛似炎,可吹牛的內(nèi)容都是我干的辛萍。 我是一名探鬼主播悯姊,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼贩毕!你這毒婦竟也來(lái)了悯许?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤辉阶,失蹤者是張志新(化名)和其女友劉穎先壕,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體睛藻,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡启上,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了店印。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡倒慧,死狀恐怖按摘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纫谅,我是刑警寧澤炫贤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站付秕,受9級(jí)特大地震影響兰珍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜询吴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一掠河、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猛计,春花似錦唠摹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至盗温,卻和暖如春藕赞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卖局。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工斧蜕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吼驶。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓惩激,卻偏偏與公主長(zhǎng)得像店煞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子风钻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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