欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

通過使用可置換的剔除程序提高圖形性能的方法和裝置與流程

文檔序號:12039194閱讀:249來源:國知局
通過使用可置換的剔除程序提高圖形性能的方法和裝置與流程
通過使用可置換的剔除程序提高圖形性能的方法和裝置本申請是申請日為2008年1月23日,申請?zhí)枮?00880001484.4的發(fā)明專利申請的分案申請。技術(shù)領(lǐng)域本發(fā)明整體涉及數(shù)字表示圖形,尤其涉及提高生成數(shù)字表示圖形的性能。

背景技術(shù):
數(shù)字表示圖形(digitallyrepresentedgraphics),例如計算機圖形,在性能上一直持續(xù)不斷地得到改進。在二十世紀八十年代和九十年代,出現(xiàn)了具有圖形加速器的用于計算機和游戲控制臺的顯示適配器,這減輕了在圖形生成時中央處理單元(CPU)的負擔(dān)。起初,顯示適配器提供2D圖形加速,但是它們最終還包括了對3D圖形加速的支持。如今顯示適配器使用了通常被叫做圖形處理單元(GPU)的處理單元。。由于3D圖形的復(fù)雜性,當(dāng)前的GPU在執(zhí)行與3D圖形相關(guān)的計算時使用了其大量的處理能力。顯示適配器持續(xù)出現(xiàn)的問題是性能問題。始終會存在需要更高幀速率(每秒鐘所渲染的屏幕圖像)、更高分辨率和更高圖像質(zhì)量的新的應(yīng)用和游戲,這就導(dǎo)致了對于在盡可能短的時間內(nèi)渲染每一個屏幕圖像的需求。換句話說,提高性能始終是非常重要的。一種通常的提高性能的方法就是通過提供更高的時鐘速度、流水線化或者利用并行計算來提高GPU的處理能力。然而,這樣通常會產(chǎn)生更多的熱量,導(dǎo)致更多的電力消耗,以及為了冷卻GPU產(chǎn)生的更高的風(fēng)扇噪音。而且,每一個GPU的時鐘速度也是有限制的。因此,在改進數(shù)字表示圖形的性能方面仍然存在能力不足的問題。

技術(shù)實現(xiàn)要素:
鑒于上述原因,本發(fā)明的一個目的就是為了解決或者至少減少上述的問題。通常,通過附帶的獨立專利權(quán)利要求來實現(xiàn)上述目的。根據(jù)本發(fā)明的第一方面,提供了一種用于提高數(shù)字表示圖形的生成性能的方法,包括以下步驟:選擇要處理的包含碎片(fragment)的瓦片(tile);對該瓦片執(zhí)行剔除程序,該剔除程序是可置換的;并且對所述碎片的多個子集中的每一個子集執(zhí)行一指令集,所述指令集是基于所述剔除程序的輸出值而從多個指令集中選出的。因此有可能創(chuàng)建處理瓦片的剔除程序,并且執(zhí)行這些剔除程序來提高性能。在對所述瓦片執(zhí)行剔除程序的步驟中,可以對所述剔除程序的至少一部分指令使用表示整個瓦片的算法。這使得在每一次都可以處理多個碎片,從而提高了性能。在執(zhí)行剔除程序的步驟中,對所述剔除程序的至少一部分指令使用區(qū)間(interval)算法。區(qū)間算法允許表示多個碎片并且實現(xiàn)起來相對容易。在執(zhí)行剔除程序的步驟中,對所述剔除程序的至少一部分指令使用仿射算法。仿射算法可以獲得對多個碎片的相對準確的表示。上述方法可以進一步包括以下步驟:向所述剔除程序提供表示所述碎片中的多個碎片的至少一個屬性的值。所述瓦片的碎片的每一個子集都可以包括一個碎片。換句話說,可以針對每一個碎片執(zhí)行處理。執(zhí)行指令集的步驟可以包括:當(dāng)所述輸出值滿足剔除條件時,對于所述碎片的多個子集中的每一個子集執(zhí)行第一指令集,而當(dāng)所述輸出值不滿足所述剔除條件時,對于碎片的所述多個子集中的每一個子集執(zhí)行第二指令集。第一指令集可以比第二指令集包含更少的指令。第一指令集可以包含零個指令。換句話說,如果所述剔除條件為“真”,則不執(zhí)行指令,這樣就提高了性能。在執(zhí)行指令集的步驟中,所述剔除條件可以對應(yīng)于:所述瓦片的碎片對最終渲染的圖像沒有貢獻。這是本發(fā)明中性能提高的根源。在執(zhí)行指令集的步驟中,所述剔除條件可以對應(yīng)于:所述瓦片的碎片對最終渲染的圖像的貢獻小于一閾值。這樣可以在與圖像質(zhì)量的降低之間具有某種折衷的情況下進一步提高性能??梢愿鶕?jù)所需要的在性能與圖像質(zhì)量之間的平衡來任意地設(shè)定所述閾值。在提供值的步驟中,使用區(qū)間算法,并使用所述瓦片的多個碎片作為輸入,來計算所述值。在提供值的步驟中,使用仿射算法,并使用所述瓦片的多個碎片作為輸入,來計算所述值。在提供值的步驟中,作為所述剔除程序請求對所述值進行訪問的結(jié)果,來計算所述值。換句話說,可以使用一種“拉(pull)”的機制向剔除程序提供值。在提供值的步驟中,在執(zhí)行所述剔除程序之前計算所述值。換句話說,可以使用一種“推(push)”的機制向剔除程序提供值。選擇要處理的包含碎片的瓦片的步驟包括:選擇至少部分地被正在處理的多邊形所覆蓋的瓦片。換句話說,選擇多邊形對其具有貢獻的瓦片。所述碎片可以是與所述多邊形關(guān)聯(lián)的碎片。因此,只處理瓦片中的多邊形的碎片。重復(fù)所述選擇瓦片的步驟、執(zhí)行剔除程序的步驟以及執(zhí)行指令集的步驟,直到處理完所有的至少部分地被特定多邊形覆蓋的瓦片為止。當(dāng)處理完一個多邊形時,可以類似地處理下一個多邊形,并以此類推,直到處理完圖像的所有多邊形為止。在執(zhí)行指令集的步驟中,在所述選擇的指令集中或在由后續(xù)使用的處理單元進行的處理中,可以使用由所述剔除程序計算的至少一個值。例如,這些值可以在隨后的階段中執(zhí)行的分層深度剔除中使用。本發(fā)明的第二方面是適用于生成數(shù)字表示圖形的顯示適配器,包括:用于選擇要處理的包含碎片的瓦片的模塊;用于對所述瓦片執(zhí)行剔除程序的模塊,所述剔除程序是可置換的;以及用于對所述碎片的多個子集中的每一個子集執(zhí)行指令集的模塊,所述指令集是基于所述剔除程序的輸出值而從多個指令集中選出的。應(yīng)當(dāng)明白,本發(fā)明的第二方面可以以與本發(fā)明第一方面的任意特征相對應(yīng)的特征的任意組合一起來實現(xiàn)。本發(fā)明的第三方面是一種包含軟件指令的計算機程序產(chǎn)品,所述軟件指令當(dāng)在控制器中執(zhí)行時,執(zhí)行根據(jù)本發(fā)明的第一方面的方法。本發(fā)明的其它目的、特征和優(yōu)點將會從下面的詳細描述中、附帶的從屬權(quán)利要求中以及從附圖中看到。通常,在權(quán)利要求中使用的所有術(shù)語都可以根據(jù)該技術(shù)領(lǐng)域中的通常含義進行解釋,除非本文中另有明確定義。所有的“一個【元件、設(shè)備、組件、裝置、步驟等等】”都可以開放性地解釋為是元件、設(shè)備、組件、裝置和步驟的至少一個實例,除非文中另有明確聲明。本文中公開的任意方法中的步驟都并非必然以公開的順序執(zhí)行,除非有明確地聲明。附圖說明現(xiàn)在結(jié)合附圖對本發(fā)明的各個實施例進行更詳細描述,其中:圖1是一個方塊圖,示出了本發(fā)明的一個實施例的一個顯示適配器中不同的實體之間如何互相作用。圖2是一個示意性方塊圖,示出了圖1的顯示適配器中使用的不同的程序之間的關(guān)系。圖3示出了在圖1的顯示適配器中使用區(qū)間算法剔除瓦片的一個實例。圖4a和4b示出了剔除處理的流程圖,其可以在圖1的顯示適配器中執(zhí)行。圖5示出了包含圖1的顯示適配器的計算機的概覽架構(gòu)。圖6a是一個顯示圖,示出了圖1的顯示適配器中的一種輸入值異常情況。圖6b是圖6a的情況中輸入值的圖表。圖7a和7b是圖1的顯示適配器中使用的紋理的說明性透視圖。圖8a-d是圖1的顯示適配器中使用的紋理的說明圖。具體實施方式下文結(jié)合附圖對本發(fā)明進行更完整描述,其中示出了本發(fā)明的一些實施例。然而,本發(fā)明可以以許多不同的形式體現(xiàn),而不應(yīng)當(dāng)限于在文中列舉出的實施例;而且,通過實例化方式提供這些實施例以便使得本公開內(nèi)容更加透徹和完整,并且可以將本發(fā)明的范圍傳達給本領(lǐng)域技術(shù)人員。文中相同的數(shù)字表示相同的元件。圖1是一個方塊圖,示出了本發(fā)明的一個實施例中的顯示適配器100中不同實體之間的相互作用。多邊形設(shè)置塊102用于按照連接的CPU570的指令(圖5)來設(shè)置多邊形。雖然可以使用任意多邊形,但是一般使用三角形。對于每一個多邊形,瓦片光柵化器104都對該多邊形進行分割,以便將其渲染到一個或多個瓦片中,其中每一個瓦片都由該多邊形至少部分地覆蓋。通常,瓦片是一組碎片。在一個實施例中,瓦片是包含多個碎片的二維矩形。這些碎片中的每一個都對應(yīng)于一個像素,并且包含對于渲染該像素并且測試該像素是否應(yīng)當(dāng)渲染在顯示屏上而言所必需的數(shù)據(jù)。雖然本發(fā)明的范圍可以包含任意的瓦片尺寸,但是瓦片通常的尺寸是8×8個碎片。分層深度剔除塊106執(zhí)行分層深度剔除(hierarchicaldepthculling),其基于深度緩沖進行剔除。這里,可以執(zhí)行保守的測試來證明該瓦片是否被深度緩沖器中的內(nèi)容所覆蓋。換句話說,從瀏覽者的角度看,測試是否存在另一個完全覆蓋該瓦片中的多邊形的渲染對象。如果是這種情況,就可以剔除整個瓦片,也就是,將瓦片挑選出來以便實現(xiàn)更少的處理,例如將該瓦片跳過。從而可以獲得性能的提高。應(yīng)當(dāng)明白,該分層深度剔除可以在可編程剔除單元108的剔除之前或之后執(zhí)行。該單元是一個固定的功能,這意味著其并不是執(zhí)行一個可置換的程序。在可編程剔除單元108中,根據(jù)可置換剔除程序118來執(zhí)行剔除,可置換剔除程序118也稱為可置換剔除模塊。下面結(jié)合附圖4a詳細解釋該剔除程序118的細節(jié)和效果。在碎片光柵化器110中,由可編程剔除單元108處理的瓦片被細分成覆蓋多邊形的多個碎片。這些碎片中每一個都對應(yīng)于一個像素并且包含對于渲染像素并且測試該像素是否應(yīng)當(dāng)渲染在顯示屏上而言所必需的數(shù)據(jù)。碎片數(shù)據(jù)包括光柵位置、深度、顏色、紋理坐標、模板(stancile)、阿爾法(alpha)(用于混合)等。對于每一個像素,都可能存在多個碎片樣本。在碎片程序單元112中,使用碎片程序120處理從碎片光柵化器輸出的碎片。這個單元的目的是執(zhí)行諸如將先前計算的顏色與紋理進行組合之類的任務(wù),并且添加諸如霧之類的效果,以及如果有可能的話,識別不需要渲染的碎片,即碎片剔除。紋理單元114用于紋理查找,例如使用一維、二維、三維、四維和立方圖cubemap紋理進行紋理查找,并且按照需要將它們提供給可編程剔除單元108和碎片程序單元112?;旌?深度/阿爾法單元116使用由碎片程序單元112提供的碎片在將碎片寫入目標緩沖器之前執(zhí)行深度測試、阿爾法測試和混合。圖2是一個示意性方塊圖,示出了在圖1的顯示適配器100中使用的不同程序之間的關(guān)系。原理是組合程序222可以用于自動生成在可編程剔除單元108中所使用的剔除程序218以及在碎片程序單元112中所使用的碎片程序220??蛇x的,程序員可以分別編寫剔除和碎片程序218和220。作為一個實例,考慮組合程序222的偽代碼片段(1),其最初目的是被編寫為碎片程序:DP3d,n,l(1)KILd<0TEX2Dc,t0,r1MULout.col,d,c這段程序通過使用DP3指令計算光(l)和法線(n)矢量之間的點積結(jié)果(d),來執(zhí)行基本擴散照明。n和l向量對于每一個碎片都是變化的。KIL指令終止表面法線并不面向光的所有碎片,這通過使d小于0來指示。TEX2D指令在c中執(zhí)行二維紋理查找。最后,將結(jié)果(d)乘以擴散材料系數(shù)(c)。在本文中提到的新方式中,對于剔除由碎片構(gòu)成的整個瓦片來說,KIL指令是一個機會。但是為了完成它,應(yīng)該保守地證明對于該整個瓦片而言滿足用于KIL指令的條件。緊跟著,在該實例中,還必須能夠保守地計算DP3指令的值,因為KlL指令依賴于該指令的結(jié)果。另外,必須能夠獲得對于整個瓦片的輸入(在這種情況中是法線n的向量和光l的向量)的保守邊界,因為DP3指令進而依賴于這些值。為了實現(xiàn)這個保守計算鏈,可編程剔除單元是基于與碎片程序單元相同的指令集的。而且,并非如同在處理碎片時通常的情況下一樣使用浮點變量作為指令的源和目標寄存器,而是使用了區(qū)間,并且使用區(qū)間算法的原理來實現(xiàn)該指令。作為一個簡單的實例,考慮一個標準的ADD指令:對于相應(yīng)的可編程剔除單元區(qū)間指令,用區(qū)間來置換操作數(shù),其中,一個區(qū)間(例如)被如下定義:從而可編程剔除單元ADD指令如下:其中,區(qū)間加法運算被實現(xiàn)為:可以看到,該區(qū)間加法的結(jié)果包括所有可能的“普通”加法的結(jié)果,或者更加正式的,其可以滿足其中因此,其保守來說是正確的。采用類似的方式來重新定義碎片程序指令集中的每一個指令的行為。所得到的增強指令的全部詳細情況如下所示。表1:實施例中的指令的運算和條件表達除了使用區(qū)間指令之外,輸入也必須被定義為區(qū)間。因此,必須能夠為在由碎片構(gòu)成的整個瓦片上的內(nèi)插的量來計算保守的邊界。這在下面詳細地解釋。應(yīng)當(dāng)注意,雖然這里使用了區(qū)間算法,但是也可使用表示整個瓦片的任意適當(dāng)?shù)乃惴?。例如,在本發(fā)明的范圍內(nèi)也同樣可以使用仿射算法。在上面的情況中,剔除程序218可以從組合程序(1)中自動獲得。下面是獲得的剔除程序:另外,這里的碎片程序220是從組合程序(1)中獲得的,其與組合程序220相同。下面是碎片程序:DP3d,n,l(7)KILd<0TEX2Dc,t0,r1MULout.col,d,c圖3示出了在圖1的顯示適配器100中能夠使用區(qū)間算法來剔除瓦片的實例。對于由碎片構(gòu)成的整個瓦片來說,假設(shè)確定了其法線330的輸入?yún)^(qū)間334是并且其光向量332的區(qū)間336是如圖3所示。假設(shè)z坐標為0,這樣可以簡化說明的實例。這些區(qū)間表示之間的點積得到了(參見表1中DP3指令)。因此可以得出結(jié)論,最多為由于該值嚴格地小于0,在上面結(jié)合圖2解釋的剔除程序中,可以剔除該整個瓦片而不用對每一個碎片執(zhí)行碎片程序,下面將結(jié)合圖4a進行更進一步的描述。這就是在本發(fā)明中性能提高的根源。圖4a示出了可以在圖1的顯示適配器100中執(zhí)行的剔除處理的流程圖。當(dāng)該流程開始時,已經(jīng)選擇了要渲染的多邊形。在選擇要處理的瓦片的步驟440中,選擇一個瓦片,其中所選擇的瓦片至少部分地由多邊形覆蓋。然后在執(zhí)行剔除程序的步驟452中執(zhí)行剔除程序。在這個實施例中,當(dāng)剔除程序請求輸入值時,該流程前進到為剔除程序步驟454a提供輸入值。所述輸入值是與以某種方式表示瓦片中所有碎片的特征相關(guān)的值。例如,輸入值可以是法線、位置坐標、光向量、顏色、紋理坐標等等。在這個實施例中,使用區(qū)間算法計算所請求的輸入值。換句話說,根據(jù)“拉”機制,只有當(dāng)需要時才計算輸入值,這與與下文中參考圖4b解釋的“推”機制相反。剔除程序的結(jié)果就是當(dāng)前處理的瓦片是否應(yīng)當(dāng)被剔除。這可以很嚴格地確定,從而只有當(dāng)前多邊形在該瓦片的區(qū)域中不會對最終渲染的圖像產(chǎn)生貢獻時才剔除該瓦片。可替代的,可以執(zhí)行有損剔除,從而如果在當(dāng)前瓦片的區(qū)域中當(dāng)前多邊形對最終渲染的圖像的貢獻落在某一閾值之下時,則剔除該瓦片。當(dāng)剔除程序完成處理時,流程繼續(xù)到判斷剔除條件是否為“真(true)”的步驟456。在這個步驟中,根據(jù)剔除程序的輸出來判斷是否對當(dāng)前處理的瓦片執(zhí)行剔除。如果要執(zhí)行剔除,則流程繼續(xù)到執(zhí)行指令集A的步驟458。反之,則流程繼續(xù)到執(zhí)行指令集B的步驟460。在一個實施例中,如果剔除條件為“假(false)”,則將該瓦片打碎成多個更小的瓦片,并且流程返回到選擇要處理的瓦片的步驟440。對于越來越小的瓦片連續(xù)地執(zhí)行以上步驟,從而實現(xiàn)分層、多級剔除處理。應(yīng)當(dāng)注意,除了剔除條件之外,剔除程序還可以輸出其它結(jié)果。這些結(jié)果可以向下發(fā)送到圖形流水線以便進行進一步的處理。這樣的實施例的一個實例包括反轉(zhuǎn)分層深度剔除單元106(圖1)和可編程剔除單元108(圖1)的順序??删幊烫蕹龁卧嬎阍谝粋€瓦片中深度值的邊界或者區(qū)間,然后將這個區(qū)間發(fā)送到分層深度剔除單元。分層深度剔除單元然后基于由程序計算的深度值來執(zhí)行剔除。在執(zhí)行指令集A的步驟458中,針對瓦片的子集(通常是碎片)執(zhí)行指令集A。這些碎片通常共同覆蓋該瓦片的所有像素,該瓦片覆蓋被處理的三角形。在執(zhí)行指令集B的步驟460中,針對瓦片的子集(通常是碎片)執(zhí)行指令集B。這通常是在瓦片級之后的一個對碎片進行渲染的傳統(tǒng)處理。指令集A通常比指令集B具有更低的要求,從而導(dǎo)致當(dāng)剔除條件被確定為“真”時,對于瓦片所處理的指令數(shù)量較少,從而獲得性能上的提高。在一個實施例中,指令集A為空,從而可以大大地減少處理量,也就是提高了性能。圖4b示出了與參考圖4a描述的流程基本上相同的流程。選擇要處理的瓦片的步驟440、執(zhí)行剔除程序的步驟452、判斷剔除條件是否為“真”的步驟456、執(zhí)行指令集A的步驟458、執(zhí)行指令集B的步驟460、判斷是否有更多瓦片的步驟462全部都等同于圖4a的相應(yīng)步驟。然而,在這里向剔除程序步驟454b提供輸入值是在執(zhí)行剔除程序之前執(zhí)行的。在這個步驟中,計算所有相關(guān)的輸入值(在這個實施例中使用區(qū)間算法進行計算)并提供這些值,從而使得剔除程序可以訪問這些值。這樣對于輸入值計算來說實現(xiàn)了一個“推”機制。圖5示出了包含圖1的顯示適配器100的通用計算機583的概覽框架圖。該計算機具有控制器570,例如CPU,其能夠執(zhí)行軟件指令??刂破?70連接到易失性存儲器571(例如隨機存取存儲器(RAM))和顯示適配器500、100。顯示適配器500、100進而連接到顯示器576,例如CRT監(jiān)視器、LCD監(jiān)視器等等??刂破?70還連接到持久性存儲器573(例如硬盤驅(qū)動器或者閃存存儲器)和光存儲器574(例如諸如CD、DVD、HD-DVD或者藍光光盤之類的光介質(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,例如通用串行總線、無線通用串行總線、火線、RS232串行、中心并行(Centronicsparallel)、PS/2、CPU570類型的接口,可以與鼠標578、鍵盤579或者任意其它外部設(shè)備580(包括游戲桿、打印機、掃描儀)等等進行通信。應(yīng)當(dāng)注意,雖然上面描述的通用計算機實現(xiàn)了本發(fā)明,但是本發(fā)明還可以包含在使用數(shù)字圖形,尤其是3D圖形,例如游戲控制臺、移動電話、MP3播放器等等的任意環(huán)境中。現(xiàn)在描述如何使用區(qū)間算法計算輸入值,假設(shè)了如上所述那樣實現(xiàn)指令集。隨后可以對由多個碎片構(gòu)成的整個瓦片執(zhí)行剔除程序。而且,為了如此執(zhí)行,還需要計算對于可變(或者內(nèi)插的)輸入的邊界區(qū)間。首先,使用內(nèi)插在瓦片的所有四個角內(nèi)計算可變屬性的值。然后計算這四個值的邊界區(qū)間,并且將其稱為還計算在三角形頂點處的可變屬性的邊界區(qū)間,并且將其稱為在整個瓦片上的可變屬性的最終邊界區(qū)間可以如下計算應(yīng)當(dāng)注意,還有其它方法可以計算區(qū)間,例如通過考慮覆蓋瓦片的所有碎片來進行計算。最后,必須處理異常情況,如圖6a中所示。這里,以棋盤紋理686的形式示出了三角形685上的透視矯正內(nèi)插(perspectivecorrectinterpolation)。如所見到的,該紋理關(guān)于投影線687鏡像,該投影線687是三角形685的水平線在其無限大時所投影的線。該鏡像效果是由透視矯正內(nèi)插中使用的劃分所引起的反投影的形式?,F(xiàn)在,假設(shè)需要在覆蓋了該投影線的瓦片688上計算某種可變屬性的邊界區(qū)間。圖6b示出了透視矯正內(nèi)插函數(shù)690,以及當(dāng)內(nèi)插瓦片688的四個角時獲得的值691a-d。注意,這些角的邊界區(qū)間692明顯不正確,因為該區(qū)域沒有包含在這個區(qū)間內(nèi)該函數(shù)690的所有值,這是因為該函數(shù)690在該投影線上接近無限大。通過設(shè)置為作為用于覆蓋該投影線的瓦片的邊界區(qū)間,來處理這種異常情況。人們可能會爭論這個區(qū)間是過度保守的,但是這些有問題的瓦片很少以至于很難引發(fā)更復(fù)雜的計算。在這個實施例中,只穿過了實際覆蓋該三角形的瓦片,并且使用透視矯正重心坐標(barycentriccoordinate)來進行內(nèi)插。在GraphicHardware第65-72頁中的MCCOOL,M.D.,WALES,C.和MOULE,K.2002,“IncrementalandHierarchicalHilbertOrderEdgeEquationPolygonRasterization”公開了所述重心坐標。當(dāng)對于瓦片的角計算透視矯正重心坐標時,可以很容易地檢測到這些有問題的瓦片。透視矯正重心坐標被表達為有理函數(shù),并且如果對于任意的瓦片角來說分母小于0,那么該瓦片跨過投影線。下面將公開如何執(zhí)行N維紋理查找。用于執(zhí)行N維紋理查找的區(qū)間指令對于用于置換映射細分(replacementmapsubdivision)的已知方法而言是一種改進。通常的方式是提供這樣的一種快速有效的手段:即,在給定的區(qū)域上計算紋理數(shù)據(jù)的邊界區(qū)間。這個實例的剩余部分將僅僅考慮二維紋理,但是其具有明顯的普遍性。首先,我們對于經(jīng)過了基于區(qū)間的紋理查找的每一個紋理計算兩個Mipmap金字塔。如圖7a和7b所示,每一個元素(例如Mipmap中的元素793)都都計算為該金字塔中在其下緊鄰的四個對應(yīng)紋理像素(例如元素794a-d)中按成分(component)計的最小值(如圖7a所示)或者按成分計的最小值(如圖7b所示)。最終結(jié)果可以被看作是邊界區(qū)間的Mipmap金字塔??梢杂沈?qū)動器很容易地處理該預(yù)先計算的類型,這類似于如何自動產(chǎn)生標準Mipmap。當(dāng)執(zhí)行紋理查找時,我們希望在軸對齊的邊界框(其是紋理坐標區(qū)間)上計算紋理數(shù)據(jù)的邊界區(qū)間。首先,我們計算適當(dāng)?shù)腗ipmap等級如下:其中是未歸一化的整數(shù)紋理坐標的二維區(qū)間(也就是,它們包括紋理的大小)。它們都被適當(dāng)?shù)剡M行了舍入,以使得對于i∈{x,y},ti是向下舍入(floored),是向上舍入(ceiled)。當(dāng)轉(zhuǎn)換到該Mipmap等級時,在任意維度上都不會大于一個紋理像素寬度,其最寬的維度將會是紋理像素寬度的至少1/2。這樣,我們得到了四種可能的紋理坐標區(qū)間的情況,如在圖8a-d中所示的。在用于普通線性內(nèi)插的存取方案中,我們始終從紋理像素796中采樣2×2紋理像素的正方形,其左下角在(tx,ty)處。然后將實際覆蓋紋理坐標區(qū)間的紋理像素的顏色的邊界計算為紋理查找的結(jié)果。也就是,我們放棄了由圖8a-c中標記795所指示的用陰影表示的紋理像素。由于轉(zhuǎn)換成的Mipmap將被舍入為最接近的整數(shù)坐標,因此通過僅比較最后一個比特就可以非常有效地實現(xiàn)這種覆蓋測試。我們的紋理查找流程與標準的“三線性”濾波紋理查找的計算開銷基本相同。最大的不同在于,我們需要能夠從兩種不同的Mipmap金字塔的相同等級中采樣而不是從兩個相鄰的等級中,以及我們將最終的結(jié)果計算為邊界,而不是使用線性內(nèi)插。讀者還應(yīng)當(dāng)注意,這種策略實質(zhì)上支持所有不同類型的環(huán)繞模式(wrappingmode),例如夾緊(clamp),重復(fù)和鏡像重復(fù)。在Mipmap等級計算之后,可以將適當(dāng)?shù)沫h(huán)繞模式很簡單地應(yīng)用到區(qū)間坐標上,從而得到期望的結(jié)果。還可以示出,對于濾波紋理查找來說,只要濾波紋理查找使用有限的差值來計算導(dǎo)數(shù)以及只要紋理濾波器不向所述導(dǎo)數(shù)所跨越的區(qū)域外部延伸,這種紋理查找流程就是保守的。如果有更多的紋理化單元可用,就可以改善區(qū)間紋理查找的邊界。標準的紋理查找假設(shè)我們可以每次都能讀出2×2個紋理像素的塊。如果我們具有足夠的硬件資源讀取4×4個紋理像素的塊,那么我們可以在Mipmap層次結(jié)構(gòu)中向下移動一個等級并且能獲得更精確的結(jié)果。另外一個重要的觀察就是,我們僅僅需要創(chuàng)造在剔除程序中實際使用的Mipmap等級。這種優(yōu)化對于在屏幕空間中發(fā)生的算法來說尤其重要,例如不受順序約束的透明度。在這種情況中,我們預(yù)先知道我們僅僅需要在其基本等級上的紋理,以及對應(yīng)于屏幕上瓦片的Mipmap等級。注意,這種瓦片信息在當(dāng)今的硬件中是可以得到的,并且可以自由讀取。最小和最大深度值例如可以在分層深度剔除單元中得到。還有可能(但是可能性較小)已經(jīng)為了壓縮目的而計算了最小和最大顏色,否則的話我們就需要計算它們。對于紋理的底層和瓦片Mipmap等級的渲染的擴展會大大地加速屏幕空間算法。我們可以使用與二維紋理相同的方法來為立方圖計算最小/最大Mipmap金字塔。然而,在接近立方體的邊緣和角的位置處,必須進行特別的處理。對于邊緣,我們將在邊緣的兩側(cè)上的四個紋理像素的最小值或最大值計算為Mipmap顏色,對于角,我們將在從那個角發(fā)出的三條邊上的四個紋理像素的最小值或最大值計算為Mipmap顏色。在邊緣的相對兩端上的紋理像素將因此共用在較高Mipmap等級上的相同顏色。類似的,在一個角內(nèi)的三個紋理像素也將共用一個相同的顏色。應(yīng)當(dāng)注意,最高等級的Mipmap將包含在整個立方體上的最小和最大值,如所期望的那樣。我們現(xiàn)在可以使用該Mipmap金字塔來進行保守的立方體圖查找,并且僅對立方體的一側(cè)進行訪問。首先,我們計算等效地基于主軸的區(qū)間。給定一個紋理坐標區(qū)間我們將主軸i定義這樣的軸:即ti和在其上具有相同符號并且min在其上是最大的。如果ti和在所有軸上具有不同符號,那么我們就不能找到主軸。然而,只有在原點位于紋理坐標區(qū)域內(nèi)時才發(fā)生這種情況。在這種情況中,紋理坐標區(qū)間將投影到整個立方體圖上。我們可以通過選擇最高的Mipmap等級并且對任意的立方圖表面進行采樣來處理這種情況。一旦我們找到主軸,我們就保守地將紋理坐標區(qū)間投影在立方圖的相應(yīng)側(cè)上。通過分別投影兩個剩余軸中每一個的邊界來實現(xiàn)該投影。我們考慮一種實例,在該實例中,x是主軸,y是我們想要為其投影邊界的軸。那么對于紋理坐標區(qū)間(注意,由于x軸在這種情況中不是主軸,導(dǎo)致沒有區(qū)間可以跨越y(tǒng)軸)和我們必須進行投影來計算邊界的極值點來說有六種可能的情況。幸運的是,很容易確定哪些是這些極值點。這足以看到紋理坐標區(qū)間的符號,并且通過表查找來得到極值點。我們對于剩余的兩個軸來的極值點進行投影以形成二維投影坐標區(qū)間。該區(qū)間用于計算Mipmap等級以及執(zhí)行二維紋理查找,這與上面針對二維情況所描述的方法相同。由于在Mipmap生成期間的信息丟失(bleeding),可能會顯示出這種算法是保守的。另外,其計算量不大。找到主軸,并且投影的計算開銷會兩倍于正常的立方體映射實現(xiàn),考慮到我們使用了區(qū)間,這種情況是合理的。另外,我們需要表格函數(shù)來根據(jù)符號求解極值點,但是這已經(jīng)是計算量非常小的情況了。以上已經(jīng)主要結(jié)合幾個實施例對本發(fā)明進行了描述。然而,本領(lǐng)域技術(shù)人員都很容易理解,除了以上公開的實施例之外的其它實施例在本發(fā)明的范圍內(nèi)都是可行的,本發(fā)明的范圍由附帶的發(fā)明權(quán)利要求定義。
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
如皋市| 霍邱县| 东乡族自治县| 唐海县| 松阳县| 伊宁县| 凤山县| 桓台县| 兴仁县| 乐业县| 炉霍县| 米易县| 九寨沟县| 正蓝旗| 沿河| 车险| 合山市| 青龙| 德江县| 南充市| 临海市| 吉水县| 永福县| 雅安市| 南京市| 靖安县| 宜良县| 潜山县| 三穗县| 辉南县| 临漳县| 屏南县| 祁连县| 淮安市| 恩施市| 江油市| 庆元县| 阿鲁科尔沁旗| 红桥区| 霞浦县| 丰镇市|