基于可控制紋理烘焙的三維矢量模型實(shí)時(shí)光影延遲著色渲染方法
【專利摘要】本發(fā)明涉及計(jì)算機(jī)應(yīng)用技術(shù)和計(jì)算機(jī)視覺領(lǐng)域,具體涉及一種基于可控制紋理烘焙的三維矢量模型實(shí)時(shí)光影延遲著色渲染方法,包括以下步驟:在3Dmax中載入整個(gè)大規(guī)模復(fù)雜模型場(chǎng)景;計(jì)算出整個(gè)場(chǎng)景的每個(gè)像素在時(shí)間上的可見度函數(shù),在經(jīng)過簡化后存儲(chǔ)在兩組彩色紋理中;在時(shí)間區(qū)域上計(jì)算出該段時(shí)間的平均光照,利用這段時(shí)間上各光源點(diǎn)渲染出來的影子來產(chǎn)生模糊的陰影;將陰影信息中的點(diǎn)光源通過PCF的方法計(jì)算出最終可見度值等特征。結(jié)合了基于光線跟蹤的離線渲染方法和鄰域采樣過濾遮擋區(qū)間映射技術(shù),算法生成的陰影更具真實(shí)感,克服了陰影映射算法產(chǎn)生的鋸齒問題,滿足虛擬現(xiàn)實(shí)的應(yīng)用要求。
【專利說明】基于可控制紋理烘焙的三維矢量模型實(shí)時(shí)光影延遲著色渲染方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)應(yīng)用技術(shù)和計(jì)算機(jī)視覺領(lǐng)域,具體涉及一種基于可控制紋理烘焙的三維矢量模型實(shí)時(shí)光影延遲著色渲染方法。
【背景技術(shù)】
[0002]在真實(shí)感圖像合成中,光照和陰影是密不可分的,它們對(duì)場(chǎng)景真實(shí)感起著決定性的作用,是真實(shí)圖像生成中最關(guān)鍵的技術(shù)之一。適當(dāng)模擬自然物理世界的光照,不僅能讓人感知到物體的存在并對(duì)物體的幾何性質(zhì)有所認(rèn)識(shí),還能夠讓人知道物體的材質(zhì)屬性。而陰影更能幫助人們判斷自己所面對(duì)的方向或者根據(jù)陰影判斷自己所處的環(huán)境以及陰影所對(duì)應(yīng)實(shí)體的信息,光照和陰影的生成大大增強(qiáng)了場(chǎng)景的可信度和沉浸感。
[0003]早期圖形開發(fā)者使用的光照就是固定功能管線提供的傳統(tǒng)光照模型,對(duì)于其他許多光照算法在應(yīng)用中都不可以通過圖形管線使用。陰影方面也是大部分使用固定功能管線,并依賴于圖形API對(duì)硬件的擴(kuò)展或圖形API的更新來實(shí)現(xiàn),在實(shí)現(xiàn)上帶來了一些不必要的復(fù)雜性。固定功能管線的這些缺點(diǎn)大大限制了對(duì)光照和陰影算法的研究與應(yīng)用。
[0004]近幾年出現(xiàn)了可編程GPU,圖形開發(fā)者可以使用GPU語言來控制最重要的圖形管線操作,我們可以利用可編程管線提供的靈活性來創(chuàng)造出更逼真的渲染效果,這種可編程性為圖形開發(fā)者提供了一個(gè)廣闊的研究和實(shí)踐平臺(tái),基于可編程GPU來實(shí)現(xiàn)和優(yōu)化光照和陰影算法也逐漸成為研究熱點(diǎn)。
[0005]由于GPU目前能實(shí)現(xiàn)的指令有限,存在著一定的局限性。而渲染到紋理技術(shù)是計(jì)算機(jī)圖形學(xué)中極為常用和有效的技術(shù),借助渲染到紋理技術(shù)可以存儲(chǔ)數(shù)據(jù),擴(kuò)展GPU的功能。對(duì)于一些耗費(fèi)時(shí)間的計(jì)算,更可以提前把結(jié)果計(jì)算好并存儲(chǔ)在紋理中,這樣便將大量的復(fù)雜計(jì)算簡化為對(duì)紋理的查找,能夠節(jié)約大量時(shí)間。但是同時(shí)也需要考慮紋理的大小問題,過大的紋理會(huì)消耗系統(tǒng)的顯存,反而對(duì)實(shí)時(shí)渲染不利。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的在于提供一種基于可控制紋理烘焙的三維矢量模型實(shí)時(shí)光影延遲著色渲染方法,解決了現(xiàn)有技術(shù)渲染復(fù)雜、太耗時(shí),以及對(duì)計(jì)算機(jī)的配置要求過高的問題。
[0007]為解決上述的技術(shù)問題,本發(fā)明采用以下技術(shù)方案:一種基于可控制紋理烘焙的三維矢量模型實(shí)時(shí)光影延遲著色渲染方法,包括以下步驟:
步驟一:在3D max中載入整個(gè)大規(guī)模復(fù)雜模型場(chǎng)景(本發(fā)明實(shí)例采用的是機(jī)場(chǎng)模型,包括候機(jī)樓和機(jī)場(chǎng)地面),
步驟二,計(jì)算出整個(gè)場(chǎng)景的每個(gè)像素在時(shí)間上的可見度函數(shù);
步驟三,在時(shí)間區(qū)域上計(jì)算出該段時(shí)間的平均光照,利用這段時(shí)間上各光源點(diǎn)渲染出來的影子來產(chǎn)生模糊的陰影;
步驟四:將陰影信息中的點(diǎn)光源通過PCF的方法計(jì)算出最終可見度值,在經(jīng)過簡化后存儲(chǔ)在兩組彩色紋理中;
步驟五,將最終可見度值乘以一個(gè)著色值進(jìn)行光源軌道上的實(shí)時(shí)計(jì)算,計(jì)算出最終的顏色值;
步驟六,最終的顏色值利用GPU可編程的光線跟蹤引擎計(jì)算并渲染出帶紋理貼圖及陰影的真實(shí)感場(chǎng)景效果。
[0008]進(jìn)一步的,所述步驟二中,計(jì)算出整個(gè)場(chǎng)景的每個(gè)像素在時(shí)間上的可見度信息是通過3D max中計(jì)算場(chǎng)景數(shù)據(jù)的光線跟蹤引擎插件來實(shí)現(xiàn)的。
[0009]所述光線跟蹤引擎插件為mental ray渲染器,其計(jì)算整個(gè)場(chǎng)景模型場(chǎng)景可見度函數(shù)的方法如下:
先進(jìn)行預(yù)渲染處理:從光源軌道上的每個(gè)點(diǎn)進(jìn)行渲染,調(diào)整每個(gè)可見度函數(shù)的上升邊和下降邊,Sbit的方式將上升邊和下降邊的值分別存儲(chǔ)為上升矢量和下降矢量,得到每個(gè)像素的可見度函數(shù),可見度函數(shù)是用0-1值表示的;再進(jìn)行渲染后期處理:預(yù)渲染從光源軌道上的每個(gè)點(diǎn)渲染整個(gè)場(chǎng)景,得到的數(shù)據(jù)量非常龐大,需要極大的存儲(chǔ)空間,而且對(duì)后面的可編程處理計(jì)算實(shí)時(shí)陰影帶來不便;
因此,我們?cè)阡秩竞笃趯?duì)這些數(shù)據(jù)進(jìn)行處理,即針對(duì)預(yù)渲染處理步驟得到的每個(gè)點(diǎn)的場(chǎng)景渲染數(shù)據(jù),按太陽軌道曲線上的數(shù)據(jù),跟蹤場(chǎng)景中各像素來自每道光線所對(duì)應(yīng)的光源點(diǎn),由于可見度函數(shù)是用0-1值表示的,在時(shí)間域上的上升邊和下降邊定為表示太陽出現(xiàn)和消失的時(shí)間,最終得到兩張表示每個(gè)像素在時(shí)間區(qū)域上的可見度函數(shù)的紋理圖,紋理圖由上升矢量紋理和下降矢量紋理組成。
[0010]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:結(jié)合了基于光線跟蹤的離線渲染方法和鄰域采樣過濾遮擋區(qū)間映射技術(shù),算法生成的陰影更具真實(shí)感,克服了陰影映射算法產(chǎn)生的鋸齒問題,滿足虛擬現(xiàn)實(shí)的應(yīng)用要求。
【專利附圖】
【附圖說明】
[0011]圖1為本發(fā)明一種基于可控制紋理烘焙的三維矢量模型實(shí)時(shí)光影延遲著色渲染方法的流程示意圖。
[0012]圖2是采樣數(shù)較少時(shí),機(jī)場(chǎng)模型的陰影遠(yuǎn)景效果圖。
[0013]圖3是采樣數(shù)較多時(shí),機(jī)場(chǎng)模型的陰影遠(yuǎn)景效果圖。
[0014]圖4是采樣數(shù)較少時(shí),機(jī)場(chǎng)模型的陰影近景效果圖。
[0015]圖5是采樣數(shù)較多時(shí),機(jī)場(chǎng)模型的陰影近景效果圖。。
【具體實(shí)施方式】
[0016]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0017]圖1示出了本發(fā)明一種基于可控制紋理烘焙的三維矢量模型實(shí)時(shí)光影延遲著色渲染方法的一個(gè)實(shí)施例:一種基于可控制紋理烘焙的三維矢量模型實(shí)時(shí)光影延遲著色渲染方法,包括以下步驟:
步驟一:在3D max中載入整個(gè)大規(guī)模復(fù)雜模型場(chǎng)景(本發(fā)明實(shí)例采用的是機(jī)場(chǎng)模型,包括候機(jī)樓和機(jī)場(chǎng)地面),
步驟二,計(jì)算出整個(gè)場(chǎng)景的每個(gè)像素在時(shí)間上的可見度函數(shù)在經(jīng)過簡化后存儲(chǔ)在兩組彩色紋理中;
步驟三,每個(gè)像素即點(diǎn)光源產(chǎn)生的陰影是清晰的,銳利的,與現(xiàn)實(shí)世界中的陰影不一致,因此,這一步驟將沿著點(diǎn)光源軌道擴(kuò)展變成線光源,通過在參數(shù)值的區(qū)間上求點(diǎn)光源的可見度函數(shù)的平均值得到線光源的可見度信息,線光源渲染的陰影是模糊的陰影,所以在時(shí)間區(qū)域(即光源經(jīng)過的一段曲線)上計(jì)算出該段時(shí)間的平均光照,利用這段時(shí)間上各光源點(diǎn)渲染出來的影子來產(chǎn)生模糊的陰影;
步驟四:將陰影信息中的電光源通過PCF的方法計(jì)算出最終可見度值;
步驟五,將最終可見度值乘以一個(gè)著色值進(jìn)行光源軌道上的實(shí)時(shí)計(jì)算,計(jì)算出最終的顏色值;
步驟六,最終的顏色值利用GPU可編程光線跟蹤引擎算并渲染出帶紋理貼圖及陰影的真實(shí)感場(chǎng)景效果。其中作為優(yōu)選,GPU可編程光線跟蹤引擎使用mental ray軟件包中自定義的 shader。
[0018]由上面的步驟結(jié)合附圖可知,由點(diǎn)光源產(chǎn)生的影子是清晰的,銳利的,與現(xiàn)實(shí)世界中的軟陰影不一致,將沿著點(diǎn)光源軌道擴(kuò)展變成線光源,線光源渲染的陰影是模糊的陰影。將點(diǎn)光源擴(kuò)展到線光源的步驟主要通過在參數(shù)值的區(qū)間上求點(diǎn)光源的可見度函數(shù)的平均值得到線光源相應(yīng)值。采樣較多,得到的值就越精確,渲染出來的陰影越柔軟,采樣較少,得到的值就不夠精確,渲染出來的陰影比較清晰銳利。
[0019]進(jìn)一步的,所述步驟二中,計(jì)算出整個(gè)場(chǎng)景的每個(gè)像素在時(shí)間上的可見度函數(shù)是通過3D max中計(jì)算場(chǎng)景數(shù)據(jù)的光線跟蹤引擎插件來實(shí)現(xiàn)的。
[0020]圖1還示出了另一個(gè)實(shí)施例,所述光線跟蹤引擎插件為mental ray渲染器,用mental ray自定義的shader計(jì)算整個(gè)場(chǎng)景模型場(chǎng)景數(shù)據(jù)即可見度函數(shù)的方法如下:
先進(jìn)行預(yù)渲染處理:從光源軌道上的每個(gè)點(diǎn)進(jìn)行渲染,調(diào)整每個(gè)可見度函數(shù)的上升邊和下降邊,Sbit的方式將上升邊和下降邊的值分別存儲(chǔ)為上升矢量和下降矢量,得到每個(gè)像素的可見度函數(shù),可見度函數(shù)是用0-1值表示的;
再進(jìn)行渲染后期處理:預(yù)渲染從光源軌道上的每個(gè)點(diǎn)渲染整個(gè)場(chǎng)景,得到的數(shù)據(jù)量非常龐大,需要極大的存儲(chǔ)空間,而且對(duì)后面的可編程處理計(jì)算實(shí)時(shí)陰影帶來不便;因此,我們?cè)阡秩竞笃趯?duì)這些數(shù)據(jù)進(jìn)行處理,即針對(duì)預(yù)渲染處理步驟得到的每個(gè)點(diǎn)的場(chǎng)景渲染數(shù)據(jù),按太陽軌道曲線上的數(shù)據(jù),跟蹤場(chǎng)景中各像素來自每道光線所對(duì)應(yīng)的光源點(diǎn),由于可見度函數(shù)是用0-1值表示的,在時(shí)間域上的上升邊和下降邊定為表示太陽出現(xiàn)和消失的時(shí)間,最終得到兩張表示每個(gè)像素在時(shí)間區(qū)域上的可見度函數(shù)的紋理圖,紋理圖由上升矢量紋理和下降矢量紋理組成。
[0021]圖2為是采樣數(shù)較少時(shí),機(jī)場(chǎng)模型的陰影遠(yuǎn)景效果圖,因?yàn)椴蓸虞^少,生成的陰影比較清晰銳利;圖3為采樣數(shù)較多時(shí),機(jī)場(chǎng)模型的陰影遠(yuǎn)景效果圖,與圖2相比,生成的陰影更加柔軟也更加貼近現(xiàn)實(shí)世界中的陰影。特別是從圖4和圖5中所展示的近景效果圖,更能明顯的體現(xiàn)出采樣的多少對(duì)陰影柔軟度的影響。
[0022]1、GPU可編程管線
圖形渲染管線是通過對(duì)給定的諸如視點(diǎn)位置、三維幾何模型、光源、光照模型、紋理像素等元素的處理,最后得到一副繪制好的二維圖像,并最終顯示到屏幕上的過程。渲染管線是3D實(shí)時(shí)渲染的重要組成部分,用于離線渲染。
[0023]場(chǎng)景描述數(shù)據(jù)從管線的入口傳入渲染管線,首先進(jìn)行的是頂點(diǎn)處理,這個(gè)階段的工作將確定場(chǎng)景中幾何體各個(gè)頂點(diǎn)的屬性;處理后的頂點(diǎn)將流向幾何處理部分,這部分主要對(duì)頂點(diǎn)進(jìn)行組織形成圖元;圖元處理中進(jìn)一步對(duì)圖元進(jìn)行處理如可見面消隱工作等;光柵化化階段對(duì)從圖元處理傳來的有效圖元進(jìn)行光柵化得到屏幕坐標(biāo)上的各個(gè)片元;最后一個(gè)階段是對(duì)每片元進(jìn)行處理。場(chǎng)景描述經(jīng)過所有這些功能階段后就被從最初的數(shù)學(xué)描述轉(zhuǎn)換為顏色信息描述并寫入相應(yīng)的顯示緩存。由于圖形處理中存在著大量的并行處理機(jī)會(huì),圖形硬件往往利用多個(gè)計(jì)算單元來同時(shí)處理多個(gè)圖形數(shù)據(jù),如同時(shí)有好多個(gè)計(jì)算單元來執(zhí)行頂點(diǎn)變換等,這樣就大大提高了計(jì)算性能。
[0024]2、可見度函數(shù)
光源的影子可以表達(dá)為一個(gè)可見度函數(shù),如果場(chǎng)景中某個(gè)像素點(diǎn)P在陰影區(qū)域,則令該像素點(diǎn)的可見度值為0,否則令它的可見度值為I。在實(shí)時(shí)渲染階段,只需要將這個(gè)可見度函數(shù)乘以一個(gè)著色值,即可得出最終的顏色值。
[0025]可見度函數(shù)是一個(gè)有3個(gè)變量的函數(shù)visibility = function (x, y, t), (x, y)是物體表面的空間變量,t是時(shí)間變量。可以用3D紋理存儲(chǔ)這個(gè)函數(shù),但是需要極大的存儲(chǔ)空間。由于可見度函數(shù)的所有值都是O或者1,因此我們使用一個(gè)類似于游程編碼的方法來存儲(chǔ)這個(gè)函數(shù)。對(duì)于每一個(gè)點(diǎn),我們找到它在時(shí)間域的上升邊和下降邊。它們分別對(duì)應(yīng)于太陽出現(xiàn)和消失的時(shí)間。我們定義“上升”矢量為所有上升的邊的矢量,而“下降”矢量為所有下降的邊的矢量。我們把“上升”矢量和“下降”矢量分別存儲(chǔ)在兩組彩色紋理中,每個(gè)紋理有4個(gè)通道。因?yàn)閟hader指令在四元分矢量上操作,可以同時(shí)實(shí)施4個(gè)運(yùn)算,只消耗一個(gè)運(yùn)算開銷。這就是把“上升”和“下降”裝填到不同紋理的原因。“上升”紋理存儲(chǔ)每個(gè)通道中的光區(qū)間的開始,而“下降”紋理存儲(chǔ)光區(qū)間的結(jié)束。有了點(diǎn)光源預(yù)計(jì)算清晰影子的可見度信息所需要的一切:給定一個(gè)上升矢量、一個(gè)下降矢量和時(shí)間,我們就可以計(jì)算可見度函數(shù)來確定某個(gè)點(diǎn)是否在影子中。
【權(quán)利要求】
1.一種基于可控制紋理烘焙的三維矢量模型實(shí)時(shí)光影延遲著色渲染方法,其特征在于包括以下步驟: 步驟一:在3D max中載入整個(gè)大規(guī)模復(fù)雜模型場(chǎng)景; 步驟二,計(jì)算出整個(gè)場(chǎng)景的每個(gè)像素在時(shí)間上的可見度函數(shù),在經(jīng)過簡化后存儲(chǔ)在兩組彩色紋理中; 步驟三,在時(shí)間區(qū)域上計(jì)算出該段時(shí)間的平均光照,利用這段時(shí)間上各光源點(diǎn)渲染出來的影子來產(chǎn)生模糊的陰影; 步驟四:將陰影信息中的點(diǎn)光源通過PCF的方法計(jì)算出最終可見度值; 步驟五,將最終可見度值乘以一個(gè)著色值進(jìn)行光源軌道上的實(shí)時(shí)計(jì)算,計(jì)算出最終的顏色值; 步驟六,最終的顏色值利用GPU可編程光線跟蹤引擎計(jì)算并渲染出帶紋理貼圖及陰影的真實(shí)感場(chǎng)景效果。
2.根據(jù)權(quán)利要求1所述的一種基于可控制紋理烘焙的三維矢量模型實(shí)時(shí)光影延遲著色渲染方法,其特征在于:所述步驟二中,計(jì)算出整個(gè)場(chǎng)景的每個(gè)像素在時(shí)間上的可見度信息是通過3D max中計(jì)算場(chǎng)景數(shù)據(jù)的光線跟蹤引擎插件來實(shí)現(xiàn)的。
3.根據(jù)權(quán)利要求2所述的一種基于可控制紋理烘焙的三維矢量模型實(shí)時(shí)光影延遲著色渲染方法,其特征在于:所述光線跟蹤引擎插件為mental ray渲染器,其計(jì)算整個(gè)場(chǎng)景模型場(chǎng)景可見度信息的方法如下: 先進(jìn)行預(yù)渲染處理:從光源軌道上的每個(gè)點(diǎn)進(jìn)行渲染,調(diào)整每個(gè)可見度函數(shù)的上升邊和下降邊,Sbit的方式將上升邊和下降邊的值分別存儲(chǔ)為上升矢量和下降矢量,得到每個(gè)像素的可見度函數(shù),可見度函數(shù)是用0-1值表示的; 再進(jìn)行渲染后期處理:預(yù)渲染從光源軌道上的每個(gè)點(diǎn)渲染整個(gè)場(chǎng)景,得到的數(shù)據(jù)量非常龐大,需要極大的存儲(chǔ)空間,而且對(duì)后面的可編程處理計(jì)算實(shí)時(shí)陰影帶來不便; 因此,我們?cè)阡秩竞笃趯?duì)這些數(shù)據(jù)進(jìn)行處理,即針對(duì)預(yù)渲染處理步驟得到的每個(gè)點(diǎn)的場(chǎng)景渲染數(shù)據(jù),按太陽軌道曲線上的數(shù)據(jù),跟蹤場(chǎng)景中各像素來自每道光線所對(duì)應(yīng)的光源點(diǎn),由于可見度函數(shù)是用0-1值表示的,在時(shí)間域上的上升邊和下降邊定為表示太陽出現(xiàn)和消失的時(shí)間,最終得到兩張表示每個(gè)像素在時(shí)間區(qū)域上的可見度函數(shù)的紋理圖,紋理圖由上升矢量紋理和下降矢量紋理組成。
【文檔編號(hào)】G06T15/00GK103700134SQ201310720196
【公開日】2014年4月2日 申請(qǐng)日期:2013年12月24日 優(yōu)先權(quán)日:2013年12月24日
【發(fā)明者】譚詩瀚, 季玉龍, 宋歌, 汪歸歸, 王呈鵬, 馮仕財(cái), 楊善敏, 付安邦, 陸薇, 謝依妨, 劉洪
申請(qǐng)人:四川川大智勝軟件股份有限公司