Pbrt的核心是積分形式的光照模型,該模型最終決定了待渲染圖像各像素的顏色值涯曲。在pbrt中求解光照模型的部分被稱為積分器。關(guān)于積分器的分類可以有多種劃分方式。按光線在僅在物體表面發(fā)生變化還是在三維區(qū)域內(nèi)發(fā)生變化括蝠,可以劃分為表面積分器和體積分器。按光照模型中的輸入僅考慮直接來自光源和自發(fā)光物體的光線饭聚,還是同時(shí)還考慮物體反射產(chǎn)生的間接光照的光線忌警,可以劃分為直接光照積分器和一般光照積分器(或許書中后面部分會(huì)有更準(zhǔn)確的名稱)。為了由淺入深地介紹積分器的基礎(chǔ)知識(shí)和具體實(shí)現(xiàn)秒梳,首先從最簡(jiǎn)單的僅考慮表面散射的直接光照積分器開始介紹法绵。
按照pbrt的慣例箕速,對(duì)于多種具體的對(duì)象,首先要建立它們統(tǒng)一的接口朋譬。這里的接口就是積分器接口弧满。該接口僅定義兩個(gè)非必須實(shí)現(xiàn)的接口函數(shù)。第一個(gè)接口函數(shù)是積分工作前的預(yù)處理函數(shù)此熬,該函數(shù)暫時(shí)未被用到庭呜。第二個(gè)接口函數(shù)是調(diào)用采樣對(duì)象,生成一維和二維隨機(jī)均勻采樣結(jié)果犀忱。在積分器接口的基礎(chǔ)上募谎,定義了表面積分器接口。表面積分器接口中定義了一個(gè)必須被實(shí)現(xiàn)的接口函數(shù)阴汇。該接口函數(shù)即為處理光照模型的函數(shù)数冬,它既要能處理反射模型,又要能處理透射模型搀庶。在表面積分器接口的基礎(chǔ)上拐纱,實(shí)現(xiàn)了直接光照積分器。
總體上哥倔,直接光照積分器實(shí)現(xiàn)了兩種采樣策略秸架。第一種采樣策略是針對(duì)某個(gè)著色點(diǎn),考慮整個(gè)場(chǎng)景中全部的光源咆蒿,對(duì)每個(gè)光源都進(jìn)行多次采樣东抹,多個(gè)光源產(chǎn)生的積分結(jié)果求和后作為該點(diǎn)的輸出。第二種策略是針對(duì)某個(gè)著色點(diǎn)沃测,僅考慮一個(gè)光源的積分結(jié)果作為該點(diǎn)的輸出缭黔,當(dāng)整個(gè)場(chǎng)景中有多個(gè)光源時(shí),隨機(jī)選擇其中一個(gè)蒂破。第一種策略適合于對(duì)單個(gè)著色點(diǎn)僅需較少采樣的情況馏谨,第二種策略適合于對(duì)于單個(gè)著色點(diǎn)需要較多采樣的情況。
直接光照積分器雖然是最簡(jiǎn)單的積分器附迷,但它同樣也是對(duì)BSDF函數(shù)和輻亮度函數(shù)的乘積進(jìn)行積分惧互。后續(xù)傾向于使用多重重要性采樣的效率提升策略,所以同時(shí)需要對(duì)BSDF函數(shù)和輻亮度函數(shù)進(jìn)行采樣挟秤,即需要實(shí)現(xiàn)積分器接口中的第二個(gè)接口函數(shù)壹哺,即預(yù)先生成兩者采樣所需的一維和二維均勻分布隨機(jī)變量。當(dāng)直接光照積分器采用第一種策略時(shí)艘刚,讀取場(chǎng)景中每個(gè)光源所需的采樣數(shù)量管宵,然后由采樣對(duì)象生成并統(tǒng)一存儲(chǔ)該數(shù)量的一維和二維均勻分布隨機(jī)變量,并返回在全部隨機(jī)變量中的尋址地址。由于積分對(duì)象是BSDF函數(shù)和輻亮度函數(shù)的乘積箩朴,因而BSDF函數(shù)的采樣數(shù)量與對(duì)應(yīng)光源的采樣數(shù)量相同岗喉。當(dāng)直接光照積分器采用第二種策略時(shí),僅需對(duì)一個(gè)光源生成并存儲(chǔ)一維和二維均勻分布隨機(jī)變量炸庞。不過書中此處生成的隨機(jī)變量數(shù)量為1钱床,個(gè)人感覺并不合理。另外還需要額外生成一個(gè)一維隨機(jī)變量埠居,用于隨機(jī)選擇場(chǎng)景中的哪個(gè)光源查牌。此外,關(guān)于這兩種策略中的采樣數(shù)量滥壕,可能還會(huì)根據(jù)采樣方法做出調(diào)整纸颜。
具體實(shí)現(xiàn)直接光照積分的第一種策略時(shí),首先需要讀取采樣對(duì)象中預(yù)先存儲(chǔ)的隨機(jī)變量绎橘,形成BSDF函數(shù)和光源的采樣所需隨機(jī)變量胁孙。若無預(yù)先存儲(chǔ)值則直接利用隨機(jī)數(shù)對(duì)象生成,且
采樣次數(shù)為1次称鳞。采樣所需的隨機(jī)變量準(zhǔn)備好后涮较,就可以計(jì)算該次采樣的出射輻亮度值了。然后對(duì)每個(gè)光源多次采樣的輻亮度的均值求和作為積分器最終的輸出冈止。
具體實(shí)現(xiàn)直接光照積分的第二種策略時(shí)狂票,首先通過額外生成的一個(gè)一維隨機(jī)變量,確定選擇哪個(gè)光源靶瘸。若該隨機(jī)變量不存在苫亦,則利用隨機(jī)數(shù)對(duì)象生成隨機(jī)變量進(jìn)行光源選擇毛肋。然后采用類似于第一種策略的方式怨咪,求解該光源多次采樣的輻亮度均值。該均值乘以場(chǎng)景中的光源總數(shù)作為最終輸出润匙。乘以場(chǎng)景中的光源總數(shù)的原因是在考慮選擇單一光源積分的隨機(jī)特性后诗眨,使該策略的期望值等于選擇所有光源進(jìn)行積分的結(jié)果。
在處理由BSDF函數(shù)和輻亮度函數(shù)乘積構(gòu)成的待積分函數(shù)時(shí)孕讳,很難找到滿足該乘積的概率分布匠楚。加之BSDF函數(shù)的入射光線范圍和輻亮度函數(shù)的光線范圍可能一個(gè)很大,另一個(gè)很小厂财,這種情況下僅使用二者中某一個(gè)形狀相同的概率分布芋簿,將會(huì)在總的結(jié)果中產(chǎn)生較大偏差。所以使用了多重采樣策略璃饱。首先按輻亮度函數(shù)進(jìn)行重要性采樣与斤。根據(jù)采樣對(duì)象生成一個(gè)從光源到著色點(diǎn)的光線,光線包含方向及輻亮度信息。然后考慮空間透射率后對(duì)輻亮度進(jìn)行衰減撩穿。將生成的光線方向代入BSDF函數(shù)磷支,再與衰減后的輻亮度函數(shù)以及輻亮度采樣的概率密度的倒數(shù)相乘。所得結(jié)果再乘以多重重要性采樣的權(quán)重系數(shù)食寡,就得到了多重重要性采樣中按輻亮度函數(shù)采樣的部分雾狈。在這一過程中,當(dāng)光源為delta型光源時(shí)抵皱,不需要使用重要性采樣善榛。其次,按照BSDF函數(shù)進(jìn)行重要性采樣呻畸,此時(shí)已默認(rèn)光源為非delta型光源锭弊。當(dāng)BSDF函數(shù)表示的為鏡面反射時(shí),無需使用重要性采樣擂错。當(dāng)BSDF函數(shù)采樣得到的入射光線的方向味滞,對(duì)應(yīng)光源的采樣概率密度為0時(shí),則按BSDF函數(shù)進(jìn)行重要性采樣的得到的出射輻亮度效用為0.當(dāng)概率密度不為0時(shí)钮呀,還需要區(qū)分是無窮大光源還是其他光源剑鞍。區(qū)分方法是判斷光線與光源是否相交。當(dāng)為無窮大光源時(shí)爽醋,根據(jù)光線對(duì)象返回輻亮度值蚁署。當(dāng)為其他光源時(shí),根據(jù)光線方向返回輻亮度值蚂四。然后再考慮透射衰減和權(quán)重光戈,得到多重重要性采樣中按BSDF函數(shù)采樣的部分。上述兩部分相加得到多重重要性采樣的最終輸出遂赠。