生成抗鋸齒體素?cái)?shù)據(jù)的制作方法
【專利摘要】本發(fā)明的一個(gè)實(shí)施例闡述了用于實(shí)施體素化的技術(shù)。所述技術(shù)包括識(shí)別由具有前側(cè)和后側(cè)的第一圖形基元所相交的體素,和選擇所述體素內(nèi)的多個(gè)采樣點(diǎn)。所述技術(shù)進(jìn)一步包括針對(duì)包含在所述多個(gè)采樣點(diǎn)中的每個(gè)采樣點(diǎn)確定所述采樣點(diǎn)是位于所述第一圖形基元的前側(cè)上還是位于所述第一圖形基元的后側(cè)上。最后,所述技術(shù)包括針對(duì)包含在所述多個(gè)采樣點(diǎn)中的至少第一采樣點(diǎn),將反映所述第一采樣點(diǎn)是位于所述第一圖形基元的前側(cè)上還是位于所述第一圖形基元的后側(cè)上的第一結(jié)果存儲(chǔ)在體素掩模中。
【專利說明】生成抗鋸齒體素?cái)?shù)據(jù)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明概括地來說涉及的是計(jì)算機(jī)圖形,更具體地,涉及的是生成抗鋸齒(ant1-aliased)體素?cái)?shù)據(jù)(voxel data)。
【背景技術(shù)】
[0002]體素化是一種將幾何對(duì)象(例如三角網(wǎng)格)轉(zhuǎn)換成稱為體素的體積圖片元素的技術(shù)??梢詫Ⅲw素化過程比作將幾何對(duì)象投影到視平面并分配到一個(gè)或多個(gè)像素位置的光柵化過程。然而,像素表示視平面的二維部分,而體素表示三維場景內(nèi)的立方體狀的體積。因此,體素化的過程是確定每個(gè)幾何對(duì)象與哪些體積元素相交,而不僅僅是確定每個(gè)幾何對(duì)象覆蓋哪些像素。一旦構(gòu)建完成,三維場景的體素化的表示(voxelized representat1n)可以用于許多后續(xù)的計(jì)算,舉幾個(gè)例子來說,包括用于照明(例如,全局光照)的計(jì)算、具有對(duì)象邊界的流體力學(xué)和用于物理模擬的碰撞檢測。
[0003]常規(guī)的圖形處理系統(tǒng)通常以二進(jìn)制方式實(shí)施體素化。即,常規(guī)的系統(tǒng)確定體素是
‘被占用的(occupied)’ -如果體素與幾何對(duì)象相交(intersected)-或‘未被占用的’——如果所述體素沒有與所述幾何對(duì)象相交。這類型的二進(jìn)制近似法造成了三維圖形和建模的各種問題。例如,當(dāng)構(gòu)建包括移動(dòng)對(duì)象的場景體素化的表示時(shí),對(duì)象可以從一個(gè)幀(frame)不占用中體素移動(dòng)到下一個(gè)幀中充分占用所述體素。當(dāng)幾何對(duì)象相對(duì)于所述場景(例如,當(dāng)對(duì)象穿越場景時(shí))移動(dòng)時(shí),這種突然變化使得體素“跳躍(pop)”進(jìn)入和跳出占用(occupancy).類似地,由上述二進(jìn)制近似法所引入的不準(zhǔn)確性可能負(fù)面地影響利用所述體素化的表示所實(shí)施的多種后續(xù)的計(jì)算。例如,舉幾個(gè)例子來說,當(dāng)實(shí)施下游的照明計(jì)算、碰撞檢測分析或流體力學(xué)計(jì)算時(shí),由上述二進(jìn)制近似法所引入的舍入誤差可能造成計(jì)算的不準(zhǔn)確性。
[0004]因此,本領(lǐng)域需要的是更有效的體素化幾何對(duì)象的方法。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的一個(gè)實(shí)施例闡述了用于實(shí)施體素化的方法。所述方法包括識(shí)別與具有前偵儀front side)和后側(cè)(back side)的第一圖形基元相交的體素,和選擇所述體素內(nèi)的多個(gè)采樣點(diǎn)。所述方法進(jìn)一步包括針對(duì)包含在所述多個(gè)采樣點(diǎn)中的每個(gè)采樣點(diǎn)確定所述采樣點(diǎn)是位于所述第一圖形基元的前側(cè)上還是位于所述第一圖形基元的后側(cè)上。最后,所述方法包括針對(duì)包含在所述多個(gè)采樣點(diǎn)中的至少第一采樣點(diǎn),將反映所述第一采樣點(diǎn)是位于所述第一圖形基元的前側(cè)上還是位于所述第一圖形基元的后側(cè)上的第一結(jié)果存儲(chǔ)在體素掩模(voxel mask)中。
[0006]進(jìn)一步的實(shí)施例提供了永久的計(jì)算機(jī)可讀的介質(zhì)和計(jì)算設(shè)備以執(zhí)行以上所闡述的方法。
[0007]所公開的技術(shù)的一個(gè)優(yōu)勢是幾何對(duì)象的體素化的表示能夠被有效地構(gòu)建并用于確定分?jǐn)?shù)占用(fract1nal occupancy)和/或遮擋值(occlus1n value)。所確定的占用和/或遮擋值然后可以用于實(shí)施后續(xù)的圖形操作或建模計(jì)算,而不會(huì)引入像常規(guī)的像素化方法一樣多的人工因素(artifacts)和不準(zhǔn)確性。進(jìn)一步,本文所描述的體素掩模、表面方程(surface equat1n )、和標(biāo)量場提供了所選擇的并用于構(gòu)建幾何對(duì)象的體素化的表示的不同的水平的準(zhǔn)確性、精密度和處理的工作量,用于各種應(yīng)用。
【專利附圖】
【附圖說明】
[0008]因此,可以詳細(xì)地理解本發(fā)明的上述特征,并且可以參考實(shí)施例得到對(duì)如上面所簡要概括的本發(fā)明更具體的描述,其中一些實(shí)施例在附圖中示出。然而,應(yīng)當(dāng)注意的是,附圖僅示出了本發(fā)明的典型實(shí)施例,因此不應(yīng)被認(rèn)為是對(duì)其范圍的限制,本發(fā)明可以具有其它等效的實(shí)施例。
[0009]圖1是示出了配置為實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)的框圖;
[0010]圖2示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、并行處理子系統(tǒng);
[0011]圖3是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、在圖2的一個(gè)PPU內(nèi)的GPC的框圖;
[0012]圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖形處理管線的概念性示意圖,圖2中的一個(gè)或多個(gè)PPU可配置為實(shí)現(xiàn)所述圖形處理管線;
[0013]圖5示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、三維場景中的圖形基元的體素化。
[0014]圖6A和6B不出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于實(shí)施多重米樣抗鋸齒(MSAA)體素化的技術(shù);
[0015]圖7A是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于實(shí)施MSAA體素化的方法步驟的流程圖;
[0016]圖7B是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于分析分布在體素內(nèi)的采樣點(diǎn)的方法步驟的流程圖;
[0017]圖8A和SB示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于利用表面方程實(shí)施體素化的技術(shù);
[0018]圖9是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于利用表面方程實(shí)施體素化的方法步驟的流程圖;
[0019]圖1OA和1B不出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于利用標(biāo)量場實(shí)施體素化的技術(shù);
[0020]圖11是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于利用標(biāo)量場實(shí)施體素化的方法步驟的流程圖。
【具體實(shí)施方式】
[0021]在下面的描述中,將闡述大量的具體細(xì)節(jié)以提供對(duì)本發(fā)明更透徹的理解。然而,本領(lǐng)域的技術(shù)人員應(yīng)該清楚,本發(fā)明可以在沒有一個(gè)或多個(gè)這些具體細(xì)節(jié)的情況下得以實(shí)施。
[0022]系統(tǒng)概述
[0023]圖1為示出了配置為實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)100的框圖。計(jì)算機(jī)系統(tǒng)100包括經(jīng)由可以包括存儲(chǔ)器橋105的互連路徑通信的中央處理單元(CPU) 102和系統(tǒng)存儲(chǔ)器104。系統(tǒng)存儲(chǔ)器104可配置為存儲(chǔ)設(shè)備驅(qū)動(dòng)程序103。存儲(chǔ)器橋105可以是例如北橋芯片,經(jīng)由總線或其他通信路徑106 (例如超傳輸(HyperTransport)鏈路)連接到I/O (輸入/輸出)橋107。I/O橋107,其可以是例如南橋芯片,從一個(gè)或多個(gè)用戶輸入設(shè)備108 (例如鍵盤、鼠標(biāo))接收用戶輸入并且經(jīng)由通信路徑106和存儲(chǔ)器橋105將該輸入轉(zhuǎn)發(fā)到CPU102。并行處理子系統(tǒng)112經(jīng)由總線或第二通信路徑113 (例如外圍部件互連(PCI) Express、加速圖形端口或超傳輸鏈路)耦連到存儲(chǔ)器橋105 ;在一個(gè)實(shí)施例中,并行處理子系統(tǒng)112是將像素傳遞到顯示設(shè)備110的圖形子系統(tǒng),顯示設(shè)備110可以是任何常規(guī)的陰極射線管、液晶顯示器、發(fā)光二極管顯示器等等。系統(tǒng)盤114也連接到I/O橋107且可以配置為存儲(chǔ)用于CUP102和并行處理子系統(tǒng)112使用的內(nèi)容和應(yīng)用以及數(shù)據(jù)。系統(tǒng)盤114為應(yīng)用和數(shù)據(jù)提供非易失性存儲(chǔ),且可以包含固定的或可移動(dòng)的硬盤驅(qū)動(dòng)程序、閃存設(shè)備和CD-ROM (壓縮光盤只讀存儲(chǔ)器)、DVD-ROM (數(shù)字化通用磁盤)、藍(lán)光(Blu_ray)、HD-DVD(高清DVD)或其它磁的、光學(xué)的或固態(tài)的存儲(chǔ)器設(shè)備。
[0024]交換器116提供I/O橋107與諸如網(wǎng)絡(luò)適配器118以及各種插卡120和121的其他部件之間的連接。其他部件(未明確示出),包括通用串行總線(USB)或其它端口連接、壓縮光盤(⑶)驅(qū)動(dòng)器、數(shù)字視頻光盤(DVD)驅(qū)動(dòng)器、膠片錄制設(shè)備及類似部件,也可以連接到I/O橋107。圖1所示的各種通信路徑包括具體命名的通信路徑106和113可以使用任何適合的協(xié)議實(shí)現(xiàn),諸如PC1-EXpreSS、AGP (加速圖形端口)、超傳輸或者任何其它總線或點(diǎn)到點(diǎn)通信協(xié)議,并且如本領(lǐng)域已知的,不同設(shè)備間的連接可使用不同協(xié)議。
[0025]在一個(gè)實(shí)施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于圖形和視頻處理的電路,包括例如視頻輸出電路,并且可以包含圖形處理單元(GPU)。在另一個(gè)實(shí)施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于通用處理的電路,同時(shí)保留底層(underlying)的計(jì)算架構(gòu),本文將更詳細(xì)地進(jìn)行描述。在又一個(gè)實(shí)施例中,可以將并行處理子系統(tǒng)112與一個(gè)或多個(gè)的其它系統(tǒng)元件集成在單個(gè)子系統(tǒng)中,諸如結(jié)合存儲(chǔ)器橋105、CPU102以及I/O橋107,以形成片上系統(tǒng)(SoC)。
[0026]應(yīng)該理解,本文所示系統(tǒng)是示例性的,并且變化和修改都是可能的。連接拓?fù)?,包括橋的?shù)目和布置、CPU102的數(shù)目以及并行處理子系統(tǒng)112的數(shù)目,可根據(jù)需要修改。例如,在一些實(shí)施例中,系統(tǒng)存儲(chǔ)器104直接連接到CPU102而不是通過橋,并且其它設(shè)備經(jīng)由存儲(chǔ)器橋105和CPU102與系統(tǒng)存儲(chǔ)器104通信。在其它替代性拓?fù)渲?,并行處理子系統(tǒng)112連接到I/O橋107或直接連接到CPU102,而不是連接到存儲(chǔ)器橋105。而在其它實(shí)施例中,I/O橋107和存儲(chǔ)器橋105可能被集成到單個(gè)芯片上而不是作為一個(gè)或多個(gè)分立設(shè)備存在。大型實(shí)施例可以包括兩個(gè)或更多個(gè)CPU102和兩個(gè)或更多個(gè)并行處理系統(tǒng)112。本文所示的特定部件是可選的;例如,任何數(shù)目的插卡或外圍設(shè)備都可能得到支持。在一些實(shí)施例中,交換器116被去掉,網(wǎng)絡(luò)適配器118和插卡120、121直接連接到I/O橋107。
[0027]圖2示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的并行處理子系統(tǒng)112。如所示的,并行處理子系統(tǒng)112包括一個(gè)或多個(gè)并行處理單元(PI3U) 202,每個(gè)并行處理單元202都耦連到本地并行處理(PP)存儲(chǔ)器204。通常,并行處理子系統(tǒng)包括U個(gè)PPU,其中U≥1。(本文中,類似對(duì)象的多個(gè)實(shí)例需要時(shí)以標(biāo)識(shí)對(duì)象的參考數(shù)字和標(biāo)識(shí)實(shí)例的括號(hào)中的數(shù)字來表示。)PPU202和并行處理存儲(chǔ)器204可使用一個(gè)或多個(gè)集成電路設(shè)備來實(shí)現(xiàn),諸如可編程處理器、專用集成電路(ASIC)或存儲(chǔ)器設(shè)備,或者以任何其他技術(shù)可行的方式來實(shí)現(xiàn)。
[0028]再參考圖1以及圖2,在一些實(shí)施例中,并行處理子系統(tǒng)112中的一些或所有PPU202是具有渲染管線的圖形處理器,其可以配置為實(shí)施與下述相關(guān)的各種操作:經(jīng)由存儲(chǔ)器橋105和第二通信路徑113從CPU102和/或系統(tǒng)存儲(chǔ)器104所供應(yīng)的圖形數(shù)據(jù)(例如幾何對(duì)象)生成像素?cái)?shù)據(jù),與本地并行處理存儲(chǔ)器204 (可被用作圖形存儲(chǔ)器,包括例如常規(guī)幀緩沖區(qū)(buffer))交互以存儲(chǔ)和更新像素?cái)?shù)據(jù),傳遞像素?cái)?shù)據(jù)到顯示設(shè)備110等等。在一些實(shí)施例中,并行處理子系統(tǒng)112可包括一個(gè)或多個(gè)作為圖形處理器而操作的PPU202以及一個(gè)或多個(gè)用于通用計(jì)算的其它PPU202。這些PTO可以是同樣的或不同的,并且每個(gè)PPU可具有專用并行處理存儲(chǔ)器設(shè)備或不具有專用并行處理存儲(chǔ)器設(shè)備。并行處理子系統(tǒng)112中的一個(gè)或多個(gè)PPU202可輸出數(shù)據(jù)到顯示設(shè)備110,或者并行處理子系統(tǒng)112中的每個(gè)PPU202可輸出數(shù)據(jù)到一個(gè)或多個(gè)顯示設(shè)備110。
[0029]在操作中,CPU102是計(jì)算機(jī)系統(tǒng)100的主處理器,控制和協(xié)調(diào)其他系統(tǒng)部件的操作。具體地,CPU102發(fā)出控制PPU202的操作的命令。在一些實(shí)施例中,CPU102寫入用于每個(gè)PPU202的命令流到數(shù)據(jù)結(jié)構(gòu)中(在圖1或圖2中未明確示出),該數(shù)據(jù)結(jié)構(gòu)可位于系統(tǒng)存儲(chǔ)器104、并行處理存儲(chǔ)器204、或CPU102和PPU202都可訪問的其他存儲(chǔ)位置中。將指向每個(gè)數(shù)據(jù)結(jié)構(gòu)的指針寫到入棧緩沖區(qū)(pushbuffer)以發(fā)起對(duì)數(shù)據(jù)結(jié)構(gòu)中的命令流的處理。PPU202從一個(gè)或多個(gè)入棧緩沖區(qū)讀取命令流,然后相對(duì)于CPU102的操作異步地執(zhí)行命令??梢越?jīng)由設(shè)備驅(qū)動(dòng)程序103由應(yīng)用程序?yàn)槊總€(gè)入棧緩沖區(qū)指定執(zhí)行優(yōu)先級(jí)以控制對(duì)不同入棧緩沖區(qū)的調(diào)度。
[0030]現(xiàn)在返回參考圖2以及圖1,每個(gè)PPU202包括經(jīng)由連接到存儲(chǔ)器橋105 (或者,在一個(gè)替代性實(shí)施例中,直接連接到CPU102)的通信路徑113與計(jì)算機(jī)系統(tǒng)100的其余部分通信的I/O (輸入/輸出)單元205。PPU202到計(jì)算機(jī)系統(tǒng)100的其余部分的連接也可以變化。在一些實(shí)施例中,并行處理子系統(tǒng)112可實(shí)現(xiàn)為可插入到計(jì)算機(jī)系統(tǒng)100的擴(kuò)展槽中的插卡。在其他實(shí)施例中,PPU202可以和諸如存儲(chǔ)器橋105或I/O橋107的總線橋集成在單個(gè)芯片上。而在其他實(shí)施例中,PPU202的一些或所有元件可以和CPU102集成在單個(gè)芯片上。
[0031]在一個(gè)實(shí)施例中,通信路徑113是PCI Express鏈路,如本領(lǐng)域所知的,其中專用通道被分配到每個(gè)PPU202。也可以使用其他通信路徑。I/O單元205生成用于在通信路徑113上傳送的包(或其他信號(hào)),并且還從通信路徑113接收所有傳入的包(或其他信號(hào)),將傳入的包引導(dǎo)到PPU202的適當(dāng)部件。例如,可將與處理任務(wù)相關(guān)的命令引導(dǎo)到主機(jī)接口206,而將與存儲(chǔ)器操作相關(guān)的命令(例如,對(duì)并行處理存儲(chǔ)器204的讀取或?qū)懭?引導(dǎo)到存儲(chǔ)器交叉開關(guān)單元210。主機(jī)接口 206讀取每個(gè)入棧緩沖區(qū),并且將存儲(chǔ)在入棧緩沖區(qū)中的命令流輸出到前端212。
[0032]有利地,每個(gè)PPU202都實(shí)現(xiàn)高度并行處理架構(gòu)。如詳細(xì)示出的,PPU202 (O)包括處理集群陣列230,該陣列230包括C個(gè)通用處理集群(GPC)208,其中C≥1。每個(gè)GPC208能夠并發(fā)執(zhí)行大量的(例如,幾百或幾千)線程,其中每個(gè)線程是程序的實(shí)例(instance)。在各種應(yīng)用中,可分配不同的GPC208用于處理不同類型的程序或用于實(shí)施不同類型的計(jì)算。GPC208的分配可以取決于因每種類型的程序或計(jì)算所產(chǎn)生的工作量而變化。
[0033] GPC208從任務(wù)/工作單元207內(nèi)的工作分布單元接收所要執(zhí)行的處理任務(wù)。工作分布單元接收指向編碼為任務(wù)元數(shù)據(jù)(TMD)并存儲(chǔ)在存儲(chǔ)器中的處理任務(wù)的指針。指向TMD的指針包括在存儲(chǔ)為入棧緩沖區(qū)并由前端單元212從主機(jī)接口 206接收的命令流中??梢跃幋a為TMD的處理任務(wù)包括所要處理的數(shù)據(jù)的索引,以及定義數(shù)據(jù)將被如何處理(例如,什么程序?qū)⒈粓?zhí)行)的狀態(tài)參數(shù)和命令。任務(wù)/工作單元207從前端212接收任務(wù)并確保在每一個(gè)TMD所指定的處理發(fā)起前,將GPC208配置為有效狀態(tài)??梢詾槊總€(gè)TMD指定用來調(diào)度處理任務(wù)的執(zhí)行的優(yōu)先級(jí)。還可從處理集群陣列230接收處理任務(wù)。可選地,TMD可包括控制將TMD添加到處理任務(wù)列表(或指向處理任務(wù)的指針的列表)的頭部還是尾部的參數(shù),從而提供除優(yōu)先級(jí)以外的另一級(jí)別的控制。
[0034]存儲(chǔ)器接口 214包括D個(gè)分區(qū)單元215,每個(gè)分區(qū)單元215直接耦連到并行處理存儲(chǔ)器204的一部分,其中D > I。如所示的,分區(qū)單元215的數(shù)目一般等于動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM) 220的數(shù)目。在其他實(shí)施例中,分區(qū)單元215的數(shù)目也可以不等于存儲(chǔ)器設(shè)備的數(shù)目。本領(lǐng)域的普通技術(shù)人員應(yīng)該理解DRAM220可以用其他合適的存儲(chǔ)設(shè)備來替代并且可以是一般常規(guī)的設(shè)計(jì)。因此省略了詳細(xì)描述。諸如幀緩沖區(qū)或紋理映射圖的渲染目標(biāo)可以跨DRAM220加以存儲(chǔ),這允許分區(qū)單元215并行寫入每個(gè)渲染目標(biāo)的各部分以有效地使用并行處理存儲(chǔ)器204的可用帶寬。
[0035]任何一個(gè)GPC208都可以處理要被寫到并行處理存儲(chǔ)器204內(nèi)的任何DRAM220的數(shù)據(jù)。交叉開關(guān)單元210配置為路由每個(gè)GPC208的輸出到任何分區(qū)單元215的輸入或到另一個(gè)GPC208用于進(jìn)一步處理。GPC208通過交叉開關(guān)單元210與存儲(chǔ)器接口 214通信,以對(duì)各種外部存儲(chǔ)器設(shè)備進(jìn)行讀取或?qū)懭?。在一個(gè)實(shí)施例中,交叉開關(guān)單元210具有到存儲(chǔ)器接口 214的連接以和I/O單元205通信,以及到本地并行處理存儲(chǔ)器204的連接,從而使得在不同GPC208內(nèi)的處理內(nèi)核能夠與系統(tǒng)存儲(chǔ)器104或?qū)τ赑PU202而言非本地的其他存儲(chǔ)器通信。在圖2所示的實(shí)施例中,交叉開關(guān)單元210直接與I/O單元205連接。交叉開關(guān)單元210可使用虛擬信道來分開GPC208與分區(qū)單元215之間的業(yè)務(wù)流。
[0036]另外,GPC208可被編程以執(zhí)行與種類繁多的應(yīng)用相關(guān)的處理任務(wù),包括但不限于,線性和非線性數(shù)據(jù)變換、計(jì)算表面方程(例如,平面方程、二次曲面方程等)和/或到表面的距離、視頻和/或音頻數(shù)據(jù)過濾、建模操作(例如,應(yīng)用物理定律以確定對(duì)象的位置、速率和其他屬性)、圖像渲染操作(例如,曲面細(xì)分(tessellat1n)著色器、頂點(diǎn)著色器、幾何著色器、和/或像素著色器程序)等等。PPU202可將數(shù)據(jù)從系統(tǒng)存儲(chǔ)器104和/或本地并行處理存儲(chǔ)器204轉(zhuǎn)移到內(nèi)部(片上)存儲(chǔ)器中,處理該數(shù)據(jù),并且將結(jié)果數(shù)據(jù)寫回到系統(tǒng)存儲(chǔ)器104和/或本地并行處理存儲(chǔ)器204,其中這樣的數(shù)據(jù)可以由其他系統(tǒng)部件訪問,所述其他系統(tǒng)部件包括CPU102或另一個(gè)并行處理子系統(tǒng)112。
[0037]PPU202可配備有任何容量(amount)的本地并行處理存儲(chǔ)器204,包括沒有本地存儲(chǔ)器,并且可以以任何組合方式使用本地存儲(chǔ)器和系統(tǒng)存儲(chǔ)器。例如,在統(tǒng)一存儲(chǔ)器架構(gòu)(UMA)實(shí)施例中,PPU202可以是圖形處理器。在這樣的實(shí)施例中,將不提供或幾乎不提供專用的圖形(并行處理)存儲(chǔ)器,并且PPU202會(huì)以排他或幾乎排他的方式使用系統(tǒng)存儲(chǔ)器。在UMA實(shí)施例中,PPU202可集成到橋式芯片中或處理器芯片中,或作為具有高速鏈路(例如,PCI Express)的分立芯片提供,所述高速鏈路經(jīng)由橋式芯片或其他通信手段將PPU202連接到系統(tǒng)存儲(chǔ)器。
[0038]如上所示,在并行處理子系統(tǒng)112中可以包括任何數(shù)目的PPU202。例如,可在單個(gè)插卡上提供多個(gè)PPU202、或可將多個(gè)插卡連接到通信路徑113、或可將一個(gè)或多個(gè)PPU202集成到橋式芯片中。在多PPU系統(tǒng)中的PPU202可以彼此同樣或不同。例如,不同的PPU202可能具有不同數(shù)目的處理內(nèi)核、不同容量的本地并行處理存儲(chǔ)器等等。在存在多個(gè)PPU202的情況下,可并行操作那些PPU從而以高于單個(gè)PPU202所可能達(dá)到的吞吐量來處理數(shù)據(jù)。包含一個(gè)或多個(gè)PPU202的系統(tǒng)可以以各種配置和形式因素來實(shí)現(xiàn),包括臺(tái)式電腦、筆記本電腦或手持式個(gè)人計(jì)算機(jī)、智能手機(jī)、服務(wù)器、工作站、游戲控制臺(tái)、嵌入式系統(tǒng)等等。
[0039]圖3是根據(jù)本發(fā)明的一個(gè)實(shí)施例的在圖2的一個(gè)PPU202內(nèi)的GPC208的框圖。每個(gè)GPC208可配置為并行執(zhí)行大量線程,其中術(shù)語“線程”是指在特定輸入數(shù)據(jù)集上執(zhí)行的特定程序的實(shí)例。在一些實(shí)施例中,單指令、多數(shù)據(jù)(SIMD)指令發(fā)出技術(shù)用于在不提供多個(gè)獨(dú)立指令單元的情況下支持大量線程的并行執(zhí)行。在其他實(shí)施例中,單指令、多線程(SMT)技術(shù)用于使用配置為向GPC208中的每一個(gè)內(nèi)的處理引擎集發(fā)出指令的公共指令單元來支持大量一般來說同步的線程的并行執(zhí)行。不同于所有處理引擎通常都執(zhí)行同樣指令的SMD執(zhí)行機(jī)制,SIMT執(zhí)行通過給定線程程序允許不同線程更容易跟隨分散執(zhí)行路徑。本領(lǐng)域普通技術(shù)人員應(yīng)該理解SMD處理機(jī)制代表SMT處理機(jī)制的功能子集。
[0040]經(jīng)由將處理任務(wù)分布到流多處理器(SM) 310的管線管理器305來有利地控制GPC208的操作。管線管理器305還可配置為通過為由SM310所輸出的處理數(shù)據(jù)指定目標(biāo)來控制工作分布交叉開關(guān)330。
[0041]在一個(gè)實(shí)施例中,每個(gè)GPC208包括M個(gè)SM310,其中M≥1,每個(gè)SM310配置為處理一個(gè)或多個(gè)線程組。另外,如本領(lǐng)域已知的,每個(gè)SM310有利地包括可以管線化的同樣功能執(zhí)行單元集(例如執(zhí)行單元和加載-存儲(chǔ)單元),其允許在前一個(gè)指令完成之前發(fā)出新指令??商峁┕δ軋?zhí)行單元的任何組合。在一個(gè)實(shí)施例中,功能單元支持各種各樣的操作,包括整數(shù)和浮點(diǎn)操作(例如加法和乘法)、比較操作、布爾操作(AND、OR、X0R)、移位和各種代數(shù)函數(shù)的計(jì)算(例如平面插值、三角函數(shù)、指數(shù)函數(shù)和對(duì)數(shù)函數(shù)等等);以及相同功能單元硬件可均衡地用來執(zhí)行不同的操作,包括實(shí)施體素化操作(例如,插值和投影計(jì)算、采樣點(diǎn)檢測、距離和體積計(jì)算、表查詢等)。
[0042]如本文之前所定義的,傳送到特定GPC208的一系列指令構(gòu)成線程,并且跨SM310內(nèi)的并行處理引擎(未示出)的某一數(shù)目的并發(fā)執(zhí)行線程的集合在本文中稱為“線程束(warp)”或“線程組”。如本文所使用的,“線程組”是指對(duì)不同輸入數(shù)據(jù)并發(fā)執(zhí)行相同程序的一組線程,所述組的一個(gè)線程被指派到SM310內(nèi)的不同處理引擎。線程組可以包括比SM310內(nèi)的處理引擎數(shù)目少的線程,在這種情況下一些處理引擎將在該線程組正在被處理的周期期間處于閑置狀態(tài)。線程組還可以包括比SM310內(nèi)的處理引擎數(shù)目多的線程,在這種情況下處理將在連續(xù)的時(shí)鐘周期內(nèi)發(fā)生。因?yàn)槊總€(gè)SM310可以并發(fā)支持多達(dá)G個(gè)線程組,結(jié)果是在任何給定時(shí)間在GPC208中可以執(zhí)行多達(dá)G*M個(gè)線程組。
[0043]此外,多個(gè)相關(guān)線程組可以在SM310內(nèi)同時(shí)活動(dòng)(在執(zhí)行的不同階段)。該線程組集合在本文中稱為“協(xié)作線程陣列”(“CTA”)或“線程陣列”。特定CTA的大小等于m*k,其中k是線程組中并發(fā)執(zhí)行線程的數(shù)目并且通常是SM310內(nèi)的并行處理引擎數(shù)目的整數(shù)倍,以及m是SM310內(nèi)同時(shí)活動(dòng)的線程組的數(shù)目。CTA的大小一般由編程者以及可用于CTA的硬件資源諸如存儲(chǔ)器或寄存器的容量來確定。
[0044]每個(gè)SM310包含一級(jí)(LI)高速緩存或使用用于執(zhí)行加載和存儲(chǔ)操作的SM310外部的相應(yīng)LI高速緩存中的空間。每個(gè)SM310都還有權(quán)訪問在所有GPC208之間共享并且可用于在線程之間轉(zhuǎn)移數(shù)據(jù)的二級(jí)(L2)高速緩存。最后,SM310還有權(quán)訪問片外“全局”存儲(chǔ)器,所述“全局”存儲(chǔ)器可以包括例如并行處理存儲(chǔ)器204和/或系統(tǒng)存儲(chǔ)器104。應(yīng)該理解,PPU202外部的任何存儲(chǔ)器可用作全局存儲(chǔ)器。此外,一點(diǎn)五級(jí)(L1.5)高速緩存335可以包括在GPC208內(nèi),其配置為接收并保持由SM310所請(qǐng)求的經(jīng)由存儲(chǔ)器接口 214從存儲(chǔ)器獲取的數(shù)據(jù),包括指令、一致(uniform)數(shù)據(jù)和常數(shù)數(shù)據(jù),并將所請(qǐng)求的數(shù)據(jù)提供給SM310。在GPC208中具有多個(gè)SM310的實(shí)施例有利地共享了高速緩存在L1.5高速緩存335中的公共指令和數(shù)據(jù)。
[0045]每個(gè)GPC208可以包括配置為將虛擬地址映射到物理地址中的存儲(chǔ)器管理單元(MMU) 328ο在其它實(shí)施例中,MMU328可以駐留在存儲(chǔ)器接口 214內(nèi)。MMU328包括用于將虛擬地址映射到像素塊(tile)的物理地址的頁表?xiàng)l目(PTE)集和可選地包括高速緩存行索引。MMU328可以包括地址轉(zhuǎn)譯后備緩沖區(qū)(TLB)或可以駐留在多處理器SM310或LI高速緩存或GPC208內(nèi)的高速緩存。物理地址經(jīng)處理以分布表面數(shù)據(jù)訪問位置來允許高效請(qǐng)求在分區(qū)單元215之間交錯(cuò)。高速緩存行索引可用于確定用于高速緩存行的請(qǐng)求是命中還是未命中。
[0046]在圖形和計(jì)算應(yīng)用中,GPC208可配置為使得每個(gè)SM310耦連到用于執(zhí)行紋理映射操作例如確定紋理樣本位置、讀取紋理數(shù)據(jù)以及過濾該紋理數(shù)據(jù)的紋理單元315。從內(nèi)部紋理LI高速緩存(未示出)或者在一些實(shí)施例中從SM310內(nèi)的LI高速緩存讀取紋理數(shù)據(jù)并根據(jù)需要從在所有GPC208之間共享的L2高速緩存、并行處理存儲(chǔ)器204或系統(tǒng)存儲(chǔ)器104中獲取紋理數(shù)據(jù)。為了將所處理的任務(wù)提供給另一個(gè)GPC208用于進(jìn)一步處理或?yàn)榱私?jīng)由交叉開關(guān)單元210將所處理的任務(wù)存儲(chǔ)在L2高速緩存、并行處理存儲(chǔ)器204或系統(tǒng)存儲(chǔ)器104中,每個(gè)SM310將所處理的任務(wù)輸出到工作分布交叉開關(guān)330。preROP (預(yù)光柵操作)325配置為從SM310接收數(shù)據(jù)、將數(shù)據(jù)引導(dǎo)到分區(qū)單元215內(nèi)的ROP單元以及針對(duì)顏色混合實(shí)施優(yōu)化、組織像素顏色數(shù)據(jù)和實(shí)施地址轉(zhuǎn)譯。
[0047]應(yīng)該理解本文所述的內(nèi)核架構(gòu)是示例性的并且變化和修改都是可能的。任何數(shù)目的處理單元例如SM310或紋理單元315、preR0P325可以包括在GPC208內(nèi)。進(jìn)一步地,如圖2所示,PPU202可以包括任何數(shù)目的GPC208,所述GPC208有利地在功能上彼此相似以使得執(zhí)行行為不取決于哪個(gè)GPC208接收特定處理任務(wù)。進(jìn)一步地,每個(gè)GPC208有利地使用分開且各異的處理單元、LI高速緩存來獨(dú)立于其他GPC208操作以為一個(gè)或多個(gè)應(yīng)用程序執(zhí)行任務(wù)。
[0048]本領(lǐng)域普通技術(shù)人員應(yīng)該理解圖1、2、和3所描述的架構(gòu)決不限制本發(fā)明的范圍并且在不脫離本發(fā)明范圍的情況下本文所教導(dǎo)的技術(shù)可以在任何經(jīng)適當(dāng)配置的處理單元上實(shí)現(xiàn),所述處理單元包括但不限于一個(gè)或多個(gè)CPU、一個(gè)或多個(gè)多核CPU、一個(gè)或多個(gè)PPU202、一個(gè)或多個(gè)GPC208、一個(gè)或多個(gè)圖形或?qū)S锰幚韱卧鹊取?br>
[0049]在本發(fā)明的實(shí)施例中,使用計(jì)算系統(tǒng)的PPU202或其他處理器來使用線程陣列執(zhí)行通用計(jì)算是可取的。為線程陣列中的每個(gè)線程指派在線程的執(zhí)行期間對(duì)于線程可訪問的唯一的線程標(biāo)識(shí)符(“線程ID”)??杀欢x為一維或多維數(shù)值的線程ID控制線程處理行為的各方面。例如,線程ID可用于確定線程將要處理輸入數(shù)據(jù)集的哪部分和/或確定線程將要產(chǎn)生或?qū)戄敵鰯?shù)據(jù)集的哪部分。
[0050]每線程指令序列可包括定義線程陣列的代表性線程和一個(gè)或多個(gè)其他線程之間的協(xié)作行為的至少一個(gè)指令。例如,每線程指令序列可能包括在序列中的特定點(diǎn)處掛起用于代表性線程的操作執(zhí)行直到諸如其他線程的一個(gè)或多個(gè)到達(dá)該特定點(diǎn)的時(shí)間為止的指令、用于代表性線程將數(shù)據(jù)存儲(chǔ)在其他線程的一個(gè)或多個(gè)有權(quán)訪問的共享存儲(chǔ)器中的指令、用于代表性線程原子地讀取和更新存儲(chǔ)在其他線程的一個(gè)或多個(gè)基于它們的線程ID有權(quán)訪問的共享存儲(chǔ)器中的數(shù)據(jù)的指令等等。CTA程序還可以包括計(jì)算數(shù)據(jù)將從其讀取的共享存儲(chǔ)器中的地址的指令,該地址是線程ID的函數(shù)。通過定義合適的函數(shù)并提供同步技術(shù),可以以可預(yù)測的方式由CTA的一個(gè)線程將數(shù)據(jù)寫入共享存儲(chǔ)器中的給定位置并由同一個(gè)CTA的不同線程從該位置讀取數(shù)據(jù)。因此,數(shù)據(jù)在線程之間共享的任何期望模式可以得到支持,以及CTA中的任何線程可以與同一個(gè)CTA中的任何其他線程共享數(shù)據(jù)。如果存在數(shù)據(jù)在CTA的線程之間的共享,則其范圍由CTA程序確定;因此,應(yīng)該理解的是,在使用CTA的特定應(yīng)用中,CTA的線程可能會(huì)或可能不會(huì)真正互相共享數(shù)據(jù),這取決于CTA程序,術(shù)語“CTA”和“線程陣列”在本文作為同義詞使用。
[0051]圖形管線架構(gòu)
[0052]圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖形處理管線400的概念性示意圖,圖2中的一個(gè)或多個(gè)PPU202可配置為實(shí)現(xiàn)該圖形處理管線400。例如,GPC208中的一個(gè)可以配置為實(shí)施一個(gè)或多個(gè)頂點(diǎn)處理單元415、幾何處理單元425、和片段(fragment)處理單元460的函數(shù)(funct1n)。也可以由GPC208內(nèi)的其它處理引擎和相應(yīng)的分區(qū)單元215來實(shí)施數(shù)據(jù)匯編器410、基元匯編器420、光柵器455和光柵操作單元465的函數(shù)?;蛘撸瑘D形處理管線400可以使用用于一種或多種函數(shù)的專用處理單元來實(shí)現(xiàn)。
[0053]數(shù)據(jù)匯編器410處理單元收集頂點(diǎn)數(shù)據(jù),用于高階表面、基元等等,并輸出所述包括頂點(diǎn)屬性的頂點(diǎn)數(shù)據(jù)到頂點(diǎn)處理單元415。頂點(diǎn)處理單元415是配置為執(zhí)行頂點(diǎn)著色器程序的可編程的執(zhí)行單元,從而如由所述頂點(diǎn)著色器程序所指定的,照明(lighting)和轉(zhuǎn)化頂點(diǎn)數(shù)據(jù)。例如,可以對(duì)頂點(diǎn)處理單元415進(jìn)行編程以將所述頂點(diǎn)數(shù)據(jù)從基于對(duì)象的坐標(biāo)表示(對(duì)象空間)轉(zhuǎn)化到替代地基于諸如世界空間或規(guī)格化設(shè)備坐標(biāo)(NDC )空間等坐標(biāo)系統(tǒng)。頂點(diǎn)處理單元415可以通過數(shù)據(jù)匯編器410來讀取存儲(chǔ)在GPC208高速緩存、并行處理存儲(chǔ)器204或系統(tǒng)存儲(chǔ)器104中的數(shù)據(jù),用于處理所述頂點(diǎn)數(shù)據(jù)時(shí)使用。
[0054]基元匯編器420從頂點(diǎn)處理單元415接收頂點(diǎn)屬性,根據(jù)需要讀取經(jīng)存儲(chǔ)的頂點(diǎn)屬性,并構(gòu)建用于由幾何處理單元425處理的圖形基元。圖形基元包括三角形、線段、點(diǎn)等等。幾何處理單元425為配置為執(zhí)行幾何著色器程序的可編程的執(zhí)行單元,從而如所述幾何著色器程序所指定的,轉(zhuǎn)化從基元匯編器420所接收到的圖形基元。此外,可以對(duì)幾何處理單元425進(jìn)行編程以將計(jì)算參數(shù),諸如用于光柵化所述新圖形基元、計(jì)算體素相交(intersect1n)、實(shí)施投影計(jì)算、計(jì)算曲率值和實(shí)施其它類型的體素化操作的平面方程系數(shù)等。
[0055]在一些實(shí)施例中,幾何處理單元425還可以添加或刪除所述幾何流中的元素。幾何處理單元425輸出所述指定新圖形基元的參數(shù)和頂點(diǎn)到視口縮放(viewport scale)、剔除(cull)和修剪單元450。幾何處理單元425可以讀取存儲(chǔ)在并行處理器204或系統(tǒng)存儲(chǔ)器104中的數(shù)據(jù),用于處理所述幾何數(shù)據(jù)時(shí)使用。視口縮放、剔除和修剪單元450實(shí)施修剪(例如修剪體素的平面或表面)、剔除和視口縮放(viewport scaling),并輸出經(jīng)處理的圖形基兀到光柵器455。
[0056]光柵器455掃描檢查(scan)轉(zhuǎn)換所述新圖形基元并輸出片段和覆蓋數(shù)據(jù)到片段處理單元460。此外,光柵器455可以實(shí)施二維和/或三維中的光柵化以生成二維和/或三維的覆蓋數(shù)據(jù)。二維覆蓋可以利用抗鋸齒單元(例如多重采樣抗鋸齒(MSAA)硬件)由光柵器455來生成。三維覆蓋可以存儲(chǔ)在體素掩模中。此外,光柵器455可以配置為實(shí)施z剔除、深度檢測和其它基于z的優(yōu)化。例如光柵器455可以配置為確定關(guān)于一個(gè)或多個(gè)采樣點(diǎn)的圖形基元的覆蓋和/或關(guān)于所述圖形基元的一個(gè)或多個(gè)采樣點(diǎn)的深度。
[0057]片段處理單元460是配置為執(zhí)行片段著色器程序的可編程的執(zhí)行單元,從而如所述片段著色器程序所指定的,轉(zhuǎn)化從光柵器455所接收到的片段。例如,可以對(duì)片段處理單元460進(jìn)行編程以實(shí)施諸如透視糾正、紋理映射、著色、混合等操作,從而產(chǎn)生輸出到光柵操作單元465的經(jīng)著色的片段。片段處理單元460可以讀存儲(chǔ)在并行存儲(chǔ)器204或系統(tǒng)存儲(chǔ)器104中的數(shù)據(jù),用于處理所述片段數(shù)據(jù)時(shí)使用。可以以像素、樣品或其它粒度對(duì)片段進(jìn)行著色,這取決于所編程的采樣率。
[0058]光柵操作單元465是實(shí)施光柵操作的處理單元,諸如模版、z檢測、混合等,并輸出像素?cái)?shù)據(jù)為經(jīng)處理的圖形數(shù)據(jù),用于圖形存儲(chǔ)器中的存儲(chǔ)。所述經(jīng)處理的圖形數(shù)據(jù)可以存儲(chǔ)在圖形存儲(chǔ)器,例如并行處理存儲(chǔ)器204和/或系統(tǒng)存儲(chǔ)器104中,用于在顯示設(shè)備110上顯示或用于進(jìn)一步由CPU102或并行處理子系統(tǒng)112處理。在本發(fā)明的一些實(shí)施例中,光柵操作單元465配置為壓縮寫到存儲(chǔ)器的z或顏色數(shù)據(jù)并解壓縮從存儲(chǔ)器中讀取的z或顏色數(shù)據(jù)。
[0059]生成抗鋸齒體素?cái)?shù)據(jù)
[0060]圖5示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、三維場景500中的圖形基元520的體素化。如圖5所示,在三維場景500中,每個(gè)體素510表示的立方體狀的體積?;?20和體素510間的每個(gè)交集(intersect1n)可以定義三維體素片段,有時(shí)稱為“片段”。
[0061]基元520可以是較大的幾何對(duì)象的一部分,諸如三維場景500內(nèi)的三維對(duì)象的三角網(wǎng)格表示。因此,基元520可以包括前面(front face)和后面(back face)。在各種實(shí)施例中,將基元520的前面定義為面向所述幾何對(duì)象的外部的表面,而將后側(cè)定義為面向所述幾何對(duì)象的內(nèi)部體積的表面?;?20的前面和后面的方向可以由基元520的表面法線和/或指定的基元520的頂點(diǎn)的順序來指示。例如,基元520的前面的方向可以由它的表面法線的方向來指示,所述表面法線的方向可以由指定的基元520的頂點(diǎn)525的順序(例如順時(shí)針的或逆時(shí)針的)來確定。
[0062]盡管將以下技術(shù)描述為使用特定的硬件單元(例如,幾何處理單元425、光柵器455、片段處理單元460、光柵操作單元465等)實(shí)施,但以下每個(gè)所描述的技術(shù)可以以等同的方式使用軟件、專用硬件或其組合來實(shí)施。例如,描述為使用光柵器455來實(shí)施的技術(shù)(例如生成覆蓋掩模)可以以等同的方式使用軟件(例如,使用片段處理單元460)來實(shí)施。此夕卜,描述為使用軟件來實(shí)施的技術(shù)也可以替代為使用專用的硬件來實(shí)施。而且,盡管將以下技術(shù)描述為使用采樣點(diǎn),但本文所描述的每個(gè)技術(shù)可以使用任何類型的參考點(diǎn)和參考位置(例如體素的角、體素的邊、體素的面、中心點(diǎn)、偏心點(diǎn)等)。
[0063]圖6A和6B不出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于實(shí)施多重米樣抗鋸齒(MSAA)體素化的技術(shù)。MSAA體素化可以通過分析體素510-1內(nèi)的每個(gè)采樣點(diǎn)610(例如610-1)來實(shí)施以確定采樣點(diǎn)610是在基元520-1的前側(cè)635上還是在后側(cè)630上。這個(gè)分析的結(jié)果可以存儲(chǔ)在體素掩模中并用于計(jì)算體素510-1的分?jǐn)?shù)占用(和/或遮擋(例如,在一個(gè)或多個(gè)方向上體素510-1將光遮擋到什么程度)。例如,分?jǐn)?shù)占用可以作為在基元520-1所屬的幾何對(duì)象的內(nèi)部的采樣點(diǎn)610的分?jǐn)?shù)(fract1n)來估算(例如在基元520-1的后側(cè)630上的采樣點(diǎn)610的分?jǐn)?shù))??梢酝ㄟ^將所述三維覆蓋(例如,存儲(chǔ)在所述體素掩模中的)投影到一個(gè)或多個(gè)平面上來估算遮擋值。在計(jì)算了分?jǐn)?shù)占用和/或遮擋值之后,然后可以用這些值來實(shí)施下游計(jì)算,諸如照明、流體力學(xué)和碰撞檢測計(jì)算。以下圖就圖7A和7B進(jìn)一步詳細(xì)地描述用于實(shí)施MSAA體素化的典范的技術(shù)。
[0064]圖7A是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于實(shí)施MSAA體素化的方法步驟的流程圖。盡管結(jié)合圖1-4的系統(tǒng)描述了所述方法步驟,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,配置為以任何順序?qū)嵤┧龇椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
[0065]如所示的,方法700開始于步驟710,其中,幾何處理單元425確定體素510_1是與一個(gè)或多個(gè)基元520相交。在步驟715,幾何處理單元425選擇相交體素510-1的基元520-1,如圖6A和6B所示。
[0066]接下來,在步驟720,多個(gè)采樣點(diǎn)610 (例如610-1)分布在體素510-1內(nèi)。除了圖6A和6B中示出的采樣點(diǎn)分布外,在體素510-1內(nèi)分布采樣點(diǎn)610可以包括將采樣點(diǎn)610分布在體素510-1的一個(gè)或多個(gè)邊和/或角上。采樣點(diǎn)610可以排列在規(guī)則點(diǎn)陣,從而它們?cè)谌齻€(gè)主平面(major plane)(例如,x、y和z平面)上的投影產(chǎn)生相同的圖案,如圖6A和6B所示出的。然而,本發(fā)明的實(shí)施例還預(yù)期了可以使用采樣點(diǎn)610的任何規(guī)則或不規(guī)則的圖案或網(wǎng)格(grid)。
[0067]在體素510-1內(nèi)可以分布任何數(shù)目的采樣點(diǎn)610。采樣點(diǎn)610的數(shù)目可以基于例如所需的粒度、準(zhǔn)確性、處理的工作量等。在一個(gè)實(shí)施例中,在體素510-1中可以分布64個(gè)采樣點(diǎn)610 (例如4x4x4采樣點(diǎn)),從而將所計(jì)算的所述體素的占用量化到1/64。當(dāng)體素化小的動(dòng)畫對(duì)象(animated object)時(shí),諸如具有小的、尖銳特征的對(duì)象,選擇太少的采樣點(diǎn)610可能導(dǎo)致“跳躍(popping)”。另一方面,選擇太多的采樣點(diǎn)610可以在所需的水平之上增加處理要求。
[0068]在步驟725,光柵器455 (和/或片段處理單元460)分析每個(gè)采樣點(diǎn)610以確定采樣點(diǎn)610是在基元520-1的前側(cè)635上還是在后側(cè)630上。如以上所論述的,采樣點(diǎn)610是在基元520的前側(cè)635上還是在后側(cè)630上可以指示所述采樣點(diǎn)是在基元520所屬的幾何對(duì)象的外部還是內(nèi)部。這個(gè)分析可以利用多種技術(shù)來實(shí)施。以下描述了兩種典范的技術(shù)。
[0069]在第一個(gè)技術(shù)中,光柵器455 (和/或片段處理單元460)根據(jù)平面(或表面)方程估算每個(gè)采樣點(diǎn)610以確定采樣點(diǎn)610是在所述平面的前側(cè)635上還是后側(cè)630上。例如,通過設(shè)定用于所述平面的后側(cè)630上(或前側(cè)635)的每個(gè)采樣點(diǎn)610的屏蔽位(maskbit),可以將分析結(jié)果存儲(chǔ)在體素掩模中。估算每個(gè)采樣點(diǎn)610所根據(jù)的平面方程可以基于基元520-1的頂點(diǎn)的坐標(biāo)和/或由基元520-1與體素510-1的交集導(dǎo)出。例如,可以通過將基元520-1修剪至體素510-1來獲得平面方程,以確定用于所修剪的平面620的方程。此外,估算每個(gè)采樣點(diǎn)610所根據(jù)的平面方程可以是通過平均或者聚集多個(gè)基元520的交集所計(jì)算的集合的(aggregate)平面方程。
[0070]在用于分析采樣點(diǎn)610的第二技術(shù)中,將基元520-1投影到采樣點(diǎn)610的二維平面,且光柵455 (和/或片段處理單元460)確定用于采樣點(diǎn)610的平面。置于所述二維平面中的或者與所述二維平面相關(guān)聯(lián)的采樣點(diǎn)610僅包括分布在體素510-1內(nèi)的總數(shù)目的采樣點(diǎn)610的一部分。例如,米樣點(diǎn)610的4x4x4網(wǎng)格分布在體素510-1內(nèi),那么米樣點(diǎn)的二維平面可以包括采樣點(diǎn)610的4x4平面(S卩,16個(gè)采樣點(diǎn))。在確定了用于采樣點(diǎn)610的覆蓋之后,光柵器455實(shí)施在每個(gè)所覆蓋的采樣點(diǎn)610的上面和/或下面的列采樣點(diǎn)610的深度檢測,以確定每個(gè)采樣點(diǎn)610是在基元520-1的前側(cè)635上還是后側(cè)630上。沒有對(duì)未覆蓋的采樣點(diǎn)610的上面和/或下面的采樣點(diǎn)610的列實(shí)施深度檢測。就圖7B示出了該技術(shù)的一個(gè)實(shí)施例。
[0071]圖7B是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于分析分布在體素510內(nèi)的采樣點(diǎn)610的方法步驟的流程圖。盡管結(jié)合圖1-4的系統(tǒng)描述了所述方法步驟,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,配置為以任何順序?qū)嵤┧龇椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
[0072]如所示的,方法702開始于步驟750,在該步驟中,光柵器455 (和/或片段處理單元460)選擇基元520-1所投影到的平面。為了最大化基元520-1的投影的面積(例如,增大合適地計(jì)算針對(duì)由基元520-1所覆蓋的所有的采樣的覆蓋的可能性),所選的平面可以是垂直于基元520-1的平面法線640的支配軸(dominant axis)的平面。所述支配軸可以是主軸(例如x、y、或z軸)中的一個(gè)。在其它實(shí)施例中,基元520-1所投影到的平面可以是相交所需數(shù)目的采樣點(diǎn)610的平面或具有允許有效分析采樣點(diǎn)610的給定的圖案或網(wǎng)格的取向的平面。在步驟755。光柵器455將基元520-1投影到所選的平面。在步驟760,光柵器455確定針對(duì)在所選的平面中的或與所選的平面相關(guān)聯(lián)的每個(gè)采樣點(diǎn)610的基元520-1的投影的覆蓋。
[0073]接下來,在步驟765,光柵器455選擇所覆蓋的采樣點(diǎn)610,且在步驟770,定義(define)在所覆蓋的采樣點(diǎn)610的上面和/或下面延伸的采樣點(diǎn)610的列。然后在步驟775通過光柵器455分析所述采樣點(diǎn)610的列中的每個(gè)采樣點(diǎn)(例如通過深度檢測)以確定采樣點(diǎn)610是在基元520-1的前側(cè)635上還是在后側(cè)630上。在步驟780,例如通過為所確定的在基元520-1的后側(cè)上630 (或前側(cè)635)上的每個(gè)采樣點(diǎn)610設(shè)定位,光柵器455將分析結(jié)果存儲(chǔ)在體素掩模中。最后,在步驟785,如果有必要的話,光柵器455選擇另一個(gè)所覆蓋的采樣點(diǎn)610,并在步驟765重復(fù)所述分析過程。
[0074]有利地,用于分析采樣點(diǎn)610的第二技術(shù)可以減少所分析的采樣點(diǎn)610的數(shù)目。例如,如果光柵器455確定(在步驟760) —個(gè)或多個(gè)采樣點(diǎn)610沒有被基元520-1的投影覆蓋,那么可以不對(duì)在未覆蓋的采樣點(diǎn)610的上面和/或下面的采樣點(diǎn)610的列實(shí)施進(jìn)一步分析。
[0075]在分析了每個(gè)采樣點(diǎn)610之后,在步驟730得出了關(guān)于先前是否針對(duì)體素510_1存儲(chǔ)了結(jié)果的結(jié)論。例如,如果一個(gè)或多個(gè)其它基元520相交體素510-1,那么可能先前已經(jīng)存儲(chǔ)了針對(duì)體素510-1的結(jié)果,且先前已對(duì)該結(jié)果進(jìn)行了分析。如果沒有存儲(chǔ)針對(duì)體素510-1的結(jié)果,那么在步驟735將步驟725中所計(jì)算的結(jié)果存儲(chǔ)在所述體素掩模中。如果先前存儲(chǔ)了針對(duì)體素510-1的結(jié)果,那么片段處理單元460 (或光柵操作單元465)可以通過例如布爾算子(例如0R、AND、N0T等),將步驟725中所計(jì)算的結(jié)果與步驟737中所存儲(chǔ)的結(jié)果結(jié)合起來。例如,如果在步驟725中所確定的結(jié)果或先前存儲(chǔ)在所述體素掩模中的結(jié)果中針對(duì)采樣點(diǎn)610設(shè)定了位,那么可以在所存儲(chǔ)的體素掩模中針對(duì)采樣點(diǎn)610設(shè)定位。在步驟740,如果另一個(gè)基元520相交體素510-1,那么從步驟715開始,可以選擇基元520并進(jìn)行分析,且所述結(jié)果可以與步驟737中的所述體素掩模結(jié)合。
[0076]最后,在步驟745,一旦計(jì)算出并存儲(chǔ)(例如,在體素掩模中)針對(duì)體素510-1的覆蓋,片段處理單元460可以使用所述結(jié)果來確定體素510-1的面(face)指向哪個(gè)方向和/或體素510-1的表面的曲率。例如當(dāng)兩個(gè)或多于兩個(gè)的基元520的邊在體素510-1內(nèi)相交時(shí),可以確定曲率。此外,覆蓋結(jié)果可以用于確定體素510-1被基元520相交的比例(SP,在基元520的前側(cè)635上或后側(cè)630上的體素510-1的比例)和/或體素510-1的由基元520所屬的幾何對(duì)象所占用的比例(B卩,分?jǐn)?shù)占用)。在一個(gè)實(shí)施例中,所述體素的分?jǐn)?shù)占用可以由位的已經(jīng)在所述體素掩模中設(shè)定的比例來確定。例如,如果64個(gè)采樣點(diǎn)分布在體素510-1內(nèi),且所述體素掩模中的對(duì)應(yīng)于16個(gè)不同的采樣點(diǎn)610的位已經(jīng)被設(shè)定,那么所述體素的分?jǐn)?shù)占用是16/64或1/4。
[0077]片段處理單元460可以進(jìn)一步使用所述體素掩模來計(jì)算遮擋值(例如,方向性遮擋(direct1nal occlus1n)、環(huán)境遮擋(ambient occlus1n)等等)。例如,方向性遮擋值可以通過如所述體素掩模所指示的,將所述三維覆蓋投影到一個(gè)或多個(gè)平面上來計(jì)算。在一個(gè)實(shí)施例中,所述覆蓋值可以沿著三個(gè)主軸投影到三個(gè)平面上,且可以針對(duì)體素510-1存儲(chǔ)三個(gè)二維掩模。然后可以通過根據(jù)三個(gè)主軸的每個(gè)中的矢量的大小插入所述二維掩模來針對(duì)給定的矢量計(jì)算方向性遮擋。在其它實(shí)施例中,所述結(jié)果可以存儲(chǔ)在三個(gè)二維掩模中,而不是將在步驟725中所計(jì)算的結(jié)果存儲(chǔ)在體素掩模中(例如,為了增加存儲(chǔ)器效率)??梢葬槍?duì)所述三個(gè)主軸中的每一個(gè)存儲(chǔ)二維掩模。然后,如以上所述,片段處理單元460可以使用所述二維掩模來計(jì)算遮擋值。
[0078]當(dāng)每個(gè)體素510的采樣點(diǎn)610的數(shù)目高時(shí),存儲(chǔ)三個(gè)所投影的二維掩模而不是一個(gè)三維掩??梢詼p少所需的存儲(chǔ)器的量。更具體地,在三維掩模中采樣點(diǎn)610的數(shù)目隨著該采樣點(diǎn)610的分辨率的立方的增加而增加,而在三個(gè)二維掩模中采樣點(diǎn)610的數(shù)目隨著該采樣點(diǎn)610的分辨率的平方的增加而增加。
[0079]圖8A和SB示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于利用表面方程實(shí)施體素化的技術(shù)。該特定的體素化技術(shù)可以通過基于相交體素510的一個(gè)或多個(gè)基元520 (例如,520-2)計(jì)算表面方程來實(shí)施。所述表面方程可以通過累加平面方程,例如通過聚集相交體素510的每個(gè)基元520的平面系數(shù)來計(jì)算。所述表面方程可以包括平面方程(例如,平均法線和自體素510中的參考點(diǎn)的平均距離),或所述表面方程可以包括高階方程(例如二次曲面)以更準(zhǔn)確地表示多個(gè)相交的基元520的特征(例如曲率)。一旦計(jì)算出,所述表面方程可以用于計(jì)算針對(duì)體素510的分?jǐn)?shù)占用和/或遮擋值。以下就圖9進(jìn)一步詳細(xì)地描述用于利用表面方程實(shí)施體素化的典范的技術(shù)。
[0080]圖9是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于利用表面方程實(shí)施體素化的方法步驟的流程圖。盡管結(jié)合圖1-4的系統(tǒng)描述了所述方法步驟,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,配置為以任何順序?qū)嵤┧龇椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
[0081]如所示的,方法900開始于步驟910,在該步驟中,幾何處理單元425確定體素510-2與一個(gè)或多個(gè)基元520相交。在步驟915,幾何處理單元425選擇相交體素510-2的基元520-2,如圖8A和8B所顯示。接下來,在步驟920,片段處理單元460計(jì)算由基元520-2和體素510-2的交集所定義的平面的系數(shù)。交叉平面810的系數(shù)可以參照體素510-2內(nèi)的參考點(diǎn)來確定。例如,交叉平面810的系數(shù)可以參照體素510-2的角、邊或中心來計(jì)算。
[0082]在已經(jīng)計(jì)算出平面系數(shù)之后,在步驟925得出了關(guān)于先前是否存儲(chǔ)了針對(duì)體素510-2的系數(shù)的結(jié)論。例如,如果一個(gè)或多個(gè)其它基元520相交體素510-2,那么可能先前已經(jīng)存儲(chǔ)了針對(duì)體素510-2系數(shù),并已經(jīng)對(duì)該系數(shù)進(jìn)行了分析。如果沒有存儲(chǔ)針對(duì)體素510-2的結(jié)果,那么在步驟930存儲(chǔ)步驟920中所計(jì)算的系數(shù)。如果先前存儲(chǔ)了針對(duì)體素510-2的系數(shù),那么光柵操作單元465可以將步驟920中所計(jì)算的系數(shù)與步驟935中所存儲(chǔ)的系數(shù)結(jié)合起來。例如,結(jié)合所述系數(shù)可以包括計(jì)算平均平面系數(shù)或計(jì)算高階曲面方程。
[0083]當(dāng)大多數(shù)相交的基元520具有大致相同的取向時(shí),計(jì)算平均平面方程的累加平面方程提供了體素510-2的表面的準(zhǔn)確的表示。然而,當(dāng)相交的基元520具有非常不同的取向時(shí),計(jì)算平均平面方程可能會(huì)提供所述基本幾何(underlying geometry)的較差的相似。因此,在這種情況下,可以使用高階表面表示。在一個(gè)實(shí)施例中,可以利用三個(gè)或多于三個(gè)的系數(shù)計(jì)算二次曲面,而不是計(jì)算和存儲(chǔ)平均平面方程。例如,可以利用10個(gè)4x4對(duì)稱矩陣系數(shù)來存儲(chǔ)二次曲面。有利地,可以從平面方程容易地獲得二次矩陣,并對(duì)其進(jìn)行線性組入口 ο
[0084]除了存儲(chǔ)平均平面(或表面)方程之外,片段處理單元460可以計(jì)算和存儲(chǔ)針對(duì)體素510-2的曲率(例如,平均曲率大小)。例如,隨著曲率大小的增大,在后續(xù)的著色操作期間,針對(duì)垂直于所述平面方向的方向的不透明度可能增加??梢葬槍?duì)體素510-2的每個(gè)體素計(jì)算并存儲(chǔ)曲率大小并將該曲率大小內(nèi)插為每像素屬性。
[0085]在步驟940,如果另一個(gè)基元520相交體素510_2,那么如本文先前所描述的,從步驟915開始,可以選擇基元520并進(jìn)行分析,且光柵操作單元465可以將所得到的系數(shù)與步驟935中所存儲(chǔ)的系數(shù)結(jié)合。
[0086]最后,在步驟945,一旦針對(duì)體素510-2計(jì)算出并存儲(chǔ)表面系數(shù),片段處理單元460可以使用所述系數(shù)來確定被基元520所相交的體素510-2的量(例如,比例)(即體素510-2在基元520的前側(cè)635上或后側(cè)630上的量)和/或由基元520所屬的幾何對(duì)象所占用的體素的量(即,分?jǐn)?shù)占用)。
[0087]用于確定分?jǐn)?shù)占用的一個(gè)技術(shù)是實(shí)施球體-平面(sphere-plane)交集。例如,片段處理單元460可以計(jì)算相交所述平均平面的球體的半徑,其中,所述球體的半徑表示從所述平均平面到所述體素中的參考點(diǎn)(例如,體素的中心)的距離。然后用所述半徑可以實(shí)施一維查找以估算體素510-2的分?jǐn)?shù)占用。例如,所述球體的半徑可以從體素510-2的中心到所述平均平面的表面來計(jì)算。這個(gè)查找表技術(shù)計(jì)算廉價(jià)的且可以彌補(bǔ)立方角(cube-corner)效果,從而使所估算的分?jǐn)?shù)占用隨著基元520的進(jìn)入體素510-2或從體素510-2退出而逐步地變化。此外,可以插入(例如使用線性插值)多個(gè)表查找值以更準(zhǔn)確地估算占用。
[0088]用于確定分?jǐn)?shù)占用的另一種技術(shù)包括插入具有體素510-2的平均表面,并計(jì)算在所述平均表面的后側(cè)630上的體素510-2的體積(例如,在相交的基元520所述的幾何對(duì)象的內(nèi)部的體素510-2的體積)?;蛘?,由于確定在所述平均表面的后側(cè)630上的體素510-2的精確體積可能是計(jì)算昂貴的,所以可以實(shí)施表查找,以通過首先用低精度平面估算平均表面來確定分?jǐn)?shù)占用。
[0089]所述表面系數(shù)可以進(jìn)一步用來計(jì)算遮擋值(例如,方向性遮擋、環(huán)境遮擋等等)。例如,片段處理單元460可以通過將所述平均表面修剪至體素510-2并將所修剪的表面投影到一個(gè)或多個(gè)平面上來計(jì)算方向性遮擋值。在一個(gè)實(shí)施例中,所修剪的表面可以沿著三個(gè)主軸投影到三個(gè)平面上,且可以針對(duì)體素510-2存儲(chǔ)得到的二維掩模。然后可以通過根據(jù)三個(gè)主軸的每個(gè)中的矢量的大小插入所述二維掩模來針對(duì)給定的矢量計(jì)算方向性遮擋?;蛘撸ㄟ^在一個(gè)或多個(gè)方向上采樣和/或通過利用查找表和所述平均表面的低精度估算,可以用其它分析技術(shù)來估算方向性遮擋。
[0090]圖1OA和1B示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于利用標(biāo)量場實(shí)施體素化的技術(shù)。該特定的體素化技術(shù)可以通過確定針對(duì)相交體素510-3的每個(gè)基元520的一個(gè)或多個(gè)標(biāo)量值來實(shí)施。每個(gè)標(biāo)量值可以通過測量基元520的表面和體素510-3內(nèi)的參考點(diǎn)(例如,采樣點(diǎn)1010-1、采樣點(diǎn)1010-2和采樣點(diǎn)1010-3)。然后得到的標(biāo)量場可以用于確定針對(duì)體素510-3的分?jǐn)?shù)占用和/或遮擋值。例如,可以通過分析標(biāo)量場中的一個(gè)或多個(gè)標(biāo)量值的大小和/或符號(hào)(sign)來確定分?jǐn)?shù)占用和遮擋值。以下就圖11進(jìn)一步詳細(xì)地描述用于利用標(biāo)量場實(shí)施體素化的典范的技術(shù)。
[0091]圖11是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于利用標(biāo)量場實(shí)施體素化的方法步驟的流程圖。盡管結(jié)合圖1-4的系統(tǒng)描述了所述方法步驟,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,配置為以任何順序?qū)嵤┧龇椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
[0092]如所示的,方法1100開始于步驟1110,在該步驟中,幾何處理單元425確定體素510-3與一個(gè)或多個(gè)基元520相交。在步驟1115,幾何處理單元425選擇相交體素510-3的基元520-3,如圖1OA和1B所顯示。在步驟1120,在體素510-3內(nèi)分布一個(gè)或多個(gè)參考點(diǎn)(例如,采樣點(diǎn)1010)。在體素510-3內(nèi)分布采樣點(diǎn)1010可以包括將采樣點(diǎn)1010分布在體素510-3的一個(gè)或多個(gè)邊和/或角(例如,頂點(diǎn))上和/或體素510-3的中心上。盡管圖1OA和1B所示出的采樣點(diǎn)1010排列在規(guī)則的點(diǎn)陣中,但還可以使用采樣點(diǎn)1010的任何規(guī)則或不規(guī)則的圖案或網(wǎng)格。
[0093]在體素510-3內(nèi),基于例如所需的粒度、準(zhǔn)確性、處理的工作量等,可以分布任何數(shù)目的采樣點(diǎn)1010。在一個(gè)實(shí)施例中,將8個(gè)采樣點(diǎn)1010分布在體素510-3的角。所存儲(chǔ)的針對(duì)這些采樣點(diǎn)的標(biāo)量值在鄰近體素510之間可以是共享的或不共享的(例如聚集的)。在另一個(gè)實(shí)施例中,單個(gè)采樣點(diǎn)1010可以位于體素510-3的角或體素510-3的中心。在另一個(gè)實(shí)施例中,對(duì)于每個(gè)所選的基元520,僅分析位于基元520所相交的體素的邊的頂點(diǎn)的采樣點(diǎn)1010。
[0094]接下來,在步驟1125,片段處理單元460計(jì)算每個(gè)采樣點(diǎn)1010和基元520_3的表面之間的距離?;?20-3的表面上的、從該處計(jì)算每個(gè)距離的位置可以表示采樣點(diǎn)1010和基元520-3之間的最短距離?;诓蓸狱c(diǎn)1010和基元520-3的表面之間的距離,在步驟1130可以確定標(biāo)量值。所述標(biāo)量值可以正比于(或等于)所計(jì)算的距離。此外,標(biāo)量值可以基于體素510-3所相交的基元520的面積(例如,相交的平面1020的面積)來衡量。進(jìn)一步,可以基于相應(yīng)的采樣點(diǎn)1010是在基元520-3的前側(cè)635上還是在后側(cè)630上來對(duì)每個(gè)標(biāo)量值指定符號(hào)(即正的或負(fù)的)。在圖1OA和1B示出的實(shí)施例中,針對(duì)所確定的在基元520的前側(cè)635上的采樣點(diǎn)1010 (例如采樣點(diǎn)1010-2)存儲(chǔ)正標(biāo)量值,并針對(duì)所確定的在基元520的后側(cè)630上的采樣點(diǎn)1010 (例如采樣點(diǎn)1010-1)存儲(chǔ)負(fù)標(biāo)量值。進(jìn)一步,將零值指定給所確定的在基元520的平面中的每個(gè)采樣點(diǎn)1010 (例如采樣點(diǎn)1010-3)。
[0095]通過就單個(gè)采樣點(diǎn)分析多個(gè)基元520所計(jì)算的標(biāo)量值可以由光柵操作單元465聚集。如以上所述,可以利用指定給每個(gè)基元520的基于面積的衡量來聚集標(biāo)量值。在一個(gè)實(shí)施例中,在針對(duì)基元520計(jì)算一個(gè)或多個(gè)標(biāo)量值之后,在步驟1135得出了關(guān)于先前是否針對(duì)一個(gè)或多個(gè)采樣點(diǎn)1010存儲(chǔ)了標(biāo)量值的結(jié)論。例如,如果一個(gè)或多個(gè)其它基元520相交體素510-3 (或鄰近的體素510),那么針對(duì)采樣點(diǎn)1010可能先前已經(jīng)存儲(chǔ)了標(biāo)量值并且先前已經(jīng)對(duì)該標(biāo)量值進(jìn)行了分析。如果沒有存儲(chǔ)針對(duì)采樣點(diǎn)1010的結(jié)果,那么在步驟1140存儲(chǔ)步驟1130中所確定的標(biāo)量值。如果針對(duì)采樣點(diǎn)1010先前存儲(chǔ)了一個(gè)或多個(gè)標(biāo)量值,那么例如通過對(duì)所述標(biāo)量值進(jìn)行求和,可以將步驟1130中所確定的標(biāo)量值與步驟1145中所存儲(chǔ)的標(biāo)量值結(jié)合起來。在步驟1150,如果另一個(gè)基元520相交體素510-3,那么從步驟1115開始,可以選擇基元520并進(jìn)行分析,且所確定的標(biāo)量值可以與步驟1145中所存儲(chǔ)的值結(jié)合。在存儲(chǔ)所計(jì)算的標(biāo)量值之前,與體素510-3相關(guān)聯(lián)的標(biāo)量值可以初始化為小的正(負(fù)值)值(例如,le-7),從而空體素510看起來好像不含有表面(例如,相交的基元520)。
[0096]在步驟1155, —旦已經(jīng)計(jì)算出標(biāo)量場(例如,包括針對(duì)每個(gè)采樣點(diǎn)1010的有符號(hào)的標(biāo)量值),片段處理單元460可以使用所述標(biāo)量場來確定被基元520所相交的體素510-3的比例(即體素510-3在基元520的前側(cè)635上或后側(cè)630上的比例)和/或體素510-3的由基元520所屬的幾何對(duì)象所占用的比例(即,分?jǐn)?shù)占用)。片段處理單元460可以進(jìn)一步使用所述標(biāo)量場來計(jì)算遮擋值(例如,方向性遮擋、環(huán)境遮擋等等)。
[0097]在一個(gè)實(shí)施例中,針對(duì)體素510-3的分?jǐn)?shù)占用和遮擋值利用在其上將標(biāo)量場估算為具有零值的隱式曲面、線、點(diǎn)等來計(jì)算。然后如以上就圖8A-9的表面方程技術(shù)所論述的,可以對(duì)所述零值表面(或零值線)進(jìn)行測量、投影等,以確定分?jǐn)?shù)占用和遮擋值。例如,可以通過將所述零值表面投影到一個(gè)或多個(gè)平面上來估算遮擋。此外,用標(biāo)量場,其中一些技術(shù)可能共享以上就圖5-9所描述的技術(shù)的特征的多種其它的技術(shù),可以用來確定占用和遮擋值,如以下所述。
[0098]在一個(gè)技術(shù)中,針對(duì)每個(gè)體素510,利用所述標(biāo)量值的符號(hào)(例如,指定給體素510的角上的采樣點(diǎn)1010的標(biāo)量值的符號(hào))來實(shí)施表查找,以利用低精度的平面來估算體素510的表面。該技術(shù)可以比作是移動(dòng)立方體算法。然后可以用從表查找中檢索到的一個(gè)或多個(gè)值直接計(jì)算占用和遮擋,而不需要計(jì)算體素510的表面。
[0099]在另一個(gè)技術(shù)中,可以通過分析位于垂直于主軸的體素510-3的面的角上的標(biāo)量值,沿著所述主軸來估算方向性遮擋。然后可以在所述面上利用雙線性插值來計(jì)算標(biāo)量值沿其插值為O的一條或多條零值線。所述零值線可以用來估算與所述體素相關(guān)聯(lián)的方向性遮擋。例如,可以通過計(jì)算畫在體素510-3的面上的零值線的任一側(cè)上的面積比來確定方向性遮擋值。在又一個(gè)技術(shù)中,與體素510相關(guān)聯(lián)的標(biāo)量值可以相加,且所述標(biāo)量值的和可以用來確定遮擋值。例如,為零的和可以指示所述遮擋為大約0.5 (或被遮擋了 50%),整數(shù)和可以指示所述遮擋為小于0.5,負(fù)數(shù)和可以指示所述遮擋為大于0.5。所述和的大小可以進(jìn)一步指示所述遮擋在0.5以上或以下的程度。
[0100]在其它實(shí)施例中,可以針對(duì)每個(gè)體素510確定一個(gè)標(biāo)量值,且所述標(biāo)量值可以直接映射到體素510的占用。將所述標(biāo)量值映射到體素510的占用可以包括將所述標(biāo)量值固定(clamping)到[O, 1,1- S]。例如,通過將標(biāo)量值1-S的倒數(shù)固定到[O, I]的范圍可以估算占用。當(dāng)單個(gè)采樣點(diǎn)1010位于體素510的中心時(shí),該技術(shù)可能是有用的。
[0101]盡管就單個(gè)體素510 (例如,510-1、510-2、510-3)描述了圖6A-11所描述的技術(shù),但以上所描述的每個(gè)技術(shù)都可以應(yīng)用于構(gòu)建相交任何數(shù)目的體素510的幾何對(duì)象(例如,基兀520的網(wǎng)格)的體積表不。
[0102]總之,公開了三個(gè)用于構(gòu)建幾何對(duì)象的體素化的表示。所述用于實(shí)施體素化的多重采樣抗鋸齒技術(shù)將采樣點(diǎn)分布在體素內(nèi),確定哪個(gè)基元相交所述體素,并分析所述相交的基元以確定每個(gè)采樣點(diǎn)是在所述幾何對(duì)象的內(nèi)部還是外部??梢酝ㄟ^對(duì)所有的采樣進(jìn)行迭代并根據(jù)一個(gè)或多個(gè)三維平面方程評(píng)估每個(gè)采樣來在三維中分析相交的基元。或者,可以在二維中確定每個(gè)相交的基元的采樣點(diǎn)覆蓋,隨后對(duì)在每個(gè)所覆蓋的采樣的上面或下面的采樣的列進(jìn)行深度檢測。然后將得到的體素掩模投影到一個(gè)或多個(gè)參考平面以確定遮擋值,或?qū)λ鲶w素掩模進(jìn)行分析以確定所述幾何對(duì)象所占用的體素的比例。
[0103]進(jìn)一步,用于利用表面方程實(shí)施體素化的技術(shù)計(jì)算針對(duì)相交所述體素的每個(gè)基元的一個(gè)或多個(gè)表面系數(shù)(例如,平面系數(shù))。將對(duì)應(yīng)于多個(gè)相交的基元的多個(gè)平面系數(shù)集聚集以計(jì)算針對(duì)體素510-2的平均表面。利用二維平面方程或利用高階二次曲面來估算平均表面。然后用所述平均表面計(jì)算分?jǐn)?shù)占用和/或遮擋值。計(jì)算分?jǐn)?shù)占用可以包括實(shí)施球體-平面交集或利用低精度平面估算實(shí)施表查找。此外,可以插入(例如使用線性插值)多個(gè)表查找值以更準(zhǔn)確地估算占用??梢酝ㄟ^將所述平均表面修剪到所述體素,并將所修剪的表面投影到一個(gè)或多個(gè)參照面上來計(jì)算遮擋。
[0104]最后,用于利用標(biāo)量場實(shí)施的體素化的技術(shù)確定每個(gè)基元和分布在所述體素中的一個(gè)或多個(gè)參考點(diǎn)(例如采樣點(diǎn))之間的距離。采樣點(diǎn)可分布在例如所述體素的角和/或單個(gè)采樣點(diǎn)可以位于每個(gè)體素的中心。將針對(duì)所計(jì)算的采樣點(diǎn)和所述基元間的距離的有符號(hào)的標(biāo)量值存儲(chǔ)在數(shù)據(jù)陣列中。此外,針對(duì)相交所述體素的多個(gè)基元,將所記錄的針對(duì)給定的采樣點(diǎn)的標(biāo)量值聚集。然后通過分析所記錄的針對(duì)每個(gè)采樣點(diǎn)的標(biāo)量值的符號(hào)和大小來確定分?jǐn)?shù)占用和/或遮擋。
[0105]所公開的技術(shù)的一個(gè)優(yōu)勢是幾何對(duì)象的體素化的表示可以有效地被構(gòu)建并用于確定分?jǐn)?shù)占用和/或遮擋值。然后可以用所確定的分?jǐn)?shù)占用和/或遮擋值來實(shí)施后續(xù)的圖形操作或建模計(jì)算,而不會(huì)引入像常規(guī)的體素化方法一樣多的人工因素。進(jìn)一步,本文所描述的體素掩模、表面方程和標(biāo)量場提供了可以選擇并用于構(gòu)建幾何對(duì)象的體素化的表示的不同水平的準(zhǔn)確性、精度和處理工作量,用于多種應(yīng)用。
[0106]本發(fā)明的一個(gè)實(shí)施例可實(shí)現(xiàn)為與計(jì)算機(jī)系統(tǒng)一起使用的程序產(chǎn)品。該程序產(chǎn)品的程序定義實(shí)施例的功能(包括本文中描述的方法)并且可以被包含在各種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上。示例性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)包括但不限于:(i)不可寫入的存儲(chǔ)介質(zhì)(例如,計(jì)算機(jī)內(nèi)的只讀存儲(chǔ)器設(shè)備,諸如可由光盤只讀存儲(chǔ)器(⑶-ROM)驅(qū)動(dòng)器讀取的⑶-ROM盤、閃存、ROM芯片或任何類型的固態(tài)非易失性半導(dǎo)體存儲(chǔ)器),在其上永久性地存儲(chǔ)信息;和
(ii)可寫入的存儲(chǔ)介質(zhì)(例如,軟盤驅(qū)動(dòng)器內(nèi)的軟盤或硬盤驅(qū)動(dòng)器或者任何類型的固態(tài)隨機(jī)存取半導(dǎo)體存儲(chǔ)器),在其上存儲(chǔ)可更改的信息。
[0107]以上已參照特定實(shí)施例對(duì)本發(fā)明進(jìn)行了描述。然而,本領(lǐng)域普通技術(shù)人員應(yīng)該理解的是,可對(duì)此做出各種修改和變化,而不脫離如所附權(quán)利要求書中所闡述的本發(fā)明的較寬精神和范圍。因此,前面的描述以及附圖應(yīng)被視為是示例性的而非限制性的。
[0108]因此,在下述的權(quán)利要求中闡述本發(fā)明的實(shí)施例的范圍。
【權(quán)利要求】
1.一種用于實(shí)施體素化的方法,所述方法包括: 識(shí)別與第一圖形基元所相交的體素,所述第一圖形基元具有前側(cè)和后側(cè); 選擇所述體素內(nèi)的多個(gè)采樣點(diǎn); 針對(duì)包含在所述多個(gè)采樣點(diǎn)中的每個(gè)采樣點(diǎn),確定所述采樣點(diǎn)是位于所述第一圖形基元的前側(cè)上還是位于所述第一圖形基元的后側(cè)上;和 針對(duì)包含在所述多個(gè)采樣點(diǎn)中的至少第一采樣點(diǎn),將反映所述第一采樣點(diǎn)是位于所述第一圖形基元的前側(cè)上還是位于所述第一圖形基元的后側(cè)上的第一結(jié)果存儲(chǔ)在體素掩模中。
2.如權(quán)利要求1所述的方法,其中,確定所述采樣點(diǎn)是位于所述第一圖形基元的前側(cè)上還是位于所述第一圖形基元的后側(cè)上包括: 將所述第一圖形基元投影到與包含在所述多個(gè)采樣點(diǎn)中的一個(gè)采樣點(diǎn)子集相關(guān)聯(lián)的平面; 基于所投影的第一圖形基元,實(shí)施至少一個(gè)覆蓋操作以確定包含在所述采樣點(diǎn)子集中的一個(gè)或多個(gè)所覆蓋的采樣點(diǎn);和針對(duì)每個(gè)所覆蓋的采樣點(diǎn): 定義與所覆蓋的采樣點(diǎn)相關(guān)聯(lián)的采樣點(diǎn)列;和 確定在所述采樣點(diǎn)列中的每個(gè)采樣點(diǎn)是位于所述第一圖形基元的前側(cè)上還是在所述第一圖形基元的后側(cè)上。
3.如權(quán)利要求2所述的方法,其中,所述平面垂直于與所述第一圖形基元相關(guān)聯(lián)的法線的支配軸。
4.如權(quán)利要求1所述的方法,其中,確定所述采樣點(diǎn)是位于所述第一圖形基元的前側(cè)上還是位于所述第一圖形基元的后側(cè)上包括:根據(jù)所述第一圖形基元與所述體素的交集所定義的平面方程來評(píng)估所述采樣點(diǎn)。
5.如權(quán)利要求1所述的方法,所述方法進(jìn)一步包括基于所述體素掩模計(jì)算所述體素有多少位于所述第一圖形基元的后側(cè)上。
6.如權(quán)利要求1所述的方法,所述方法進(jìn)一步包括: 選擇位于所述第一圖形基元的后側(cè)上的一個(gè)或多個(gè)采樣點(diǎn); 將所述一個(gè)或多個(gè)采樣點(diǎn)投影到第一平面以計(jì)算第一二維掩模; 將所述一個(gè)或多個(gè)采樣點(diǎn)投影到第二平面以計(jì)算第二二維掩模;和 將所述一個(gè)或多個(gè)采樣點(diǎn)投影到第三平面以計(jì)算第三二維掩模。
7.如權(quán)利要求6所述的方法,所述方法進(jìn)一步包括基于所述第一二維掩模、第二二維掩模和第三二維掩模中的兩個(gè)或多于兩個(gè)來實(shí)施插值操作,以計(jì)算方向性遮擋。
8.如權(quán)利要求1所述的方法,所述方法進(jìn)一步包括: 確定所述體素與具有前側(cè)和后側(cè)的第二圖形基元相交; 選擇所述體素內(nèi)的多個(gè)采樣點(diǎn); 針對(duì)包含在所述多個(gè)采樣點(diǎn)中的每個(gè)采樣點(diǎn),確定所述采樣點(diǎn)是位于所述第二圖形基元的前側(cè)上還是位于所述第二圖形基元的后側(cè)上;和 針對(duì)包含在所述多個(gè)采樣點(diǎn)中的至少第一采樣點(diǎn),將反映所述第一采樣點(diǎn)是位于所述第二圖形基元的前側(cè)上還是位于所述第二圖形基元的后側(cè)上的第二結(jié)果存儲(chǔ)在體素掩模中。
9.如權(quán)利要求8所述的方法,其中,將所述第二結(jié)果存儲(chǔ)在所述體素掩模中包括: 讀取所述存儲(chǔ)在所述體素掩模中的第一結(jié)果、所述與第一采樣點(diǎn)相關(guān)聯(lián)的第一結(jié)果和弟結(jié)果; 基于所述第一結(jié)果和第二結(jié)果,生成第三結(jié)果;和 將所述第三結(jié)果存儲(chǔ)在所述體素掩模中,其中所述第三結(jié)果與所述第一采樣點(diǎn)相關(guān)聯(lián)。
10.一種計(jì)算設(shè)備,包括: 存儲(chǔ)器;和 圖形處理管線,所述圖形處理管線耦連到所述存儲(chǔ)器并配置為通過以下步驟實(shí)施體素化: 識(shí)別與具有前側(cè)和后側(cè)的第一圖形基元相交的體素; 選擇所述體素內(nèi)的多個(gè)采樣點(diǎn); 針對(duì)包含在所述多個(gè)采樣 點(diǎn)中的每個(gè)采樣點(diǎn),確定所述采樣點(diǎn)是位于所述第一圖形基元的前側(cè)上還是位于所述第一圖形基元的后側(cè)上;和 針對(duì)包含在所述多個(gè)采樣點(diǎn)中的至少第一采樣點(diǎn),將反映所述第一采樣點(diǎn)是位于所述第一圖形基元的前側(cè)上還是位于所述第一圖形基元的后側(cè)上的第一結(jié)果存儲(chǔ)在體素掩模中。
【文檔編號(hào)】G06T17/10GK104050719SQ201310752251
【公開日】2014年9月17日 申請(qǐng)日期:2013年12月31日 優(yōu)先權(quán)日:2013年3月14日
【發(fā)明者】西里爾·克拉辛, 尤里·Y·烏拉爾斯基, 埃里克·恩德頓, 埃里克·B·盧姆, 杰爾姆·F·小杜魯克, 亨利·帕爾德·莫頓, 大衛(wèi)·利布基 申請(qǐng)人:輝達(dá)公司