alpha混合

alpha混合技術對熟悉遊戲的人來說不會陌生,這種技術在如今的遊戲特效里已經被用爛了。3D的遊戲就不說了,2D的遊戲裡,這種技術也是滿眼皆是。

簡介

alpha混合聽上去很神秘,實際非常簡單,其作用就是要實現一種半透明效果。假設一種不透明東西的顏色是A,另一種透明的東西的顏色是B,那么透過B去看A,看上去的顏色C就是B和A的混合顏色,可以用這個式子來近似,設B物體的透明度為alpha(取值為0-1,0為完全透明,1為完全不透明)

R(C)=alpha*R(B)+(1-alpha)*R(A)

G(C)=alpha*G(B)+(1-alpha)*G(A)

B(C)=alpha*B(B)+(1-alpha)*B(A)

R(x)、G(x)、B(x)分別指顏色x的RGB分量。看起來這個東西這么簡單,可是用它實現的效果絕對不簡單,套用alpha混合技術,可以實現出最眩目的火光、煙霧、陰影、動態光源等等一切你可以想像的出來的半透明效果。

套用

火光、煙霧的效果是事先做好一個火或霧的圖和一個alpha通道圖(用過Photoshop的人都該知道什麼是alpha通道),畫上去的時候每點每點計算,得到的就是火光掩映的效果。霧化效果在3D里還需要模糊一下,在這裡就免了,本來alpha混合就有不小的計算量了,算法再不最佳化再加上模糊或其它的一些什麼原因,那么你就是在看幻燈片了。(關於最佳化,網上見仁見智,我再找時候再講)。

動態光源,聽起來高深的一塌。那我先講一下陰影,這個就簡單了,以往的遊戲也有陰影(像《仙劍》),不過我們把它升一下級,從不透明變成半透明而已。就是把一個影子圖放在地表上面作alpha混合(而且可以簡化,因為影子的alpha值可以是一定的,這樣就可以大幅提高計算速度)就OK了。

該講動態光源了。我們把沒有光源的地方想像成一張黑幕蒙在螢幕上,沒光也就什麼都看不到。那么我們就加上一個光源,相當於在黑幕上挖了一個洞,這個洞的大小就是被照亮的範圍,現在我們可以看到下面的東西了。但現在這個效果說是光源,倒不如說是個窗戶,要顯得象光源,就要讓光源的中心最亮,逐漸向四周暗下去,最後到什麼都看不見,這才象個光源。具體實現就是alpha混合啦,蒙版的顏色是黑,中心alpha值為0,完全透明,到光源的盡頭alpha值為1,完全不透明,成果就是這個樣子,象這么回事吧!光源做好了,動態的光源就是實時生成一個動態的alpha蒙版,然後蓋上去就行了。

不難吧!遊戲裡(其實也不只遊戲,好多算法也是這樣)的一些技術聽起來很玄,說通了也就是那么回事,只不過不是一下子就能想到就是了。

Diablo裡面就大量套用了alpha混合技術(至少我看上去象),那些眩目的魔法產生出來的半透明效果,還有亂飛的火球照亮迷宮,每個火球也就是個小的光源,一堆光源產生出來的蒙版(就是對應的alpha相加,超過255就截斷)再蒙上去。(真正的光源應該是這樣的:當alpha值超過255時,alpha=alpha-255,alpha是一個Byte時也就是迴繞,同時該點蒙版的色彩變為白色,這才是對的,不過簡單起見,還是原來那樣就可以了)。

Alpha 混合線條和填充

在GDI+中,顏色為32位值:alpha、紅色、綠色和藍色各8位。alpha值指示顏色的透明度,即顏色與背景色的混合程度。Alpha值的範圍是0到255,其中0表示完全透明的顏色,255表示完全不透明的顏色。

Alpha混合是源顏色數據和背景顏色數據之間逐個像素的混合。給定源顏色的三個分量(紅色、綠色和藍色)都按照以下公式與背景顏色的相應分量混合:

顯示顏色=源顏色×alpha/255+背景顏色×(255-alpha)/255

例如,假設源顏色的紅色分量是150,背景顏色的紅色分量是100。如果alpha值是200,則結果顏色的紅色分量按以下公式計算:

150×200/255+100×(255–200)/255=139

相關詞條

相關搜尋

熱門詞條

聯絡我們