基于虛擬球形光源的多光源渲染方法
【專利摘要】本發明公開了一種基于虛擬球形光源的多光源渲染方法,包括如下步驟:步驟1,根據場景建立各個虛擬球形光源;步驟2,利用虛擬球形光源計算采樣面上各個點的光照強度;步驟3,建立虛擬球形光源在采樣面上的光照強度矩陣,通過矩陣疊加得到采樣面上每個點的光照強度,得到最終的渲染結果。本發明利用虛擬球形光源,將點光源的光能量進行分散處理,對光澤表面有良好的支持,避免了場景失真。另外,本發明利用GPU具有的陰影映射即著色器能力,借助GPU提供的計算能力,大大提升了渲染過程的效率。
【專利說明】基于虛擬球形光源的多光源渲染方法
【技術領域】
[0001]本發明涉及計算機圖形領域,尤其涉及一種基于虛擬球形光源的多光源渲染方法。
【背景技術】
[0002]在具有多個光澤面的復雜場景中計算全局照明效果是渲染研究領域一個長期未解決的問題。一個通常的解決辦法是將全景照明問題轉化為多光源照明問題,基于多光源的渲染算法通過生成大量虛擬點光源(VPL)來擬合非直射照明以及這些光源對應的陰影面。在全局照明路徑空間模式中,這些方法創建虛擬點光源對應的任意長度的光子路徑和可見表面樣本的一個對應長度的相機子路徑。
[0003]計算相機與光子路徑的連接就是多光源法與其他方法不同的地方。最初的多光源技術,立即輻射度,使用可見陰影映射將所有光源和所有表面樣本連接。最近有一些改良方法被發表出來。針對動畫序列Lainet al提出了增量立即輻射度,在每一幀中只有一部分陰影映射被計算。矩陣行列采樣只從大的光表面連接矩陣對一小部分行和列進行采樣。光切法對光或表面樣本集上進行分層以獲得連接計算的可擴展性。Ritschel等人使用近似陰影圖來進行渲染加速。
[0004]現有技術的多光源法所采用的光源為點光源,使用點光源在某些場景下會引入失真的問題。導致失真的原因有兩個,第一:生成的虛擬點光源只能是漫反射的,所以光澤表面的光反射被忽略了。第二,點光源的光束集中,多個點光源存在的情況下,會造成照度尖峰,導致某些位置的光照強度要顯著大于其他地方,為了防止夾角引起的照度尖峰,虛擬點光源的貢獻范圍需要被限制。這些方法在漫反射場景下提供良好的視覺效果,但在有高光材料的場景下,使用虛擬點光源進行多光源照射法會造成照明效果的缺失。
[0005]因此,現有多光源法所帶來的失真問題亟需得到解決。
【發明內容】
[0006]本發明提供了一種基于虛擬球形光源的多光源渲染方法,提高了針對場景中光澤(glossy)材料的渲染效果,提升了場景的整體渲染效果。
[0007]一種基于虛擬球形光源的多光源渲染方法,包括如下步驟:
[0008]步驟I,根據場景建立各個虛擬球形光源;
[0009]步驟2,計算每個虛擬球形光源在采樣面上單個點的光照強度;
[0010]步驟3,將每個點在所有虛擬球形光源照射下的光照強度進行疊加,得到最終的渲染結果。
[0011]本發明通過建立球形光源,避免因點光源造成照度尖峰或者為避免照度尖峰而限制虛擬點光源的貢獻范圍,從而避免了照明效果失真。
[0012]建立虛擬球形光源需要確定球心以及各球體的半徑,可選的,步驟I具體包括:
[0013]步驟1-1,采用雙向路徑追蹤法確定各個虛擬球形光源模型的球心位置;
[0014]步驟1-2,根據場景中所設定的光的局部密度確定各個虛擬球形光源模型的半徑。
[0015]其中光的局部密度是指在虛擬球形光源分布區域內虛擬球形光源的數量,其由場景本身決定,在建立好場景后,光的局部密度確定。
[0016]步驟1-2具體方法為,對于每個虛擬球形光源,將其球心作為搜索的球心,以預設的搜索步長作為初始搜索半徑向周圍進行搜索,不斷按搜索步長擴展搜索半徑,直至球體內包含預設數目的鄰近虛擬球形光源球心,將最終所得的搜索半徑乘以指定系數作為該虛擬球形光源的半徑,其中包含在球體內的鄰近虛擬球形光源球心數目根據場景所設定的光的局部密度設定。
[0017]其中搜索步長以及球體內所包含的鄰近虛擬球形光源球心數目為預設數目,具體根據計算機的處理能力以及精確度需要確定。系數的指定需要綜合考慮渲染效果與計算復雜度因素。
[0018]步驟2中,對于采樣面上的點X,其在觀察方向V上的光照強度^(Χ,ν)的計算公式為:
Φ| f
[0019](X, V) 二i'r(x, I V) cos(nx, l)fr(y, ij; ω)(||γ -pj|| < r))dl
rrrJ
[0020]其中,Φ]是虛擬球形光源的總能量,Pj為虛擬球形光源的球心位置,rj為虛擬球形光源的半徑,I表示任意一個空間點,Ω j表示以點X到虛擬球形光源球心P」的連線為母線,以h為底半徑的圓錐;f;為雙向反射分布函數,nx是點X所在采樣面的法線,Ij表示空間點I處的光線入射方向,ω表不空間點I的光線出射方向,I表不在點X處的光線入射方向,指示函數(I Iy-PjI I < Tj)在I Iy-PjI I <r」時值為I,否則值為O。
[0021]此處空間點表示在場景中的一點。對于虛擬球形光源,其光照模型為圓錐模型。對于單個虛擬球形光源,其光能量均勻分布在其球體范圍內,對于單個點來說,受所有包含其在內的球形光源的影響。通過對單個虛擬球形光源在單個點上的光照強度的計算,可以疊加出單個像素的最終光照強度。單個虛擬球形光源對單個點的光照影響可以通過以下方式計算:將該球形光源的光能量均勻分布在一個圓面上,該圓面與點形成一個圓錐,光源通過該圓錐對點進行光照。通過建立圓面上的點對點的光照模型,通過積分可以獲得整個圓面(即虛擬球形光源)對該點的光照強度。
[0022]在計算過程中,虛擬球形光源的可見性可以被看作是點與球心之間的可見性問題,即是說,點對球心是可見的(未被遮擋)則該點即被認為對虛擬球形光源是可見的,該方法對虛擬球形光源進行了簡化處理,這樣就可以利用GPU的陰影映射能力進行計算。為對光線與球面相交處進行修正,將指示函數(I Y-Pj I <rj)被替換成余弦因子
cos(npj,—I)。因此,優選的,步驟2中,對于采樣面上的點X,其在觀察方向V上的光照強度 (X, V)的計算公式為:
φ:Γ
[0023]Lj (χ, V) = ~^V(x,Pj) I fr(x; I, v) cos(nx, l)fr(pj, ij, -l) cos(np , -1) dl
πΓ] "
[0024]其中,Φ]是虛擬球形光源的總能量,Pj為虛擬球形光源的球心位置,rj為虛擬球形光源的半徑,V(x, Pj)表示點X對虛擬球形光源球心的可見性系數,Ω ^表示以點X到虛擬球形光源球心P」的連線為母線,以&為底半徑的圓錐;f;為雙向反射分布函數,nx是點X所在采樣面的法線,L表示空間點I處的光線入射方向,ω表示空間點y的光線出射方向,I表不在點X處的光線入射方向,cosCnPji —I)表不光源的法向量nPj,光線入射方向的反方向的夾角余弦值,當coshpj,-1)值小于或等于O時,規定cos(npj;-l) 二 0。
[0025]在步驟2中,對于采樣面上的每個點,并行計算各個虛擬球形光源在該點的光照強度。在進行光照強度計算時,每個虛擬球形光源當作一個GPU著色器,對于每個點,各個虛擬球形光源同時進行GPU計算,從而使計算速度大幅提高。
[0026]步驟3具體方式為,為采樣面上所有點建立光照矩陣,利用光線裁剪算法計算出采樣面上各個點的光照強度,光照矩陣中每個元素表示一個虛擬球形光源在一個點上的光照強度。
[0027]其中,步驟3中的光照矩陣每一行表示各個虛擬球形光源在采樣面的一個點上的光照強度,每一列表不一個虛擬球形光源在米樣面上各個點上的光照強度。在建立光照矩陣之后利用 WALTER,B.,FERNANDEZ, S.,ARBREE,A.,BALA,K.,D0NIKIAN,M.,AND GREENBERG,D.P.2005.Lightcuts:ascalable approach to illuminat1n.ACM Transact1ns onGraphics24,3(Aug.),1098 - 1107.所提供的光線裁剪算法求得采樣面上各點的光照強度。
[0028]本發明將普通多光照模型中的虛擬點光源轉化為虛擬球形光源。每個球形光源影響其球體范圍內的點。通過針對每個球形光源和單個點的對應關系,建立照射模型,獲得每個球形光源對每個點的貢獻值。最后通過疊加每個點上的光照值,可以獲得完整場景的渲染效果。
[0029]與現有技術相比,本發明的有益效果為:
[0030](I)本發明將虛擬點光源轉化成虛擬球形光源,所有光能量被計算在球形范圍內,避免夾鉗處理引起的光能量丟失。
[0031](2)本發明的光照模型中,虛擬球形光源對點的影響以圓錐模型存在,即可以完整計算單個光源對單個點的貢獻,避免了全部通過漫反射進行處理而引起的光澤材料失真問題。
[0032](3)本發明在可見性計算中使用GPU陰影映射能力,提升了渲染計算效率。
[0033](4)本發明將每個虛擬球形光源當作一個GPU著色器,利用率GPU提供的計算能力,大大提升了渲染處理效率。
【專利附圖】
【附圖說明】
[0034]圖1為本發明的方法流程圖。
【具體實施方式】
[0035]現結合實施例及附圖對本發明進行進一步的解釋。
[0036]步驟I,根據場景建立各個虛擬球形光源。
[0037]使用雙向路徑追蹤法確定各個虛擬球形光源的球心坐標,然后根據場景中所確定的光的局部密度確定虛擬球形光源的規格:對于每個虛擬球形光源,以其球心坐標為搜索球心,預設的搜索步長,本實施例中為I像素,向周圍進行搜索,不斷按搜索步長擴展搜索半徑直至將指定數量的鄰近虛擬球形光源的球心包含在球體范圍內,本實施例中球體內需要包含8個鄰近虛擬球形光源的球心,然后搜索半徑乘以指定系數作為該虛擬球形光源的半徑,系數的指定需要綜合考慮渲染效果與計算復雜度因素。
[0038]步驟2,利用虛擬球形光源計算采樣面上各個點的光照強度。
[0039]對于虛擬球形光源,為其建立光照模型。假設球形光源的球心位置為Pp球形光源半徑為則虛擬球形光源即是以P」為中心,向以&為半徑的球形范圍內所有的向平面發射光能量的點,由光源發出的光能量通過最終聚集轉移到采樣平面上。對于空間點y,虛擬球形光源在方向ω上的輻射強度可以表示為:
[0040]L]plat(y, ω) = -^fr(y, Ij, ω)(||γ -pj|| < η)
nrj
[0041]其中是光源的總能量,Ttrf是球形光源內對空間點y進行照射的點的分布面積,指示函數(I Y-Pj I < rj)在符合條件I |y-pj I < r,-時值為1,不符合條件時值為O。
[0042]對上述輻射方程進行擴展,加入額外的光反彈因素,可以獲得采樣平面的點X在觀察方向V上的光照強度,該步驟可以通過以下公式表示:
[0043]L? (x, v) = f fr(x, I, v) cos(nx, l)LjPlat(y, -l)dl
Jh2
[0044]其中H2是采梓干面所在的上半球,nx是點X所在的采樣平面上的法線,cos (nx,I)表示I在nx方向上的分量。
[0045]當cos(nPj, -1)值小于或等于 O 時,規定cos(nPj, -1) = O。
[0046]將前述兩個公式進行合并,可以獲得完整的公式,表示球形光源在點X上形成的光照強度:
φ.r
[0047]L?(X, V) = ~2 fr(x, Iv) cos(nx, l)fr(y, ij,(0)(||y — Pj|| < rj)dl
Jilj
[0048]將H2替換為Ω j,Ω j表示從X到以球形光源中心所在點Pj,底半徑為r」的一個圓錐,光能量圓錐之外的分布為零,當X在球體范圍內時Ω j = H2,當X超出球體范圍時,指示函數(I Iy-Pjl I < rp 值為 O。
[0049]為解決光線追蹤法構建的多光源模型對光能量的遺漏,對以上公式進行修正:
[0050]虛擬球形光源的可見性被定義為采樣點X與光子位置P」之間的可見性。這樣就可以利用快速GPU陰影映射功能來計算可見性。
[0051]為對光線與球面相交處進行修正,將指示函數(I Iy-Pjl I <rj)被替換成余弦因子cos(np.,-l), V(x, Pj)表示點X對虛擬球形光源的球心Pj的可見性系數,可見時為1,不可見(被遮擋)時為O。
[0052]通過以上修正獲得如下公式:
φ,r
[0053](χ, V) = ~jV(x, Pj) fr(x, I, V) cos(nx, l)fr(pj, ij, -1) cos(np , -1) dl
πΓ) \
[0054]在計算光照強度時,每個虛擬球形光源當作一個GPU著色器,各個虛擬球形光源在每個點上的光照強度并行計算。
[0055]步驟3,為步驟I中各個虛擬球形光源模型建立矩陣,利用光線裁剪算法計算出采樣面上各個點的光照強度,得到最終的渲染結果。光照矩陣中每個元素表示一個虛擬球形光源在一個點上的光照強度。
[0056]為所有虛擬球形光源建立光照強度矩陣,光照強度矩陣中每一行表示各個虛擬球形光源在米樣面的一個點上的光照強度,每一列表不一個虛擬球形光源在米樣面上各個點上的光照強度。使用矩陣行列采樣法對所有光源在采樣面上的光照強度進行計算。
[0057]通過對光照強度矩陣中每行光照強度進行疊加,獲得采樣面上每個點受多光源照射的光照強度,獲得最終的完整場景渲染結果。
[0058]本發明利用虛擬球形光源,將點光源的光能量進行分散處理,對光澤表面有良好的支持,避免了場景失真。
【權利要求】
1.一種基于虛擬球形光源的多光源渲染方法,其特征在于,包括如下步驟: 步驟I,根據場景建立各個虛擬球形光源; 步驟2,計算每個虛擬球形光源在采樣面上單個點的光照強度; 步驟3,將每個點在所有虛擬球形光源照射下的光照強度進行疊加,得到最終的渲染結果O
2.如權利要求1所述基于虛擬球形光源的多光源渲染方法,其特征在于,步驟I具體包括: 步驟1-1,采用雙向路徑追蹤法確定各個虛擬球形光源模型的球心位置; 步驟1-2,根據場景中所設定的光的局部密度確定各個虛擬球形光源模型的半徑。
3.如權利要求2所述基于虛擬球形光源的多光源渲染方法,其特征在于,步驟1-2具體方法為,對于每個虛擬球形光源,將其球心作為搜索的球心,以預設的搜索步長作為初始搜索半徑向周圍進行搜索,不斷按搜索步長擴展搜索半徑,直至球體內包含預設數目的鄰近虛擬球形光源球心,將最終所得的搜索半徑乘以指定系數作為該虛擬球形光源的半徑,其中包含在球體內的鄰近虛擬球形光源球心數目根據場景所設定的光的局部密度設定。
4.如權利要求1或2所述基于虛擬球形光源的多光源渲染方法,其特征在于,步驟2中,對于采樣面上的點X,其在觀察方向V上的光照強度I^(x, V)的計算公式為:
其中,φ]是虛擬球形光源的總能量,Pj為虛擬球形光源的球心位置,rj為虛擬球形光源的半徑,y表示任意一個空間點,Ω j表示以點X到虛擬球形光源球心P」的連線為母線,以rj為底半徑的圓錐;f;為雙向反射分布函數,nx是點X所在采樣面的法線,Ij表示空間點y處的光線入射方向,ω表示空間點y的光線出射方向,I表示在點X處的光線入射方向,指示函數(I Iy-PjI I < rj)在I Iy-PjI I < rj時值為1,否則值為O。
5.如權利要求1或2所述基于虛擬球形光源的多光源渲染方法,其特征在于,步驟2中,對于采樣面上的點X,其在觀察方向V上的光照強度g(X, V)的計算公式為:
其中,Φ]是虛擬球形光源的總能量,Pj為虛擬球形光源的球心位置,rj為虛擬球形光源的半徑,V(x, Pj)表示點X對虛擬球形光源球心的可見性系數,Ω ^表示以點X到虛擬球形光源球心P」的連線為母線,以&為底半徑的圓錐;f;為雙向反射分布函數,nx是點X所在采樣面的法線,Ij表示空間點I處的光線入射方向,ω表示空間點y的光線出射方向,I表不在點X處的光線入射方向,cos(np.; 表不光源的法向量,光線入射方向的反方向的夾角余弦值,當cos(nPj,-l)值小于ο時,規定cos(npj,-l) = O。
6.如權利要求1或2所述基于虛擬球形光源的多光源渲染方法,其特征在于,在步驟2中,對于采樣面上的每個點,并行計算各個虛擬球形光源在該點的光照強度。
7.如權利要求1或2所述基于虛擬球形光源的多光源渲染方法,其特征在于,步驟3具體方式為,為采樣面上所有點建立光照矩陣,利用光線裁剪算法計算出采樣面上各個點的光照強度,光照矩陣中每個元素表示一個虛擬球形光源在一個點上的光照強度。
【文檔編號】G06T15/60GK104200512SQ201410369791
【公開日】2014年12月10日 申請日期:2014年7月30日 優先權日:2014年7月30日
【發明者】張根源 申請人:浙江傳媒學院