本發(fā)明涉及用于圖形處理的系統(tǒng)和方法。
背景技術(shù):
在3d圖形處理系統(tǒng)中,場(chǎng)景的對(duì)象由圖元組表示,圖元組通常在場(chǎng)景的渲染(rendering)期間被投影、掃描轉(zhuǎn)換、紋理化和陰影化。圖元具有由一個(gè)或多個(gè)頂點(diǎn)(例如,在圖元是三角形的情況下的三個(gè)頂點(diǎn))的位置定義的簡(jiǎn)單幾何形狀(通常為三角形),紋理可以應(yīng)用于該簡(jiǎn)單幾何形狀。3d場(chǎng)景的渲染處理圖元以形成包括圖像像素陣列的圖像。
在渲染場(chǎng)景期間,圖形處理單元(gpu)獲取存儲(chǔ)在存儲(chǔ)器中的紋理數(shù)據(jù),以將紋理應(yīng)用于場(chǎng)景中的對(duì)象。gpu和存儲(chǔ)器之間的該數(shù)據(jù)傳輸利用相當(dāng)大的存儲(chǔ)器帶寬并消耗電力。此外,大紋理要求分配給它們大量存儲(chǔ)器,這可能導(dǎo)致其它應(yīng)用程序所使用的存儲(chǔ)器的短缺。
大紋理的示例是陰影圖(shadowmap),其用于向場(chǎng)景添加陰影。陰影映射的基本原理是渲染從用于場(chǎng)景的光源(諸如太陽)的視點(diǎn)看的場(chǎng)景,并且存儲(chǔ)可見的每個(gè)表面(即,被光源照亮的每個(gè)表面)的深度。接下來,渲染常規(guī)場(chǎng)景(從相機(jī)的視點(diǎn)看),并且將繪制的每個(gè)點(diǎn)的深度與存儲(chǔ)的深度進(jìn)行比較,以從光源的視點(diǎn)確定繪制點(diǎn)在存儲(chǔ)的深度前面還是后面。如果點(diǎn)的深度在被照亮的表面后面,那么該點(diǎn)在陰影中。否則,它被照亮。深度信息被存儲(chǔ)為紋理(即,作為陰影圖),這要求大量存儲(chǔ)器,尤其是對(duì)于高分辨率陰影圖。生成和存儲(chǔ)高分辨率陰影圖要求相當(dāng)大的處理能力、大量存儲(chǔ)器和高存儲(chǔ)器帶寬。由于在存儲(chǔ)器和gpu之間的數(shù)據(jù)傳輸是電力消耗的重要原因,所以在該領(lǐng)域中進(jìn)行的減少將允許gpu以低功率操作。此外,存儲(chǔ)器帶寬使用中的任何減少和與其相關(guān)的硬件優(yōu)化可以提升應(yīng)用程序性能。
因此,需要減少圖形處理系統(tǒng)中的存儲(chǔ)器和處理開銷。
技術(shù)實(shí)現(xiàn)要素:
根據(jù)本發(fā)明的第一方面,提供了一種圖形處理系統(tǒng),該圖形處理系統(tǒng)包括:圖塊化單元,其被配置為將場(chǎng)景的第一視圖圖塊化(tiling)為多個(gè)圖塊(tile)并且生成與每個(gè)圖塊相關(guān)聯(lián)的圖元的列表;處理單元,其被配置為根據(jù)所述列表識(shí)別所述圖塊的分別與至少預(yù)定數(shù)量的圖元相關(guān)聯(lián)的第一子集;以及渲染單元,其被配置為將所識(shí)別的圖塊中的每個(gè)渲染為渲染目標(biāo)。
該系統(tǒng)還可以包括存儲(chǔ)器和存儲(chǔ)器管理單元,存儲(chǔ)器管理單元被配置為將存儲(chǔ)器的一部分分配給每個(gè)所識(shí)別的圖塊。
渲染單元可以被配置為將從每個(gè)所識(shí)別的圖塊的渲染得到的數(shù)據(jù)存儲(chǔ)在針對(duì)該圖塊分配的存儲(chǔ)器的所述一部分處。
存儲(chǔ)器管理單元還可以被配置為不為多個(gè)圖塊中未被處理單元識(shí)別的每個(gè)圖塊分配存儲(chǔ)器的一部分。
渲染單元還可以被配置為為了后續(xù)渲染,訪問與未被識(shí)別的圖塊相關(guān)聯(lián)的存儲(chǔ)器位置,并且存儲(chǔ)器管理單元還被配置為響應(yīng)于所述訪問返回預(yù)定義值。
渲染單元還可以被配置為不渲染未被處理單元識(shí)別的圖塊。
在第一子集中識(shí)別的圖塊的數(shù)量可以小于場(chǎng)景被圖塊化為的圖塊的數(shù)量。
圖塊化單元可以被配置為通過確定哪些圖元至少部分地位于該圖塊內(nèi)而生成與每個(gè)圖塊相關(guān)聯(lián)的圖元的列表。
處理單元可以被配置為識(shí)別圖塊的與場(chǎng)景在第二視圖中可見的部分相關(guān)聯(lián)的第二子集。渲染單元可以被配置為渲染在第一子集和第二子集二者中識(shí)別的每個(gè)圖塊。
處理單元可以被配置為識(shí)別圖塊的與場(chǎng)景在第二視圖中可見的部分相關(guān)聯(lián)的第二子集。存儲(chǔ)器管理單元可以被配置為將存儲(chǔ)器的一部分分配給在第一子集和第二子集二者中識(shí)別的所述圖塊中的每個(gè)。
根據(jù)本發(fā)明的第二方面,提供了一種圖形處理系統(tǒng),該圖形處理系統(tǒng)包括:用于存儲(chǔ)數(shù)據(jù)的存儲(chǔ)器;圖塊化單元,其被配置為將場(chǎng)景的第一視圖圖塊化為多個(gè)圖塊;渲染單元,其被配置為渲染與至少預(yù)定數(shù)量的圖元相關(guān)聯(lián)的每個(gè)圖塊,并且輸出從該圖塊的渲染得到的渲染數(shù)據(jù);以及存儲(chǔ)器管理單元,其被配置為檢測(cè)針對(duì)每個(gè)渲染后的圖塊輸出的渲染數(shù)據(jù),并且為該渲染后的圖塊分配存儲(chǔ)器的一部分;以及將針對(duì)每個(gè)渲染后的圖塊的渲染數(shù)據(jù)存儲(chǔ)在為該圖塊分配的存儲(chǔ)器的所述一部分處。
存儲(chǔ)器管理單元還可以被配置為不為所述多個(gè)圖塊中不與至少預(yù)定數(shù)量的圖元相關(guān)聯(lián)的每個(gè)圖塊分配存儲(chǔ)器的一部分。
渲染單元還可以被配置為為了后續(xù)渲染,訪問存儲(chǔ)器以讀取與不與至少預(yù)定數(shù)量的圖元相關(guān)聯(lián)的圖塊相關(guān)聯(lián)的數(shù)據(jù),并且存儲(chǔ)器管理單元還被配置為響應(yīng)于所述訪問返回預(yù)定義值。
渲染單元還可以被配置為不輸出針對(duì)不與至少預(yù)定數(shù)量的圖元相關(guān)聯(lián)的圖塊的數(shù)據(jù)。
該系統(tǒng)還可以包括處理單元,其被配置為識(shí)別圖塊的與場(chǎng)景在第二視圖中可見的部分相關(guān)聯(lián)的子集,其中,渲染單元可以被配置為渲染在所述子集中被識(shí)別并且與至少所述預(yù)定數(shù)量的圖元相關(guān)聯(lián)的每個(gè)圖塊。
渲染目標(biāo)可以是紋理。渲染數(shù)據(jù)可以是用于紋理的數(shù)據(jù)。渲染單元可以被配置為在場(chǎng)景的后續(xù)渲染中將紋理應(yīng)用于場(chǎng)景。紋理可以應(yīng)用于場(chǎng)景的第二視圖或該第二視圖,第二視圖不同于第一視圖。紋理可以是陰影圖。
所述預(yù)定數(shù)量可以等于或大于1。
根據(jù)本發(fā)明的第三方面,提供了一種圖形處理方法,該圖形處理方法包括:將場(chǎng)景的第一視圖圖塊化為多個(gè)圖塊;生成與每個(gè)圖塊相關(guān)聯(lián)的圖元的列表;根據(jù)所述列表識(shí)別所述圖塊的分別與至少預(yù)定數(shù)量的圖元相關(guān)聯(lián)的第一子集;以及將所識(shí)別的圖塊中的每個(gè)渲染為渲染目標(biāo)。
該方法還可以包括:將存儲(chǔ)器的一部分分配給每個(gè)所識(shí)別的圖塊。
該方法還可以包括:將從每個(gè)所識(shí)別的圖塊的渲染得到的數(shù)據(jù)存儲(chǔ)在針對(duì)該圖塊分配的存儲(chǔ)器的所述一部分處。
該方法還可以包括:不為多個(gè)圖塊中未被識(shí)別的每個(gè)圖塊分配存儲(chǔ)器的一部分。
該方法還可以包括:為了后續(xù)渲染,訪問與未被識(shí)別的圖塊相關(guān)聯(lián)的存儲(chǔ)器位置,并且響應(yīng)于所述訪問返回預(yù)定義值。
該方法還可以包括:不渲染未被識(shí)別的圖塊。
在第一子集中識(shí)別的圖塊的數(shù)量可以小于場(chǎng)景被圖塊化為的圖塊的數(shù)量。
生成與每個(gè)圖塊相關(guān)聯(lián)的圖元的列表可以包括:確定哪些圖元至少部分地位于該圖塊內(nèi)。
該方法還可以包括:識(shí)別圖塊的與場(chǎng)景在第二視圖中可見的部分相關(guān)聯(lián)的第二子集;以及渲染在第一子集和第二子集二者中識(shí)別的每個(gè)圖塊。
該方法還可以包括:識(shí)別圖塊的與場(chǎng)景在第二視圖中可見的部分相關(guān)聯(lián)的第二子集;以及將存儲(chǔ)器的一部分分配給在第一子集和第二子集二者中識(shí)別的每個(gè)圖塊。
根據(jù)本發(fā)明的第四方面,提供了一種圖形處理方法,該方法包括:將場(chǎng)景的第一視圖圖塊化為多個(gè)圖塊;渲染與至少預(yù)定數(shù)量的圖元相關(guān)聯(lián)的每個(gè)圖塊;以及輸出從該圖塊的渲染得到的渲染數(shù)據(jù);檢測(cè)針對(duì)每個(gè)渲染后的圖塊輸出的渲染數(shù)據(jù);以及為該渲染后的圖塊分配存儲(chǔ)器的一部分;以及將針對(duì)每個(gè)渲染后的圖塊的渲染數(shù)據(jù)存儲(chǔ)在為該圖塊分配的存儲(chǔ)器的所述一部分處。
該方法還可以包括:不為所述多個(gè)圖塊中不與至少預(yù)定數(shù)量的圖元相關(guān)聯(lián)的每個(gè)圖塊分配存儲(chǔ)器的一部分。
該方法還可以包括:為了后續(xù)渲染,訪問存儲(chǔ)器以讀取與不與至少預(yù)定數(shù)量的圖元相關(guān)聯(lián)的圖塊相關(guān)聯(lián)的數(shù)據(jù),并且響應(yīng)于所述訪問返回預(yù)定義值。
該方法還可以包括:不輸出針對(duì)不與至少預(yù)定數(shù)量的圖元相關(guān)聯(lián)的圖塊的渲染數(shù)據(jù)。
該方法還可以包括:識(shí)別圖塊的與場(chǎng)景在第二視圖中可見的部分相關(guān)聯(lián)的子集,其中,渲染步驟可以包括:渲染在所述子集中被識(shí)別并且與至少所述預(yù)定數(shù)量的圖元相關(guān)聯(lián)的每個(gè)圖塊。
渲染目標(biāo)可以是紋理。渲染數(shù)據(jù)可以是用于紋理的數(shù)據(jù)。渲染單元可以被配置為在場(chǎng)景的后續(xù)渲染中將紋理應(yīng)用于場(chǎng)景。紋理可以被應(yīng)用于場(chǎng)景的不同于第一視圖的第二視圖。紋理可以是陰影圖。
所述預(yù)定數(shù)量可以等于或大于1。
根據(jù)本發(fā)明的第五方面,提供了一種被配置為執(zhí)行上述方法的圖形處理系統(tǒng)。
上述圖形處理系統(tǒng)可以在集成電路上的硬件中具體實(shí)現(xiàn)。
根據(jù)本發(fā)明的第六方面,提供了一種在集成電路制造系統(tǒng)中制造上述圖形處理系統(tǒng)的方法。
根據(jù)本發(fā)明的第七方面,提供了一種集成電路定義數(shù)據(jù)集,當(dāng)在集成電路制造系統(tǒng)中被處理時(shí),所述集成電路定義數(shù)據(jù)集配置制造系統(tǒng)以制造上述圖形處理系統(tǒng)。
根據(jù)本發(fā)明的第八方面,提供了一種非暫時(shí)性計(jì)算機(jī)可讀儲(chǔ)存介質(zhì),其上存儲(chǔ)有集成電路定義數(shù)據(jù)集,當(dāng)在集成電路制造系統(tǒng)中被處理時(shí),所述集成電路定義數(shù)據(jù)集配置制造系統(tǒng)以制造上述圖形處理系統(tǒng)。
根據(jù)本發(fā)明的第九方面,提供了一種集成電路制造系統(tǒng),該系統(tǒng)包括:非暫時(shí)性計(jì)算機(jī)可讀儲(chǔ)存介質(zhì),其上存儲(chǔ)有描述圖形處理系統(tǒng)的計(jì)算機(jī)可讀集成電路描述;布局處理系統(tǒng),其被配置為處理集成電路描述以便生成具體實(shí)現(xiàn)圖形處理系統(tǒng)的集成電路的電路布局描述;以及集成電路生成系統(tǒng),其被配置為根據(jù)所述電路布局描述來制造所述圖形處理系統(tǒng),其中,所述圖形處理系統(tǒng)包括:圖塊化單元,其被配置為將場(chǎng)景的第一視圖圖塊化為多個(gè)圖塊,并且生成與每個(gè)圖塊相關(guān)聯(lián)的圖元的列表:處理單元,其被配置為根據(jù)所述列表識(shí)別所述圖塊的分別與至少預(yù)定數(shù)量的圖元相關(guān)聯(lián)的第一子集;以及渲染單元,其被配置為將所識(shí)別的圖塊中的每個(gè)渲染為渲染目標(biāo)。
根據(jù)本發(fā)明的第十方面,提供了用于執(zhí)行上述任何方法的計(jì)算機(jī)程序代碼。
根據(jù)本發(fā)明的第十一方面,提供了一種其上存儲(chǔ)有計(jì)算機(jī)可讀指令的非暫時(shí)性計(jì)算機(jī)可讀儲(chǔ)存介質(zhì),當(dāng)在計(jì)算機(jī)系統(tǒng)上執(zhí)行時(shí),所述計(jì)算機(jī)可讀指令使得計(jì)算機(jī)系統(tǒng)執(zhí)行上述任何方法。
附圖說明
現(xiàn)在將參考附圖通過舉例來描述本發(fā)明。在附圖中:
圖1示出了基于圖塊的圖形系統(tǒng);
圖2a表示基于圖塊的圖形系統(tǒng)中的場(chǎng)景中的對(duì)象;
圖2b示出了場(chǎng)景的自頂向下視圖;
圖2c示出了從光源的視點(diǎn)看的場(chǎng)景;
圖2d示出了具有從相機(jī)視點(diǎn)應(yīng)用的陰影的場(chǎng)景;
圖3是用于將陰影應(yīng)用于場(chǎng)景的方法的流程圖;
圖4a示出了另一場(chǎng)景的自頂向下表示;
圖4b示出了從光源的視點(diǎn)看的場(chǎng)景;
圖4c示出從光源的視點(diǎn)看到的相機(jī)截錐體(frustum);以及
圖5是集成電路制造系統(tǒng)的示意圖。
具體實(shí)施方式
以下說明通過舉例來呈現(xiàn)以使得本領(lǐng)域技術(shù)人員能夠?qū)崿F(xiàn)和使用本發(fā)明。本發(fā)明不限于本文所描述的實(shí)施方式,對(duì)所公開的實(shí)施方式的各種修改對(duì)于本領(lǐng)域技術(shù)人員將是顯而易見的。
以下示例描述用于生成陰影圖并使用陰影圖將陰影應(yīng)用于場(chǎng)景的系統(tǒng)和方法。然而,所述系統(tǒng)和方法可以在將場(chǎng)景渲染成紋理的任何情況下使用。
如上所述,諸如陰影圖的大紋理的生成要求大量存儲(chǔ)器用于存儲(chǔ)紋理和高存儲(chǔ)器帶寬用于將紋理數(shù)據(jù)傳送到存儲(chǔ)器。當(dāng)gpu獲取存儲(chǔ)的紋理數(shù)據(jù)以將其應(yīng)用于場(chǎng)景時(shí),也要求高存儲(chǔ)器帶寬。以下描述能夠減少這些處理、存儲(chǔ)器和存儲(chǔ)器帶寬要求的基于圖塊的圖形系統(tǒng)。廣泛地,實(shí)現(xiàn)該目的的一種方式是通過將場(chǎng)景細(xì)分為多個(gè)圖塊并且識(shí)別在其中具有多個(gè)圖元的圖塊的特定子集,并且僅將那些圖塊渲染成紋理。忽略并且不渲染未被識(shí)別的圖塊。通過僅渲染圖塊的特定子集,與渲染構(gòu)成整個(gè)場(chǎng)景的所有圖塊相比,可以減少存儲(chǔ)器和處理開銷。這對(duì)于具有大存儲(chǔ)器要求但通常僅覆蓋場(chǎng)景的相對(duì)小區(qū)域的紋理(例如陰影圖)特別有效。
圖1是示出基于圖塊的圖形系統(tǒng)100的示意圖。該系統(tǒng)100可以在諸如智能電話、平板電腦、膝上型計(jì)算機(jī)、個(gè)人計(jì)算機(jī)(pc)、電視或要處理圖形數(shù)據(jù)的任何其它適當(dāng)設(shè)備的設(shè)備上實(shí)現(xiàn)?;趫D塊的圖形系統(tǒng)100被配置為例如從應(yīng)用程序接收數(shù)據(jù),處理數(shù)據(jù)并提供已處理數(shù)據(jù)的輸出。該系統(tǒng)100包括被配置為處理數(shù)據(jù)的圖形處理器102。圖形處理器102可以以硬件或軟件或其組合來實(shí)現(xiàn)。例如,圖形處理器102可以在固定功能硬件中實(shí)現(xiàn),固定功能硬件包括被配置為如本文所述相應(yīng)地處理數(shù)據(jù)的電路。例如,處理器102可以是圖形處理單元(gpu),或者可以被實(shí)現(xiàn)為在諸如gpu或中央處理單元(cpu)的可編程器件上運(yùn)行的計(jì)算機(jī)程序。
圖形處理器102包括用于處理數(shù)據(jù)的多個(gè)功能塊,其中,圖1中示出了圖形處理器102的一些(但是為了清楚起見不是全部)功能塊。具體來說,圖形處理器102包括圖塊化單元106和渲染單元108。渲染單元108可以包括圖像處理器114和紋理處理器116。
該系統(tǒng)100還包括被配置為處理數(shù)據(jù)的處理單元104。處理單元104可以以硬件或軟件或其組合來實(shí)現(xiàn)。例如,處理單元104可以在固定功能硬件中實(shí)現(xiàn),固定功能硬件包括被配置為如本文所述相應(yīng)地處理數(shù)據(jù)的電路。例如,處理器104可以是通用中央處理單元(cpu),或者可以被實(shí)現(xiàn)為在諸如gpu或中央處理單元(cpu)的可編程器件上運(yùn)行的計(jì)算機(jī)程序。
該系統(tǒng)100包括被布置為與圖形處理器102和處理單元104通信的存儲(chǔ)器112。存儲(chǔ)器112可以包括用于存儲(chǔ)數(shù)據(jù)的多個(gè)存儲(chǔ)器塊(未示出)。該系統(tǒng)100還可以包括被配置為管理存儲(chǔ)器112的存儲(chǔ)器資源的存儲(chǔ)器管理單元(mmu)110。mmu110可以執(zhí)行虛擬存儲(chǔ)器管理并將虛擬存儲(chǔ)器地址轉(zhuǎn)換為物理地址。mmu110可以被實(shí)現(xiàn)為處理單元104的一部分或單獨(dú)硬件部件或計(jì)算機(jī)程序。圖形處理器102可以包括高速緩存(未示出),其可以用于從存儲(chǔ)器112獲取并暫時(shí)存儲(chǔ)數(shù)據(jù)。
在操作中,圖形處理器102被布置為接收?qǐng)D形數(shù)據(jù),例如從當(dāng)前運(yùn)行在實(shí)現(xiàn)該系統(tǒng)的設(shè)備上的應(yīng)用程序。圖形數(shù)據(jù)包括限定用于顯示的對(duì)象的幾何數(shù)據(jù)。圖塊化單元106包括用于在圖形處理器102中實(shí)現(xiàn)多個(gè)功能的邏輯。例如,圖塊化單元106接收幾何數(shù)據(jù)并從幾何數(shù)據(jù)導(dǎo)出多個(gè)圖元。圖塊化單元106還通過將圖元分類到每圖塊列表中來將圖元圖塊化為多個(gè)圖塊。在圖塊化單元106接收幾何數(shù)據(jù)之前,對(duì)幾何數(shù)據(jù)的一些處理可以或可以不由圖形處理器102(在圖1中未示出的功能塊中)執(zhí)行。圖元表示幾何對(duì)象或其它幾何形狀。描述圖元的參數(shù)被存儲(chǔ)在存儲(chǔ)器112中。所存儲(chǔ)的參數(shù)描述可位于多個(gè)圖塊中的多個(gè)圖元。圖元通常是多邊形,諸如三角形,但是可以具有其它形式,諸如線、點(diǎn)或斑塊(patch)。所存儲(chǔ)的參數(shù)表示圖元的位置(例如,在屏幕空間坐標(biāo)中形成圖元的頂點(diǎn)的位置)。該參數(shù)還可以指示對(duì)象或幾何形狀的其它特征。
圖塊化單元106通過將表示場(chǎng)景的圖元分類到每圖塊列表中,將場(chǎng)景的視圖圖塊化為多個(gè)屏幕空間圖塊。圖塊化單元106確定哪些圖元存在于屏幕空間的每個(gè)圖塊內(nèi),并且為每個(gè)圖塊創(chuàng)建指示哪些圖元存在于每個(gè)圖塊內(nèi)的列表。圖元可以存在于多個(gè)圖塊中,并且使得將在用于那些多個(gè)圖塊的圖塊列表中指示圖元。存在于單個(gè)圖塊中的圖元將僅在用于該圖塊的列表中列出。
將屏幕空間劃分為多個(gè)圖塊。圖塊可以是矩形(包括正方形),但是它們可以是其它形狀,諸如三角形或六邊形。圖塊可以是各種尺寸,例如圖塊可以是32×32個(gè)像素。在超高清屏幕分辨率圖像的一個(gè)示例中,存在3840×2160個(gè)像素。因此,作為示例,可以將超高屏幕分辨率圖像圖塊化為8100個(gè)圖塊(每個(gè)包括32×32個(gè)像素)。屏幕空間可以對(duì)應(yīng)于用于在屏幕上顯示的圖像或其它渲染目標(biāo),諸如將存儲(chǔ)在存儲(chǔ)器中的紋理數(shù)據(jù)。
圖2a是包括以5×5陣列布置的二十五個(gè)圖塊的基于圖塊的圖形系統(tǒng)的屏幕空間202的簡(jiǎn)化表示。在所示的屏幕空間202內(nèi)存在兩個(gè)對(duì)象:矩形壁204和球體206。壁204和球體206由多個(gè)圖元(為了清楚起見未示出)組成??梢钥闯觯?04與屏幕空間202的六個(gè)圖塊重疊:具有網(wǎng)格標(biāo)記b3、b4、c3、c4、d3和d4的圖塊。在沒有明確說明的情況下,本文使用的術(shù)語“重疊”應(yīng)理解為表示“至少部分地重疊”。構(gòu)成壁204的圖元與屏幕空間202的六個(gè)圖塊重疊??梢钥闯觯蝮w206僅與屏幕空間202的一個(gè)圖塊(網(wǎng)格標(biāo)記c2)重疊。因此,組成球體的圖元僅與屏幕空間的一個(gè)圖塊(c2)重疊。在場(chǎng)景中通常將存在其它對(duì)象,但是為了清楚起見,這些在圖2中未示出。
對(duì)于屏幕空間202的每個(gè)圖塊,圖塊化單元106確定每個(gè)圖元是否至少部分地位于該圖塊內(nèi)。也就是說,圖塊化單元106確定圖元的至少一部分是否位于圖塊的可觀看區(qū)域內(nèi)。這可以使用多種公知技術(shù)來完成。以這種方式,圖塊化單元106為每個(gè)圖塊(圖塊a1至e5)導(dǎo)出顯示列表,其指示部分地或完全地位于圖塊內(nèi)的圖元。針對(duì)圖塊的顯示列表可以是用于與圖塊至少部分重疊的圖元的參數(shù)的存儲(chǔ)器位置的參考標(biāo)記的列表。當(dāng)圖元在多于一個(gè)圖塊中時(shí),這可以節(jié)省復(fù)制(duplication)。在圖元在多于一個(gè)圖塊中的情況下,針對(duì)圖塊的顯示列表也可以復(fù)制圖元參數(shù),使得每圖塊列表是參數(shù)列表,而不是參考標(biāo)記的列表。還可以組合這些方法,存儲(chǔ)對(duì)一些參數(shù)的參考標(biāo)記并復(fù)制其它參數(shù)。在圖2a的示例中,可以看出,顯示列表將指示對(duì)于圖塊c2,構(gòu)成球體206的所有圖元將位于該圖塊中。對(duì)于圖塊b3、b4、c3、c4、d3和d4中的每個(gè),顯示列表還指示構(gòu)成壁并且至少部分地位于每個(gè)相應(yīng)圖塊中的圖元。剩余圖塊(即,圖塊a1至a5、b1、b2、b5、c1、c2、c5、d1、d2、d5和e1到e5)將不具有針對(duì)它們列出的圖元。
將顯示列表從圖塊化單元106提供到存儲(chǔ)器112以存儲(chǔ)在其中。當(dāng)渲染單元108渲染圖塊時(shí),渲染單元從存儲(chǔ)器112檢索針對(duì)該圖塊的顯示列表,并且使用顯示列表來確定哪些圖元與該圖塊至少部分地重疊。
渲染單元108可以包括圖像處理器114,圖像處理器可以處理圖塊以例如確定要求哪些圖元或圖元的哪些部分由后續(xù)處理塊(諸如紋理處理器116)進(jìn)一步處理。例如,當(dāng)渲染要顯示的圖像時(shí),在紋理處理器116處理圖塊之前,圖像處理器114可以確定哪些圖元部分是可見的,并且去除不影響渲染圖像的圖元部分。為了使圖像處理器114能夠處理圖塊內(nèi)的圖元,從存儲(chǔ)器112讀取包括在圖塊的顯示列表中的圖元(或者用于那些圖元的參數(shù))以用于處理圖塊,例如確定圖元是否可見。
紋理處理器116處理圖塊以將紋理化應(yīng)用于在圖塊內(nèi)可見的對(duì)象。來自圖像處理器114的輸出被提供給紋理處理器116,該輸出指示紋理處理器116將需要哪些圖元或圖元的哪些部分來處理圖塊。為了使紋理處理器116能夠處理圖塊內(nèi)的圖元,在來自圖像處理器114的輸出中指示的針對(duì)圖元的參數(shù)可以直接從圖像處理器114獲得或從存儲(chǔ)器112獲取。紋理處理器116用來處理圖塊的一些或所有參數(shù)可以不同于圖像處理器114用來處理相同圖塊的那些參數(shù)。例如,由圖像處理器114使用的參數(shù)可以涉及圖元的位置,而由紋理處理器116使用的參數(shù)可以另外地或另選地涉及要應(yīng)用于圖元的紋理數(shù)據(jù)。紋理處理器116從存儲(chǔ)器112讀取參數(shù)以用于處理圖塊時(shí)使用,例如,用于實(shí)現(xiàn)紋理化。參數(shù)可以包括將由紋理處理器116應(yīng)用于對(duì)象的紋理(或來自紋理的特定紋理像素)的指示。
例如在從圖形處理器102被輸出到用于在實(shí)現(xiàn)系統(tǒng)100的設(shè)備的屏幕上顯示的顯示緩存或諸如存儲(chǔ)器中的紋理數(shù)據(jù)的另一渲染目標(biāo)之前,來自紋理處理器110的輸出可以被傳送到圖形處理器102內(nèi)的另外處理塊(圖1中未示出)。
圖1的系統(tǒng)可以用于向場(chǎng)景(諸如圖2a中的場(chǎng)景)添加某些效果,諸如陰影、反射等。這可以涉及以某種方式處理場(chǎng)景內(nèi)的數(shù)據(jù)以生成那些效果。將陰影添加到場(chǎng)景的一種方法是例如通過生成陰影圖并使用該陰影圖來確定場(chǎng)景的哪些區(qū)域應(yīng)當(dāng)處于陰影中。下面的步驟1和2總體地描述陰影圖如何被生成并用于將陰影應(yīng)用于場(chǎng)景。圖2a中具有單個(gè)光源的場(chǎng)景在所描述的步驟中被用作示例。
步驟1:渲染從光源的視點(diǎn)看的場(chǎng)景以生成陰影圖。
對(duì)諸如顯示緩存的渲染目標(biāo)的常規(guī)渲染將輸出像素值是顏色的圖像。然而,該渲染輸出像素值是深度并被輸出到紋理的“圖像”。該渲染輸出是陰影圖。常規(guī)渲染通常在繼續(xù)輸出針對(duì)每個(gè)像素的顏色之前,使用z(或深度)緩存來處理深度值,以便執(zhí)行隱藏表面去除。渲染陰影圖的處理可以在產(chǎn)生z緩存之后停止,并且輸出其作為代替。在渲染結(jié)束時(shí),z緩存包含被發(fā)現(xiàn)最接近相機(jī)(或光源)的對(duì)象的深度(在此情況下是距離相機(jī)或者光源的距離)。
當(dāng)圖元重疊時(shí)(例如,當(dāng)球體206與壁204的一些重疊時(shí)),圖元的一部分而不是全部是可見的。圖元的部分通常被稱為“片段”。片段可以在每個(gè)樣本點(diǎn)(例如,在每個(gè)像素處)被生成,并且因此可以具有(x,y)位置和深度。在圖像處理器114中求解可見性的系統(tǒng)中,每個(gè)片段對(duì)應(yīng)于對(duì)象的可見部分。陰影圖可以根據(jù)這些可見片段的位置和深度被寫入為紋理。
圖2b示出了圖2a中的場(chǎng)景的自頂向下視圖。如圖所示,光源位于垂直于壁204的平面并穿過壁204的中心的線207上。球體206的中心位于線207上,并且位于光源和壁204之間。光源可以是將平行光線投射到場(chǎng)景上的定向光源。圖2c示出了從來自光源的視點(diǎn)的點(diǎn)看的場(chǎng)景。在該場(chǎng)景中可見的片段指示具有入射在其上的光的片段。因此,組成壁204的正面的可見的部分(即,不是直接在球體206后面的壁的部分)和球體206的前半部分的片段具有入射在其上的光。針對(duì)屏幕空間的每個(gè)位置(例如,針對(duì)每個(gè)像素)的深度值被保存為存儲(chǔ)器112中的陰影圖。不包含任何對(duì)象的像素位置的深度值可以被保存為具有對(duì)應(yīng)于“很遠(yuǎn)”的背景或默認(rèn)深度。
步驟2:渲染從相機(jī)的視點(diǎn)看的場(chǎng)景以產(chǎn)生要顯示的圖像。
在渲染圖像的階段(例如,在陰影化期間),檢查在步驟1中產(chǎn)生的陰影圖以確定像素是否在陰影中。
在渲染中的某個(gè)階段,可以向每個(gè)像素分配顏色。例如,在考慮像素是否在陰影中之前,可以將像素確定為亮紅色(255,0,0)(根據(jù)rgb顏色模型)。這可以是常規(guī)紋理化操作的結(jié)果。像素在屏幕上的位置是已知的,因?yàn)槭莵碜詚緩存的在場(chǎng)景中的其深度:(x,y,d)。將像素位置(x,y,d)從屏幕空間變換到“光空間”,以找到在步驟(1)中用于渲染的坐標(biāo)系中的相同點(diǎn)的位置:(x,y,d)。變換可以是基于相機(jī)和燈的已知相對(duì)位置和方向的幾何計(jì)算(矩陣運(yùn)算)。光空間坐標(biāo)(x,y,d)指示在從燈的視點(diǎn)渲染的圖像中,像素位于何處以及離燈的距離有多遠(yuǎn)。讀取坐標(biāo)(x,y)處的陰影圖以檢索(retrieve)先前保存的深度值(s)。如果深度s小于深度d,則這指示存在更接近燈的某物,其將在像素上投射陰影。否則,該像素被燈照亮。如果像素在陰影中,則可以相應(yīng)地修改分配給該像素的顏色。例如,顏色(255,0,0)可以變成(25,0,0)??梢詧?zhí)行對(duì)陰影中的像素的其它修改,例如,陰影化的像素可以簡(jiǎn)單地分配為黑色(0,0,0)。
在所示示例中,在圖2a中示出了從相機(jī)的視點(diǎn)看的場(chǎng)景。圖2b提供了相機(jī)位置的視圖。在圖2a中,針對(duì)從光源的視點(diǎn)看直接在球體206后面的部分的壁204的像素將處于陰影中。此外,針對(duì)從光源的視點(diǎn)看球體206在場(chǎng)景中可見并且在球體206的被照亮像素后面的像素也將處于陰影中。
場(chǎng)景可以具有多個(gè)光源,每個(gè)光源投射不同陰影。在這種情況下,從每個(gè)光源渲染場(chǎng)景(例如,如步驟1中所述)以產(chǎn)生多個(gè)陰影圖。當(dāng)渲染要顯示的場(chǎng)景時(shí),可以在單個(gè)步驟2)中求解陰影。將像素變換到每個(gè)光空間(對(duì)于每個(gè)光源),并且讀取每個(gè)陰影圖以確定該像素是否被該特定燈照亮。然后通過對(duì)象的顏色與來自照亮它的每個(gè)源的光的顏色的適當(dāng)混合來確定像素的顏色。
圖3示出了用于生成陰影圖(步驟300至步驟308)并在系統(tǒng)100處使用所生成的陰影圖將陰影應(yīng)用于場(chǎng)景(步驟310)的處理。在步驟300到步驟308處描述的處理不限于將場(chǎng)景渲染為用于陰影映射的紋理并且可以用于將場(chǎng)景渲染為用于其它目的的任何合適渲染目標(biāo)。
在步驟300,從光源的視點(diǎn)(如上面步驟1所述)看的場(chǎng)景由圖塊化單元106圖塊化為多個(gè)圖塊。在所示示例中,圖2c示出了從光源的視點(diǎn)看的場(chǎng)景被圖塊化為二十五個(gè)圖塊。
在步驟302,如上所述,在圖塊化期間生成針對(duì)每個(gè)圖塊的顯示列表并將顯示列表保存在存儲(chǔ)器112中。在所示示例中,圖塊w2到w4、x2到x4和y2到y(tǒng)4將具有針對(duì)它們列出的圖元,并且圖塊v1到w1、w5、x1、x5、y1和y5到z5將不具有針對(duì)它們列出的圖元。
圖塊化處理提供了在渲染每個(gè)圖塊之前檢查顯示列表的內(nèi)容的機(jī)會(huì)。顯示列表指示哪些圖塊在其中不具有圖元,即沒有陰影投射對(duì)象。因此,可以在不執(zhí)行渲染的情況下,識(shí)別出對(duì)于那些圖塊,陰影圖將為空(或包含表示“非常遠(yuǎn)”的值)。
在步驟304,分析顯示列表以識(shí)別具有與其相關(guān)聯(lián)的至少預(yù)定數(shù)量的圖元的圖塊,使得僅那些圖塊被渲染以生成陰影圖。在一個(gè)示例中,預(yù)定數(shù)量可以是1。在該示例中,識(shí)別不具有與其相關(guān)聯(lián)的任何圖元的圖塊(即,沒有針對(duì)其列出的圖元的圖塊),以便在生成陰影圖的后續(xù)渲染中忽略所述圖塊。這具有多個(gè)優(yōu)點(diǎn),諸如:i)減少需要分配用于陰影圖的存儲(chǔ)器的量(如下面進(jìn)一步描述的);ii)減少需要渲染的圖塊的數(shù)量,并且從而增加生成陰影圖的速度。在另一示例中,可以分析圖塊列表以確定哪些圖塊包含重要陰影投射圖元。如果陰影投射圖元僅覆蓋圖塊中的單個(gè)樣本點(diǎn),或者如果它們僅覆蓋圖塊中的少量樣本點(diǎn),或者如果圖塊的覆蓋區(qū)域的縱橫比高于閾值(例如,使得非常薄的對(duì)象可以被認(rèn)為是不重要的),則可以將陰影投射圖元確定為不重要的。這樣的圖元可以例如表示非常小的對(duì)象,或者在圖塊的邊緣處,可以表示主要存在于其它圖塊中的對(duì)象的邊緣??梢院雎圆话魏沃匾幱巴渡鋵?duì)象的圖塊。雖然忽略潛在陰影投射對(duì)象可以被視為將誤差引入到陰影圖中,但是必須記住陰影圖分辨率通常是有限的,并且僅占據(jù)陰影圖的小區(qū)域的對(duì)象可能將定義不明確或視覺上不準(zhǔn)確的陰影投射到所渲染的場(chǎng)景中。因此可能的情況是,從陰影圖渲染中省略這些對(duì)象改善了所渲染的場(chǎng)景的視覺質(zhì)量,以及具有上述優(yōu)點(diǎn),提高了陰影圖渲染的效率。類似地,省略表示對(duì)象邊緣的圖元的部分去除了已經(jīng)易于出現(xiàn)不準(zhǔn)確以及可能已經(jīng)在使用隱藏這些不準(zhǔn)確性的措施的區(qū)域(即,在陰影邊緣)中的陰影圖數(shù)據(jù)。由圖元或圖元組覆蓋的樣本點(diǎn)的數(shù)量可以通過在圖塊化單元106之前的幾何處理步驟來計(jì)算或估計(jì),或者可能已經(jīng)作為圖塊化單元106中的圖塊化處理的一部分被執(zhí)行。
在另一示例中,預(yù)定數(shù)量可以大于1(例如3)。在該示例中,包含相對(duì)小和不重要的陰影投射對(duì)象的圖塊可以在用于生成陰影圖的后續(xù)渲染中被忽略。這可以進(jìn)一步減少需要被分配的存儲(chǔ)器的量和需要被渲染以生成陰影圖的圖塊的數(shù)量。
在另一示例中,大于1的預(yù)定數(shù)量的圖元可以與由那些圖元覆蓋的樣本點(diǎn)的數(shù)量的分析結(jié)合,使得從圖元的數(shù)量和每個(gè)圖元覆蓋的圖塊的量二者確定陰影投射對(duì)象在圖塊中的重要性。這可以減少需要被分配的存儲(chǔ)器的量和需要被渲染以生成陰影圖的圖塊的數(shù)量,同時(shí)還在少量圖元覆蓋圖塊的相當(dāng)大比例的區(qū)域中保持陰影圖準(zhǔn)確性。
圖塊列表可以由圖形處理器102或處理單元104或可訪問存儲(chǔ)器112的任何其它處理器來分析。
在圖2c所示的示例中,圖塊w2到w4、x2到x4和y2到y(tǒng)4將根據(jù)顯示列表中被識(shí)別為與至少一個(gè)圖元相關(guān)聯(lián)。剩余圖塊不具有針對(duì)它們列出的圖元,因此它們將不被識(shí)別用于進(jìn)一步渲染,因此它們可以被忽略。
在步驟306,由mmu110為每個(gè)所識(shí)別的圖塊分配存儲(chǔ)器??梢詾槊總€(gè)圖塊分配存儲(chǔ)器的一部分或一塊。例如,可以在頁面中分配存儲(chǔ)器,其中,mmu110控制頁面的分配和映射。
在概念上,陰影圖可以被認(rèn)為是存儲(chǔ)器的實(shí)心塊,例如每圖塊或圖塊組一個(gè)頁面。例如,4kb存儲(chǔ)器頁面可以對(duì)應(yīng)于一個(gè)32×32像素圖塊,對(duì)于每個(gè)像素具有32位深度值。如果使用不同圖塊大小,例如,16×16像素圖塊,則存儲(chǔ)器的4kb頁面可以被分配給2×2組中的四個(gè)相鄰圖塊。
常規(guī)地,陰影圖的渲染將為整個(gè)陰影圖分配存儲(chǔ)器,并且然后渲染為該陰影圖(這在基于圖塊的圖形系統(tǒng)中將是一次一個(gè)圖塊)。通常在從光源的視點(diǎn)圖塊化場(chǎng)景之前分配存儲(chǔ)器。預(yù)先為整個(gè)陰影圖分配存儲(chǔ)器意味著為陰影圖的所有區(qū)域分配存儲(chǔ)器,甚至是不包含任何(或不重要的)陰影投射對(duì)象的區(qū)域。在當(dāng)前公開的處理和系統(tǒng)中,mmu110可以被配置為在從光源的視點(diǎn)圖塊化場(chǎng)景之后分配存儲(chǔ)器。這允許在為陰影圖分配存儲(chǔ)器之前分析顯示列表。分析顯示列表以識(shí)別具有至少例如與它們相關(guān)聯(lián)的一個(gè)圖元的圖塊。僅被識(shí)別的圖塊由mmu110分配存儲(chǔ)器,不具有與它們相關(guān)聯(lián)的任何圖元的圖塊(即,未識(shí)別的圖塊)可以不被分配任何存儲(chǔ)器。因此,可以減少為陰影圖分配的存儲(chǔ)器的量。
例如,在圖2c中所示的場(chǎng)景通常將為所有二十五個(gè)圖塊v1至z5分配存儲(chǔ)器。在本系統(tǒng)中,mmu110僅為在步驟304中識(shí)別的圖塊分配存儲(chǔ)器。因此,將僅為九個(gè)圖塊(圖塊w2到w4、x2到x4和y2到y(tǒng)4)而不是二十五個(gè)圖塊分配存儲(chǔ)器。未被識(shí)別的圖塊(圖塊v1至w1、w5、x1、x5、y1和y5至z5)可以被忽略,因此不為它們分配任何存儲(chǔ)器。因此,僅給所識(shí)別的圖塊子集分配存儲(chǔ)器,這可以使得陰影圖所要求的存儲(chǔ)器的量減少。
圖形處理器102所看到的存儲(chǔ)器可以是虛擬存儲(chǔ)器,其中,圖形處理器102工作的地址由mmu110映射到存儲(chǔ)器112的實(shí)際物理地址。映射可以是逐頁面的。可以根據(jù)不必須是連續(xù)的或者為相同順序的不同位置處的物理存儲(chǔ)器頁面將虛擬存儲(chǔ)器的明顯連續(xù)塊拼接在一起。物理存儲(chǔ)器分配可以發(fā)生在不同階段。例如,可以將虛擬存儲(chǔ)器的塊分配給整個(gè)陰影圖,但是物理存儲(chǔ)器備份(backing)僅由mmu110在需要的情況下或在需要時(shí)被提供給所識(shí)別的圖塊。在所示示例中,mmu110可以生成頁面表,頁面表具有用于圖塊v1至z5中的每個(gè)的虛擬地址,但是僅將用于圖塊w2至w4、x2至x4和y2至y4的虛擬地址映射到物理地址。用于圖塊v1到w1、w5、x1、x5、y1和y5到z5的虛擬地址可以不映射或映射到具有默認(rèn)值或“背景”值的單個(gè)物理地址。
在步驟308,渲染在步驟304中識(shí)別的圖塊??梢砸淮我粋€(gè)圖塊地渲染圖塊。將從每個(gè)圖塊的渲染(例如,像素深度值)得到的數(shù)據(jù)寫入分配給該圖塊的存儲(chǔ)器地址。如果存儲(chǔ)器地址是虛擬地址,則mmu110將該地址轉(zhuǎn)換為存儲(chǔ)器112中的物理地址。
在該示例中,僅渲染在步驟304中識(shí)別的圖塊。因此,不渲染未被識(shí)別的圖塊(圖塊v1到w1、w5、x1、x5、y1和y5到z5),這節(jié)省了用于渲染那些圖塊的處理開銷。對(duì)于為空的圖塊,一些圖形處理器可以產(chǎn)生默認(rèn)值或背景值,其仍可以被寫入存儲(chǔ)器。然而,通過不渲染那些圖塊,沒有與那些圖塊相關(guān)聯(lián)的數(shù)據(jù)被寫出到存儲(chǔ)器,從而節(jié)省存儲(chǔ)器以用于其它用途。
對(duì)于包括多于一個(gè)光源的場(chǎng)景,可以為每個(gè)光源重復(fù)步驟300至308。
在步驟310,渲染從相機(jī)的視點(diǎn)看的場(chǎng)景(即,如上所述的步驟2)。從相機(jī)的視點(diǎn)看的場(chǎng)景可以由圖塊化單元106圖塊化并且由渲染單元108一次一個(gè)圖塊地渲染。在該渲染期間,渲染單元108詢問在坐標(biāo)(x,y)處的陰影圖(或多個(gè)貼圖)以檢索對(duì)于那些坐標(biāo)的深度值(s),以便確定像素是否處于陰影中,如上所述。將相應(yīng)地修改確定為處于陰影中的像素。例如,紋理處理器116可以根據(jù)其它光源、陰影顏色、模糊值等修改像素。
如果在對(duì)應(yīng)于空?qǐng)D塊(即,未識(shí)別和未分配的圖塊)的坐標(biāo)(x,y)處詢問陰影圖,則對(duì)于對(duì)那些頁面的任何嘗試訪問,mmu110可以被配置為返回對(duì)應(yīng)于“非常遠(yuǎn)”的默認(rèn)值或背景深度值s。因此,對(duì)應(yīng)于該坐標(biāo)的像素將被光源照亮,這是因?yàn)槠鋵⒕哂行∮趕的深度值。默認(rèn)深度值可以被存儲(chǔ)在單個(gè)存儲(chǔ)器位置處,mmu110將所有未識(shí)別的圖塊映射到該單個(gè)存儲(chǔ)器位置。
然后可以將每個(gè)渲染的圖塊輸出到顯示緩存(其可以經(jīng)由圖1中未示出的另外處理塊)。圖2d示出要與應(yīng)用(在208和210)于場(chǎng)景的陰影一起顯示的最終場(chǎng)景。
圖3的處理通過僅將存儲(chǔ)器分配給其中具有陰影投射對(duì)象的圖塊來提供用于陰影圖的存儲(chǔ)器和存儲(chǔ)器帶寬節(jié)省。這通過分析通過由圖塊化生成的顯示列表以識(shí)別哪些圖塊中具有圖元并且僅為那些被識(shí)別的圖塊分配存儲(chǔ)器來實(shí)現(xiàn)。然后渲染圖塊以生成陰影圖。在一個(gè)另選實(shí)施方式中,可以在圖塊的渲染之后為陰影圖分配存儲(chǔ)器。在該實(shí)施方式中,圖塊化單元106將從光源的視點(diǎn)看的場(chǎng)景圖塊化成多個(gè)圖塊,如上所述。然后由渲染單元108依次渲染每個(gè)圖塊。當(dāng)渲染單元108渲染包含對(duì)象的圖塊時(shí),渲染單元確定對(duì)應(yīng)于對(duì)象的深度值,并且嘗試將那些值寫入存儲(chǔ)器。在此階段,尚未為該圖塊分配存儲(chǔ)器。mmu110可以檢測(cè)對(duì)存儲(chǔ)器的嘗試訪問,捕獲訪問,并在該點(diǎn)處分配物理存儲(chǔ)器。mmu110然后可以釋放該訪問,使得渲染單元108可以將用于圖塊的值寫入所分配的存儲(chǔ)器。當(dāng)渲染單元108渲染不包含任何對(duì)象的圖塊時(shí),渲染單元108可以不為那些圖塊輸出任何深度值。因此,對(duì)于不包含任何對(duì)象的圖塊,mmu110將不檢測(cè)渲染單元108對(duì)存儲(chǔ)器112的任何嘗試訪問。因此,將不給那些圖塊分配存儲(chǔ)器,僅其中具有對(duì)象的圖塊將被分配存儲(chǔ)器。因此,在該另選實(shí)施方式中,給陰影圖分配的存儲(chǔ)器的量被減少,無需分析任何顯示列表。
圖4a至圖4c示出了用于識(shí)別當(dāng)生成陰影圖時(shí)可以被省略或忽略的圖塊的另一種技術(shù)。該技術(shù)可以除了或者獨(dú)立于上述技術(shù)被應(yīng)用。
陰影圖的圖塊可以包含圖元,即陰影投射對(duì)象,但是如果在步驟2中渲染的相機(jī)視圖的截錐體(如上所述)沒有任何部分在該圖塊中是可見的,則那些對(duì)象將永遠(yuǎn)不會(huì)將其陰影投射到相機(jī)所見到的任何物體上。因此,當(dāng)生成陰影圖時(shí),可以忽略這些圖塊,因?yàn)槟切﹫D塊中的任何對(duì)象都不會(huì)影響由相機(jī)觀看的場(chǎng)景。
圖4a示出了場(chǎng)景的平面圖。用于場(chǎng)景的燈位置和相機(jī)位置分別在401和402處指示。諸如球體403、金字塔404和立方體405的對(duì)象是可能投射陰影的對(duì)象。在406處示出了相機(jī)的視錐體(viewfrustum)??梢詫⒁曞F體406認(rèn)為是3d建模世界中可能出現(xiàn)在屏幕上并被認(rèn)為是相機(jī)的視場(chǎng)的空間區(qū)域。
燈401和相機(jī)截錐體406之間的對(duì)象可能將陰影投射到相機(jī)截錐體406中的其它對(duì)象(為了簡(jiǎn)單起見未示出)。圖4b示出了從燈401的視點(diǎn)看的場(chǎng)景的視圖。相機(jī)截錐體406的一部分也可從燈401觀察到??捎^察的相機(jī)截錐體406的范圍由虛線指示。如圖所示,金字塔404和立方體405是如從燈401看到的位于相機(jī)截錐體406的范圍內(nèi)的對(duì)象。因此,從這個(gè)視點(diǎn)來看,金字塔404和立方體405是可能投射可以影響由相機(jī)402看到的場(chǎng)景的陰影的對(duì)象。球體403不能將陰影投射到由相機(jī)402看到的場(chǎng)景中,這是因?yàn)橥ㄟ^該對(duì)象的區(qū)域的光線將不能與相機(jī)的視錐體406相互作用。因此,可以識(shí)別燈的視圖中可以影響由相機(jī)402看到的場(chǎng)景的區(qū)域。
圖4c指示可以影響由相機(jī)402看到的場(chǎng)景的區(qū)域406。該區(qū)域可以被認(rèn)為是從燈401的視點(diǎn)可見的相機(jī)截錐體406。在該區(qū)域406之外的區(qū)域中的任何對(duì)象不影響由相機(jī)402看到的場(chǎng)景。在407處指示包括該區(qū)域的圖塊集合。因此,當(dāng)生成陰影圖時(shí),可以忽略對(duì)在區(qū)域406之外的對(duì)象的渲染,這是因?yàn)槟切?duì)象不會(huì)影響要顯示的場(chǎng)景。這可以以類似于上述節(jié)省的方式在生成和存儲(chǔ)陰影圖時(shí)提供處理和存儲(chǔ)器節(jié)省。
在一個(gè)示例性實(shí)施方式中,可以通過確定相機(jī)截錐體406的范圍的位置并將那些位置變換到“光空間”中以從燈的視點(diǎn)定位那些相同位置來識(shí)別區(qū)域406。因此,可以確定從燈401的點(diǎn)看相機(jī)截錐體406的位置。圖塊化單元106可以圖塊化從燈的視點(diǎn)看的場(chǎng)景,如先前所描述的。從所確定的截錐體406的位置,處理單元104(或圖形處理器102)可以確定哪些圖塊包含截錐體406。這些圖塊由圖4c中的圖塊407的塊指示。只有那些確定的圖塊407可以被選擇用于由渲染單元108渲染。類似于上文,mmu110可以僅為那些圖塊407分配存儲(chǔ)器。
在另一示例性實(shí)施方式中,相機(jī)截錐體406的模型(如其將被定位在場(chǎng)景的3d世界中)可以被生成,并且被用于確定從光源的視點(diǎn)看的場(chǎng)景的哪些部分可能影響相機(jī)場(chǎng)景??梢詫?duì)相機(jī)截錐體406進(jìn)行建模,以形成具有與相機(jī)截錐體406相同的幾何形狀和相同定位的截錐體模型對(duì)象(由圖元構(gòu)成)。因此,該對(duì)象表示相機(jī)截錐體406。處理單元104可以為被提供給圖形處理器102的對(duì)象生成圖形數(shù)據(jù)。圖塊化單元106可以接收針對(duì)截錐體模型對(duì)象的圖形數(shù)據(jù)并且圖塊化從燈401的視點(diǎn)看的場(chǎng)景。這將導(dǎo)致看起來像圖4c的圖塊化場(chǎng)景。在406處示出了從燈的視點(diǎn)看的相機(jī)截錐體的模型。如圖4c所示,一些圖塊是空的,而其它圖塊包含截錐體406。空?qǐng)D塊中的陰影投射對(duì)象可以不將陰影投射到由相機(jī)看到的場(chǎng)景中,這是因?yàn)橥ㄟ^該圖塊的光線不與相機(jī)的視錐體406相互作用。因此,空?qǐng)D塊不能影響場(chǎng)景,而不管它們是否將包含任何陰影投射對(duì)象。識(shí)別包含截錐體406的圖塊。在407處總體指示這些圖塊,其是可以影響場(chǎng)景的圖塊集合。圖塊化單元106可以生成將截錐體模型406的圖元分類成每圖塊列表(例如,以上文所描述的方式)的圖塊列表。然后,處理單元104可以分析該列表(例如,如上所述)以識(shí)別包含截錐體406的圖塊407。接下來,可以圖塊化從燈的視點(diǎn)看的正常場(chǎng)景(包含球體403、金字塔404和立方體405)以用于生成陰影圖。當(dāng)生成陰影圖時(shí),僅渲染對(duì)應(yīng)于包含截錐體406的所識(shí)別圖塊407的圖塊,因?yàn)橹挥心切﹫D塊包含陰影圖的可能影響要顯示的最終場(chǎng)景的部分??梢院雎云渌鼒D塊。類似于上文,僅需要給繼續(xù)被渲染的圖塊分配存儲(chǔ)器,可以不給不被渲染的圖塊分配任何存儲(chǔ)器。
該技術(shù)可以在單個(gè)步驟中執(zhí)行,例如,通過使用截錐體模型406來建立模板緩存(未示出)。模板緩存可以形成圖形處理器流水線的一部分。模板緩存可以拒絕不在模板區(qū)域內(nèi)的任何對(duì)象,因此僅對(duì)模板區(qū)域內(nèi)的圖塊(即,對(duì)應(yīng)于截錐體406的圖塊)進(jìn)行渲染和/或分配存儲(chǔ)器。
另選地,圖形處理器可以提供指定剪切(也稱為剔除)平面的裝置。然后可以通過設(shè)置與截錐體模型406的幾何形狀對(duì)應(yīng)的剪切平面來執(zhí)行該技術(shù)。剪切通常在流水線中在圖塊化單元106之前的點(diǎn)處操作,使得截錐體區(qū)域外的對(duì)象將被拒絕并且不被添加到圖塊列表。因此,僅對(duì)在截錐體區(qū)域407內(nèi)的圖塊進(jìn)行渲染和/或分配存儲(chǔ)器。
確定陰影圖將影響要顯示的場(chǎng)景的部分的技術(shù)可以與僅對(duì)包含陰影投射對(duì)象的圖塊進(jìn)行渲染(和/或分配其存儲(chǔ)器)的上述技術(shù)組合。因此,如果截錐體406在圖塊中可見并且在圖塊中存在陰影投射對(duì)象,則可以僅渲染圖塊和/或?yàn)樵撽幱皥D分配存儲(chǔ)器。例如,可以通過比較在圖塊化截錐體的模型時(shí)生成的圖塊列表與在圖塊化該場(chǎng)景時(shí)生成的圖塊列表來識(shí)別這樣的圖塊。在此示例中,僅識(shí)別包含金字塔404和立方體405的圖塊以用于渲染/存儲(chǔ)器分配。
在進(jìn)一步優(yōu)化處理中,可以識(shí)別從燈觀察到的包括相機(jī)截錐體406的背面的一個(gè)或多個(gè)平面408。超出該平面的對(duì)象(諸如立方體405)可以在生成陰影圖的處理中提早被剪切掉,因?yàn)檫@樣的對(duì)象不會(huì)影響相機(jī)402看到的場(chǎng)景。例如,處理單元104可以確定相機(jī)截錐體406的平面408的位置。處理單元104或圖塊化單元106然后可以剪切從燈的視點(diǎn)看位于離平面408位置較遠(yuǎn)處的任何對(duì)象。因此,通過這種優(yōu)化處理,如圖所示,將剪切超出截錐體406的立方體405。因此,當(dāng)圖塊化從燈401的視點(diǎn)看的場(chǎng)景時(shí),立方體405將不存在,因此將僅對(duì)包含金字塔404的圖塊進(jìn)行渲染和/或分配存儲(chǔ)器。這樣的剪切可以在上述任何陰影映射處理中的早期階段執(zhí)行。
識(shí)別空?qǐng)D塊列表允許避免針對(duì)相機(jī)截錐體區(qū)域406外的圖塊的所有渲染(可能存在大量潛在陰影投射幾何形狀)。圖塊化單元106可以被配置為早期丟棄對(duì)象和/或避免為在相機(jī)截錐體區(qū)域406外的圖塊構(gòu)建圖塊列表,以提供進(jìn)一步圖形處理節(jié)省。
圖形處理器102可以在硬件中實(shí)現(xiàn)。當(dāng)以這種方式實(shí)現(xiàn)時(shí),由圖塊化單元106編譯顯示列表執(zhí)行起來很便宜。顯示列表指示從光源的視點(diǎn)看的場(chǎng)景中的哪些圖塊在其中具有陰影投射對(duì)象,因此其提供了確定場(chǎng)景中的哪些區(qū)域?qū)⒈讳秩静⑶冶环峙溆糜陉幱皥D的存儲(chǔ)器的便宜且有效的方法。
圖1的系統(tǒng)被示出為包括多個(gè)功能塊。這僅是示意性的,并非旨在限定在這種實(shí)體的不同邏輯元件之間的嚴(yán)格劃分。每個(gè)功能塊可以以任何合適的方式提供。
本文描述的圖形處理系統(tǒng)可以在集成電路上的硬件中具體實(shí)現(xiàn)。本文所述的圖形處理系統(tǒng)可以被配置為執(zhí)行本文中所述的方法中的任一種方法。通常,上述功能、方法、技術(shù)或部件中的任一個(gè)可以在軟件、固件、硬件(例如,固定邏輯電路)或其任何組合中實(shí)現(xiàn)。術(shù)語“模塊”、“功能”、“部件”、“元件”、“單元”、“塊”和“邏輯”在此用于通常表示軟件、固件、硬件或其任何組合。在軟件實(shí)現(xiàn)的情況下,模塊、功能、部件、元件、單元、塊或邏輯表示當(dāng)在處理器上執(zhí)行時(shí)執(zhí)行指定任務(wù)的程序代碼。本文描述的算法和方法可以由執(zhí)行使得處理器執(zhí)行算法/方法的代碼的一個(gè)或多個(gè)處理器執(zhí)行。計(jì)算機(jī)可讀儲(chǔ)存介質(zhì)的示例包括隨機(jī)存取存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、光盤、閃存、硬盤存儲(chǔ)器和可以使用磁、光和其它技術(shù)存儲(chǔ)指令或其它數(shù)據(jù)并且可由機(jī)器訪問的其它存儲(chǔ)器設(shè)備。
如本文使用的術(shù)語計(jì)算機(jī)程序代碼和計(jì)算機(jī)可讀指令是指用于處理器的任何類型的可執(zhí)行代碼,包括以機(jī)器語言、解釋語言或腳本語言表達(dá)的代碼??蓤?zhí)行代碼包括二進(jìn)制代碼、機(jī)器代碼、字節(jié)代碼、定義集成電路的代碼(諸如硬件描述語言或網(wǎng)表)、以及以諸如c、java或opencl的編程語言代碼表示的代碼??蓤?zhí)行代碼可以是例如任何種類的軟件、固件、腳本、模塊或庫,其在在虛擬機(jī)或其它軟件環(huán)境下被適當(dāng)?shù)貓?zhí)行、處理、解釋、編譯、執(zhí)行時(shí),使得支持可執(zhí)行代碼的計(jì)算機(jī)系統(tǒng)的處理器執(zhí)行由代碼指定的任務(wù)。
處理器、計(jì)算機(jī)或計(jì)算機(jī)系統(tǒng)可以是具有處理能力以使得其能夠執(zhí)行指令的任何種類的設(shè)備、機(jī)器或?qū)S秒娐坊蚱浼匣蚱洳糠?。處理器可以是任何類型的通用或?qū)S锰幚砥?,諸如cpu、gpu、片上系統(tǒng)、狀態(tài)機(jī)、媒體處理器、專用集成電路(asic)、可編程邏輯陣列、場(chǎng)可編程門陣列(fpga)等。計(jì)算機(jī)或計(jì)算機(jī)系統(tǒng)可以包括一個(gè)或多個(gè)處理器。
還旨在涵蓋定義如本文所述的硬件的配置的軟件,諸如用于設(shè)計(jì)集成電路或用于配置可編程芯片以執(zhí)行所期望功能的hdl(硬件描述語言)軟件。也就是說,可以提供一種其上編碼有集成電路定義數(shù)據(jù)集形式的計(jì)算機(jī)可讀程序代碼的計(jì)算機(jī)可讀儲(chǔ)存介質(zhì),所述代碼當(dāng)在集成電路制造系統(tǒng)中被處理時(shí),配置該系統(tǒng)制造用于執(zhí)行本文所述的任何方法的圖形處理系統(tǒng),或制造包括本文所述的任何裝置的圖形處理系統(tǒng)。集成電路定義數(shù)據(jù)集可以是例如集成電路描述。
集成電路定義數(shù)據(jù)集可以是計(jì)算機(jī)代碼的形式,例如作為網(wǎng)表,用于配置可編程芯片的代碼,作為在任何級(jí)別定義集成電路的硬件描述語言,包括作為寄存器傳送級(jí)(rtl)代碼,作為高級(jí)電路表示,諸如verilog或vhdl,以及作為低級(jí)電路表示,諸如oasis和gdsii。邏輯上定義集成電路(例如rtl)的較高級(jí)別表示可以在被配置用于在包括電路元件的定義和用于組合那些元件的規(guī)則的軟件環(huán)境的背景下生成集成電路的制造定義的計(jì)算機(jī)系統(tǒng)被處理以便生成如此由表示定義的集成電路的制造定義。如在通常在計(jì)算機(jī)系統(tǒng)處執(zhí)行以定義機(jī)器的軟件的情況下,可能要求一個(gè)或多個(gè)中間用戶步驟(例如,提供命令、變量等),以便用于被配置用于生成集成電路的制造定義的計(jì)算機(jī)系統(tǒng)執(zhí)行定義集成電路的代碼以生成該集成電路的制造定義。
現(xiàn)在將相關(guān)于圖5描述在集成電路制造系統(tǒng)處處理集成電路定義數(shù)據(jù)集以便配置該系統(tǒng)來制造圖形處理系統(tǒng)的示例。
圖5示出了包括布局處理系統(tǒng)1004和集成電路生成系統(tǒng)1006的集成電路(ic)制造系統(tǒng)1002的示例。ic制造系統(tǒng)1002被配置為接收ic定義數(shù)據(jù)集(例如,定義如本文中的任何示例中所述的圖形處理系統(tǒng)),處理ic定義數(shù)據(jù)集,并且根據(jù)ic定義數(shù)據(jù)集來生成ic(例如,其具體實(shí)現(xiàn)如本文的任何示例中所述的圖形處理系統(tǒng))。ic定義數(shù)據(jù)集的處理配置ic制造系統(tǒng)1002以制造具體實(shí)現(xiàn)如本文中的任何示例所述的圖形處理系統(tǒng)的集成電路。
布局處理系統(tǒng)1004被配置為接收和處理ic定義數(shù)據(jù)集以確定電路布局。根據(jù)ic定義數(shù)據(jù)集確定電路布局的方法是本領(lǐng)域已知的,并且例如可能涉及合成rtl代碼以確定要生成的電路的門級(jí)表示,例如在邏輯部件方面(例如,nand、nor、and、or、mux和flip-flop部件)。可以通過確定針對(duì)邏輯部件的位置信息從電路的門級(jí)表示來確定電路布局。這可以自動(dòng)地或者在用戶參與的情況下完成,以便優(yōu)化電路布局。當(dāng)布局處理系統(tǒng)1004已經(jīng)確定了電路布局時(shí),它可以向ic生成系統(tǒng)1006輸出電路布局定義。電路布局定義可以是例如電路布局描述。
ic生成系統(tǒng)1006根據(jù)電路布局定義生成ic,如本領(lǐng)域中已知的。例如,ic生成系統(tǒng)1006可以實(shí)現(xiàn)半導(dǎo)體器件制造處理以生成ic,其可以涉及光刻和化學(xué)處理步驟的多步驟序列,在這些步驟期間,在由半導(dǎo)體材料制成的晶圓上逐漸產(chǎn)生電子電路。電路布局定義可以是掩模的形式,其可以在光刻工藝中用于根據(jù)電路定義來生成ic。另選地,提供給ic生成系統(tǒng)1006的電路布局定義可以是計(jì)算機(jī)可讀代碼的形式,ic生成系統(tǒng)1006可以使用該代碼來形成用于生成ic的合適掩模。
由ic制造系統(tǒng)1002執(zhí)行的不同處理可以全部在一個(gè)位置(例如,由一方)實(shí)現(xiàn)。另選地,ic制造系統(tǒng)1002可以是分布式系統(tǒng),使得一些處理可以在不同位置執(zhí)行,并且可以由不同方執(zhí)行。例如,以下階段中的一些階段:(i)合成表示ic定義數(shù)據(jù)集的rtl代碼以形成要生成的電路的門級(jí)表示,(ii)基于門級(jí)表示生成電路布局,(iii)根據(jù)電路布局形成掩模,以及(iv)使用掩模制造集成電路,可以在不同位置和/或由不同方執(zhí)行。
在其它示例中,在集成電路制造系統(tǒng)處的集成電路定義數(shù)據(jù)集的處理可以配置該系統(tǒng)以制造圖形處理系統(tǒng),而不必對(duì)ic定義數(shù)據(jù)集進(jìn)行處理以便確定電路布局。例如,集成電路定義數(shù)據(jù)集可以定義可重構(gòu)處理器(諸如fpga)的配置,并且該數(shù)據(jù)集的處理可以配置ic制造系統(tǒng)生成具有所定義配置的可重構(gòu)處理器(例如通過將配置數(shù)據(jù)加載到fpga)。
在一些實(shí)施方式中,當(dāng)集成電路制造定義數(shù)據(jù)集在集成電路制造系統(tǒng)中被處理時(shí),可以使得集成電路制造系統(tǒng)生成如本文所述的設(shè)備。例如,通過集成電路制造定義數(shù)據(jù)集以上面關(guān)于圖5所述的方式配置集成電路制造系統(tǒng)可以導(dǎo)致如本文所述的設(shè)備被制造。
在一些示例中,集成電路定義數(shù)據(jù)集可以包括在數(shù)據(jù)集處定義的硬件上運(yùn)行的軟件或者與在數(shù)據(jù)集處定義的硬件相結(jié)合的軟件。在圖5所示的示例中,ic生成系統(tǒng)還可以由集成電路定義數(shù)據(jù)集配置,以在制造集成電路時(shí),根據(jù)在集成電路定義數(shù)據(jù)集處定義的程序代碼將固件加載到該集成電路上或另外給集成電路提供程序代碼以便與集成電路一起使用。
申請(qǐng)人在此單獨(dú)地公開了本文所述的每個(gè)單獨(dú)特征以及兩個(gè)或更多個(gè)這樣的特征的任何組合,達(dá)到使得這些特征或組合能夠根據(jù)本領(lǐng)域技術(shù)人員的公知常識(shí)作為整體基于本說明書來實(shí)現(xiàn)的程度,而不管這些特征或特征的組合是否解決了本文公開的任何問題。鑒于前面的說明,對(duì)本領(lǐng)域技術(shù)人員顯而易見的是,可以在本發(fā)明的范圍內(nèi)進(jìn)行各種修改。