亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

通過使用可置換的剔除程序提高圖形性能的方法、顯示適配器和計(jì)算機(jī)程序產(chǎn)品的制作方法

文檔序號:6476091閱讀:152來源:國知局

專利名稱::通過使用可置換的剔除程序提高圖形性能的方法、顯示適配器和計(jì)算機(jī)程序產(chǎn)品的制作方法
技術(shù)領(lǐng)域
:本發(fā)明整體涉及數(shù)字表示圖形,尤其涉及提高生成數(shù)字表示圖形的性
背景技術(shù)
:數(shù)字表示圖形(digitallyrepresentedgraphics),例如計(jì)算機(jī)圖形,在性能上一直持續(xù)不斷地得到改進(jìn)。在二十世紀(jì)八十年代和九十年代,出現(xiàn)了具有圖形加速器的用于計(jì)算機(jī)和游戲控制臺的顯示適配器,這減輕了在圖形生成時(shí)中央處理單元(CPU)的負(fù)擔(dān)。起初,顯示適配器提供2D圖形加速,但是它們最終還包括了對3D圖形加速的支持。如今顯示適配器使用了通常被叫做圖形處理單元(GPU)的處理單元。。由于3D圖形的復(fù)雜性,當(dāng)前的GPU在執(zhí)行與3D圖形相關(guān)的計(jì)算時(shí)使用了其大量的處理能力。顯示適配器持續(xù)出現(xiàn)的問題是性能問題。始終會存在需要更高幀速率(每秒鐘所渲染的屏幕圖像)、更高分辨率和更高圖像質(zhì)量的新的應(yīng)用和游戲,這就導(dǎo)致了對于在盡可能短的時(shí)間內(nèi)渲染每一個(gè)屏幕圖像的需求。換句話說,提高性能始終是非常重要的。一種通常的提高性能的方法就是通過提供更高的時(shí)鐘速度、流水線化或者利用并行計(jì)算來提高GPU的處理能力。然而,這樣通常會產(chǎn)生更多的熱量,導(dǎo)致更多的電力消耗,以及為了冷卻GPU產(chǎn)生的更高的風(fēng)扇噪音。而且,每一個(gè)GPU的時(shí)鐘速度也是有限制的。因此,在改進(jìn)數(shù)字表示圖形的性能方面仍然存在能力不足的問題。
發(fā)明內(nèi)容鑒于上述原因,本發(fā)明的一個(gè)目的就是為了解決或者至少減少上述的問題。通常,通過附帶的獨(dú)立專利權(quán)利要求來實(shí)現(xiàn)上述目的。根據(jù)本發(fā)明的第一方面,提供了一種用于提高數(shù)字表示圖形的生成性能的方法,包括以下步驟選擇要處理的包含碎片(fragment)的瓦片(tile);對該瓦片執(zhí)行剔除程序,該剔除程序是可置換的;并且對所述碎片的多個(gè)子集中的每一個(gè)子集執(zhí)行一指令集,所述指令集是基于所述剔除程序的輸出值而從多個(gè)指令集中選出的。因此有可能創(chuàng)建處理瓦片的剔除程序,并且執(zhí)行這些剔除程序來提高性能。在對所述瓦片執(zhí)行剔除程序的步驟中,可以對所述剔除程序的至少一部分指令使用表示整個(gè)瓦片的算法。這使得在每一次都可以處理多個(gè)碎片,從而提高了性能。在執(zhí)行剔除程序的步驟中,對所述剔除程序的至少一部分指令使用區(qū)間(interval)算法。區(qū)間算法允許表示多個(gè)碎片并且實(shí)現(xiàn)起來相對容易。在執(zhí)行剔除程序的步驟中,對所述剔除程序的至少一部分指令使用仿射算法。仿射算法可以獲得對多個(gè)碎片的相對準(zhǔn)確的表示。上述方法可以進(jìn)一步包括以下步驟向所述剔除程序提供表示所述碎片中的多個(gè)碎片的至少一個(gè)屬性的值。所述瓦片的碎片的每一個(gè)子集都可以包括一個(gè)碎片。換句話說,可以針對每一個(gè)碎片執(zhí)行處理。執(zhí)行指令集的步驟可以包括當(dāng)所述輸出值滿足剔除條件時(shí),對于所述碎片的多個(gè)子集中的每一個(gè)子集執(zhí)行第一指令集,而當(dāng)所述輸出值不滿足所述剔除條件時(shí),對于碎片的所述多個(gè)子集中的每一個(gè)子集執(zhí)行第二指令集。第一指令集可以比第二指令集包含更少的指令。第一指令集可以包含零個(gè)指令。換句話說,如果所述剔除條件為"真",則不執(zhí)行指令,這樣就提高了性能。在執(zhí)行指令集的步驟中,所述剔除條件可以對應(yīng)于所述瓦片的碎片對最終渲染的圖像沒有貢獻(xiàn)。這是本發(fā)明中性能提高的根源。在執(zhí)行指令集的步驟中,所述剔除條件可以對應(yīng)于所述瓦片的碎片對最終渲染的圖像的貢獻(xiàn)小于一閾值。這樣可以在與圖像質(zhì)量的降低之間具有某種折衷的情況下進(jìn)一步提高性能??梢愿鶕?jù)所需要的在性能與圖像質(zhì)量之間的平衡來任意地設(shè)定所述閾值。在提供值的步驟中,使用區(qū)間算法,并使用所述瓦片的多個(gè)碎片作為輸入,來計(jì)算所述值。在提供值的步驟中,使用仿射算法,并使用所述瓦片的多個(gè)碎片作為輸入,來計(jì)算所述值。在提供值的步驟中,作為所述剔除程序請求對所述值進(jìn)行訪問的結(jié)果,來計(jì)算所述值。換句話說,可以使用一種"拉(pull)"的機(jī)制向剔除程序提供值。在提供值的步驟中,在執(zhí)行所述剔除程序之前計(jì)算所述值。換句話說,可以使用一種"推(push)"的機(jī)制向剔除程序提供值。選擇要處理的包含碎片的瓦片的步驟包括選擇至少部分地被正在處理的多邊形所覆蓋的瓦片。換句話說,選擇多邊形對其具有貢獻(xiàn)的瓦片。所述碎片可以是與所述多邊形關(guān)聯(lián)的碎片。因此,只處理瓦片中的多邊形的碎片。重復(fù)所述選擇瓦片的步驟、執(zhí)行剔除程序的步驟以及執(zhí)行指令集的步驟,直到處理完所有的至少部分地被特定多邊形覆蓋的瓦片為止。當(dāng)處理完一個(gè)多邊形時(shí),可以類似地處理下一個(gè)多邊形,并以此類推,直到處理完圖像的所有多邊形為止。在執(zhí)行指令集的步驟中,在所述選擇的指令集中或在由后續(xù)使用的處理單元進(jìn)行的處理中,可以使用由所述剔除程序計(jì)算的至少一個(gè)值。例如,這些值可以在隨后的階段中執(zhí)行的分層深度剔除中使用。本發(fā)明的第二方面是適用于生成數(shù)字表示圖形的顯示適配器,包括用于選擇要處理的包含碎片的瓦片的模塊;用于對所述瓦片執(zhí)行剔除程序的模塊,所述剔除程序是可置換的;以及用于對所述碎片的多個(gè)子集中的每一個(gè)子集執(zhí)行指令集的模塊,所述指令集是基于所述剔除程序的輸出值而從多個(gè)指令集中選出的。應(yīng)當(dāng)明白,本發(fā)明的第二方面可以以與本發(fā)明第一方面的任意特征相對應(yīng)的特征的任意組合一起來實(shí)現(xiàn)。本發(fā)明的第三方面是一種包含軟件指令的計(jì)算機(jī)程序產(chǎn)品,所述軟件指令當(dāng)在控制器中執(zhí)行時(shí),執(zhí)行根據(jù)本發(fā)明的第一方面的方法。本發(fā)明的其它目的、特征和優(yōu)點(diǎn)將會從下面的詳細(xì)描述中、附帶的從屬權(quán)利要求中以及從附圖中看到。通常,在權(quán)利要求中使用的所有術(shù)語都可以根據(jù)該
技術(shù)領(lǐng)域
中的通常含義進(jìn)行解釋,除非本文中另有明確定義。所有的"一/元件、設(shè)備、組件、裝置、步驟等等"都可以開放性地解釋為是元件、設(shè)備、組件、裝置和步驟的至少一個(gè)實(shí)例,除非文中另有明確聲明。本文中公開的任意方法中的步驟都并非必然以公開的順序執(zhí)行,除非有明確地聲明?,F(xiàn)在結(jié)合附圖對本發(fā)明的各個(gè)實(shí)施例進(jìn)行更詳細(xì)描述,其中圖1是一個(gè)方塊圖,示出了本發(fā)明的一個(gè)實(shí)施例的一個(gè)顯示適配器中不同的實(shí)體之間如何互相作用。圖2是一個(gè)示意性方塊圖,示出了圖1的顯示適配器中使用的不同的程序之間的關(guān)系。圖3示出了在圖1的顯示適配器中使用區(qū)間算法剔除瓦片的一個(gè)實(shí)例。圖4a和4b示出了剔除處理的流程圖,其可以在圖1的顯示適配器中執(zhí)行。圖5示出了包含圖1的顯示適配器的計(jì)算機(jī)的概覽架構(gòu)。圖6a是一個(gè)顯示圖,示出了圖1的顯示適配器中的一種輸入值異常情況。圖6b是圖6a的情況中輸入值的圖表。圖7a和7b是圖1的顯示適配器中使用的紋理的說明性透視圖。圖8a-d是圖1的顯示適配器中使用的紋理的說明圖。具體實(shí)施例方式下文結(jié)合附圖對本發(fā)明進(jìn)行更完整描述,其中示出了本發(fā)明的一些實(shí)施例。然而,本發(fā)明可以以許多不同的形式體現(xiàn),而不應(yīng)當(dāng)限于在文中列舉出的實(shí)施例;而且,通過實(shí)例化方式提供這些實(shí)施例以便使得本公開內(nèi)容更加透徹和完整,并且可以將本發(fā)明的范圍傳達(dá)給本領(lǐng)域技術(shù)人員。文中相同的數(shù)字表示相同的元件。圖1是一個(gè)方塊圖,示出了本發(fā)明的一個(gè)實(shí)施例中的顯示適配器100中不同實(shí)體之間的相互作用。多邊形設(shè)置塊102用于按照連接的CPU570的指令(圖5)來設(shè)置多邊形。雖然可以使用任意多邊形,但是一般使用三角形。對于每一個(gè)多邊形,瓦片光柵化器104都對該多邊形進(jìn)行分割,以便將其渲染到一個(gè)或多個(gè)瓦片中,其中每一個(gè)瓦片都由該多邊形至少部分地覆蓋。通常,瓦片是一組碎片。在一個(gè)實(shí)施例中,瓦片是包含多個(gè)碎片的二維矩形。這些碎片中的每一個(gè)都對應(yīng)于一個(gè)像素,并且包含對于渲染該像素并且測試該像素是否應(yīng)當(dāng)渲染在顯示屏上而言所必需的數(shù)據(jù)。雖然本發(fā)明的范圍可以包含任意的瓦片尺寸,但是瓦片通常的尺寸是8X8個(gè)碎片。分層深度剔除塊106執(zhí)行分層深度剔除(hierarchicaldepthculling),其基于深度緩沖進(jìn)行剔除。這里,可以執(zhí)行保守的測試來證明該瓦片是否被深度緩沖器中的內(nèi)容所覆蓋。換句話說,從瀏覽者的角度看,測試是否存在另一個(gè)完全覆蓋該瓦片中的多邊形的渲染對象。如果是這種情況,就可以剔除整個(gè)瓦片,也就是,將瓦片挑選出來以便實(shí)現(xiàn)更少的處理,例如將該瓦片跳過。從而可以獲得性能的提高。應(yīng)當(dāng)明白,該分層深度剔除可以在可編程剔除單元108的剔除之前或之后執(zhí)行。該單元是一個(gè)固定的功能,這意味著其并不是執(zhí)行一個(gè)可置換的程序。在可編程剔除單元108中,根據(jù)可置換剔除程序118來執(zhí)行剔除,可置換剔除程序118也稱為可置換剔除模塊。下面結(jié)合附圖4a詳細(xì)解釋該剔除程序118的細(xì)節(jié)和效果。在碎片光柵化器110中,由可編程剔除單元108處理的瓦片被細(xì)分成覆蓋多邊形的多個(gè)碎片。這些碎片中每一個(gè)都對應(yīng)于一個(gè)像素并且包含對于渲染像素并且測試該像素是否應(yīng)當(dāng)渲染在顯示屏上而言所必需的數(shù)據(jù)。碎片數(shù)據(jù)包括光柵位置、深度、顏色、紋理坐標(biāo)、模板(stancile)、阿爾法(alpha)(用于混合)等。對于每一個(gè)像素,都可能存在多個(gè)碎片樣本。在碎片程序單元112中,使用碎片程序120處理從碎片光柵化器輸出的碎片。這個(gè)單元的目的是執(zhí)行諸如將先前計(jì)算的顏色與紋理進(jìn)行組合之類的任務(wù),并且添加諸如霧之類的效果,以及如果有可能的話,識別不需要渲染的碎片,即碎片剔除。紋理單元114用于紋理查找,例如使用一維、二維、三維、四維和立方圖(cubemap)紋理進(jìn)行紋理査找,并且按照需要將它們提供給可編程剔除單元108和碎片程序單元112。混合/深度/阿爾法單元116使用由碎片程序單元112提供的碎片在將碎片寫入目標(biāo)緩沖器之前執(zhí)行深度測試、阿爾法測試和混合。圖2是一個(gè)示意性方塊圖,示出了在圖1的顯示適配器100中使用的不同程序之間的關(guān)系。原理是組合程序222可以用于自動生成在可編程剔除單元108中所使用的剔除程序218以及在碎片程序單元112中所使用的碎片程序220。可選的,程序員可以分別編寫剔除和碎片程序218和220。作為一個(gè)實(shí)例,考慮組合程序222的偽代碼片段(1),其最初目的是被編寫為碎片程序DP3d,n,1(1)KILd<0TEX2Dc,t0,rlMULout.col,d,c這段程序通過使用DP3指令計(jì)算光(1)和法線(n)矢量之間的點(diǎn)積結(jié)果(d),來執(zhí)行基本擴(kuò)散照明。n和l向量對于每一個(gè)碎片都是變化的。KIL指令終止表面法線并不面向光的所有碎片,這通過使d小于0來指示。TEX2D指令在c中執(zhí)行二維紋理査找。最后,將結(jié)果(d)乘以擴(kuò)散材料系數(shù)(c)。在本文中提到的新方式中,對于剔除由碎片構(gòu)成的整個(gè)瓦片來說,KIL指令是一個(gè)機(jī)會。但是為了完成它,應(yīng)該保守地證明對于該整個(gè)瓦片而言滿足用于KIL指令的條件。緊跟著,在該實(shí)例中,還必須能夠保守地計(jì)算DP3指令的值,因?yàn)镵1L指令依賴于該指令的結(jié)果。另外,必須能夠獲得對于整個(gè)瓦片的輸入(在這種情況中是法線n的向量和光1的向量)的保守邊界,因?yàn)镈P3指令迸而依賴于這些值。為了實(shí)現(xiàn)這個(gè)保守計(jì)算鏈,可編程剔除單元是基于與碎片程序單元相同的指令集的。而且,并非如同在處理碎片時(shí)通常的情況下一樣使用浮點(diǎn)變量作為指令的源和目標(biāo)寄存器,而是使用了區(qū)間,并且使用區(qū)間算法的原理來實(shí)現(xiàn)該指令。作為一個(gè)簡單的實(shí)例,考慮一個(gè)標(biāo)準(zhǔn)的ADD指令A(yù)DDc,a,bc=a+b(2)對于相應(yīng)的可編程剔除單元區(qū)間指令,用區(qū)間仏£來置換操作數(shù),其中,一個(gè)區(qū)間(例如a)被如下定義<formula>formulaseeoriginaldocumentpage11</formula>(3)從而可編程剔除單元ADD指令如下-ADD。(4)其中,區(qū)間加法運(yùn)算被實(shí)現(xiàn)為3+S=[g;]+[b,&=[a+b;+5](5)可以看到,該區(qū)間加法的結(jié)果包括所有可能的"普通"加法的結(jié)果,或者更加正式的,其可以滿足a+beS+6,其中ae^b"。因此,其保守來說是正確的。采用類似的方式來重新定義碎片程序指令集中的每一個(gè)指令的行為。所得到的增強(qiáng)指令的全部詳細(xì)情況如下所示。<table>tableseeoriginaldocumentpage11</column></row><table><table>tableseeoriginaldocumentpage12</column></row><table>表h實(shí)施例中的指令的運(yùn)算和條件表達(dá)除了使用區(qū)間指令之外,輸入也必須被定義為區(qū)間。因此,必須能夠?yàn)樵谟伤槠瑯?gòu)成的整個(gè)瓦片上的內(nèi)插的量來計(jì)算保守的邊界。這在下面詳細(xì)地解釋。應(yīng)當(dāng)注意,雖然這里使用了區(qū)間算法,但是也可使用表示整個(gè)瓦片的任意適當(dāng)?shù)乃惴ā@?,在本發(fā)明的范圍內(nèi)也同樣可以使用仿射算法。在上面的情況中,剔除程序218可以從組合程序(1)中自動獲得。下面是獲得的剔除程序DP3a,fU(6)KILa<o另外,這里的碎片程序220是從組合程序(1)中獲得的,其與組合程序220相同。下面是碎片程序DP3d,n,1(7)KILd<0TEX2Dc,tO,rlMULout.col,d,c圖3示出了在圖1的顯示適配器100中能夠使用區(qū)間算法來剔除瓦片的實(shí)例。對于由碎片構(gòu)成的整個(gè)瓦片來說,假設(shè)確定了其法線330的輸入?yún)^(qū)間334是"(卜V^/2,-l/2],[l/2,V5/2]),并且其光向量332的區(qū)間336是"([l/V^,l],[-l/V^,0]),如圖3所示。假設(shè)z坐標(biāo)為0,這樣可以簡化說明的實(shí)例。這些區(qū)間表示之間的點(diǎn)積得到了^\.'1=卜(^+^)/^,-1/^](參見表1中DP3指令)。因此可以得出結(jié)論,3最多為5=-1/^。由于該值嚴(yán)格地小于0,在上面結(jié)合圖2解釋的剔除程序中,可以剔除該整個(gè)瓦片而不用對每一個(gè)碎片執(zhí)行碎片程序,下面將結(jié)合圖4a進(jìn)行更進(jìn)一步的描述。這就是在本發(fā)明中性能提高的根源。圖4a示出了可以在圖1的顯示適配器100中執(zhí)行的剔除處理的流程圖。當(dāng)該流程開始時(shí),已經(jīng)選擇了要渲染的多邊形。在選擇要處理的瓦片的步驟440中,選擇一個(gè)瓦片,其中所選擇的瓦片至少部分地由多邊形覆蓋。然后在執(zhí)行剔除程序的步驟452中執(zhí)行剔除程序。在這個(gè)實(shí)施例中,當(dāng)剔賒程序請求輸入值時(shí),該流程前進(jìn)到為剔除程序步驟454a提供輸入值。所述輸入值是與以某種方式表示瓦片中所有碎片的特征相關(guān)的值。例如,輸入值可以是法線、位置坐標(biāo)、光向量、顏色、紋理坐標(biāo)等等。在這個(gè)實(shí)施例中,使用區(qū)間算法計(jì)算所請求的輸入值。換句話說,根據(jù)"拉"機(jī)制,只有當(dāng)需要時(shí)才計(jì)算輸入值,這與與下文中參考圖4b解釋的"推"機(jī)制相反。剔除程序的結(jié)果就是當(dāng)前處理的瓦片是否應(yīng)當(dāng)被剔除。這可以很嚴(yán)格地確定,從而只有當(dāng)前多邊形在該瓦片的區(qū)域中不會對最終渲染的圖像產(chǎn)生貢獻(xiàn)時(shí)才剔除該瓦片??商娲模梢詧?zhí)行有損剔除,從而如果在當(dāng)前瓦片的區(qū)域中當(dāng)前多邊形對最終渲染的圖像的貢獻(xiàn)落在某一閾值之下時(shí),則剔除該瓦片。當(dāng)剔除程序完成處理時(shí),流程繼續(xù)到判斷剔除條件是否為"真(true)"的步驟456。在這個(gè)步驟中,根據(jù)剔除程序的輸出來判斷是否對當(dāng)前處理的瓦片執(zhí)行剔除。如果要執(zhí)行剔除,則流程繼續(xù)到執(zhí)行指令集A的步驟458。反之,則流程繼續(xù)到執(zhí)行指令集B的步驟460。在一個(gè)實(shí)施例中,如果剔除條件為"假(false)",則將該瓦片打碎成多個(gè)更小的瓦片,并且流程返回到選擇要處理的瓦片的步驟440。對于越來越小的瓦片連續(xù)地執(zhí)行以上步驟,從而實(shí)現(xiàn)分層、多級剔除處理。應(yīng)當(dāng)注意,除了剔除條件之外,剔除程序還可以輸出其它結(jié)果。這些結(jié)果可以向下發(fā)送到圖形流水線以便進(jìn)行進(jìn)一步的處理。這樣的實(shí)施例的單元108(圖1)的順序。可編程剔除單元計(jì)算在一個(gè)瓦片中深度值的邊界或者區(qū)間,然后將這個(gè)區(qū)間發(fā)送到分層深度剔除單元。分層深度剔除單元然后基于由程序計(jì)算的深度值來執(zhí)行剔除。在執(zhí)行指令集A的步驟458中,針對瓦片的子集(通常是碎片)執(zhí)行指令集A。這些碎片通常共同覆蓋該瓦片的所有像素,該瓦片覆蓋被處理的三角形。在執(zhí)行指令集B的步驟460中,針對瓦片的子集(通常是碎片)執(zhí)行指令集B。這通常是在瓦片級之后的一個(gè)對碎片進(jìn)行渲染的傳統(tǒng)處理。指令集A通常比指令集B具有更低的要求,從而導(dǎo)致當(dāng)剔除條件被確定為"真"時(shí),對于瓦片所處理的指令數(shù)量較少,從而獲得性能上的提高。在一個(gè)實(shí)施例中,指令集A為空,從而可以大大地減少處理量,也就是提高了性能。圖4b示出了與參考圖4a描述的流程基本上相同的流程。選擇要處理的瓦片的步驟440、執(zhí)行剔除程序的步驟452、判斷剔除條件是否為"真"的步驟456、執(zhí)行指令集A的步驟458、執(zhí)行指令集B的步驟460、判斷是否有更多瓦片的步驟462全部都等同于圖4a的相應(yīng)步驟。然而,在這里向剔除程序步驟454b提供輸入值是在執(zhí)行剔除程序之前執(zhí)行的。在這個(gè)步驟中,計(jì)算所有相關(guān)的輸入值(在這個(gè)實(shí)施例中使用區(qū)間算法進(jìn)行計(jì)算)并提供這些值,從而使得剔除程序可以訪問這些值。這樣對于輸入值計(jì)算來說實(shí)現(xiàn)了一個(gè)"推"機(jī)制。圖5示出了包含圖1的顯示適配器100的通用計(jì)算機(jī)583的概覽框架圖。該計(jì)算機(jī)具有控制器570,例如CPU,其能夠執(zhí)行軟件指令??刂破?70連接到易失性存儲器571(例如隨機(jī)存取存儲器(RAM))和顯示適配器500、100。顯示適配器500、100進(jìn)而連接到顯示器576,例如CRT監(jiān)視器、LCD監(jiān)視器等等??刂破?70還連接到持久性存儲器573(例如硬盤驅(qū)動器或者閃存存儲器)和光存儲器574(例如諸如CD、DVD、HD-DVD或者藍(lán)光光盤之類的光介質(zhì)的讀取器和/或者寫入器)。網(wǎng)絡(luò)接口581還連接到控制器570以便提供對網(wǎng)絡(luò)582的接入,網(wǎng)絡(luò)582例如為局域網(wǎng)、廣域網(wǎng)(例如,因特網(wǎng))、無線局域網(wǎng)或者無線城域網(wǎng)。通過周邊接口577,例如通用串行總線、無線通用串行總統(tǒng)、火線、RS232串行、中心并行(Centronicsparallel)、PS/2、CPU570類型的接口,可以與鼠標(biāo)578、鍵盤579或者任意其它外部設(shè)備580(包括游戲桿、打印機(jī)、掃描儀)等等進(jìn)行通信。應(yīng)當(dāng)注意,雖然上面描述的通用計(jì)算機(jī)實(shí)現(xiàn)了本發(fā)明,但是本發(fā)明還可以包含在使用數(shù)字圖形,尤其是3D圖形,例如游戲控制臺、移動電話、MP3播放器等等的任意環(huán)境中?,F(xiàn)在描述如何使用區(qū)間算法計(jì)算輸入值,假設(shè)了如上所述那樣實(shí)現(xiàn)指令集。隨后可以對由多個(gè)碎片構(gòu)成的整個(gè)瓦片執(zhí)行剔除程序。而且,為了如此執(zhí)行,還需要計(jì)算對于可變(或者內(nèi)插的)輸入的邊界區(qū)間。首先,使用內(nèi)插在瓦片的所有四個(gè)角內(nèi)計(jì)算可變屬性的值。然后計(jì)算這四個(gè)值的邊界區(qū)間,并且將其稱為^4^,:」。還計(jì)算在三角形頂點(diǎn)處的可變屬性的邊界區(qū)間,并且將其稱為^4、,」。在整個(gè)瓦片上的可變屬性的最終邊界區(qū)間可以如下計(jì)算^-Lmax(^,^),min(^;,i:)」。應(yīng)當(dāng)注意,還有其它方法可以計(jì)算區(qū)間,例如通過考慮覆蓋瓦片的所有碎片來進(jìn)行計(jì)算。最后,必須處理異常情況,如圖6a中所示。這里,以棋盤紋理686的形式示出了三角形685上的透視矯正內(nèi)插(perspectivecorrectinterpolation)。如所見到的,該紋理關(guān)于投影線687鏡像,該投影線687是三角形685的水平線在其無限大時(shí)所投影的線。該鏡像效果是由透視矯正內(nèi)插中使用的劃分所引起的反投影的形式。現(xiàn)在,假設(shè)需要在覆蓋了該投影線的瓦片688上計(jì)算某種可變屬性的邊界區(qū)間。圖6b示出了透視矯正內(nèi)插函數(shù)690,以及當(dāng)內(nèi)插瓦片688的四個(gè)角時(shí)獲得的值691a—d。注意,這些角的邊界區(qū)間692明顯不正確,因?yàn)樵搮^(qū)域沒有包含在這個(gè)區(qū)間內(nèi)該函數(shù)690的所有值,這是因?yàn)樵摵瘮?shù)690在該投影線上接近無限大。通過設(shè)置a^為^作為用于覆蓋該投影線的瓦片的邊界區(qū)間,來處理這種異常情況。人們可能會爭論這個(gè)區(qū)間是過度保守的,但是這些有問題的瓦片很少以至于很難引發(fā)更復(fù)雜的計(jì)算。在這個(gè)實(shí)施例中,只穿過了實(shí)際覆蓋該三角形的瓦片,并且使用透視矯正重心坐標(biāo)(barycentriccoordinate)來進(jìn)行內(nèi)插。在GraphicHardware第65—72頁中的MCCOOL,M.D.,WALES,C.禾卩MOULE,K.2002,"IncrementalandHierarchicalHilbertOrderEdgeEquationPolygonRasterization"公開了所述重'亡、坐禾示。當(dāng)對于瓦片的角計(jì)算透視矯正重心坐標(biāo)時(shí),可以很容易地檢測到這些有問題的瓦片。透視矯正重心坐標(biāo)被表達(dá)為有理函數(shù),并且如果對于任意的瓦片角來說分母小于0,那么該瓦片跨過投影線。下面將公開如何執(zhí)行N維紋理查找。用于執(zhí)行N維紋理査找的區(qū)間指令對于用于置換映射細(xì)分(replacementmapsubdivision)的已知方法而言是一種改進(jìn)。通常的方式是提供這樣的一種快速有效的手段即,在給定的區(qū)域上計(jì)算紋理數(shù)據(jù)的邊界區(qū)間。這個(gè)實(shí)例的剩余部分將僅僅考慮二維紋理,但是其具有明顯的普遍性。首先,我們對于經(jīng)過了基于區(qū)間的紋理査找的每一個(gè)紋理計(jì)算兩個(gè)Mipmap金字塔。如圖7a和7b所示,每一個(gè)元素(例如Mipmap中的元素793)都都計(jì)算為該金字塔中在其下緊鄰的四個(gè)對應(yīng)紋理像素(例如元素794a—d)中按成分(component)計(jì)的最小值(如圖7a所示)或者按成分計(jì)的最小值(如圖7b所示)。最終結(jié)果可以被看作是邊界區(qū)間的Mipmap金字塔??梢杂沈?qū)動器很容易地處理該預(yù)先計(jì)算的類型,這類似于如何自動產(chǎn)生標(biāo)準(zhǔn)Mipmap。當(dāng)執(zhí)行紋理查找時(shí),我們希望在軸對齊的邊界框(其是紋理坐標(biāo)區(qū)間)上計(jì)算紋理數(shù)據(jù)的邊界區(qū)間。首先,我們計(jì)算適當(dāng)?shù)腗ipmap等級如下log2(max([_^^_y)其中f=A,。是未歸一化的整數(shù)紋理坐標(biāo)的二維區(qū)間(也就是,它們包括紋理的大小)。它ij]都被適當(dāng)?shù)剡M(jìn)行了舍入,以使得對于!'e",W,L是向下舍入(floored),是向上舍入(ceiled)。當(dāng)轉(zhuǎn)換到該Mipmap等級時(shí),f在任意維度上都不會大于一個(gè)紋理像素寬度,其最寬的維度將會是紋理像素寬度的至少1/2。這樣,我們得到了四種可能的紋理坐標(biāo)區(qū)間的情況,如在圖8a—d中所示的。在用于普通線性內(nèi)插的存取方案中,我們始終從紋理像素796中采樣2X2紋理像素的正方形,其左下角在&'y處。然后將實(shí)際覆蓋紋理坐標(biāo)區(qū)間的紋理像素的顏色的邊界計(jì)算為紋理査找的結(jié)果。也就是,我們放棄了由圖8a—c中標(biāo)記795所指示的用陰影表示的紋理像素。由于轉(zhuǎn)換成f的Mipmap將被舍入為最接近的整數(shù)坐標(biāo),因此通過僅比較最后一個(gè)比特就可以非常有效地實(shí)現(xiàn)這種覆蓋測試。我們的紋理查找流程與標(biāo)準(zhǔn)的"三線性"濾波紋理查找的計(jì)算開銷基本相同。最大的不同在于,我們需要能夠從兩種不同的Mipmap金字塔的相同等級中采樣而不是從兩個(gè)相鄰的等級中,以及我們將最終的結(jié)果計(jì)算為邊界,而不是使用線性內(nèi)插。讀者還應(yīng)當(dāng)注意,這種策略實(shí)質(zhì)上支持所有不同類型的環(huán)繞模式(wrappingmode),例如夾緊(clamp),重復(fù)和鏡像重復(fù)。在Mipmap等級計(jì)算之后,可以將適當(dāng)?shù)沫h(huán)繞模式很簡單地應(yīng)用到區(qū)間坐標(biāo)上,從而得到期望的結(jié)果。還可以示出,對于濾波紋理查找來說,只要濾波紋理査找使用有限的差值來計(jì)算導(dǎo)數(shù)以及只要紋理濾波器不向所述導(dǎo)數(shù)所跨越的區(qū)域外部延伸,這種紋理查找流程就是保守的。如果有更多的紋理化單元可用,就可以改善區(qū)間紋理查找的邊界。標(biāo)準(zhǔn)的紋理查找假設(shè)我們可以每次都能讀出2X2個(gè)紋理像素的塊。如果我們具有足夠的硬件資源讀取4X4個(gè)紋理像素的塊,那么我們可以在Mipmap層次結(jié)構(gòu)中向下移動一個(gè)等級并且能獲得更精確的結(jié)果。另外一個(gè)重要的觀察就是,我們僅僅需要?jiǎng)?chuàng)造在剔除程序中實(shí)際使用的Mipmap等級。這種優(yōu)化對于在屏幕空間中發(fā)生的算法來說尤其重要,例如不受順序約束的透明度。在這種情況中,我們預(yù)先知道我們僅僅需要在其基本等級上的紋理,以及對應(yīng)于屏幕上瓦片的Mipmap等級。注意,這種瓦片信息在當(dāng)今的硬件中是可以得到的,并且可以自由讀取。最小和最大深度值例如可以在分層深度剔除單元中得到。還有可能(但是可能性較小)已經(jīng)為了壓縮目的而計(jì)算了最小和最大顏色,否則的話我們就需要計(jì)算它們。對于紋理的底層和瓦片Mipmap等級的渲染的擴(kuò)展會大大地加速屏幕空間算法。我們可以使用與二維紋理相同的方法來為立方圖計(jì)算最小/最大Mipmap金字塔。然而,在接近立方體的邊緣和角的位置處,必須進(jìn)行特別的處理。對于邊緣,我們將在邊緣的兩側(cè)上的四個(gè)紋理像素的最小值或最大值計(jì)算為Mipmap顏色,對于角,我們將在從那個(gè)角發(fā)出的三條邊上的四個(gè)紋理像素的最小值或最大值計(jì)算為Mipmap顏色。在邊緣的相對兩端上的紋理像素將因此共用在較高M(jìn)ipmap等級上的相同顏色。類似的,在一個(gè)角內(nèi)的三個(gè)紋理像素也將共用一個(gè)相同的顏色。應(yīng)當(dāng)注意,最高等級的Mipmap將包含在整個(gè)立方體上的最小和最大值,如所期望的那樣。我們現(xiàn)在可以使用該Mipmap金字塔來進(jìn)行保守的立方體圖查找,并且僅對立方體的一側(cè)進(jìn)行訪問。首先,我們計(jì)算等效地基于主軸的區(qū)間。給定一個(gè)紋理坐標(biāo)區(qū)間f=(f"f""),我們將主軸i定義這樣的軸艮卩^和f在其上具有相同符號并且min(y,悶)在其上是最大的。如果^和^在所有軸上具有不同符號,那么我們就不能找到主軸。然而,只有在原點(diǎn)位于紋理坐標(biāo)區(qū)域內(nèi)時(shí)才發(fā)生這種情況。在這種情況中,紋理坐標(biāo)區(qū)間將投影到整個(gè)立方體圖上。我們可以通過選擇最高的Mipmap等級并且對任意的立方圖表面進(jìn)行采樣來處理這種情況。一旦我們找到主軸,我們就保守地將紋理坐標(biāo)區(qū)間投影在立方圖的相應(yīng)側(cè)上。通過分別投影兩個(gè)剩余軸中每一個(gè)的邊界來實(shí)現(xiàn)該投影。我們考慮一種實(shí)例,在該實(shí)例中,x是主軸,y是我們想要為其投影邊界的軸。那么對于紋理坐標(biāo)區(qū)間(注意,由于x軸在這種情況中不是主軸,導(dǎo)致沒有區(qū)間可以跨越y(tǒng)軸)和我們必須進(jìn)行投影來計(jì)算邊界的極值點(diǎn)來說有六種可能的情況。幸運(yùn)的是,很容易確定哪些是這些極值點(diǎn)。這足以看到紋理坐標(biāo)區(qū)間的符號,并且通過表査找來得到極值點(diǎn)。我們對于剩余的兩個(gè)軸來的極值點(diǎn)進(jìn)行投影以形成二維投影坐標(biāo)區(qū)間。該區(qū)間用于計(jì)算Mipmap等級以及執(zhí)行二維紋理查找,這與上面針對二維情況所描述的方法相同。由于在Mipmap生成期間的信息丟失(bleeding),可能會顯示出這種算法是保守的。另外,其計(jì)算量不大。找到主軸,并且投影的計(jì)算開銷會兩倍于正常的立方體映射實(shí)現(xiàn),考慮到我們使用了區(qū)間,這種情況是合理的。另外,我們需要表格函數(shù)來根據(jù)符號求解極值點(diǎn),但是這已經(jīng)是計(jì)算量非常小的情況了。以上已經(jīng)主要結(jié)合幾個(gè)實(shí)施例對本發(fā)明進(jìn)行了描述。然而,本領(lǐng)域技術(shù)人員都很容易理解,除了以上公開的實(shí)施例之外的其它實(shí)施例在本發(fā)明的范圍內(nèi)都是可行的,本發(fā)明的范圍由附帶的發(fā)明權(quán)利要求定義。權(quán)利要求1、一種用于提高數(shù)字表示圖形的生成性能的方法,包括以下步驟選擇(440)要處理的包含碎片的瓦片;對所述瓦片執(zhí)行(452)剔除程序,所述剔除程序是可置換的;以及對所述碎片的多個(gè)子集中的每一個(gè)子集執(zhí)行指令集,所述指令集是基于所述剔除程序的輸出值而從多個(gè)指令集中選出的。2、根據(jù)權(quán)利要求1所述的方法,其中,在所述執(zhí)行剔除程序的步驟中,對所述剔除程序的至少一部分指令使用表示整個(gè)瓦片的算法。3、根據(jù)前述任一權(quán)利要求所述的方法,其中,在所述執(zhí)行剔除程序的步驟中,對所述剔除程序的至少一部分指令使用區(qū)間算法。4、根據(jù)前述任一權(quán)利要求所述的方法,其中,在所述執(zhí)行剔除程序的步驟中,對所述剔除程序的至少一部分指令使用仿射算法。5、根據(jù)前述任一權(quán)利要求所述的方法,進(jìn)一步包括以下步驟向所述剔除程序提供(454a,454b)表示所述碎片中的多個(gè)碎片的至少一個(gè)屬性的值。6、根據(jù)前述任一權(quán)利要求所述的方法,其中,所述瓦片的碎片的每一個(gè)所述子集都包含一個(gè)碎片。7、根據(jù)前述任一權(quán)利要求所述的方法,其中,所述執(zhí)行指令集的步驟包括當(dāng)所述輸出值滿足剔除條件時(shí),對于所述碎片的多個(gè)子集中的每一個(gè)子集執(zhí)行第一指令集,而當(dāng)所述輸出值不滿足所述剔除條件時(shí),對于碎片的所述多個(gè)子集中的每一個(gè)子集執(zhí)行第二指令集。8、根據(jù)權(quán)利要求7所述的方法,其中,所述第一指令集比所述第二指令集包含更少的指令。9、根據(jù)權(quán)利要求7或8所述的方法,其中,所述第一指令集包括零個(gè)指令。10、根據(jù)權(quán)利要求7至9中任一個(gè)所述的方法,其中,在所述執(zhí)行指令集的步驟中,所述剔除條件對應(yīng)于所述瓦片的所述碎片對最終渲染的圖像沒有貢獻(xiàn)。11、根據(jù)權(quán)利要求7至9中任一個(gè)所述的方法,其中,在所述執(zhí)行指令集的步驟中,所述剔除條件對應(yīng)于所述瓦片的所述碎片對最終渲染的圖像的貢獻(xiàn)小于一閾值。12、根據(jù)前述任一權(quán)利要求所述的方法,其中,在所述提供值的步驟中,使用區(qū)間算法,并使用所述瓦片的多個(gè)碎片作為輸入,來計(jì)算所述值。13、根據(jù)前述任一權(quán)利要求所述的方法,其中,在所述提供值的步驟中,使用仿射算法,并使用所述瓦片的多個(gè)碎片作為輸入,來計(jì)算所述值。14、根據(jù)前述任一權(quán)利要求所述的方法,其中,在所述提供值的步驟中,作為所述剔除程序請求對所述值進(jìn)行訪問的結(jié)果,來計(jì)算所述值。15、根據(jù)權(quán)利要求1至14中任一個(gè)所述的方法,其中,在所述提供值的步驟中,在執(zhí)行所述剔除程序之前計(jì)算所述值。16、根據(jù)前述任一權(quán)利要求所述的方法,其中,所述選擇(440)要處理的包含碎片的瓦片的步驟包括選擇至少部分地被正在處理的多邊形所覆蓋的瓦片。17、根據(jù)權(quán)利要求16所述的方法,其中,所述碎片是與所述多邊形關(guān)聯(lián)的碎片。18、根據(jù)權(quán)利要求16或17所述的方法,其中,重復(fù)所述選擇(440)瓦片的步驟、執(zhí)行(452)剔除程序的步驟、提供(454a,454b)值的步驟以及執(zhí)行指令集的步驟,直到處理完所有的至少部分地被所述特定多邊形覆蓋的瓦片為止。19、根據(jù)前述任一權(quán)利要求所述的方法,其中,在所述選擇的指令集中或在由后續(xù)使用的處理單元進(jìn)行的處理中,使用由所述剔除程序計(jì)算的至少一個(gè)值。20、一種用于生成數(shù)字表示圖形的顯示適配器(100,500),包括用于選擇要處理的包含碎片的瓦片的模塊;用于對所述瓦片執(zhí)行剔除程序的模塊,所述剔除程序是可置換的;以及用于對所述碎片的多個(gè)子集中的每一個(gè)子集執(zhí)行指令集的模塊,所述指令集是基于所述剔除程序的輸出值而從多個(gè)指令集中選出的。21、一種包含軟件指令的計(jì)算機(jī)程序產(chǎn)品,所述軟件指令當(dāng)在控制器中執(zhí)行時(shí),執(zhí)行如權(quán)利要求1至19中任一個(gè)所述的方法。全文摘要提供了一種用于提高數(shù)字表示圖形的生成性能的方法。所述方法包括以下步驟選擇(440)要處理的包含碎片的瓦片;對該瓦片執(zhí)行(452)剔除程序,該剔除程序是可置換的;并且對所述碎片的多個(gè)子集中的每一個(gè)子集執(zhí)行指令集,所述指令集是基于所述剔除程序的輸出值而從多個(gè)指令集中選出的。還提供了相應(yīng)的顯示適配器和計(jì)算機(jī)程序產(chǎn)品。文檔編號G06T15/40GK101681526SQ200880001484公開日2010年3月24日申請日期2008年1月23日優(yōu)先權(quán)日2007年1月24日發(fā)明者J·哈塞爾格倫,T·阿可尼內(nèi)-默勒申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1