Unity3D教程寶典之Shader篇:第十三講 Alpha混合

原文地址:http://blog.sina.com.cn/s/blog_471132920101d8z5.html
Shader第十三講
Alpha混合

Alpha Blending,中文譯作Alpha混合

Blending就是控制透明的徽鼎。處于光柵化的最后階段。

這里例如我們給一個模型貼一個材質,那么在某個點計算出來顏色值稱為源音婶,而該點之前累積的顏色值棒拂,叫目標姑隅。

語法

Blend Off 不混合

Blend SrcFactor DstFactor SrcFactor是源系數(shù)写隶,DstFactor是目標系數(shù)

最終顏色 = (Shader計算出的點顏色值 * 源系數(shù))+(點累積顏色 * 目標系數(shù))

屬性(往SrcFactor,DstFactor 上填的值)

one 1

zero 0

SrcColor 源的RGB值讲仰,例如(0.5,0.4,1)

SrcAlpha 源的A值, 例如0.6

DstColor 混合目標的RGB值例如(0.5慕趴,0.4,1)

DstAlpha 混合目標的A值例如0.6

OneMinusSrcColor (1,1,1) - SrcColor

OneMinusSrcAlpha 1- SrcAlpha

OneMinusDstColor (1,1,1) - DstColor

OneMinusDstAlpha 1- DstAlpha

運算法則示例:

(注:r,g,b,a,x,y,z取值范圍為[0,1])

(r,g,b) * a = (ra , ga , b*a)

(r,g,b) * (x,y,z) = (rx , gy , b*z)

(r,g,b) + (x,y,z) = (r+x , g+y , b+z)

(r,g,b) - (x,y,z) = (r-x , g-y , b-z)

                          ** 在樹葉使用的Shader中添加Blend代碼

**

Blend zero one:

顯示背景的RGB部分,

無Alpha透明通道處理鄙陡。

Alpha混合" title="【風宇沖】Unity3D教程寶典之Shader篇:第十三講 Alpha混合" action-data="http%3A%2F%2Fs9.sinaimg.cn%2Fmw690%2F47113292g7b4f709391a8%26690" action-type="show-slide" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">

Blend one zero: **

顯示貼圖的RGB部分冕房,無Alpha透明通道處理。
**A通道為0即本應該透明的地方也渲染出來了趁矾。
Alpha混合" title="【風宇沖】Unity3D教程寶典之Shader篇:第十三講 Alpha混合" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">

Blend one one:
貼圖和背景疊加耙册,無Alpha透明通道處理。僅僅是顏色rgb數(shù)值的疊加更趨近于白色即(1愈魏,1觅玻,1)了。
Alpha混合" title="【風宇沖】Unity3D教程寶典之Shader篇:第十三講 Alpha混合" action-data="http%3A%2F%2Fs7.sinaimg.cn%2Fmw690%2F47113292gd11a65a33a96%26690" action-type="show-slide" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">

Blend SrcAlpha zero:僅僅顯示貼圖
培漏,貼圖含Alpha透明通道處理溪厘。但是貼圖中的透明部分,即下圖黑色部分沒有顏色來顯示牌柄,因為源顏色乘以alpha值0畸悬,為0;而混合目標的顏色乘以zero 0珊佣,也是0蹋宦。所以透明部分顯示的顏色為(0,0咒锻,0)
Alpha混合" title="【風宇沖】Unity3D教程寶典之Shader篇:第十三講 Alpha混合" action-data="http%3A%2F%2Fs11.sinaimg.cn%2Fmw690%2F47113292gd11a662a367a%26690" action-type="show-slide" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">



Blend SrcAlpha OneMinusSrcAlpha:
Alpha混合" title="【風宇沖】Unity3D教程寶典之Shader篇:第十三講 Alpha混合" action-data="http%3A%2F%2Fs16.sinaimg.cn%2Fmw690%2F47113292gd11aa9dbceef%26690" action-type="show-slide" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">
最終顏色 = 源顏色 * 源透明值 + 目標顏色(1 - 源透明值)
最常用的透明混合方式冷冗。貼圖alpha值高的部分,顯示得實惑艇,而混合的背景很淡蒿辙。而alpha值高的部分,貼圖顯示得淡滨巴,而背景現(xiàn)實得實思灌。
舉例:
(1)假設貼圖有一個不透明紅色點Alpha混合" title="【風宇沖】Unity3D教程寶典之Shader篇:第十三講 Alpha混合" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">, Color(1恭取,0泰偿,0,1)蜈垮,該點背景色為不透明藍色 Alpha混合" title="【風宇沖】Unity3D教程寶典之Shader篇:第十三講 Alpha混合" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">Color(0耗跛,0裕照,1,1)
最終顏色 = (1课兄,0牍氛,0)
1+(0,0烟阐,1)*(1-1) = (1搬俊,0,0)Alpha混合" title="【風宇沖】Unity3D教程寶典之Shader篇:第十三講 Alpha混合" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">
結論一:貼圖alpha值為1時蜒茄,僅顯示貼圖唉擂,不顯示背景

(2)假設貼圖有一個透明紅色點Alpha混合" title="【風宇沖】Unity3D教程寶典之Shader篇:第十三講 Alpha混合" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">, Color(1檀葛,0玩祟,0,0)屿聋,該點背景色為透明空扎,但B通道值為1,即Color(0润讥,0转锈,1,0)
最終顏色 = (1楚殿,0撮慨,0)* 0+(0,0脆粥,1)*(1-0) = (0砌溺,0,1)Alpha混合" title="【風宇沖】Unity3D教程寶典之Shader篇:第十三講 Alpha混合" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">
結論二:貼圖alpha值為0時变隔,僅顯示混合目標即背景规伐,不顯示貼圖

但是目標alpha值為0,即其實這個點的背景是透明的匣缘,而我們卻把它顯示出來了猖闪,這就不對了。
經(jīng)驗:帶A通道的貼圖中孵户,空的地方不只A值為0萧朝,RGB值也要為0岔留,不然容易出錯夏哭。

(3)假設貼圖有一個半透明紅色點Alpha混合" title="【風宇沖】Unity3D教程寶典之Shader篇:第十三講 Alpha混合" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">, Color(1献联,0竖配,0何址,0.8),該點背景色為不透明藍色Alpha混合" title="【風宇沖】Unity3D教程寶典之Shader篇:第十三講 Alpha混合" style="margin: 0px; padding: 0px; border: 0px; list-style: none;"> Color(0进胯,0用爪,1,1)
最終顏色 = (1胁镐,0偎血,0)* 0.8+(0,0盯漂,1)(1-0.8) = (0.8颇玷,0,0.2)Alpha混合" title="【風宇沖】Unity3D教程寶典之Shader篇:第十三講 Alpha混合" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">
而假如0.8變?yōu)?.2時就缆,
最終顏色 = (1帖渠,0,0)
0.2+(0竭宰,0空郊,1)*(1-0.2) = (0.2,0切揭,0.8)Alpha混合" title="【風宇沖】Unity3D教程寶典之Shader篇:第十三講 Alpha混合" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">

結論:貼圖alpha值越大狞甚,顏色越偏向貼圖;alpha值越小伴箩,顏色越偏向混合目標

Blend組合的情況就先講這么多了入愧,更多的組合需要自己去試去用,現(xiàn)在請再回過頭看看第五講的引言嗤谚,是不是有一種恍然大悟的感覺呢棺蛛?

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市巩步,隨后出現(xiàn)的幾起案子旁赊,更是在濱河造成了極大的恐慌,老刑警劉巖椅野,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件终畅,死亡現(xiàn)場離奇詭異,居然都是意外死亡竟闪,警方通過查閱死者的電腦和手機离福,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炼蛤,“玉大人妖爷,你說我怎么就攤上這事±砼螅” “怎么了絮识?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵绿聘,是天一觀的道長。 經(jīng)常有香客問我次舌,道長熄攘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任彼念,我火速辦了婚禮挪圾,結果婚禮上,老公的妹妹穿的比我還像新娘逐沙。我一直安慰自己洛史,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布酱吝。 她就那樣靜靜地躺著也殖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪务热。 梳的紋絲不亂的頭發(fā)上忆嗜,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音崎岂,去河邊找鬼捆毫。 笑死,一個胖子當著我的面吹牛冲甘,可吹牛的內(nèi)容都是我干的绩卤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼江醇,長吁一口氣:“原來是場噩夢啊……” “哼濒憋!你這毒婦竟也來了?” 一聲冷哼從身側響起陶夜,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤凛驮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后条辟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黔夭,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年羽嫡,在試婚紗的時候發(fā)現(xiàn)自己被綠了本姥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡杭棵,死狀恐怖婚惫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤辰妙,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站甫窟,受9級特大地震影響密浑,放射性物質發(fā)生泄漏。R本人自食惡果不足惜粗井,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一尔破、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浇衬,春花似錦懒构、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至醉冤,卻和暖如春秩霍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚁阳。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工铃绒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人螺捐。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓颠悬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親定血。 傳聞我的和親對象是個殘疾皇子赔癌,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

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