Unity Shader Alpha Blend 填坑記錄

這篇文章主要說的是關(guān)于Unity Shader 中對Alpha的Blend
Blend 透明度混合.通過參數(shù)來調(diào)整透明度,真正的透明效果.
Blend的位置在SubShader 中,CGPROGRAM前.用例如下

Shader "Example/Diffuse Bump" {
    Properties {
      _MainTex ("Texture", 2D) = "white" {}
      _BumpMap ("Bumpmap", 2D) = "bump" {}
    }
    SubShader {
      Tags { "RenderType" = "Opaque" }
    ==注意看這里==
      Blend One One

      CGPROGRAM
      #pragma surface surf Lambert
//      略
      ENDCG
    } 
    Fallback "Diffuse"
  }

好的.我們著重來看下Blend One One 部分
混合命令有一下這些:

參數(shù) 描述
Blend Off 關(guān)閉混合(默認(rèn))
Blend SrcFactor DstFactor 片元產(chǎn)生的顏色乘以SrcFactor,加上屏幕上已有的顏色乘以DstFactor,得到最終的顏色(寫入顏色緩存),示例: float4 result = SrcFactor * fragment_output + DstFactor * pixel_color
Blend SrcFactor DstFactor,SrcFactorA, DstFactorA 同上,只不過使用單獨(dú)的因子SrcFactorA和DstFactorA來混合透明度通道
BlendOp BlendOperation 用其他的操作來取代加法混合
BlendOp OpColor,OpAlpha 同上,只不過對于透明度通道使用不同的操作

==測試在Unity 中 Blend SrcFactor DstFactor,SrcFactorA, DstFactorA 命令失效,unity只認(rèn) Blend SrcFactor DstFactor 這種形式, "," 后面的參數(shù)不認(rèn),但是調(diào)試中發(fā)現(xiàn)Unity生成的是 Blend One One,One One 這樣的4個(gè)參數(shù)的形式.很是不解==

混合操作(BlendOp) 具體操作
Add 加法:float4 result = SrcFactor * fragment_output + DstFactor * pixel_color
Sub 減法( 源-目標(biāo)): float4 result = SrcFactor * fragment_output - DstFactor * pixel_color
RevSub 減法(目標(biāo)-源): float4 result = DstFactor * pixel_color - SrcFactor * fragment_output
Min 較小值(逐個(gè)通道比較)
Max 較大值(逐個(gè)通道比較)

常用的混合命令有:

Blend SrcAlpha OneMinusSrcAlpha // 傳統(tǒng)透明度
Blend One OneMinusSrcAlpha // 預(yù)乘透明度
Blend One One // 疊加
Blend OneMinusDstColor One // 柔和疊加
Blend DstColor Zero // 相乘——正片疊底
Blend DstColor SrcColor // 兩倍相乘

Blend 參數(shù)值說明. fragment_output 為片元產(chǎn)生的顏色,pixel_color為緩存區(qū)的顏色
Blend {code for SrcFactor} {code for DstFactor}

Code 代表的值
One float4(1.0, 1.0, 1.0, 1.0)
Zero float4(0.0, 0.0, 0.0, 0.0)
SrcColor fragment_output
SrcAlpha fragment_output.aaaa
DstColor pixel_color
DstAlpha pixel_color.aaaa
OneMinusSrcColor float4(1.0, 1.0, 1.0, 1.0) - fragment_output
OneMinusSrcAlpha float4(1.0, 1.0, 1.0, 1.0) - fragment_output.aaaa
OneMinusDstColor float4(1.0, 1.0, 1.0, 1.0) - pixel_color
OneMinusDstAlpha float4(1.0, 1.0, 1.0, 1.0) - pixel_color.aaaa

之前看過一些文章,誤以為Blend One One 最后產(chǎn)生的值也會對透明度產(chǎn)生影響,后來經(jīng)過實(shí)際測試,發(fā)現(xiàn)沒有效果,因?yàn)榘凑展?float4 result = SrcFactor * fragment_output + DstFactor * pixel_color
result是包括含透明度的,其實(shí)不然,雖然result包含透明度的值,但是最終呈現(xiàn)到屏幕后Alpha會被舍棄,而這一步是最后一步計(jì)算顏色的地方,所以O(shè)ne*fragment_output 得到的值還是原來的值,透明度沒有被改變,
如果是 Blend SrcAlpha One,那么就變成了

Blend SrcAlpha One
result=fragment_output.aaaa*fragment_output.rgba+float4(1,1,1,1)*pixel_color
result=fragment_output(a*r,a*g,a*b,a*a)+pixel_color

顏色值與Alpha相乘,顏色值被改變.

先寫到這里,有紕漏之處還望指教.
參考鏈接 https://en.wikibooks.org/wiki/Cg_Programming/Unity/Transparency

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市放钦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌操禀,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颓屑,死亡現(xiàn)場離奇詭異斤寂,居然都是意外死亡揪惦,警方通過查閱死者的電腦和手機(jī)遍搞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進(jìn)店門器腋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來溪猿,“玉大人蒂培,你說我怎么就攤上這事再愈』ご粒” “怎么了翎冲?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵媳荒,是天一觀的道長抗悍。 經(jīng)常有香客問我钳枕,道長缴渊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任衔沼,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘菩佑。我一直安慰自己,他們只是感情好凝化,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著搓劫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枪向。 梳的紋絲不亂的頭發(fā)上勤揩,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天遣疯,我揣著相機(jī)與錄音雄可,去河邊找鬼缠犀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛聪舒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播箱残,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼滔迈,長吁一口氣:“原來是場噩夢啊……” “哼被辑!你這毒婦竟也來了燎悍?” 一聲冷哼從身側(cè)響起盼理,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤谈山,失蹤者是張志新(化名)和其女友劉穎宏怔,沒想到半個(gè)月后奏路,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臊诊,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸽粉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年抓艳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了触机。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡儡首,死狀恐怖销斟,靈堂內(nèi)的尸體忽然破棺而出椒舵,到底是詐尸還是另有隱情蚂踊,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布犁钟,位于F島的核電站,受9級特大地震影響泼橘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜炬灭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望重归。 院中可真熱鬧米愿,春花似錦、人聲如沸育苟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至香椎,卻和暖如春漱竖,著一層夾襖步出監(jiān)牢的瞬間畜伐,已是汗流浹背馍惹。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工烤礁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留讼积,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓勤众,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鲤脏。 傳聞我的和親對象是個(gè)殘疾皇子吕朵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評論 2 361

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