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