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