專利名稱:高效z測試的制作方法
技術(shù)領(lǐng)域:
在此描述的本發(fā)明的實施方案涉及計算機圖形,更具體地說涉及渲染(rendering)。
背景技術(shù):
一般地說,計算機圖形渲染是這樣一個過程,通過此過程可接收并處理圖形指令和數(shù)據(jù)以可產(chǎn)生圖像數(shù)據(jù)。然后將該圖像數(shù)據(jù)發(fā)送到輸入/輸出(I/O)設(shè)備例如顯示器。渲染操作創(chuàng)建可被顯示為圖像的數(shù)據(jù)。
計算機圖形渲染的過程可包括多個離散操作。例如,可能需要計算物體或背景的特定顏色。還可能需要將紋理(texture)應(yīng)用到給定的表面。計算機圖形渲染中可能執(zhí)行的另一個操作是確定給定物體是否在另一個物體或背景的前面。如果前景物體是不透明的,則背景物體可被遮擋,而背景物體被遮擋的部分可能不需要被渲染。這一深度分析一般稱為Z測試。在渲染的三維場景中,物體或像素和假想的照相機或觀測者的眼睛之間的距離可被確定。類似地,可確定照相機和第二可能遮擋的物體或像素之間的可比較的距離。這些距離可以在假想的Z軸上測量,因此有了術(shù)語“Z測試”。如果較近的物體是不透明的,則較遠(yuǎn)的像素或物體可能不需要被渲染。
但是要注意,Z測試在某些實現(xiàn)方式中可能更為復(fù)雜。例如,當(dāng)一個物體可能在前景中時,該物體可能是半透明或透明的。在這一情形中,可能需要渲染背景物體。這些條件也可被設(shè)計到Z測試中。
如上所述,Z測試處理可能只是渲染期間發(fā)生的幾個處理中的一個。而且,圖像可能需要近乎實時地生成、修改和顯示。如果這樣,由于計算機圖形渲染經(jīng)常意味著大量數(shù)據(jù)的處理,渲染處理必須高效而迅速地進行。因此,出現(xiàn)若干設(shè)計問題,涉及如何最佳地排序這些處理以及如何實現(xiàn)它們,以可最大化渲染吞吐率。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一個方面,提供了一種方法,包括讀像素狀態(tài)陣列(PSA)的兩行的容器標(biāo)志,所述行對應(yīng)于在先子塊和當(dāng)前子塊;以及,確定所述當(dāng)前子塊是否包括不可提升的像素并且與所述在先子塊重疊,并且,如果是,則阻滯所述當(dāng)前子塊,直到所述在先子塊被渲染流水線的色彩計算邏輯處理;否則,將所述當(dāng)前子塊轉(zhuǎn)發(fā)通過所述渲染流水線。
根據(jù)本發(fā)明的另一個方面,提供了一種方法,包括確定在先行是否出現(xiàn)在像素狀態(tài)陣列(PSA)中,所述在先行對應(yīng)于在先子塊;確定所述PSA的當(dāng)前行中是否表明有不可提升的像素;如果表明有不可提升的像素,則阻滯對應(yīng)于所述當(dāng)前行的當(dāng)前子塊,直到所述在先子塊被渲染流水線的色彩計算邏輯處理;如果未表明有不可提升的像素,則確定所述當(dāng)前子塊是否包括不可提升的像素;如果所述當(dāng)前子塊包括不可提升的像素,則設(shè)置對應(yīng)于所述當(dāng)前子塊的所述不可提升的像素的PSA位置;以及,如果所述當(dāng)前子塊只包括可提升的像素,則對所述可提升的像素進行Z測試。
根據(jù)本發(fā)明的又一個方面,提供了一種計算機圖形渲染器,包括進行下述操作的中間Z單元對可提升的像素執(zhí)行Z測試;如果所述Z測試失敗,則丟棄所述可提升的像素;以及,如果所述Z測試通過,則將所述像素轉(zhuǎn)發(fā)通過渲染流水線。
下面將參考附圖來描述本發(fā)明。某個元件首次在其中出現(xiàn)的附圖由對應(yīng)標(biāo)號中的最左位表示。
圖1表示根據(jù)本發(fā)明實施方案的像素狀態(tài)陣列。
圖2的流程圖示出了根據(jù)本發(fā)明的實施方案,使用所述像素狀態(tài)陣列來執(zhí)行Z測試的過程。
圖3的流程圖示出了根據(jù)本發(fā)明的實施方案,校驗像素狀態(tài)陣列中的一行的容器(bin)標(biāo)志并對其操作的過程。
圖4的方框圖示出了根據(jù)本發(fā)明實施方案的計算機圖形渲染器。
具體實施例方式
這里描述的本發(fā)明例如可表示為一種方法和系統(tǒng),用于在計算機圖形渲染期間執(zhí)行Z測試,以優(yōu)化渲染吞吐率效率。為了本發(fā)明的目的,像素可被安排成子塊(subspan),每個子塊可以是在計算機顯示器上顯示的2像素乘2像素的陣列。子塊可進一步組合成更大的集合,在此稱為容器(bin)。每個容器因此可代表一組子塊,并可代表顯示在計算機顯示器上的場景(scene)的離散區(qū)域。一些像素可被指定為不可提升的。如果像素是不可提升的,則意味著即使該像素相對于背景中的像素可能位于前景中,該前景中不可提升的像素也未必遮擋所述背景像素。不可提升的像素例如可能是透明或半透明的物體或表面的一部分。不可提升的像素狀態(tài)可使用稱為像素狀態(tài)陣列(PSA)的數(shù)據(jù)結(jié)構(gòu)來跟蹤。在本發(fā)明的實施方案中,像素狀態(tài)陣列可包括多個行。每行可包括多個位,每個位對應(yīng)于像素的不可提升狀態(tài)。在本發(fā)明的實施方案中,PSA的每行可包括5個位,其中的首4位可代表單個子塊中的像素。如果像素是不可提升的,則PSA中的對應(yīng)位可在對應(yīng)于該像素的子塊的行中被設(shè)置。PSA可實現(xiàn)為硬件或軟件,或其結(jié)合。
在本發(fā)明的實施方案中,本發(fā)明的處理可開始于讀PSA的行??纱_定子塊的合法性,即該處理可確定子塊是否包括至少一個像素??纱_定該行中的首4個位置中是否有任何一個出現(xiàn)1。1表明對應(yīng)的像素是不可提升的。注意,此行可對應(yīng)于一個在先的像素子塊,該子塊已經(jīng)被送進渲染流水線中進行色彩計算和其他操作。如果出現(xiàn)1,則當(dāng)前子塊可在渲染流水線之前被阻滯,直到在先子塊的像素已經(jīng)完成色彩計算。
如果已經(jīng)讀取的行中沒有像素表示為1,則可確定當(dāng)前子塊中是否有任何像素是不可提升的。如果是,則可將對應(yīng)于當(dāng)前子塊的PSA行中的對應(yīng)位設(shè)置為1。否則,可對當(dāng)前子塊的4個像素中的每一個進行Z測試。以這種方式,可在Z測試期間分析已知為可提升的像素,并可能在發(fā)現(xiàn)它們將被另一個像素遮擋時將起丟棄。這一被丟棄的像素因此絕不再會轉(zhuǎn)到其他處理如色彩計算。這可消除不需要被處理的像素。
下面將參考附圖描述本發(fā)明的實施方案。如上所述,給定像素可被看作為可提升的或不可提升的。給定像素的可提升性或不可提升性可在PSA中跟蹤。圖1示出了根據(jù)本發(fā)明實施方案的示例性PSA。PSA可組織為二維陣列。陣列的每一行可對應(yīng)于一個像素子塊。在所示出的實施方案中,每個子塊包括4個像素,因此PSA的每行包括4位,每像素1位,后跟第五位。行中的第五位在此可稱為容器標(biāo)志。容器標(biāo)志的作用將在下面更詳細(xì)地描述。因此在所示出的實施方案中,PSA的每行是5位。
圖2示出了本發(fā)明的處理的實施方案。該處理開始于方框205。在方框210中,讀PSA的行。PSA的該行可和已經(jīng)轉(zhuǎn)發(fā)到通過渲染流水線進行色彩計算處理的在先像素子塊相關(guān)聯(lián)。如果在方框215中確定該子塊是合法的,則處理可繼續(xù)到方框220。這里可考慮當(dāng)前子塊。這一子塊還未被轉(zhuǎn)發(fā)到渲染流水線中的色彩計算。在方框220,確定當(dāng)前子塊中是否有任何像素表示為1。如上所述,1表明對應(yīng)的像素是不可提升的。如果出現(xiàn)1,則在方框225中,阻滯當(dāng)前子塊,直到色彩計算邏輯完成了在先子塊的解析。否則,處理繼續(xù)到方框230。這里,確定當(dāng)前子塊中是否有任何像素是不可提升的。如果有,則處理繼續(xù)到方框235。這里,將適當(dāng)?shù)腜SA位置設(shè)置為1。如果當(dāng)前子塊中沒有像素是不可提升的,則處理繼續(xù)到方框240。這里,可對當(dāng)前子塊中的像素進行Z測試。由于當(dāng)前子塊中的所有像素都是可提升的,如在方框230中確定的那樣,因此此時可進行Z測試。按照這種方式,被可提升的像素遮擋的像素可被丟棄而不進行進一步的處理。因此,在方框250中,可確定是否已通過Z測試。如果是,則在方框270,被測試的像素可被轉(zhuǎn)到渲染流水線上的色彩計算邏輯。否則,可在方框260丟棄該像素。
在本發(fā)明的實施方案中,當(dāng)前子塊可能被發(fā)現(xiàn)是不可提升的,同時PSA中沒有匹配的條目。在這一情形下,然后可對該子塊的像素進行Z測試。如果通過了Z測試,則可設(shè)置對應(yīng)的PSA位,并可將當(dāng)前子塊轉(zhuǎn)發(fā)通過渲染流水線。
在本發(fā)明的實施方案中,PSA的每行可包括容器標(biāo)志。容器標(biāo)志可用來解決PSA的大小限制。理想地,PSA對場景中的每個子塊都包括一行。這一般來說是不實際的,尤其如果PSA實現(xiàn)為硬件時。為了解決這個問題,子塊可被組織到容器中,每個容器可給出一個二進制指定號。每個容器因此可被看作為偶或奇數(shù)的。容器的指定號在場景上可交替,這樣如果給定容器是奇,則它相鄰的容器可被看作為偶。這一二進制方案可被編碼為PSA中的0或1。因此,對于給定的子塊,它的容器可通過容器標(biāo)志而標(biāo)識為偶或奇,容器標(biāo)志在圖1的示例性PSA中即為與子塊相關(guān)聯(lián)的行中的第5位。如果給定PSA的兩行各自的容器標(biāo)志不同,則可推論對應(yīng)的子塊與不同的容器相關(guān)聯(lián)。因此在Z測試中這些子塊將彼此相對地進行評估。因此,這些子塊中的一個在另一個進行色彩計算期間不會有阻滯。
當(dāng)當(dāng)前子塊是不可提升的,并且另一個子塊具有在渲染流水線更下面的步驟例如色彩計算邏輯中正被處理的重疊像素時,這一過程可能出現(xiàn)例外。在這一情形下,可阻滯當(dāng)前子塊,即使各自的容器標(biāo)志可能不同。
根據(jù)本發(fā)明實施方案的容器標(biāo)志的處理示出在圖3中。該處理開始于方框310。在方框320,可讀取容器標(biāo)志。在方框330,可確定容器標(biāo)志是否表示不同于在先子塊的容器的容器。如果是,則處理可繼續(xù)到方框333。這里,可確定當(dāng)前子塊是否是不可提升的并且與在先子塊重疊。如果是,則在方框336中,阻滯當(dāng)前子塊,直到渲染流水線的色彩計算邏輯解析了在先子塊。如果否,則處理繼續(xù)到方框340。這里,可將當(dāng)前子塊轉(zhuǎn)到通過渲染流水線。如果在方框330中確定可能表示相同的子塊,則處理可前進到方框205,如圖2所示。
本發(fā)明可實現(xiàn)為計算機圖形渲染器,一個實施例示出在圖4中。方框410可看作為渲染流水線。如圖2和3所示出的本發(fā)明可被包括在方框420中,即中間的Z單元。如上所述,本發(fā)明使得如果根據(jù)Z測試的確定發(fā)現(xiàn)像素將被阻擋,則可丟棄該像素而無須額外的處理。可在圖4中看到,通過Z測試的像素最終可被發(fā)送通過多個處理,并最終到達(dá)色彩計算器430。通過消除最終不會被顯示的像素,本發(fā)明可通過針對不會被顯示的像素而避免不必要的色彩計算,從而節(jié)省大量處理。
借助于示出了執(zhí)行所指定的功能及其關(guān)系的功能構(gòu)建模塊和方法步驟,已經(jīng)描述了本發(fā)明。為了便于描述,任意地定義了這些功能構(gòu)建模塊和方法步驟的邊界。可定義可替換的邊界,只要適當(dāng)?shù)貓?zhí)行所指定的功能及其關(guān)系。因此任何這些可替換的邊界仍在要求保護的發(fā)明的范圍和精神之內(nèi)。本領(lǐng)域的普通技術(shù)人員將會認(rèn)識到,這些功能構(gòu)建模塊可由離散組件、專用集成電路、執(zhí)行適當(dāng)?shù)能浖鹊鹊奶幚砥骰蚱浣Y(jié)合來實現(xiàn)。因此,本發(fā)明的寬度和范圍不應(yīng)局限于上述示例性的實施方案,而僅應(yīng)根據(jù)權(quán)利要求及其等同屋來定義。
盡管已經(jīng)描述了本發(fā)明的多個實施方案,但應(yīng)理解到它們是以例示而非限制的方式給出的。對本領(lǐng)域的普通技術(shù)人員來說,很清楚可在其中作出各種形式和線程細(xì)節(jié)上的改變而不偏離本發(fā)明的精神和范圍。
權(quán)利要求
1.一種方法,包括讀像素狀態(tài)陣列(PSA)的兩行的容器標(biāo)志,所述行對應(yīng)于在先子塊和當(dāng)前子塊;以及確定所述當(dāng)前子塊是否包括不可提升的像素并且與所述在先子塊重疊,并且如果是,則阻滯所述當(dāng)前子塊,直到所述在先子塊被渲染流水線的色彩計算邏輯處理;否則,將所述當(dāng)前子塊轉(zhuǎn)發(fā)通過所述渲染流水線。
2.根據(jù)權(quán)利要求1的方法,其中每個所述子塊包括2乘2陣列形式的個像素。
3.根據(jù)權(quán)利要求2的方法,所述PSA的每行表示一個子塊,并包括代表該子塊的個像素的4位以及對應(yīng)于該子塊的容器標(biāo)志。
4.一種方法,包括確定在先行是否出現(xiàn)在像素狀態(tài)陣列(PSA)中,所述在先行對應(yīng)于在先子塊;確定所述PSA的當(dāng)前行中是否表明有不可提升的像素;如果表明有不可提升的像素,則阻滯對應(yīng)于所述當(dāng)前行的當(dāng)前子塊,直到所述在先子塊被渲染流水線的色彩計算邏輯處理;如果未表明有不可提升的像素,則確定所述當(dāng)前子塊是否包括不可提升的像素;如果所述當(dāng)前子塊包括不可提升的像素,則設(shè)置對應(yīng)于所述當(dāng)前子塊的所述不可提升的像素的PSA位置;以及如果所述當(dāng)前子塊只包括可提升的像素,則對所述可提升的像素進行Z測試。
5.根據(jù)權(quán)利要求4的方法,還包括如果所述可提升的像素中有任何像素通過了所述Z測試,則將所述可提升的像素轉(zhuǎn)發(fā)通過所述渲染流水線;以及如果所述可提升的像素未通過所述Z測試,則丟棄所述可提升的像素。
6.根據(jù)權(quán)利要求4的方法,還包括如果所述不可提升的像素中有任何像素通過了所述Z測試,則將所述不可提升的像素轉(zhuǎn)發(fā)通過所述渲染流水線;以及如果所述不可提升的像素未通過所述Z測試,則丟棄所述不可提升的像素。
7.根據(jù)權(quán)利要求4的方法,其中所述Z測試是在所述渲染流水線的中間Z模塊中執(zhí)行的。
8.根據(jù)權(quán)利要求4的方法,其中每個子塊包括2乘2陣列形式的4個像素。
9.根據(jù)權(quán)利要求8的方法,其中所述PSA的每行代表一個子塊,并包括代表所述子塊的4個像素的4位。
10.根據(jù)權(quán)利要求4的方法,還包括設(shè)置所述PSA中對應(yīng)于所述不可提升的像素的位;以及如果所述PSA中沒有行對應(yīng)于所述當(dāng)前子塊,并且所述當(dāng)前子塊包括不可提升的像素,則對所述不可提升的像素執(zhí)行所述Z測試。
11.根據(jù)權(quán)利要求4的方法,還包括如果所述在先行出現(xiàn)在像素狀態(tài)陣列(PSA)中,則確定所述在先行是否代表合法子塊,并且這一操作在確定所述PSA的所述當(dāng)前行中是否表明有不可提升的像素之前進行。
12.一種計算機圖形渲染器,包括進行下述操作的中間Z單元對可提升的像素執(zhí)行Z測試;如果所述Z測試失敗,則丟棄所述可提升的像素;以及如果所述Z測試通過,則將所述像素轉(zhuǎn)發(fā)通過渲染流水線。
13.根據(jù)權(quán)利要求12的計算機圖形渲染器,其中所述中間Z單元在所述執(zhí)行操作之前還進行下述操作確定在先行是否出現(xiàn)在像素狀態(tài)陣列(PSA)中,所述在先行對應(yīng)于在先子塊;確定所述在先行是否代表合法子塊;如果所述PSA的當(dāng)前行中表明有不可提升的像素,則阻滯對應(yīng)于所述當(dāng)前行的當(dāng)前子塊,直到所述在先子塊被所述渲染流水線的色彩計算邏輯處理;如果未表明有不可提升的像素,則確定所述當(dāng)前子塊是否包括不可提升像素;以及如果所述當(dāng)前子塊只包括一組包括所述可提升像素的可提升像素,則啟動對所述可提升像素的Z測試;否則,設(shè)置對應(yīng)于所述當(dāng)前子塊的所述不可提升像素的PSA位置。
14.根據(jù)權(quán)利要求12的渲染器,其中所述中間Z單元在所述執(zhí)行步驟之前還進行下述操作讀像素狀態(tài)陣列(PSA)的一行,該行對應(yīng)于在先子塊;以及如果當(dāng)前子塊包括不可提升的像素且與在先子塊重疊,則阻滯所述當(dāng)前子塊,直到所述在先子塊被所述渲染流水線的色彩計算邏輯處理;否則,將所述當(dāng)前子塊轉(zhuǎn)發(fā)通過所述渲染流水線。
15.根據(jù)權(quán)利要求14的渲染器,其中所述當(dāng)前和在先子塊中的每一個都包括2乘2陣列形式的4個像素。
16.根據(jù)權(quán)利要求14的渲染器,其中所述PSA的每行對應(yīng)于一個子塊,并對所述子塊的每個像素包括一個位。
全文摘要
計算機圖形渲染期間的Z測試的執(zhí)行方式是為了優(yōu)化渲染。不可提升的像素狀態(tài)可使用像素狀態(tài)陣列(PSA)來跟蹤。每個PSA行可包括對應(yīng)于像素的不可提升狀態(tài)的位。每行可包括5位,其中的首4位代表子塊中的像素。如果行對應(yīng)于合法子塊,則可確定該子塊中是否有任何像素被表示為1,即表明該像素是不可提升的。此行對應(yīng)于已被送到渲染流水線的在先子塊。如果出現(xiàn)1,則可阻滯當(dāng)前子塊,直到在先子塊的像素已通過色彩計算。如果在剛讀取的行中沒有像素表示為1,則可確定當(dāng)前子塊中是否有任何像素是不可提升的。如果有,則可將當(dāng)前PSA行中的對應(yīng)位設(shè)置為1。否則,可對當(dāng)前子塊的每個像素執(zhí)行Z測試。
文檔編號G06T15/40GK1848179SQ20051013667
公開日2006年10月18日 申請日期2005年12月29日 優(yōu)先權(quán)日2004年12月29日
發(fā)明者托馬斯·派亞扎, 埃里克·薩姆森, 納塞赫·阿卡邦恩, 迪納卡·穆納伽拉 申請人:英特爾公司