一種基于alpha融合的貼圖處理方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種基于alpha融合的貼圖處理方法及裝置。
【背景技術(shù)】
[0002]在現(xiàn)代游戲中,換裝是一種必不可少的游戲系統(tǒng),游戲角色的外觀能夠?qū)崟r地隨著穿著裝備的變化而變化。對于換裝系統(tǒng),常見的實現(xiàn)方式是在角色的目標(biāo)貼圖(targettexture)上為不同部位的裝備劃分各自區(qū)域。而美工人員在制作裝備的貼圖資源時,只需在該類型裝備相對應(yīng)的區(qū)域進行制作,其他區(qū)域鏤空,即可獲得某類型裝備的貼圖資源。最后在游戲過程中,如果游戲角色的裝備發(fā)生改變,只需取出當(dāng)前各部位裝備所對應(yīng)的貼圖,然后按照一定的次序進行alpha融合(Alpha透明混合處理,Alpha Blending,簡稱alpha融合),即可得到角色最終的目標(biāo)貼圖?,F(xiàn)有的alpha融合需使用圖形API(圖形應(yīng)用程序接口,Applicat1n Programming Interface)軟件將需要進行alpha融合的貼圖以ARGB8888格式從硬盤加載至內(nèi)存后,對各個貼圖逐個像素進行以下的計算:Colortarget = Bsrc^C0 IΟΓ8γο+(l-asrc;)*C0l0rdst,得到目標(biāo)貼圖對應(yīng)位置的像素最終顏色。例如,需要得到一張如圖7所示的角色目標(biāo)貼圖,只需要按照次序依次對圖1到圖6中每個像素的顏色進行alpha融合即可得到需要的目標(biāo)貼圖。
[0003]另外,隨著現(xiàn)代游戲技術(shù)和美術(shù)技術(shù)的發(fā)展,游戲中的貼圖資源所占的空間越來越大。為了保留美術(shù)資源的精度,同時減少存儲體積,現(xiàn)有技術(shù)中使用DXT5格式對貼圖資源進行壓縮。DXT5格式是一種圖像壓縮技術(shù),它以4*4為單位將原圖像的像素劃分為塊,每16個像素點按一定的規(guī)則進行壓縮,形成DXT5像素塊。DXT5格式的壓縮方法具體為:先求出16個像素點的最大最小顏色值(color_0和color_l),在使用線性插值獲得另外兩個插值顏色(color_2和color_3),然后為每個像素點分配兩位字節(jié)來建立一個顏色索引表,求出與原像素點最接近的插值顏色,將插值顏色的索引值填入索引表即完成顏色數(shù)據(jù)的壓縮過程。而alpha值的壓縮與之類似,只是由alpha_0和alpha_l插值出另外6個插值來組成一個序列,而且alpha索引表中每個像素點對應(yīng)的位數(shù)是3。解壓的方式與壓縮的方式為相互逆過程,在此不再贅述,詳細可參見圖8和圖9的壓縮格式示意圖。
[0004]相比于傳統(tǒng)的ARGB8888格式的貼圖,DXT5格式的壓縮比可達到I: 4,而且圖形API軟件對DXT5格式的支持也比較充分,因此大部分的貼圖資源最終都會輸出成DXT5格式供游戲使用。
【發(fā)明內(nèi)容】
[0005]發(fā)明人在實施本發(fā)明的過程中,發(fā)現(xiàn)上述現(xiàn)有的登錄方法存在如下缺點:如果貼圖資源是以DXT5格式輸出,在圖形API以ARGB888格式從硬盤加載貼圖的時候,就需要進行一次DXT5到ARGB8888的轉(zhuǎn)換,并且對圖像中的所有像素進行一次alpha融合的融合計算后,再將ARGB8888格式壓縮回DXT5格式供游戲使用,從而造成效率低下。
[0006]為了克服現(xiàn)有技術(shù)存在的缺點,本發(fā)明實施例提供一種基于alpha融合的貼圖處理方法及裝置,能提高DXT5格式的貼圖在alpha融合時的融合效率。
[0007]第一方面,本發(fā)明實施例提供一種基于alpha融合的貼圖處理方法,包括:
[0008]獲取用于與目標(biāo)貼圖進行alpha融合的源貼圖文件;其中,所述源貼圖文件包含源貼圖中的每一個像素塊的DXT5格式數(shù)據(jù)和位置信息;所述DXT5格式數(shù)據(jù)包含所述像素塊的每一個像素點的顏色數(shù)據(jù)和alpha值;
[0009]根據(jù)每一個像素塊的位置信息,依次讀取每一個像素塊的DXT5格式數(shù)據(jù),對所述目標(biāo)貼圖中的對應(yīng)位置進行貼圖處理,包括:
[0010]當(dāng)所讀取的DXT5格式數(shù)據(jù)中的每一個像素點的alpha值均為O時,使所述目標(biāo)貼圖中的對應(yīng)位置的顏色數(shù)據(jù)保持不變;
[0011]當(dāng)所讀取的DXT5格式數(shù)據(jù)中的每一個像素點的alpha值均為I時,將所述DXT5格式數(shù)據(jù)中的每一個像素點的顏色數(shù)據(jù)拷貝至所述目標(biāo)貼圖中的對應(yīng)位置;
[0012]當(dāng)所讀取的DXT5格式數(shù)據(jù)中的每一個像素點的alpha值不全為O或不全為I時,將所述DXT5格式數(shù)據(jù)和所述目標(biāo)貼圖中的對應(yīng)位置的顏色數(shù)據(jù),分別轉(zhuǎn)換為ARGB8888格式的數(shù)據(jù),并將轉(zhuǎn)換后的兩個數(shù)據(jù)進行alpha融合,再將融合后的顏色數(shù)據(jù)壓縮回DXT5格式的數(shù)據(jù),輸出到所述目標(biāo)貼圖中的對應(yīng)位置;
[0013]當(dāng)所述源貼圖文件中的每一個像素塊均被讀取且處理完畢后,獲得alpha融合后的目標(biāo)貼圖。
[0014]第二方面,本發(fā)明實施例提供了一種基于alpha融合的貼圖處理方法,包括:
[0015]獲取用于與目標(biāo)貼圖進行alpha融合的中間貼圖文件;其中,所述中間貼圖文件記載了源貼圖中的每一個像素塊的位置信息、屬性和顏色數(shù)據(jù);
[0016]根據(jù)所述中間貼圖文件中的每一個像素塊的位置信息,依次讀取所述每一個像素塊的屬性和顏色數(shù)據(jù),對所述目標(biāo)貼圖中的對應(yīng)位置進行貼圖處理,包括:
[0017]當(dāng)所讀取的像素塊的屬性為鏤空像素塊時,使所述目標(biāo)貼圖中的對應(yīng)位置的顏色數(shù)據(jù)保持不變;其中,所述鏤空像素塊的顏色數(shù)據(jù)為空;
[0018]當(dāng)所讀取的像素塊的屬性為實心像素塊時,將所述像素塊的顏色數(shù)據(jù)拷貝至所述目標(biāo)貼圖中的對應(yīng)位置;其中,所述實心像素塊的顏色數(shù)據(jù)為DXT5格式的數(shù)據(jù);
[0019]當(dāng)所讀取的像素塊的屬性為待融合像素塊時,將所述目標(biāo)貼圖中的對應(yīng)位置的顏色數(shù)據(jù)轉(zhuǎn)換為ARGB8888格式的數(shù)據(jù),并與所述待融合像素塊的顏色數(shù)據(jù)進行alpha融合,將融合后的顏色數(shù)據(jù)壓縮回DXT5格式的數(shù)據(jù),再輸出到所述目標(biāo)貼圖中的對應(yīng)位置;其中,所述待融合像素塊的顏色數(shù)據(jù)為ARGB8888格式的數(shù)據(jù);
[0020]當(dāng)所述中間貼圖文件中的每一個像素塊均被讀取且處理完畢后,獲得alpha融合后的目標(biāo)貼圖。
[0021]進一步的,在所述獲取用于與目標(biāo)貼圖進行alpha融合的中間貼圖文件之前,還包括:
[0022]獲取用于與所述目標(biāo)貼圖進行alpha融合的源貼圖文件;其中,所述源貼圖文件包含所述源貼圖中的每一個像素塊的DXT5格式數(shù)據(jù)和位置信息;所述DXT5格式數(shù)據(jù)包含所述像素塊的每一個像素點的顏色數(shù)據(jù)和a Ipha值;
[0023]創(chuàng)建一個中間貼圖文件,根據(jù)所述源貼圖文件中每一個像素塊的位置信息,依次讀取每一個像素塊的DXT5格式數(shù)據(jù)進行轉(zhuǎn)換,并寫入到所述中間貼圖文件中,包括:
[0024]當(dāng)所讀取的DXT5格式數(shù)據(jù)中的每一個像素點的alpha值均為O時,將所述DXT5格式數(shù)據(jù)所對應(yīng)的像素塊的屬性確定為鏤空像素塊,并將所述鏤空像素塊的顏色數(shù)據(jù)配置為空,再將所述鏤空像素塊的位置信息、屬性和顏色數(shù)據(jù)寫入到所述中間貼圖文件;
[0025]當(dāng)所讀取的DXT5格式數(shù)據(jù)中的每一個像素點的alpha值均為I時,將所述DXT5格式數(shù)據(jù)所對應(yīng)的像素塊的屬性確定為實心像素塊,并將所述DXT5格式數(shù)據(jù)中的顏色數(shù)據(jù)提取出來,直接作為所述實心像素塊的顏色數(shù)據(jù),再將所述實心像素塊的位置信息、屬性和顏色數(shù)據(jù)寫入到所述中間貼圖文件;
[0026]當(dāng)所讀取的DXT5格式數(shù)據(jù)中的每一個像素點的alpha值不全為O或不全為I時,將所述DXT5格式數(shù)據(jù)所對應(yīng)的像素塊的屬性確定為待融合像素塊,并將所述DXT5格式數(shù)據(jù)中的顏色數(shù)據(jù)提取出來,轉(zhuǎn)換為ARGB8888格式的數(shù)據(jù)后,再作為所述待融合像素塊的顏色數(shù)據(jù),最后將所述待融合像素塊的位置信息、屬性和顏色數(shù)據(jù)寫入到所述中間貼圖文件;
[0027]對所述源貼圖文件的每一個像素塊進行轉(zhuǎn)換后,獲得記載了所述源貼圖中的每一個像素塊的位置信息、屬性和顏色數(shù)據(jù)的中間貼圖文件。
[0028]進一步的,在所述獲取用于與目標(biāo)貼圖進行alpha融合的中間貼圖文件之前,還包括:
[0029]獲取用于與所述目標(biāo)貼圖進行alpha融合的源貼圖文件;其中,所述源貼圖文件包含所述源貼圖中的每一個像素塊的DXT5格式數(shù)據(jù)和位置信息;所述DXT5格式數(shù)據(jù)包含所述像素塊的每一個像素點的顏色數(shù)據(jù)和a Ipha值;
[0030]創(chuàng)建一個中間貼圖文件,根據(jù)所述源貼圖文件中每一個像素塊的位置信息,依次讀取每一個像素塊的DXT5格式數(shù)據(jù)進行轉(zhuǎn)換,并寫入到所述中間貼圖文件中,包括:
[0031]當(dāng)所讀取的DXT5格式數(shù)據(jù)中的每一個像素點的alpha值均為O時,將所述DXT5格式數(shù)據(jù)所對應(yīng)的第i個像素塊的屬性確定為鏤空像素塊,并記錄所述第i個像素塊的位置信息;若下一個讀取的DXT5格式數(shù)據(jù)所對應(yīng)的像素塊不為鏤空像素塊,則將所述第i個像素塊的顏色數(shù)據(jù)配置為空,再將所述第i個像素塊的位置信息、屬性和顏色數(shù)據(jù)寫入到所述中間貼圖文件;若后續(xù)讀取的N個連續(xù)的DXT5格式數(shù)據(jù)所對應(yīng)的像素塊均被確定為鏤空像素塊,則將所述第i個像素塊及后續(xù)的N個連續(xù)像素塊的顏色數(shù)據(jù)配置為空,再將所述第i個像素塊的位置信息、后續(xù)連續(xù)鏤空像素塊的個數(shù)N、屬性及顏色數(shù)據(jù)寫入到所述中間貼圖文件;i> 1,N> I;
[0032]當(dāng)所讀取的DXT5格式數(shù)據(jù)中的每一個像素點的alpha值均為I時,將所述DXT5格式數(shù)據(jù)所對應(yīng)的像素塊的屬性確定為實心像素塊,并將所述DXT5格式數(shù)據(jù)中的顏色數(shù)據(jù)提取出來,直接作為所述實心像素塊的顏色數(shù)據(jù),再將所述實心像素塊的位置信息、屬性和顏色數(shù)據(jù)寫入到所述中間貼圖文件;
[0033]當(dāng)所讀取的DXT5格式數(shù)據(jù)中的每一個像素點的alpha值不全為O或不全為I時,將所述DXT5格式數(shù)據(jù)所對應(yīng)的像素塊的屬性確定為待融合像素塊,并將所述DXT5格式數(shù)據(jù)中的顏色數(shù)據(jù)提取出來,轉(zhuǎn)換為ARGB8888格式數(shù)據(jù)后,再作為所述待融合像素塊的顏色數(shù)據(jù),最后將所述待融合像素塊的位置信息、屬性和顏色數(shù)據(jù)寫入到所述中間貼圖文件;
[0034]對所述源貼圖文件的每一個像素塊進行轉(zhuǎn)換后,獲得記載了所述源貼圖中的每一個像素塊的位置信息、屬性和顏色數(shù)據(jù)的中間貼圖文件。
[0035]進一步的,所述中間貼圖文件中記載的像素塊的位置信息,為所述像素塊相對于所述源貼圖中的第一個像素塊的索引偏移。
[0036]第三方面,本發(fā)明提供了一種貼圖處理裝置,包括:
[0037]第一獲取單元,用于獲取用于與目標(biāo)貼圖進行alpha融合的源貼圖文件;其中,所述源貼圖文件包含源貼圖中的每一個像素塊的DXT5格式數(shù)據(jù)和位置信息;所述DXT5格式數(shù)據(jù)包含所述像素塊的每一個像素點的顏色數(shù)據(jù)和alpha值;
[0038]第一貼圖處理單元,用于根據(jù)每一個像素塊的位置信息,依次讀取每一個像素塊的DXT5格式數(shù)據(jù),對所述目標(biāo)貼圖中的對應(yīng)位置進行貼圖處理;
[0039]和,第一輸出單元,用于當(dāng)所述源貼圖文件中的每一個像素塊均被讀取且處理完畢后,輸出alpha融合后的目標(biāo)貼圖;
[0040]其中,所述第一貼圖處理單元包括:第一處理子單元、第二處理子單元和第三處理子單元;
[0041]所述第一處理子單元,用于當(dāng)所讀取的DXT5格式數(shù)據(jù)中的每一個像素點的alpha值均為O時,使所述目標(biāo)貼圖中的對應(yīng)位置的顏色數(shù)據(jù)保持不變;
[0042]第二處理子單元,用于當(dāng)所讀取的DXT5格式數(shù)據(jù)中的每一個像素點的alpha值均為I時,將所述DXT5格式數(shù)據(jù)中的每一個像素點的顏色數(shù)據(jù)拷貝至所述目標(biāo)貼圖中的對應(yīng)位置;
[0043]第三處理子單元,用于當(dāng)所讀取的DXT