一種利用燈光索引號(hào)對(duì)像素進(jìn)行光照著色的方法
【專利摘要】本發(fā)明公開(kāi)了一種利用燈光索引號(hào)對(duì)像素進(jìn)行光照著色的方法,包括:獲取可見(jiàn)燈光的列表,并按照相機(jī)從遠(yuǎn)到近排序?yàn)槊總€(gè)燈光定義索引號(hào);繪制獲取的燈光索引號(hào)和燈光模型,得到一張燈光索引的buffer紋理,并把燈光的屬性寫入紋理;把基于buffer紋理的燈光材質(zhì)和獲取的燈光索引號(hào)打包成紋理,傳給像素著色程序,并進(jìn)行像素光照著色。本發(fā)明所述利用燈光索引號(hào)對(duì)像素進(jìn)行光照著色的方法,可以克服現(xiàn)有技術(shù)中計(jì)量量大、渲染效率低和適用范圍小等缺陷,以實(shí)現(xiàn)計(jì)算量小、渲染效率高和適用范圍大的優(yōu)點(diǎn)。
【專利說(shuō)明】一種利用燈光索引號(hào)對(duì)像素進(jìn)行光照著色的方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及圖像處理【技術(shù)領(lǐng)域】,具體地,涉及一種利用燈光索引號(hào)對(duì)像素進(jìn)行光 照著色的方法。
【背景技術(shù)】
[0002] 近幾年來(lái),GPU可編程技術(shù)的發(fā)展,圖形硬件的編程能力也不斷的強(qiáng)大,在GPU編 程程序稱為著色(shader)程序,按照著色方式可分為兩種,一種是前向著色,一種是延時(shí)著 色,目前利用最多的是延時(shí)著色技術(shù),這種技術(shù)是一種對(duì)3D場(chǎng)景進(jìn)行后期照明的技術(shù),它 的好處是只針對(duì)最后顯示在屏幕的像素進(jìn)行著色的過(guò)程,而前向著色渲染會(huì)對(duì)很多被深度 遮擋的像素重復(fù)執(zhí)行著色過(guò)程。延時(shí)著色第一次渲染過(guò)程是將場(chǎng)景中未經(jīng)著色的幾何信息 寫到多渲染目標(biāo)中,這些幾何屬性包括位置、法線、材質(zhì)等信息,第二次渲染過(guò)程中,將視圖 空間中的光源屬性和第一次渲染過(guò)程得到的數(shù)據(jù)作為輸入,來(lái)執(zhí)行二維屏幕空間的后期處 理。這種方法將光照和幾何渲染分開(kāi),可以很方便的修改或者增加光照的特性。
[0003] 在游戲引擎中,場(chǎng)景被劃分為很多個(gè)地形快,而每個(gè)地形塊中都會(huì)有上百盞燈,靜 態(tài)的光源計(jì)算簡(jiǎn)單,不需要每幀都重新創(chuàng)建,動(dòng)態(tài)的光源是最耗費(fèi)的,就需要我們提供一些 方法可以提高其性能了。
[0004] 目前游戲中大部分是基于延時(shí)著色處理場(chǎng)景中的光照,在后期處理優(yōu)化光照的方 法有很多中方法,一般處理的方法是:當(dāng)面臨大量動(dòng)態(tài)光照的復(fù)雜場(chǎng)景實(shí)時(shí)渲染的應(yīng)用程 序中,先繪制光源的燈光模型,然后得到模型的所覆蓋的像素,然后對(duì)像素進(jìn)行著色,這種 方法的缺點(diǎn)就是屏幕空間同時(shí)看到有多個(gè)燈光模型時(shí),那么對(duì)該像素受燈光模型影響的計(jì) 算會(huì)巨大,渲染效率低下從而影響整個(gè)游戲性能。
[0005] 在實(shí)現(xiàn)本發(fā)明的過(guò)程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在計(jì)量量大、渲染效率低 和適用范圍小等缺陷。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明的目的在于,針對(duì)上述問(wèn)題,提出一種利用燈光索引號(hào)對(duì)像素進(jìn)行光照著 色的方法,以實(shí)現(xiàn)計(jì)算量小、渲染效率高和適用范圍大的優(yōu)點(diǎn)。
[0007] 為實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案是:一種利用燈光索引號(hào)對(duì)像素進(jìn)行光 照著色的方法,包括: a、 獲取可見(jiàn)燈光的列表,并按照相機(jī)從遠(yuǎn)到近排序?yàn)槊總€(gè)燈光定義索引號(hào); b、 繪制獲取的燈光索引號(hào)和燈光模型,得到一張燈光索引的buffer紋理,并把燈光的 屬性寫入紋理; c、 把基于buffer紋理的燈光材質(zhì)和獲取的燈光索引號(hào)打包成紋理,傳給像素著色程 序,并進(jìn)行像素光照著色。
[0008] 進(jìn)一步地,所述步驟a,具體包括: 在游戲引擎中,根據(jù)場(chǎng)景的需求放置大量的燈光,依次遍歷繪制整個(gè)場(chǎng)景中所有可見(jiàn) 燈光模型,按照相機(jī)的從遠(yuǎn)到近的排序,依次為每個(gè)燈光模型定義索引號(hào),并被輻射范圍內(nèi) 的像素進(jìn)行著色。
[0009] 進(jìn)一步地,所述步驟b,具體包括: 根據(jù)投影到屏幕空間像素著色的信息,得到屏幕空間中每個(gè)像素受哪些燈光影響,把 屏幕空間中每個(gè)像素的燈光影響的燈光索引號(hào)寫入紋理。
[0010] 進(jìn)一步地,所述把屏幕空間中每個(gè)像素的燈光影響的燈光索引號(hào)寫入紋理的操 作,進(jìn)一步包括: 保存索引號(hào)的紋理格式是ARGB32位,有4個(gè)通道,每個(gè)通道保存一個(gè)對(duì)應(yīng)的燈光索引 號(hào),每個(gè)通道有8bit位,把bit位的最高位保存燈光索引號(hào);那么,一個(gè)通道最多可記錄4 個(gè)燈光索引號(hào),美術(shù)人員在場(chǎng)景中擺放可見(jiàn)模型燈光數(shù)量最大值為256,這樣把燈光索引號(hào) 寫入紋理; 對(duì)于每個(gè)像素可能受多個(gè)燈光的影響,那么在繪制該像素時(shí),就要根據(jù)受燈光影響的 數(shù)量來(lái)決定繪制次數(shù)。
[0011] 進(jìn)一步地,所述把燈光索引號(hào)寫入紋理的操作,更進(jìn)一步包括: ⑴在第一次對(duì)燈光索引號(hào)繪制時(shí),此時(shí)會(huì)把燈光索引保存到對(duì)應(yīng)的ARGB中,并把索引 號(hào)保存到每個(gè)通道的最高位,每次對(duì)同一個(gè)像素受不同燈光模型的繪制等同于混合,同時(shí) 在計(jì)算機(jī)中,移位運(yùn)算符就是在二進(jìn)制的基礎(chǔ)上對(duì)數(shù)字進(jìn)行平移,其數(shù)學(xué)意義為:右移 一位相當(dāng)于除2,右移n位相當(dāng)于除以2的n次方,那么本發(fā)明是向右移動(dòng)2位,所以前一次 渲染到屏幕像素除以4,即得到下面的混合像素的公式為:
【權(quán)利要求】
1. 一種利用燈光索引號(hào)對(duì)像素進(jìn)行光照著色的方法,其特征在于,包括: a、 獲取可見(jiàn)燈光的列表,并按照相機(jī)從遠(yuǎn)到近排序?yàn)槊總€(gè)燈光定義索引號(hào); b、 繪制獲取的燈光索引號(hào)和燈光模型,得到一張燈光索引的buffer紋理,并把燈光的 屬性寫入紋理; c、 把基于buffer紋理的燈光材質(zhì)和獲取的燈光索引號(hào)打包成紋理,傳給像素著色程 序,并進(jìn)行像素光照著色。
2. 根據(jù)權(quán)利要求1所述的利用燈光索引號(hào)對(duì)像素進(jìn)行光照著色的方法,其特征在于, 所述步驟a,具體包括: 在游戲引擎中,根據(jù)場(chǎng)景的需求放置大量的燈光,依次遍歷繪制整個(gè)場(chǎng)景中所有可見(jiàn) 燈光模型,按照相機(jī)的從遠(yuǎn)到近的排序,依次為每個(gè)燈光模型定義索引號(hào),并被輻射范圍內(nèi) 的像素進(jìn)行著色。
3. 根據(jù)權(quán)利要求1或2所述的利用燈光索引號(hào)對(duì)像素進(jìn)行光照著色的方法,其特征在 于,所述步驟b,具體包括: 根據(jù)投影到屏幕空間像素著色的信息,得到屏幕空間中每個(gè)像素受哪些燈光影響,把 屏幕空間中每個(gè)像素的燈光影響的燈光索引號(hào)寫入紋理。
4. 根據(jù)權(quán)利要求3所述的利用燈光索引號(hào)對(duì)像素進(jìn)行光照著色的方法,其特征在于, 所述把屏幕空間中每個(gè)像素的燈光影響的燈光索引號(hào)寫入紋理的操作,進(jìn)一步包括: 保存索引號(hào)的紋理格式是ARGB32位,有4個(gè)通道,每個(gè)通道保存一個(gè)對(duì)應(yīng)的燈光索引 號(hào),每個(gè)通道有Sbit位,把bit位的最高位保存燈光索引號(hào);那么,一個(gè)通道最多可記錄4 個(gè)燈光索引號(hào),美術(shù)人員在場(chǎng)景中擺放可見(jiàn)模型燈光數(shù)量最大值為256,這樣把燈光索引號(hào) 寫入紋理; 對(duì)于每個(gè)像素可能受多個(gè)燈光的影響,那么在繪制該像素時(shí),就要根據(jù)受燈光影響的 數(shù)量來(lái)決定繪制次數(shù)。
5. 根據(jù)權(quán)利要求4所述的利用燈光索引號(hào)對(duì)像素進(jìn)行光照著色的方法,其特征在于, 所述把燈光索引號(hào)寫入紋理的操作,更進(jìn)一步包括: ⑴在第一次對(duì)燈光索引號(hào)繪制時(shí),此時(shí)會(huì)把燈光索引保存到對(duì)應(yīng)的ARGB中,并把索引 號(hào)保存到每個(gè)通道的最高位,每次對(duì)同一個(gè)像素受不同燈光模型的繪制等同于混合,同時(shí) 在計(jì)算機(jī)中,移位運(yùn)算符就是在二進(jìn)制的基礎(chǔ)上對(duì)數(shù)字進(jìn)行平移,其數(shù)學(xué)意義為:右移 一位相當(dāng)于除2,右移η位相當(dāng)于除以2的η次方,那么本發(fā)明是向右移動(dòng)2位,所以前一次 渲染到屏幕像素除以4,即得到下面的混合像素的公式為:
其中,Pf;m彳為混合后的像素,為混合前像素,p為即將繪制的像素; 在開(kāi)始繪制時(shí),也就是把即將渲染到屏幕像素等于混合像素,最后將混合像素繪制到 渲染目標(biāo)中; ⑵當(dāng)?shù)诙卫L制燈光索引號(hào)時(shí),把先前保存高位的燈光索引號(hào),向后移動(dòng)2位,把第二 次繪制的索引號(hào)放到高位; ⑶第三次繪制索引號(hào)時(shí),先保存前面兩次繪制的索引號(hào),再向后移動(dòng)2位,把第三次繪 制得到的燈光索引號(hào)放入高位; ⑷第四次繪制索引號(hào)時(shí),先保存前面三次繪制的索引號(hào),再向后移動(dòng)2位,把第四次繪 制得到的燈光索引號(hào)放入高位; 最終保留最后4個(gè)燈光索引號(hào)的繪制,也有部分像素受燈光影響小于4個(gè),就按照對(duì)應(yīng) 的索引號(hào)繪制。
6. 根據(jù)權(quán)利要求4所述的利用燈光索引號(hào)對(duì)像素進(jìn)行光照著色的方法,其特征在于, 所述對(duì)于每個(gè)像素可能受多個(gè)燈光的影響,那么在繪制該像素時(shí),就要根據(jù)受燈光影響的 數(shù)量來(lái)決定繪制次數(shù)的操作,更進(jìn)一步包括: ⑴當(dāng)像素受多個(gè)燈光模型影響時(shí),距離相機(jī)越近,受該燈光材質(zhì)影響越大,距離相機(jī)越 遠(yuǎn),受該燈光材質(zhì)影響就越小,通常把重疊的燈光進(jìn)行混合就可以的到最終像素的光照顏 色值; 與此同時(shí)把燈光的屬性寫入紋理,方便在像素著色階段獲取燈光的參數(shù)數(shù)據(jù); ⑵把燈光索引號(hào)"打包"到紋理中,得到一張燈光索引的buffer紋理,通過(guò)渲染目標(biāo)返 回每個(gè)像素受光照的索引信息。
7. 根據(jù)權(quán)利要求3所述的利用燈光索引號(hào)對(duì)像素進(jìn)行光照著色的方法,其特征在于, 所述步驟c,具體包括: 在GPU編程中,分為頂點(diǎn)著色程序和像素著色程序,把步驟b得到的燈光索引紋理和燈 光材質(zhì)屬性傳入像素著色程序里; 經(jīng)過(guò)著色程序后"解壓"出與之對(duì)應(yīng)的燈光參數(shù),其中每個(gè)像素最多能夠得到不少于1 個(gè)燈光索引號(hào),而之前每個(gè)像素只能得到一個(gè)燈光索引號(hào); 然后將這些燈光參數(shù)與對(duì)應(yīng)像素關(guān)聯(lián),進(jìn)行光照著色。
8. 根據(jù)權(quán)利要求1或2所述的利用燈光索引號(hào)對(duì)像素進(jìn)行光照著色的方法,其特征在 于,在步驟b中,所述燈光模型,是指在游戲中為了模擬真實(shí)的不同光源的照射范圍,事先 為包含點(diǎn)光源和聚光燈的每個(gè)燈光指定的模型。
【文檔編號(hào)】G06T15/50GK104392479SQ201410573238
【公開(kāi)日】2015年3月4日 申請(qǐng)日期:2014年10月24日 優(yōu)先權(quán)日:2014年10月24日
【發(fā)明者】張翼 申請(qǐng)人:無(wú)錫梵天信息技術(shù)股份有限公司