本篇將介紹pbrt中實(shí)現(xiàn)實(shí)時(shí)全局光照算法中的創(chuàng)建虛擬光源的整個(gè)流程。
(1)生成創(chuàng)建虛擬光源所用的每條光線采樣所需的隨機(jī)變量。所需隨機(jī)變量的組數(shù)等于光線數(shù)目蚓挤,即光源集合數(shù)和每個(gè)集合中的光線路徑數(shù)思犁。每一組涉及選擇哪個(gè)光源,光源的哪個(gè)子表面歉摧,光源表面的位置和光線方向等四個(gè)方面艇肴。生成方法采用低偏差采樣的方法。做好該準(zhǔn)備工作后叁温,就可以采用循環(huán)方式再悼,針對(duì)每條光線生成虛擬光源。
(2)針對(duì)某條光線膝但,生成其路徑中的第一段冲九。以每個(gè)光源的發(fā)光強(qiáng)弱為權(quán)重,按一維均勻常量分布進(jìn)行采樣跟束,選擇產(chǎn)生該光線的光源莺奸。然后利用前面所準(zhǔn)備的隨機(jī)變量,對(duì)光源進(jìn)行采樣冀宴,得到出射光線灭贷,包括出射光線的起點(diǎn),方向略贮,起點(diǎn)處的法線方向甚疟,出射方向以立體角為基準(zhǔn)的概率密度以及光線的輻亮度。然后考慮輻亮度在后續(xù)過(guò)程中使用時(shí)系數(shù)逃延,將其進(jìn)行修正览妖,形成修正后的輻亮度。具體包括乘以法線與出射方向夾角的余弦值真友,除以出射方向以立體角為基準(zhǔn)的概率密度和該光源的權(quán)重的乘積黄痪。
(3)生成一個(gè)虛擬光源,并生成路徑的下一段盔然。在生成虛擬光源前桅打,還考慮了傳播介質(zhì)對(duì)輻亮度的衰減作用,對(duì)輻亮度進(jìn)行了進(jìn)一步的修正愈案。利用光線路徑的當(dāng)前段光線挺尾,確定與場(chǎng)景中物體的交點(diǎn),并得到交點(diǎn)處的BSDF站绪。然后計(jì)算該光線在交點(diǎn)處按BSDF產(chǎn)生的平均效果遭铺。該效果乘以前述進(jìn)一步修正后的輻亮度結(jié)果,作為虛擬光源的輻亮度參數(shù),該交點(diǎn)的位置和法線作為虛擬光源的位置和法線信息魂挂。然后用隨機(jī)數(shù)對(duì)象對(duì)BSDF函數(shù)進(jìn)行采樣甫题,生成路徑下一段的方向,概率密度及該方向的BSDF數(shù)值涂召。該數(shù)值也按后續(xù)使用時(shí)的系數(shù)進(jìn)行修正坠非。修正方式為乘以光線方向與法線夾角的余弦值,再除以概率密度果正。
(4)近似按俄羅斯輪盤(pán)賭的方式結(jié)束該路徑的虛擬光源生成過(guò)程炎码。將(3)中修正后的BSDF數(shù)值考慮下限1后,與一個(gè)0到1范圍內(nèi)的隨機(jī)數(shù)進(jìn)行比較秋泳。比較結(jié)果小于該數(shù)時(shí)潦闲,結(jié)束該路徑的虛擬光源生成過(guò)程。比較結(jié)果為其他情況時(shí)迫皱,將(3)中得到的進(jìn)一步修正后的輻亮度數(shù)值乘以修正后的BSDF數(shù)值類(lèi)似歸一化后的結(jié)果歉闰,得到路徑新一段光線的輻亮度數(shù)值。然后再根據(jù)交點(diǎn)位置舍杜,光線方向等信息新娜,生成路徑中的新一段光線對(duì)象。
對(duì)上述過(guò)程進(jìn)行幾點(diǎn)說(shuō)明既绩。第一,單獨(dú)為虛擬光源定義了一個(gè)類(lèi)还惠,其中主要存儲(chǔ)虛擬光源的位置饲握、法線和輻亮度參數(shù)。第二蚕键,虛擬光源存儲(chǔ)在一個(gè)二維vector中救欧,第一維度按光源集合進(jìn)行劃分,第二維度未按光線路徑進(jìn)行劃分锣光,直接生成一個(gè)就存儲(chǔ)一個(gè)笆怠。第三,采用近似俄羅斯輪盤(pán)賭的方式結(jié)束誊爹,產(chǎn)生的效果是具有較大反射率的表面蹬刷,路徑持續(xù)的可能性就高。這一點(diǎn)意味著并非按光線輻亮度的大小決定路徑延續(xù)的可能性频丘。按書(shū)中的介紹办成,能使路徑的亮度不變。