專利名稱::執行透明度向覆蓋率轉換的方法
技術領域:
:本發明相關于一種執行透明度向覆蓋率轉換的方法,尤其指一種利用一像素著色器(pixelshader)的特定指令以執行透明度向覆蓋率轉換的方法。
背景技術:
:3D立體電腦繪圖的技術主要專注于如何產生或表示一個立體物件的平面圖像以顯示或展示于一顯示裝置上。該物件可為一種筒單的幾何圖元(geometryprimitive),例如點、直線片,殳、三角形、或多邊形。經由用一系列的連接平面多邊形(planarpolygons),可在顯示裝置上表示較復雜的物件,例如以一系列的連接平面三角形,可展示一個復雜物件。而且所有幾何圖元最后都可用一個頂點(vertex)或一組頂點描述,例如用定義多邊形線段片段終點或中心的座標(x,y,z)來描述。為產生一個可投射在電腦屏幕或其它顯示裝置上,代表立體圖元的平面圖像的數據組,該圖元的多數個頂點會經一系列運算,或是在圖形表示流水線(graphics-renderingpipeline)中經過多級處理。一般的流水線只是一系列串"^妻的處理單元或處理級(stages),其中前一級的輸出^^皮當成下一級的輸入。在圖形處理器的環境中,舉例而言,這些處理級包含每個頂點運算(per-vertexoperations)、圖元組合運算(primitiveassemblyoperations)、像素運算(pixeloperations)、質地組合運算(textureassemblyoperations)、描畫運算(rasterizationoperations)及片段運算(fragmentoperations)等。在典型的圖形顯示系統中,圖像數據庫(imagedatabase),如命令列表,可存儲在場景(scene)中的各物件的描述。其中,該多個物件是以覆蓋該物件表面的多數個小多邊形來描述,且其方法與多數個貼磚(tiles)覆蓋墻或其它表面的方式相同。每個多邊形都是以頂點座標(在"Model"座標系統中的X,Y,Z)列表、材料表面特性規格(如色彩、質地、光澤等),及到每個頂點表面的法向向量(normalvectors)所描述。對具有復雜曲面的立體物件而言,一般而言該多個多邊形必須為三角形或四邊形,且后者亦可再分解成多數個三角形對。轉換引擎(transformationengine)會才艮據使用者所輸入的選定觀看角度,轉換物件座標。此外,使用者亦可指定觀景(fieldofview)、產生的圖像尺寸及三維視景體(viewingvolume)后端,以藉此包含或消除想要的背景。一旦已選定觀看區(viewingarea),修剪邏輯電路(clippinglogic)即會消除落在觀看區的外的多邊形,及^f'f剪部分在觀看區之內且部分在觀看區的外的多邊形。這些經修剪的多邊形以對應于觀看邊緣的新邊緣,對應于落在觀看區之內的多邊形部分。多邊形的頂點會被傳送到下一個特定座標的處理級,其中該座標的X、Y座標對于觀看屏幕(viewingscreen),且該座標的Z座標對應于每個頂點的深度。在一個典型的系統中,接下來會考慮光源而施加照明模型。具有個別色彩值(colorvalue)的多邊形,接下來會被傳送至一個點陣轉化器(rasterizer)。對每個多邊形而言,點陣轉化器會決定那些像素位置會被多邊形覆蓋,并嘗試將相關色彩值與深度,寫入幀緩沖器(framebuffer)。點陣轉化器會將正接受處理的多邊形的深度值,與已入幀緩沖器的像素深度值相比較。如果新多邊形的像素深度值較低,則代表其位于寫入幀緩沖器的多邊形之前,因為新多邊形會讓先前處理過并已寫入幀緩沖器的多邊形顯得更加模糊,所以接下來其值會取代在幀緩沖器中的數值。這種處理會持續進行,直到所有多邊形多都,皮會陣轉化過為止。此時,-現頻控制器(videocontroller)會以一次一個光4冊(raster)掃描行(scanningline)的方式,在顯示器上顯示幀緩沖器的內容。執-f亍實時表示(real-timerendering)的一般方法,是以位于多邊形之內或位于多邊形的外的像素顯示多邊形。其所產生的用來定義多形的邊緣,會在靜態顯示屏幕(staticdisplay)上,表現出缺口狀(jaggedlook),及在動態顯示屏幕(animateddisplay)上,表現出爬4亍狀(crawlinglook),上述產生的問題稱為鋸齒效應(aliasing),而用來降低或消除該問題的方法,稱為抗鋸齒效應(anti-aliasing)技術。以屏幕為基礎的抗鋸齒效應方法因其只用到流水線的輸出取樣,所以不需要得知正在表示的物件知識。抗鋸齒效應方法常使用一種稱為多取樣抗鋸齒效應(Multi-SampleAnti-Aliasing,MSAA)的線性抗鋸齒效應4支術,該技術在一單一處理中,會對每個像素使用一個以上的取樣。每個像素的取樣或子像素(sub-pixel)的個數,一皮稱為取樣率(samplingrate),當取樣率增加時,相關的存儲器流通量也會相對增加。請參考圖3,圖3為公知電腦繪圖系統中繪圖流水線的特定模組的功能方塊圖。繪圖流水線的模組會因系統需求而變,且可以多種方式實現。繪圖的頂點數據被傳送到一頂點著色器(vertexshader)12。頂點著色器12可在從命令列表中所接收的繪圖數據上,執行各種轉換。其中,該數據可從世界座標(Worldcoordinates)轉換成才莫型7見點座標(ModelViewcoordinates),再轉換成投射座標(Projectioncoordinates),最后再轉換成屏幕座標(Screencoordinates)。頂點著色器12所執行的功能處理為本領域技術人員所熟知,因此在此不再贅述。接下來,繪圖數據會再被傳送至一點陣轉化器(rasterizer)14。而圖元相關的像素信息,會被傳送至像素著色器16,像素著色器16會決定已表示且被判定較先前存儲像素更接近觀看者的圖元之內的每個像素的色彩信息。像素表示(pixelrendering)18會在位于圖元之內的每個像素上,執行一個深度測試。所存儲的深度值可提供一指定像素位置上先前表示圖元的深度。如果目前的深度值較存儲的深度值接近觀看者的眼睛,則目前的深度值會取代所存儲的深度值,而且目前的繪圖信息(如色彩)會取代在對應幀緩沖器中由像素著色器16所決定的像素位置的色彩信息。如果目前的深度值并非較所存儲的深度值更為接近觀看者的眼睛,則因為先前表示的像素確實是在目前像素之前,所以幀緩沖器及深度緩沖兩者的內容都不會被取代。
發明內容本發明的目的的一提供一種執行透明度向覆蓋率轉換的方法,以加速透明度向覆蓋率轉換。本發明提供一種執行透明度向覆蓋率轉換的方法,包含一像素著色器將一像素的透明度欄的數據與該像素的多個子取樣的閾值進行比較以產生多個覆蓋率掩模;將該多個覆蓋率掩模存儲于該像素的透明度欄的多個最低有效位中;及根據存儲于該像素的透明度欄的該多個覆蓋率掩模,更新該像素的多個子取樣的數據。本發明還提供一種執行透明度向覆蓋率轉換的方法,包含輸入一指令以觸發一像素著色器將一像素的透明度欄的數據與該像素的多個子取樣的多個閾值進行比較以產生多個覆蓋率掩模;及根據存儲于該像素的透明度欄的多個覆蓋率掩模,更新該子取樣的數據。圖1為公知電腦繪圖系統中繪圖流水線的特定模組的功能方塊圖。圖2為執行透明度向覆蓋率轉換的方法的示意圖。圖3為透明度欄的示意圖。圖4為執行透明度向覆蓋率轉換的方法的流程圖。圖5為本發明執行透明度向覆蓋率轉換的方法的第一實施例的示意圖。圖6為使用抖顫表執行透明度向覆蓋率轉換的方法的示意圖。圖7為本發明執行透明度向覆蓋率轉換的方法的第二實施例的示意圖。主要元件符號說明12頂點著色器14點陣轉化器16像素著色器18像素繪示具體實施例方式請參考圖2,圖2為執行透明度向覆蓋率(alpha-to-coverage)轉換的方法的示意圖。透明度向覆蓋率轉換是一種不需要將物件排序而可描繪物件的邊緣透明度及物件之外掩蔽(mask)的方法。執行透明度向覆蓋率轉換時,一像素的透明度欄被轉換成對應的覆蓋率,以對應n倍的多重取樣反鋸齒(MSAA)中n個子取樣(sub-sample)的n位而形成覆蓋率掩才莫(coveragemask),并且將對應比率的數量設定為1。以4倍的多重取樣反鋸齒為例,透明度欄為0時覆蓋率掩模為OOOOb,透明度欄為1時覆蓋率掩模為1111b,而0至1之間的值就轉換為對應的覆蓋率掩沖莫。覆蓋率掩模和該像素對應的各子取樣的深度測試的結果,產生有效位(validMt),再利用與門運算,以對應的覆蓋率掩模將有效的子取樣留下。如此,造成以覆蓋率對應的遞色(dithering)效果,所以在使用多重取樣反鋸齒處理圖形后,圖形就和背景產生混色(blend)效果了。請參考圖3,圖3為透明度欄的示意圖。應用程序的透明度欄為oO.w,并且應用程序可通過設定一旗標enA2C來開啟透明度向覆蓋率轉換的功能。透明度欄為32位的浮點數,在啟動透明度向覆蓋率轉換的功能后,透明度欄會被設定為覆蓋率的透明度oc,精確度的要求很低。因此,在本發明實施例中,利用透明度欄的n個最低有效位(leastsignificantbit,LSB)來存儲覆蓋率掩模。此外,會用到透明度欄的圖形處理程序還包含透明度測試(alpha-test,AT)及透明度混色(alphablend),當旗標enA2C被設定為0時,透明度oc的數據就是透明度欄中的32位的浮點數。當旗標enA2C被設定為1時,透明度欄的n個最低有效位就被設定為0,而透明度a的數據還是由透明度欄中得到。如此,覆蓋率掩模就可以被編碼在透明度欄的n個最低有效位上,而不需使用輸出寄存器。請參考圖4及圖5,圖4為執行透明度向覆蓋率轉換的方法的流程圖,圖5為本發明執行透明度向覆蓋率轉換的方法的第一實施例的示意圖。透明度向覆蓋率轉換的方法主要是將透明度欄中的透明度和對應多重取樣反鋸齒的n個子取樣的閾值(threshold)分別比4交,以得到n位的覆蓋率掩模。透明度向覆蓋率轉換的方法包含下列四個步驟。步驟110:用像素著色器原有的It(小于),le(小于等于),gt(大于)或ge(大于等于)等比較指令,將一像素輸出的最后顏色中的透明度欄(oO.w),和4個子取樣閾值進行比較,將比較結果放于4欄中;步驟120:根據4欄中比較結果,用move(有條件地搬移)指令,分別決定覆蓋率掩模中的4個位,4個位還是分別被存儲于4欄中;步驟130:將透明度欄(oO.w)中最后4個最低有效位更新為G,利用一個"與"(and)指令來掩蔽最低有效位;步驟140:匯集4個位于透明度欄(oO.w)中的覆蓋率掩模。步驟110至140并非絕對循序的,如圖4所示。步驟IIO、120是因為比較指令只能輸出真/假(true/false)的二元結果,若結果為真則結果欄所有的位全為1,若結果為假則結果欄所有的位全為0,所以需要多一個指令將比較結果轉為覆蓋率掩模中的對應位。步驟130、140是為了將覆蓋率掩模編碼入透明度欄(oO.w)。以4倍的多重取樣反鋸齒為例,若以像素著色器原有的指令集來處理上述4個步驟,至少需要7道指令,因此在本發明實施例中,以1道新增的指令a2c處理上述4個步驟,該新增的指令可以完全作用于透明度欄(oO.w),而不必指定來源/結果寄存器,但若加入適當的來源/結果寄存器,就可以增加軟件轉換像素著色器指令的靈活性,例如當oO.w由一個單獨mov(搬移)指令輸出時,可直接以a2c取代而不用增加指令。根據本發明實施例,透明度向覆蓋率轉換的4個步驟被綜合為一個a2c指令,豸斤增的a2c指令的才各式為a2cdest[.mask],src0[.swizzle],srcl[.swizzle],用于像素著色器中,a2c指令的作用為分別比較來源寄存器和對應多重取樣反鋸齒的子取樣的4個閾值,并將產生的覆蓋率掩模存儲于結果寄存器的4個最低有效位(bit3-bit0)。舉例來說,scrl的4欄和對應多重取樣反鋸齒的子取樣的4個閾值,例如利用lt指令比較時,4個閾值分別為0.125、0.625、0.875及0.375,小于則將輸出寄存器對應的最低有效位設為1,否則設為0,其它位則由src0中對應的位直接搬入。利用a2c指令可和原有的比較指令共用硬件,只需增加指定輸出結果的硬件,而來源/結果寄存器的欄位都可使用原有的硬件,不會增加太多硬件成本,卻可大大提高處理的效率。請參考圖6,圖6為使用抖顫表執行透明度向覆蓋率轉換的方法的示意圖。為了達到更好的效果,透明度向覆蓋率轉換的遞色還需要進一步的擾動(disturbing),才能避免產生太一致的圖案(pattern)。抖顫的方法可以利用各種亂數或屏幕位置,目前常用屏幕位置抖顫的方法,比較能控制圖案的效果。同樣以4倍的多重取樣反鋸齒為例,根據像素的屏幕位置,循環性地查詢一8x8的抖顫表(dithertable),找出一介于+/-0.5的亂數,透明度欄加上該亂數后,再和覆蓋率掩模中各位的閾值分別比較,就可得到4位的覆蓋率掩模。接著,將覆蓋率掩模和該像素對應的各子取樣的深度測試結果做與門運算,可達到質量較好的透明度向覆蓋率轉換。請參考圖7,圖7為本發明執行透明度向覆蓋率轉換的方法的第二實施例的示意圖。圖6中產生的抖顫表可存儲于一新增的材質(texture)或定值(constant)中,利用讀取(Id)指令讀取材質,或用索引(index)讀取定值以得到亂數,并加入透明度欄中形成抖顫,再用a2c指令得到覆蓋率掩模。增加的抖顫的方法包含4個步驟,可用原有的4個像素著色器的指令完成。當抖顫表存儲于新增的材質中時,步驟如下步驟210:將屏幕二維位置,由浮點數轉為整數,需要一個轉換指令ftoir,步驟220:將步驟210得到的二維整數,以一個"與"(and)指令來掩蔽出查抖顫表需要的index,如8x8的抖顫表,就掩蔽3個LSB。此步驟也可用udiv指令的余數(remainder)功能達到;步驟230:以步驟2掩蔽出的座標讀取抖顫表。需要一個材質讀取(ld)指令;步驟240:將步驟3讀出的結果,加入透明度欄形成抖顫,需要一個"加"(add)指令。當抖顫表存儲于新增的定值中時,因為定值只能以一維座標索引(index),則步驟230及步驟240分別改為步驟330及步驟340。步驟330:以步驟220掩蔽出的二維座標,以一個乘加(mad)指令得出抖顫表的定值索引;步驟340:以步驟330求出的索引,索引出定值加入透明度欄形成抖顫,需要一個加(add)指令。以上兩種方法均可用原有的4個像素著色器的指令完成,最后再用a2c指令得到覆蓋率掩模,即可實作畫質較好的透明度向覆蓋率轉換的方法。本發明實施例以4倍的多重取樣反鋸齒處理透明度向覆蓋率轉換為例子,然而并非限制本發明的范籌,2倍的多重取樣反鋸齒及1倍的多重取樣反鋸齒(即無多重取樣反鋸齒)也可完全適用。此外,當執行大于4倍的多重取樣反鋸齒時,因為a2c指令只能平行地比較4個對應多重取樣反鋸齒的子取樣的閾值,也只能將覆蓋率掩模編入4個最低有效位中。因此,上述的a2c指令可以一般化為一群a2c-m的指令來處理。例如處理4倍的多重取樣反鋸齒的a2c指令即a2c—1,處理8倍的多重取樣反鋸齒即需要由a2c_l及a2c-2,處理16倍的多重取樣反鋸齒即需要由a2c-l、a2c—2、a2c—3及a2c一4。每個a2c-m指令負責分別比較對應多重取樣反鋸齒的子取樣的4個閾值,將產生的覆蓋率掩模存儲于結果寄存器的bit(4m-l)-bit(4m-4)的4位。綜上所述,本發明利用像素著色器來處理執行透明度向覆蓋率轉換的方法,可增加效率,此外將該像素的覆蓋率掩模存儲于透明度欄的最低有效位,可節省成本。像素著色器將該一像素的透明度欄的數據與該像素的多個子取樣的閾值進行比較以產生多個覆蓋率掩模,并將該多個覆蓋率掩模存儲于該像素的透明度欄的多個最低有效位中,最后根據存儲于該像素的透明度欄的該多個覆蓋率掩模,更新該像素的多個子取樣的數據。本發明執行透明度向覆蓋率轉換的方法可使用軟件或硬件來實作,用軟件操作時,可利用單獨的工具程序,或是成為程序載入程序(ProgramLoader)或裝置驅動程序(DeviceDriver)的一部份,或附加于編輯器(Compiler)。用硬件操作時,于像素著色器的指令提取(Fetch)或解碼(Decode)之前,內含于圖形處理器或像素著色器中。以上所述僅為本發明的較佳實施例,凡依本發明權利要求所進行的等效變化與修改,皆應屬本發明的涵蓋范圍。權利要求1.一種執行透明度向覆蓋率轉換的方法,包含一像素著色器將一像素的透明度欄的數據與該像素的多個子取樣的多個閾值進行比較以產生多個覆蓋率掩模;將該多個覆蓋率掩模存儲于該像素的透明度欄的多個最低有效位中;及根據存儲于該像素的透明度欄的該多個覆蓋率掩模,更新該像素的多個子取樣的數據。2.如權利要求l所述的方法,其中該像素著色器將該像素的透明度欄的數據與該像素的多個子取樣的多個閾值進行比較以產生多個覆蓋率掩模包含比較該像素的透明度欄的數據與該像素的多個子取樣的多個閾值,并將一比較結果存儲于一寄存器中;及根據該比較結果產生該多個覆蓋率掩模,并將該多個覆蓋率掩模存儲于該寄存器中。3.如權利要求l所述的方法,還包含由該寄存器中存取該多個覆蓋率掩模。4.如權利要求l所述的方法,其中該像素著色器將該像素的透明度欄的數據與該像素的多個子取樣的多個閾值進行比較,以產生多個覆蓋率掩模,該像素著色器將該像素的透明度欄的數據與該像素的四個子取樣的四個閾值進行比較以產生四個覆蓋率掩模。5.如權利要求1所述的方法,還包含啟用一透明度向覆蓋率轉換的旗標。6.如權利要求1所述的方法,還包含通過一顯示面板的座標位置產生一抖顫表;產生該抖顫表的多個索引;根據該多個索引讀取該抖顫表;及將由該抖顫表讀取的定值加入該像素的透明度欄。7.如權利要求l所述的方法,還包含產生該像素的每一子取樣的深度測試的數據;及將該像素的覆蓋率掩模及子取樣的深度測試的數據進行與門運算。8.如權利要求l所述的方法,還包含執行一比較該閾值及產生該覆蓋率掩模的指令。9,一種執行透明度向覆蓋率轉換的方法,包含輸入一指令以觸發一像素著色器將一像素的透明度欄的數據與該像素的多個子取樣的多個閾值進行比較以產生多個覆蓋率掩才莫;及根據存儲于該像素的透明度欄的多個覆蓋率掩模,更新該子取樣的數據。10.如權利要求9所述的方法,其中該像素著色器將一像素的透明度欄的數據與該像素的多個子取樣的多個閾值進行比較,以產生多個覆蓋率掩模包含比較該像素的透明度欄的數據與該像素的多個子取樣的多個閾值,并將一比較結果存儲于一寄存器中;及根據該比較結果產生該多個覆蓋率掩模,并將該多個覆蓋率掩模存儲于該寄存器中。11.如權利要求9所述的方法,其中輸入該指令進一步觸發存取該寄存器中的該多個覆蓋率掩^C12.如權利要求9所述的方法,其中該像素著色器將該像素的透明度欄的數據與該像素的多個子取樣的多個閾值進行比較,以產生多個覆蓋率掩模,該像素著色器將該像素的透明度欄的數據與該像素的四個子取樣的四個閾值進行比較以產生四個覆蓋率掩模。13.如權利要求9所述的方法,其中輸入該指令進一步觸發啟用一透明度向覆蓋率轉換的旗標。14.如權利要求9所述的方法,還包含通過一顯示面板的座標位置產生一抖顫表;產生該抖顫表的多個索引;根據該多個索引讀取該抖顫表;及將由該抖顫表讀取的定值加入該像素的透明度欄。15.如權利要求9所述的方法,還包含,產生該像素的每一子取樣的深度測試的數據;及將該像素的覆蓋率掩模及子取樣的深度測試的數據進行與門運算。16.如權利要求9所述的方法,其中輸入該指令進一步觸發存儲該多個覆蓋率掩模于該像素的透明度欄的多個最低有效位中。全文摘要利用一像素著色器來處理執行透明度向覆蓋率轉換,并將該像素的覆蓋率掩模存儲于透明度欄的最低有效位。該像素著色器將該一像素的透明度欄的數據與該像素的多個子取樣的閾值進行比較以產生多個覆蓋率掩模,并將該多個覆蓋率掩模存儲于該像素的透明度欄的多個最低有效位中,最后根據存儲于該像素的透明度欄的該多個覆蓋率掩模,更新該像素的多個子取樣的數據。本發明并提供一新指令a2c來加速閾值的比較及覆蓋率掩模的產生。文檔編號G06T15/20GK101393650SQ20071015430公開日2009年3月25日申請日期2007年9月17日優先權日2007年9月17日發明者徐日明申請人:矽統科技股份有限公司