光線追蹤算法呕寝、路徑追蹤算法都屬于全局光照算法。簡(jiǎn)單的講婴梧,這些算法都是既考慮直接光照的作用效果下梢,又考慮經(jīng)過(guò)反射和透射所產(chǎn)生的間接光照的作用效果。這些算法都是計(jì)算量非常大的算法塞蹭,難以在現(xiàn)有的硬件算力的基礎(chǔ)上實(shí)時(shí)渲染孽江。實(shí)時(shí)全局光照算法針對(duì)這一困難,在對(duì)全局光照算法進(jìn)行一定的優(yōu)化和近似后番电,努力是全局光照算法能夠?qū)崟r(shí)進(jìn)行岗屏。它優(yōu)化和近似的基本思路是在正式渲染之前,跟蹤從場(chǎng)景中各光源發(fā)出的光線漱办,在光線與物體的交點(diǎn)處建立包含入射輻亮度信息的虛擬光源这刷,換言之就是對(duì)間接光照的作用效果進(jìn)行預(yù)計(jì)算,并把間接光照的產(chǎn)生點(diǎn)視作虛擬光源娩井,存儲(chǔ)相關(guān)的輻亮度信息暇屋。在正式渲染時(shí),不再使用路徑追蹤算法洞辣,而是采用直接光照模型咐刨,遍歷場(chǎng)景中的所有光源和虛擬光源昙衅,計(jì)算著色點(diǎn)的出射輻亮度。個(gè)人理解定鸟,如果只是渲染單張圖片绒尊,該方法與路徑追蹤算法的計(jì)算量總體相當(dāng),并不具備實(shí)時(shí)性仔粥。此處的實(shí)時(shí)性應(yīng)該針對(duì)的是能夠?qū)崟r(shí)渲染動(dòng)畫杆兵,因?yàn)橥瓿深A(yù)處理后磺送,正式渲染階段該方法相對(duì)于路徑跟蹤算法的計(jì)算量大大降低。當(dāng)然這里也存在一個(gè)問(wèn)題安聘,動(dòng)畫中必然存在變換的物體华糖,這些物體就會(huì)使得光線傳輸?shù)淖饔眯Чc預(yù)計(jì)算時(shí)的效果存在差異麦向。
在pbrt中實(shí)現(xiàn)實(shí)時(shí)全局光照時(shí)定義了光源集合數(shù)量和光源跟蹤路徑數(shù)量。在預(yù)處理階段客叉,可以產(chǎn)生多個(gè)光源集合诵竭,每個(gè)集合中產(chǎn)生相同數(shù)量的光源跟蹤路徑,每個(gè)光源跟蹤路徑再產(chǎn)生若干個(gè)虛擬光源兼搏。正式渲染時(shí)卵慰,可以選擇某個(gè)或某幾個(gè)光源集合中的虛擬光源。單純從選擇光源集合數(shù)量的角度看佛呻,數(shù)量少時(shí)所形成的圖像的噪聲往往會(huì)比數(shù)量多時(shí)的噪聲小裳朋。在具體生成每個(gè)光源集合中的光源跟蹤路徑時(shí),沒(méi)有對(duì)光源按集合進(jìn)行劃分吓著,事實(shí)上生成的任何一條光源跟蹤路徑的方式都是相同的鲤嫡。在預(yù)處理階段,可能會(huì)存在光線路徑上相鄰點(diǎn)距離過(guò)近绑莺,通過(guò)積分函數(shù)中與距離倒數(shù)平方有關(guān)的部分暖眼,即幾何項(xiàng)部分,使虛擬光源亮度過(guò)大纺裁。對(duì)于這種情況诫肠,設(shè)定一個(gè)關(guān)于幾何項(xiàng)的閾值,當(dāng)超過(guò)閾值時(shí)对扶,使用不同的采樣方式区赵,主要是采樣數(shù)量不同。在預(yù)處理階段浪南,使用了近似俄羅斯輪盤賭的終止策略笼才,并設(shè)定了終止時(shí)的光源輻亮度閾值,低于該閾值的光線則不再產(chǎn)生新的虛擬光源络凿。另外骡送,對(duì)于生成光源的過(guò)程中的鏡面反射次數(shù)也設(shè)定了一個(gè)最大值昂羡,當(dāng)超過(guò)該最大值后,該光線不再產(chǎn)生新的虛擬光源摔踱。上述兩組與終止策略有關(guān)的變量虐先,前者很好理解,對(duì)于后者書中沒(méi)有給出解釋派敷。個(gè)人理解是鏡面反射產(chǎn)生的光線的范圍是非常小的蛹批,經(jīng)歷較多次鏡面反射后,從全部場(chǎng)景看篮愉,該光線的作用范圍將非常小腐芍,對(duì)全局的光照效果影響很小,因而就不再產(chǎn)生新的虛擬光源了试躏。在初始化階段猪勇,除了按雙向路徑追蹤算法生成光源所需的采樣需求外,還需要對(duì)選擇哪個(gè)光源以及幾何項(xiàng)超過(guò)前述閾值后的采樣策略提供采樣器颠蕴。