基于矩陣行列采樣進(jìn)行多光源渲染的方法
【專利摘要】本發(fā)明公開了一種基于矩陣行列采樣進(jìn)行多光源渲染的方法,包括如下步驟:步驟1,根據(jù)場景建立光照矩陣,所述光照矩陣中,每一列表示一個光源照射的所有采樣點(diǎn),每一行表示所有光源都進(jìn)行照射的一個采樣點(diǎn);步驟2,從多光源矩陣隨機(jī)抽取若干行,形成縮減矩陣;步驟3,將縮減矩陣分簇,對各簇進(jìn)行渲染;步驟4,將各簇合并,獲得原始的光照矩陣各行的光照強(qiáng)度之和,完成渲染。本發(fā)明將復(fù)雜場景下的多光源渲染問題轉(zhuǎn)化為矩陣行列采樣問題,通過對矩陣進(jìn)行分塊處理,提升了渲染效率,大大降低了內(nèi)存開銷,同時提升了渲染的實(shí)時性。可以應(yīng)用于對渲染有實(shí)時性和高質(zhì)量要求的場景。
【專利說明】基于矩陣行列采樣進(jìn)行多光源渲染的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明設(shè)計計算機(jī)圖形領(lǐng)域,尤其涉及一種基于矩陣行列采樣進(jìn)行多光源渲染的方法。
【背景技術(shù)】
[0002]對具有間接光照,高動態(tài)范圍環(huán)境光照,且具有多個直接光源的復(fù)雜場景進(jìn)行渲染是一項(xiàng)很有挑戰(zhàn)的工作。研究表明,這類問題可以通過轉(zhuǎn)化為多光源問題來獲得解決,即所有光源可以被轉(zhuǎn)化成點(diǎn)光源的集合,從而將間接光照的渲染問題轉(zhuǎn)化成一個多點(diǎn)光源問題。使用數(shù)以千計的點(diǎn)光源進(jìn)行直接渲染顯然是非常困難的。Lightcuts框架提供了一種可擴(kuò)展的方法來解決多點(diǎn)光源問題,利用可見性剔除算法通過基于CPU的光線追蹤器可以在幾分鐘內(nèi)完成計算。
[0003]在實(shí)際應(yīng)用中,光源與被照射物體存在相對位置關(guān)系,需要針對光源與物體的位置關(guān)系進(jìn)行渲染。在交互場景下,比如電影或結(jié)構(gòu)設(shè)計過程中,需要及時響應(yīng)光源與物體的相對位置變化,進(jìn)行實(shí)時渲染,這會帶來極大的運(yùn)算量?,F(xiàn)有方法是通過預(yù)處理來解決這個問題,即事先針對各種位置關(guān)系完成渲染,在交互階段直接讀取渲染結(jié)果。這樣把計算總量進(jìn)行了平攤。但是這種方法有兩個重大缺陷:1、占用大量內(nèi)存存儲預(yù)處理數(shù)據(jù)。2、使用這種方法的場景,只有光源或物體單方面可以活動。這大大限制了該方法的應(yīng)用范圍。
[0004]GPU作為專門處理圖像的硬件,內(nèi)部具有加速能力,包括陰影映射算法以及著色器等。為圖形渲染計算提供計算加速及并行處理能力。使用GPU進(jìn)行渲染處理,可以有效降低CPU開銷,同時提升渲染計算效率和效果。
【發(fā)明內(nèi)容】
[0005]本發(fā)明公開了一種基于矩陣行列采樣加速多光源渲染的方法,將復(fù)雜場景下的多光源渲染問題轉(zhuǎn)化為矩陣行列采樣問題。
[0006]一種基于矩陣行列采樣進(jìn)行多光源渲染的方法,包括如下步驟:
[0007]步驟1,根據(jù)場景建立光照矩陣,所述光照矩陣中,每一列表示一個光源照射的所有米樣點(diǎn),每一行表不所有光源都進(jìn)行照射的一個米樣點(diǎn);
[0008]步驟2,從多光源矩陣隨機(jī)抽取若干行,形成縮減矩陣;
[0009]步驟3,將縮減矩陣分簇,對各簇進(jìn)行渲染;
[0010]步驟4,將各簇合并,獲得原始的光照矩陣各行的光照強(qiáng)度之和,完成渲染。
[0011]在所述光照矩陣中,如采樣點(diǎn)i對于光源j來說是不可見的,則元素^]值為O。根據(jù)多光源場景構(gòu)建矩陣,將多光源光照采樣問題轉(zhuǎn)化為矩陣行列采樣問題。將光源和采樣點(diǎn)進(jìn)行整體處理,可以有效平攤整體渲染處理開銷。根據(jù)光照特性,矩陣A具有稀疏性。利用矩陣A的低秩性,從中隨機(jī)選擇行形成的rXn矩陣定義為R,矩陣R是完整圖像矩陣的一個縮小版本,稱為縮減矩陣。當(dāng)r足夠大時,縮減列就可以包含完整副本的足夠信息。即縮減矩陣R中包含完整矩陣A的所有信息,可以通過R恢復(fù)出完整矩陣A。
[0012]為了方便計算,可選的,在所述光照矩陣中,各元素為RGB標(biāo)量,在步驟2中縮減矩陣的各個元素轉(zhuǎn)換為使用RGB三元組的2-范數(shù)。
[0013]通過將矩陣A分成多個部分來分別進(jìn)行處理可以有效計算復(fù)雜度,并可以提升計算并行度。可選的,在步驟3中,將縮減矩陣進(jìn)行分簇的方法如下:
[0014]步驟3-1,首先設(shè)定分簇數(shù)目為L,使用采樣分簇將矩陣分為.L個簇;
[0015]步驟3-2,再使用自頂向下分離法完成全部分簇,得到L個簇。
[0016]其中L一般選擇3的倍數(shù)?;谡`差預(yù)期,確定分簇策略,使分簇引入的誤差最小。首先根據(jù)各列之間的影響關(guān)系,將相互聯(lián)系較大的列劃分到一個簇里。進(jìn)一步根據(jù)前面的分簇結(jié)果,在簇內(nèi)確定最佳分簇點(diǎn)。最終完成對縮減矩陣的分簇處理。利用GPU陰影投射功能計算列之間的影響因素,降低了 CPU開銷,提升了分簇處理效率。將分簇過程分成兩步進(jìn)行,提升了分簇處理速度,也保證了找到最佳分簇點(diǎn),降低分簇引入的誤差。
[0017]具體的分簇方法根據(jù)如下參考文獻(xiàn)進(jìn)行計算:SCHULMAN,L.J.1999.Clusteringfor edge-cost minimizat1n.Electronic Co lloquium on Computat1nalComplexity (ECCC) 6, 035.
[0018]在步驟3-1中,將采樣分簇將矩陣分為|l個簇的具體方法為:隨機(jī)選擇-L個列作為簇中心,將各列劃分到離其距離最近的簇中心所代表的簇中。
[0019]步驟3-1中,簇中心與列之間距離的計算公式如下:
I
[0020]d(x, y) — — IIxIl * HyII.(I — cos ( x, y ))
[0021]其中,X與y任意一者為簇中心,另一者為待比較距離的列。
[0022]其中C0S(X,y)為兩列所表示的向量之間的夾角。
[0023]步驟3中,對各簇渲染的方法為,在每個簇中選取代表列進(jìn)行渲染,獲得該列的光照采樣值,利用擴(kuò)展公式對該簇的代表列進(jìn)行擴(kuò)展,獲取該簇的光照強(qiáng)度,對于簇Ck,擴(kuò)展公式如下:
[0024](Y IlPm ID/Up"Il
[0025]其中,Pj為簇Ck的代表列,Pf:為著色后的PP符號I I I I為2-范數(shù)計算符號,Σηι€€? Ilpm Il表示簇Ck中所有列的2-范數(shù)之和。
[0026]在簇中選取完整一列作為代表,根據(jù)RGB顏色通道,分別進(jìn)行渲染處理,使用GPU上的著色器對該列進(jìn)行渲染,獲得該列的完整光照采樣值。
[0027]基于代表列的渲染結(jié)果,結(jié)合代表列縮減矩陣的光照強(qiáng)度分布比例,獲得縮減矩陣所覆蓋的所有完整列在RGB通道上的光照強(qiáng)度總和。完成每個簇的光照強(qiáng)度計算。
[0028]本發(fā)明將復(fù)雜場景下的多光源渲染問題轉(zhuǎn)化為矩陣行列采樣問題,通過對矩陣進(jìn)行分塊處理,提升了渲染效率,大大降低了內(nèi)存開銷,同時提升了渲染的實(shí)時性??梢詰?yīng)用于對渲染有實(shí)時性和高質(zhì)量要求的場景。
【具體實(shí)施方式】
[0029]現(xiàn)結(jié)合實(shí)施例對本發(fā)明進(jìn)行詳細(xì)的解釋。
[0030]步驟1,根據(jù)場景建立光照矩陣,所述光照矩陣中,每一列表示一個光源照射的所有米樣點(diǎn),每一行表不所有光源都進(jìn)行照射的一個米樣點(diǎn)。
[0031]對于具有m個采樣點(diǎn)以及η個光源的多光源場景,計算所有光源在每個采樣點(diǎn)上的貢獻(xiàn)之和即可獲得完整的場景渲染結(jié)果。該問題可以轉(zhuǎn)化為:一個規(guī)格為mXn的矩陣Α,其中任意元素Aij表示光源j在采樣點(diǎn)i上的貢獻(xiàn),各個元素以RGB標(biāo)量。將矩陣中的所有列進(jìn)行累加,就可以獲得每個光源在所有采樣點(diǎn)上的貢獻(xiàn)值。
[0032]根據(jù)以上公式計算完整矩陣的元素,計算復(fù)雜度為0(mn)。如果采樣點(diǎn)i對于光源j來說是不可見的,則Au為0,根據(jù)實(shí)際情況,實(shí)際矩陣中有大量O元素,即矩陣A是低秩的。從中隨機(jī)抽取r行形成縮減矩陣,當(dāng)r足夠大時,就可以包含完整矩陣的足夠信息,縮減矩陣可以看作是完整矩陣的抽樣版本,通過對縮減矩陣進(jìn)行渲染,可以獲得完整矩陣的渲染效果。將A的第j列用表示,全局多光源的渲染結(jié)果Σ Α可以用如下公式表示:
[0033]
η
IT a ?
ΔΑ Zj Ψ)
J=I
[0034]步驟2,從多光源矩陣隨機(jī)抽取若干行,形成縮減矩陣。
[0035]從矩陣A中隨機(jī)選擇r行,形成的rXn矩陣R,P ^是R的列,其中將R中的元素從以RGB標(biāo)量轉(zhuǎn)換為使用RGB三元組的2-范數(shù)(即范數(shù))進(jìn)行標(biāo)量,P j是完整列4Pj的抽樣版本,稱作縮減列,矩陣R是完整的光照矩陣的一個縮小版本。
[0036]通過將矩陣A分成多個部分來分別進(jìn)行處理可以將計算復(fù)雜度降低到0(m+n)。通過對各簇分別進(jìn)行處理后,合成完整矩陣,可以獲得近似結(jié)果。分簇方法影響了最終結(jié)果的誤差度,所以需要依據(jù)誤差估計來確定分簇方法,使最終結(jié)果的誤差最小。
[0037]步驟3,將縮減矩陣分簇,對各簇進(jìn)行渲染。
[0038]對于規(guī)格為mXn的矩陣A,將η列分為k個簇C1, C2,…,Q,縮減列的范數(shù)| | P」為簇Ck中光源j在整個圖像上光照強(qiáng)度。定義Sk:= EjeckIhII,Sk是簇Ck的全部光照強(qiáng)度的測量值,定義簇Ck的光照強(qiáng)度為可以獲得以下公式:
_9] χΑ:=^χ^φ4 = ^φι,.^11 Pj 11
[0040]其中第j列在簇Ck中的百分比為M , Xa代表矩陣A光照強(qiáng)度的估計量。
%
[0041]在每個簇中根據(jù)百分比選取來為縮減矩陣范數(shù)代表列。當(dāng)所有11 P」I > O時,
可以獲得以下等式:
[0042]
S-JI t iiI
E[Xa] = ^ E[Xa] = ^ ^.................1.............j j tPj = ^ ^ cPj = Σα
k=iJc=IjeCi k Il 剛 k= IjeCi
[0043]說明E[Xa]實(shí)際上是Σ A的無偏估計量。根據(jù)Ε[Χα] =Σ Α,完整矩陣A的誤差的評估公式可以表示為:
[0044]ε[| |χΑ- ? aI I2]
[0045]最有效的分簇法即是使得e[I |χΑ- ?α||2]的值最小化。
[0046]R是從矩陣A中隨機(jī)選擇行形成的rXn矩陣,由于X|是獨(dú)立的,Xk的預(yù)期誤差就是)?的預(yù)期誤差之和。將隨機(jī)變量Xk及其對應(yīng)評估值Σ κ標(biāo)記為X和X’,可以將E[| Xa- Σ A| I2]以如下公式表示:
[0047]Ε[||Χα-ΣαΙΙ2] = ^Ε[||Χ-Χ?|2]
[0048]將簇度量E [ I I Xk- Σ κ I 12]以如下公式表示:
LI
E[||xR 一 ErII2] = ^E [||x| -= ^E [|x| - E[x|]||r
kssiIrss 1
?Mt 丄1?--*** J,
「n_V iipiii IPjIl % η % n|f
I
IV1 V1 II II II It 11 —— l|2
= ζΣΣ "p“卜IIpiI1.1b^Pill
k=i ijeCk
[0050]6表示j||,巧表示I^jfe
[0051]通過以上推導(dǎo)獲得如下等式:
剛_丨4養(yǎng)辦疇脈
k=l IjcCjc
[0053]將任意兩個向量X和y之間的距離定義為¢1(?y)= -1M.IIyl.||χ — f||2e將任意兩列分別作為向量X和向量y,則d代表同一個簇中兩個光源的差異度量(即兩列之間的距離),可以通過如下公式表示:
I
[0054]d(x;y) — - ||χ||.\\y\\.(I — cos ( x;y ))
[0055]cos (x,y)=又τγ是X與y夾角的余弦值。兩個光源在圖像上的光照強(qiáng)度的貢獻(xiàn)可以通過它們之間的夾角來評估。
[0056]通過以上公式推導(dǎo),分簇引入的誤差可以通過以下公式表示:
L
[0057]^ ^ Wj * Wj * IN "xi If
k=l IjGCjc
[0058]其中X表示釆樣點(diǎn),w表示釆樣點(diǎn)對應(yīng)的權(quán)重,L表示簇數(shù),根據(jù)先前E[| Xe- Σ E| I2]的公式,定義X1:= PlsWi ;= Ipil0
[0059]根據(jù)以上誤差評估公式,分兩步對完整矩陣進(jìn)行分簇:
22
[0060]步驟3-1,使用采樣分簇將矩陣分為;L.部分,具體方法是:隨機(jī)選擇=L個點(diǎn)(此
SS
處每個點(diǎn)表示一列)作為簇中心,并依據(jù)距離d的計算公式將與簇中心最近的列劃分到這些簇中心所代表的簇中。定義a i為所有光源入射到點(diǎn)i的開銷之和:
n
[0061]OEj = ^ d ( Pi? Pj )
J=I
[0062]接著重新選擇各簇的中心點(diǎn),在進(jìn)行選擇時,在所有列中優(yōu)先選離得較遠(yuǎn)的點(diǎn),當(dāng)點(diǎn)i被選中時,設(shè)定其權(quán)重為1/Pi,其中Pi為點(diǎn)i (即第i列)光源開銷在a i的比例,如果點(diǎn)已經(jīng)被選過了,就將權(quán)重增加1/Pi。迭代進(jìn)行選擇,直到選中|L個點(diǎn),然后根據(jù)各列權(quán)重確定簇的中心點(diǎn),然后將所有點(diǎn)基于距離d進(jìn)行簇劃分。
2
[0063]步驟3-2,使用自頂向下分離法完成全部分簇?;谇耙徊酵瓿傻模籐.分簇,對已經(jīng)分簇的矩陣進(jìn)行進(jìn)一步分解,具體方法如下:在矩陣中隨機(jī)劃出一條線,每列的r行分為上下兩個部分,將點(diǎn)i(iiCj投射到隨機(jī)線上(r維空間),然后找到將線分成兩段的最佳點(diǎn),得到最終L個簇類。
[0064]通過以上步驟,可以實(shí)現(xiàn)對矩陣A的分成L個部分,并且使最終的計算結(jié)果誤差最小。
[0065]基于上一步驟的分解,對各簇進(jìn)行渲染。對矩陣A和縮減矩陣中的列按簇進(jìn)行劃分??梢垣@得L個簇C1, C2,…,Q。在每個簇中,選取完整一列作為代表,根據(jù)RGB顏色通道,分別進(jìn)行渲染處理,使用GPU上的著色器對該列進(jìn)行渲染,獲得該列的完整光照采樣值。
[0066]定義Pf為著色后的P」,根據(jù)公式GmeCkllpU)/||pi|對簇代表進(jìn)行擴(kuò)展。獲得每個簇在RGB通道上的光照強(qiáng)度總和。
[0067]在每個簇上使用該方法進(jìn)行處理,可以獲得各簇C1, C2,…,Cl的RBG光照強(qiáng)度。
[0068]步驟4,將各簇合并,獲得原始的光照矩陣各行的光照強(qiáng)度之和,完成渲染。
[0069]將前一步驟獲得的I個經(jīng)過渲染處理的簇進(jìn)行合并,可以獲得原始矩陣A的所有列之和,即獲得原始場景的多光源渲染結(jié)果。
[0070]本發(fā)明將復(fù)雜場景下的多光源渲染問題轉(zhuǎn)化為矩陣行列采樣問題,通過對矩陣進(jìn)行分塊處理,提升了渲染效率,大大降低了內(nèi)存開銷,同時提升了渲染的實(shí)時性。可以應(yīng)用于對渲染有實(shí)時性和高質(zhì)量要求的場景。
【權(quán)利要求】
1.一種基于矩陣行列采樣進(jìn)行多光源渲染的方法,其特征在于,包括如下步驟: 步驟1,根據(jù)場景建立光照矩陣,所述光照矩陣中,每一列表示一個光源照射的所有采樣點(diǎn),每一行表不所有光源都進(jìn)行照射的一個米樣點(diǎn); 步驟2,從多光源矩陣隨機(jī)抽取若干行,形成縮減矩陣; 步驟3,將縮減矩陣分簇,對各簇進(jìn)行渲染; 步驟4,將各簇合并,獲得原始的光照矩陣各行的光照強(qiáng)度之和,完成渲染。
2.如權(quán)利要求1所述基于矩陣行列采樣進(jìn)行多光源渲染的方法,其特征在于,在所述光照矩陣中,如采樣點(diǎn)i對于光源j來說是不可見的,則元素Au值為O。
3.如權(quán)利要求1所述基于矩陣行列采樣進(jìn)行多光源渲染的方法,其特征在于,在所述光照矩陣中,各元素為RGB標(biāo)量,在步驟2中縮減矩陣的各個元素轉(zhuǎn)換為使用RGB三元組的2-范數(shù)。
4.如權(quán)利要求1所述基于矩陣行列采樣進(jìn)行多光源渲染的方法,其特征在于,在步驟3中,將縮減矩陣進(jìn)行分簇的方法如下: 步驟3-1,首先設(shè)定分簇數(shù)目為L,使用采樣分簇將矩陣分為§ L個簇;
S 步驟3-2,再使用自頂向下分離法完成全部分簇,得到L個簇。
5.如權(quán)利要求4所述基于矩陣行列采樣進(jìn)行多光源渲染的方法,其特征在于,在步驟 2 23-1中,將采樣分簇將矩陣分為個簇的具體方法為:隨機(jī)選擇$L.個列作為簇中心,將各列劃分到離其距離最近的簇中心所代表的簇中。
6.如權(quán)利要求4所述基于矩陣行列采樣進(jìn)行多光源渲染的方法,其特征在于,步驟3-1中,簇中心與列之間距離的計算公式如下:
其中,X與y任意一者為簇中心,另一者為待比較距離的列。
7.如權(quán)利要求4所述基于矩陣行列采樣進(jìn)行多光源渲染的方法,其特征在于,步驟3中,對各簇渲染的方法為,在每個簇中選取代表列進(jìn)行渲染,獲得該列的光照采樣值,利用擴(kuò)展公式對該簇的代表列進(jìn)行擴(kuò)展,獲取該簇的光照強(qiáng)度,對于簇Ck,擴(kuò)展公式如下:
其中,P」為簇Ck的代表列,Pf為著色后的Pp符號Il Il為2-范數(shù)計算符號,XmeCiIIp^ ll.表示簇ck中所有列的2-范數(shù)之和。
【文檔編號】G06T15/50GK104200513SQ201410390703
【公開日】2014年12月10日 申請日期:2014年8月8日 優(yōu)先權(quán)日:2014年8月8日
【發(fā)明者】陸瓊, 張根源 申請人:浙江傳媒學(xué)院