Shader第十三講 Alpha混合

Alpha Blending,中文譯作Alpha混合
Blending就是控制透明的,處於光柵化的最後階段
我們給一個模型貼一個材質,那麼在某個點計算出來的顏色值稱爲遠,而該點之前累積的顏色值,叫做目標.
語法
Blend Off 不混合
Blend SrcFactor DstFactor SrcFator是源係數, DstFactor是目標係數
最終顏色 = (Shader計算出的點顏色值 * 源係數) + (點累積顏色 * 目標係數)

屬性 (往SrcFactor,DstFactor上填的值)
one 1
zero 0
SrcColor 源的RGB值,例如(0.5, 0.4, 1)
SrcAlpha 源的A值,例如0.6
DstColor 混合目標的RGB
DstAlpha 混合目標的A
OneMinusSrcColor (1,1,1) - SrcColor
OneMinusSrcAlpha 1 - SrcAlpha
OneMinusDstAlpha (1,1,1) - DstColor
OneMinusDstAlpha 1 - DstAlpha

Blend zero one: 僅顯示背景的RGB部分,無Alpha透明通道處理.
這裏寫圖片描述
Blend one zero 僅顯示貼圖的RGB部分,無Alpha透明通道處理,A通道爲0即本應該透明的地方也渲染出來
Blend one zero 僅顯示貼圖的RGB部分,無Alpha透明通道處理,A通道爲0即本應該透明的地方也渲染出來.

Blend one one 貼圖和背景疊加,無Alpha透明通道處理,僅僅是顏色rgb數值的疊加更趨於白色即(1,1,1)
這裏寫圖片描述

Blend SrcAlpha zero 僅僅顯示貼圖,貼圖含Alpha透明通道處理,但是貼圖中的透明部分,即下圖黑色部分沒有顏色來顯示,因爲元顏色乘以alpha值0,爲0,而混合目標的顏色乘以zero 0,也是0,所以透明部分顯示的顏色爲(0,0,0)
這裏寫圖片描述

Blend ScrAlpha OneMinusSrcAlpha
這裏寫圖片描述
最終顏色 = 源顏色 * 源透明值 + 目標顏色*(1 - 源透明值)
最常用的透明混合方式,貼圖alpha值高的部分,顯示得實,而混合的背景很淡,而alpha值高的部分,貼圖顯示的淡,而背景顯示的實
舉例:
(1) 假設貼圖有一個不透明的紅點,Color(1,0,0,1),該點背景色爲不透明藍色Color(0,0,1,1)
最終顏色 = (1,0,0)1 + (0,0,1)(1-1) = (1,0,0)
結論一: 貼圖alpha值爲1時,僅顯示貼圖,不顯示背景
(2)假設貼圖有一個透明紅色點,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值爲0時,僅顯示混合目標即背景,不顯示貼圖
但是目標alpha值爲0,即其實這個點的背景是透明的,而我們卻把它顯示出來的,就不對了
經驗:帶A通道大的貼圖中,空的地方不只A值爲0,RGB也要爲0,不然容易出錯
(3) 假設貼圖有一個半透明紅色點,Color(1,0,0,0.8),該點背景色爲不透明藍色Color(0,0,1,1)
最終顏色= (1,0,0) * 0.8 +(0,0,1)*(1-0.8) = (0.8,0.0.2) 暗紅色
而假如0.8變爲0.2時,
最終顏色 = (1,0,0) * 0.2 + (0,0,1) * (1 - 0.2) = (0.2,0,0.8) 偏藍
結論,貼圖alpha值越大,顏色越偏向貼圖,alpha值越小,顏色越偏向混合目標

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章