3d圖形處理系統(tǒng)中用于處理圖元的不透明度測試的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及3D圖形處理系統(tǒng),更具體地,涉及3D圖形處理系統(tǒng)中用于處理圖元的不透明度測試。
【背景技術(shù)】
[0002]三維(3D)圖形處理系統(tǒng)被用于生成表示3D場景的視圖的圖像,例如用于在計(jì)算機(jī)游戲或者運(yùn)行在計(jì)算機(jī)上的其他應(yīng)用中使用?,F(xiàn)代3D渲染(rendering)技術(shù)允許來自多個(gè)圖元的片元以若干不同的方式合并。合并的類型通常由片元的類型指定,片元的類型可以是例如不透明的(opaque)、半透明(translucent)的或者穿透的(punch through)。作為術(shù)語,“片元”指在采樣位置的圖元的元素。在一些示例中,單一的采樣位置可以對應(yīng)于最終渲染的圖像的一個(gè)像素位置,但在其他示例中,多于一個(gè)(例如,四個(gè))采樣位置可以對應(yīng)于每一個(gè)像素位置。深度緩存可以用于存儲(chǔ)對于采樣位置數(shù)組的深度值,以表示在每一個(gè)采樣位置的當(dāng)前深度。可以參考深度緩存對輸入片元執(zhí)行深度測試以確定片元是否被之前處理的片元隱藏。如果輸入片元沒有被隱藏,則可以更新深度緩存中的適當(dāng)?shù)纳疃戎狄苑从齿斎肫纳疃?。通過覆蓋任何之前寫入的片元而合并不透明的片元。通過使用由應(yīng)用指示的混合方程式處理半透明的片元,以使得新的半透明的片元值與之前的片元值合并。通?;旌戏匠淌绞褂脕碜约y理的alpha值以確定片元是多么透明。通過執(zhí)行指示片元是否是“當(dāng)前的”(即圖元的一部分)的測試來處理穿透的片元。如果片元被確定為不是當(dāng)前的,則不執(zhí)行與之前寫入的片元的合并,并且此外,對于該片元不向深度緩存寫入深度。通常針對來自紋理的alpha值執(zhí)行穿透測試。穿透/alpha測試可以與不透明度或者半透明度混合合并,以產(chǎn)生不透明的穿透和半透明的穿透的片元類型。在穿透和半透明度的情況下,應(yīng)當(dāng)注意,由于每一種情況將新的片元值與之前的值有效地合并,保持圖元被提交的順序是重要的。
[0003]為清楚起見,以上處理的類型將被稱為不透明的、半透明的、不透明的穿透以及半透明的穿透的“對象類型”。半透明的以及兩種穿透的對象類型在此可以被稱為“非不透明的對象類型”??梢岳斫猓哂蟹遣煌该鞯膶ο箢愋偷膱D元的處理通常比具有不透明的對象類型的圖元的處理復(fù)雜。
[0004]一些3D圖形處理系統(tǒng)是基于區(qū)片(tile)的渲染系統(tǒng)。這些系統(tǒng)具有被劃為為多個(gè)矩形塊或者區(qū)片的渲染空間。參考圖8中示意性地示出的基于區(qū)片的延遲渲染系統(tǒng)來描述在這些系統(tǒng)中執(zhí)行渲染的方式。圖8顯示了幾何結(jié)構(gòu)處理單元802,該幾何處理單元802接收來自應(yīng)用的圖像數(shù)據(jù),并使用周知的方法將該圖像數(shù)據(jù)轉(zhuǎn)變到屏幕空間。該數(shù)據(jù)接下來被提供給分片(tiling)單元804,該分片單元804將屏幕空間幾何結(jié)構(gòu)插入用于一組定義的矩形區(qū)域或者區(qū)片的對象列表806。每一個(gè)列表包括完全地或者部分地存在于屏幕(即,區(qū)片)的子區(qū)域中。對于屏幕上的每一個(gè)區(qū)片存在一個(gè)列表,應(yīng)當(dāng)注意盡管一些列表其中可能沒有數(shù)據(jù)。
[0005]區(qū)片列表隨后被按逐個(gè)區(qū)片的方式傳遞給隱藏面消除單元(HSR) 808,并且從那被傳遞至紋理化和著色單元(TSU)810。HSR單元808在區(qū)片中的圖元的片元上執(zhí)行深度測試(參考如上所述的深度緩存),并且僅向TSU 810傳遞關(guān)于通過深度測試的片元的數(shù)據(jù)。
[0006]圖像通常包括不透明的、半透明的以及穿透的圖元對象類型的混合。為了正確地渲染這樣的圖像,HSR單元808必須向TSU 810傳遞需要被處理的片元的“層”。這是因?yàn)槎嘤谝粋€(gè)片元可以對將被應(yīng)用于特定的采樣位置的圖像數(shù)據(jù)有所貢獻(xiàn)。例如從建筑物內(nèi)部透過骯臟的玻璃窗的視圖需要通過玻璃可見的幾何結(jié)構(gòu),以及繼而該玻璃窗本身這兩者被傳遞至TSU 810。該處理被稱為“傳遞播種(pass spawning)”。
[0007]標(biāo)簽是標(biāo)識(shí)符,該標(biāo)識(shí)符將片元和該片元作為其中一部分的圖元相關(guān)聯(lián),并且該標(biāo)識(shí)符允許在需要時(shí)獲取對于圖元的比如紋理化和著色數(shù)據(jù)的屬性。通常,圖8中所示的該類型的基于區(qū)片的延遲渲染設(shè)備將在HSR單元808和TSU 810之間的接口處使用標(biāo)簽緩存,以便保持對于當(dāng)前正在被處理的區(qū)片中對于每一個(gè)采樣位置的、來自最前端圖元(即,通過深度測試的那些圖元)的片元的標(biāo)簽。如上所述,通常將對于通過深度測試的不透明的片元的標(biāo)簽寫入如下標(biāo)簽緩存中,即使這些標(biāo)簽覆蓋對應(yīng)于合并不透明的片元的正確的操作的現(xiàn)有標(biāo)簽。來自半透明的和穿透的圖元的片元可能需要與它們過度繪制(overdraw)的片元合并。這些片元的合并必須按照應(yīng)用提交它們的順序執(zhí)行。正因如此,每當(dāng)發(fā)現(xiàn)半透明的或者穿透的片元位于當(dāng)前存儲(chǔ)于標(biāo)簽緩存內(nèi)的片元之前,HSR單元808必須將當(dāng)前可見的標(biāo)簽沖刷(flush)至TSU 810,即必須播種傳遞。這導(dǎo)致存儲(chǔ)于標(biāo)簽緩存中的所有當(dāng)前可見的標(biāo)簽被沖刷至TSU 810。對于穿透片元的情況,片元的有效性以及因此它們的深度值在深度緩存中是否應(yīng)當(dāng)被更新,只能由TSU 810決定。因此,對于穿透圖元的標(biāo)簽也必須在當(dāng)前存儲(chǔ)于標(biāo)簽緩存中的任何標(biāo)簽被沖刷之后立即被沖刷。應(yīng)當(dāng)注意,標(biāo)簽緩存中的標(biāo)簽和位置的組合定義片元,從而來自標(biāo)簽緩存的標(biāo)簽的沖刷可以被認(rèn)為是沖刷來自標(biāo)簽緩存的片元。從概念上講,考慮正被存儲(chǔ)于標(biāo)簽緩存中的片元以及被沖刷出以到達(dá)紋理化和著色單元的片元是有意義的。在實(shí)際實(shí)現(xiàn)中,通過在標(biāo)簽緩存中存儲(chǔ)標(biāo)簽和沖刷來自標(biāo)簽緩存的標(biāo)簽來體現(xiàn)片元的該概念流程。
[0008]隨著用戶對于應(yīng)用的要求和期望增加,應(yīng)用饋送到圖形處理系統(tǒng)之中的圖形數(shù)據(jù)變得更加復(fù)雜。特別地,紋理化和著色的復(fù)雜性在增加,并且非不透明的對象類型的使用正變得更加普遍。如上所述因?yàn)榫哂蟹遣煌该鞯膶ο箢愋偷膱D元的處理比具有不透明的對象類型的圖元的處理更復(fù)雜,這可能是有問題的。
【發(fā)明內(nèi)容】
[0009]提供本
【發(fā)明內(nèi)容】
用于以簡要的形式介紹經(jīng)選擇的概念,在以下詳細(xì)描述中將進(jìn)一步描述這些概念。本概要不旨在為確定要求保護(hù)的主題的關(guān)鍵特性或者基本特性,也不旨在為用于限制要求保護(hù)的主題的范圍。
[0010]已經(jīng)意識(shí)到,具有非不透明的對象類型的半透明的和穿透的圖元通常包括不需要被當(dāng)作具有非不透明的類型的片元的一些片元。例如,半透明的或者穿透的圖元的一些片元可以是完全不透明的或者完全半透明的。在上述圖形處理系統(tǒng)中,半透明的或者穿透的圖元的片元的不透明度在應(yīng)用紋理化之前是未知的,因?yàn)樗前ū粦?yīng)用于片元的半透明度信息(例如,alpha值)的紋理??紤]到在上述圖形處理系統(tǒng)中傳遞半透明的或者穿透的片元至TSU之前沖刷重疊的片元的必要性,顯然,將存在很多不需要執(zhí)行沖刷的情況。例如,在過度繪制的片元是完全透明的(并且因此不存在過度繪制)或者完全不透明的地方(并且因此可以在不沖刷的情況下覆蓋標(biāo)簽緩存的內(nèi)容)。
[0011]然而,在此描述的實(shí)例中,不透明度測試預(yù)先被執(zhí)行(例如,在紋理化被用于半透明的或者穿透的圖元的片元之前)以發(fā)現(xiàn)是否能夠避免或者簡化片元的進(jìn)一步的處理。例如,如果穿透圖元的片元是完全透明的則它們可以被丟棄,并且如果半透明的圖元的片元是完全透明的,則可以設(shè)置標(biāo)志以指示該片元將不被傳輸用于后續(xù)的紋理化。例如,如果半透明的圖元的片元是完全透明的,則可以設(shè)置“標(biāo)簽寫禁止”的標(biāo)簽,該標(biāo)簽意味著半透明的圖元的標(biāo)簽不被寫入標(biāo)簽緩存,并且因此將不導(dǎo)致潛在的(underlying)標(biāo)簽至紋理化和著色單元的沖刷。如另一示例,如果片元是完全不透明的,則可以當(dāng)作它們具有不透明的對象類型來處理片元,使得它們的標(biāo)簽可以覆蓋標(biāo)簽緩存中的當(dāng)前標(biāo)簽而不導(dǎo)致沖刷。
[0012]提供了一種在3D圖形處理系統(tǒng)中處理圖元以對于圖元應(yīng)用深度測試和紋理化的方法,其中圖元具有非不透明的對象類型,并且其中紋理化包括根據(jù)與圖元的片元相關(guān)聯(lián)的對象類型對片元進(jìn)行紋理化,該方法包括:接收將被處理的圖元的片元,所接收的圖元的片元與所述非不透明的對象類型相關(guān)聯(lián);在對于所接收的圖元的片元應(yīng)用紋理化之前:
(i)獲取不透明度狀態(tài)圖(map),該不透明度狀態(tài)圖提供將被應(yīng)用于圖元的紋理的紋素的不透明度的指示;(ii)對于圖元的一個(gè)或者多個(gè)片元的多個(gè)塊中的每一個(gè)塊,通過以下步驟,使用不透明度狀態(tài)圖來確定對于片元塊的各自的不透明度狀態(tài),通過:(a)基于片元塊的一個(gè)或者多個(gè)片元的紋理坐標(biāo),確定對于片元塊的不透明度狀態(tài)圖內(nèi)的不透明度狀態(tài)的塊的位置,以及(b)執(zhí)行不透明度狀態(tài)塊的不透明度狀態(tài)的保守組合,來確定對于片元塊的不透明度狀態(tài);以及(iii)通過執(zhí)行以下步驟中的一項(xiàng)或者多項(xiàng),使用對于片元塊的確定的不透明度狀態(tài)來簡化圖元的片元的處理:(a)基于確定的不透明度狀態(tài),指示片元塊中的一個(gè)或者多個(gè)片元塊的片元將與不同于所述非不透明的對象類型的對象類型相關(guān)聯(lián)以用于片元的后續(xù)的處理,(b)基于確定的不透明度狀態(tài)丟棄片元塊中的一個(gè)或者多個(gè)塊,以及(C)基于確定的不透明度狀態(tài),設(shè)置一個(gè)或者多個(gè)標(biāo)志來指示片元塊中的一個(gè)或者多個(gè)塊的片元將不被傳輸用于后續(xù)的紋理化;對于圖元的片元應(yīng)用深度測試;以及繼所述簡化之后,對于圖元的片元根據(jù)它們的相關(guān)聯(lián)的對象類型應(yīng)用紋理化。步驟(i)至(iii)可以在對于圖元的片元應(yīng)用深度測試之前被執(zhí)行,并且深度測試可以繼所述簡化之后被應(yīng)用于圖元的片元并且根據(jù)它們的相關(guān)聯(lián)的對象類型。
[0013]提供了一種生成用于在3D圖形處理系統(tǒng)中處理圖元中使用的包括多個(gè)不透明度狀態(tài)的不透明度狀態(tài)圖的方法,其中該不透明度狀態(tài)圖中的不透明度狀態(tài)中的每一個(gè)不透明度狀態(tài)指示紋理的一個(gè)或者多個(gè)紋素的紋素塊的不透明度,并且其中不透明度狀態(tài)中的每一個(gè)狀態(tài)指示一個(gè)或者多個(gè)紋素的對應(yīng)的紋素塊是:(i)完全透明的;(ii)完全不透明的;或者(iii)既不是完全透明的也不是完全不透明的,該方法包括:接收對于紋理的紋素的不透明度值;以保守方式基于接收的不透明度值確定不透明度狀態(tài)圖的不透明度狀態(tài)以使得:(i)僅當(dāng)紋理的不透明度值指示紋素塊中的一個(gè)或者多個(gè)紋素的全部紋素為透明時(shí),不透明度狀態(tài)被確定為指示該一個(gè)或者多個(gè)紋素的對應(yīng)的紋素塊是完全透明的,以及
(ii)僅當(dāng)紋理的不透明度值指示紋素塊中的一個(gè)或者多個(gè)紋素的全部紋素為不透明時(shí),不透明度狀態(tài)被確定為指示該一個(gè)或者多個(gè)紋素的對應(yīng)的紋素塊是完全不透明的;以及存儲(chǔ)該不透明度狀態(tài)圖以便用于在3D圖形處理系統(tǒng)中處理圖元的方法中的后續(xù)的使用;其中以一種方式確定該不透明度狀態(tài)以使得該不透明度狀態(tài)圖內(nèi)的不透明度狀態(tài)的塊被用于通過執(zhí)行該不透明度狀態(tài)塊的不透明度狀態(tài)的保守組合來對于一個(gè)或者多個(gè)片元的塊確定不透明度狀態(tài)。
[0014]提供了一種3D圖形處理系統(tǒng),被配置為通過對圖元應(yīng)用深度測試和紋理化來處理圖元,其中圖元具有非不透明的對象類型,該系統(tǒng)包括:深度測試模塊,被配置為對于圖元的片元應(yīng)用深度測試;紋理化模塊,被配置為根據(jù)與片元相關(guān)聯(lián)的對象類型對于圖元的片元應(yīng)用紋理化;以及不透明度測試模塊,被設(shè)置為在由紋理化模塊對片元的紋理化之前對圖元的片元操作,該不透明度測試模塊被配置為:(i)獲取不透明度狀態(tài)圖,該不透明度狀態(tài)圖提供將被應(yīng)用于圖元的紋理的紋素的不透明度的指示;(ii)對于圖元的一個(gè)或者多個(gè)片元的多個(gè)塊中的每一個(gè)塊,使用不透明度狀態(tài)圖來通過如下步驟確定對于片元塊的各自的不透明度狀態(tài):(a)基于片元塊的一個(gè)或者多個(gè)片元的紋理坐標(biāo),確定對于片元塊的不透明度狀態(tài)圖內(nèi)的不透明度狀態(tài)的塊的位置,以及(b)執(zhí)行不透明度狀態(tài)塊的不透明度狀態(tài)的保守組合來確定對于片元塊的不透明度狀態(tài);以及(iii)通過執(zhí)行以下步驟中的一項(xiàng)或者多項(xiàng),使用對于片元塊的確定的不透明度狀態(tài)來簡化圖元的片元的處理:(a)基于確定的不透明度狀態(tài),指示片元塊