Posted on 2010-11-14 17:20
點(diǎn)點(diǎn)滴滴 閱讀(424)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
05 圖像基礎(chǔ)
alpha混合技術(shù)對(duì)熟悉游戲的人來(lái)說(shuō)不會(huì)陌生,這種技術(shù)在如今的游戲特效里已經(jīng)被用爛了。3D的游戲就不說(shuō)了,2D的游戲里,這種技術(shù)也是滿眼皆是。
alpha混合聽上去很神秘,實(shí)際非常簡(jiǎn)單,其作用就是要實(shí)現(xiàn)一種半透明效果。假設(shè)一種不透明東西的顏色是A,另一種透明的東西的顏色是B,那么透過(guò)B去看A,看上去的顏色C就是B和A的混合顏色,可以用這個(gè)式子來(lái)近似,設(shè)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分量。看起來(lái)這個(gè)東西這么簡(jiǎn)單,可是用它實(shí)現(xiàn)的效果絕對(duì)不簡(jiǎn)單,應(yīng)用alpha混合技術(shù),可以實(shí)現(xiàn)出最眩目的火光、煙霧、陰影、動(dòng)態(tài)光源等等一切你可以想象的出來(lái)的半透明效果。
火光、煙霧的效果是事先做好一個(gè)火或霧的圖和一個(gè)alpha通道圖(用過(guò)Photoshop的人都該知道什么是alpha通道),畫上去的時(shí)候每點(diǎn)每點(diǎn)計(jì)算,得到的就是火光掩映的效果。霧化效果在3D里還需要模糊一下,在這里就免了,本來(lái)alpha混合就有不小的計(jì)算量了,算法再不優(yōu)化再加上模糊或其它的一些什么原因,那么你就是在看幻燈片了。(關(guān)于優(yōu)化,網(wǎng)上見仁見智,我再找時(shí)候再講)。
動(dòng)態(tài)光源,聽起來(lái)高深的一塌。那我先講一下陰影,這個(gè)就簡(jiǎn)單了,以往的游戲也有陰影(象《仙劍》),不過(guò)我們把它升一下級(jí),從不透明變成半透明而已。就是把一個(gè)影子圖放在地表上面作alpha混合(而且可以簡(jiǎn)化,因?yàn)橛白拥腶lpha值可以是一定的,這樣就可以大幅提高計(jì)算速度)就OK了。
該講動(dòng)態(tài)光源了。我們把沒有光源的地方想象成一張黑幕蒙在屏幕上,沒光也就什么都看不到。那么我們就加上一個(gè)光源,相當(dāng)于在黑幕上挖了一個(gè)洞,這個(gè)洞的大小就是被照亮的范圍,現(xiàn)在我們可以看到下面的東西了。但現(xiàn)在這個(gè)效果說(shuō)是光源,倒不如說(shuō)是個(gè)窗戶,要顯得象光源,就要讓光源的中心最亮,逐漸向四周暗下去,最后到什么都看不見,這才象個(gè)光源。具體實(shí)現(xiàn)就是alpha混合啦,蒙版的顏色是黑,中心alpha值為0,完全透明,到光源的盡頭alpha值為1,完全不透明,成果就是這個(gè)樣子,象這么回事吧!光源做好了,動(dòng)態(tài)的光源就是實(shí)時(shí)生成一個(gè)動(dòng)態(tài)的alpha蒙版,然后蓋上去就行了。
不難吧!游戲里(其實(shí)也不只游戲,好多算法也是這樣)的一些技術(shù)聽起來(lái)很玄,說(shuō)通了也就是那么回事,只不過(guò)不是一下子就能想到就是了。
Diablo里面就大量應(yīng)用了alpha混合技術(shù)(至少我看上去象),那些眩目的魔法產(chǎn)生出來(lái)的半透明效果,還有亂飛的火球照亮迷宮,每個(gè)火球也就是個(gè)小的光源,一堆光源產(chǎn)生出來(lái)的蒙版(就是對(duì)應(yīng)的alpha相加,超過(guò)255就截?cái)?再蒙上去。(真正的光源應(yīng)該是這樣的:當(dāng)alpha值超過(guò)255時(shí),alpha=alpha-255,alpha是一個(gè)Byte時(shí)也就是回繞,同時(shí)該點(diǎn)蒙版的色彩變?yōu)榘咨@才是對(duì)的,不過(guò)簡(jiǎn)單起見,還是原來(lái)那樣就可以了)。