本文翻譯自Scratchapixel 3.0[1],是一個(gè)關(guān)于計(jì)算機(jī)圖形學(xué)的系統(tǒng)性的學(xué)習(xí)教程。如果有誤,歡迎在評論區(qū)討論。
由伊本·海塔姆描述的現(xiàn)象解釋了我們看到物體的原因。基于他的觀察,可以得出兩點(diǎn)有趣的評論:首先,沒有光,我們什么也看不見;其次,如果我們環(huán)境中沒有物體,我們也看不到光。如果我們在星際空間旅行,這通常就會(huì)發(fā)生。如果我們周圍沒有物質(zhì),我們只能看到黑暗,即使光子潛在地穿過那個(gè)空間(當(dāng)然,如果有光子,它們必須來自某個(gè)地方。如果你直接看它們,如果它們進(jìn)入你的眼睛,你會(huì)看到它們反射或發(fā)射的物體的圖像)。
正向追蹤

圖1:光源發(fā)射的無數(shù)光子撞擊綠色球體,但只有一個(gè)光子會(huì)到達(dá)眼睛表面。
如果我們試圖在計(jì)算機(jī)生成的圖像中模擬光與物體的相互作用過程,那么還有另一個(gè)物理現(xiàn)象需要我們注意。相對于物體反射的光線總數(shù),只有少數(shù)幾條光線會(huì)到達(dá)我們眼睛的表面。舉個(gè)例子,想象我們創(chuàng)建了一個(gè)只發(fā)射一束光子的光源。現(xiàn)在讓我們看看這個(gè)光子會(huì)發(fā)生什么。它從光源發(fā)射出來,沿著直線路徑行進(jìn),直到撞到我們物體的表面。忽略光子吸收,我們可以假設(shè)光子會(huì)以隨機(jī)方向反射。如果光子撞到我們眼睛的表面,我們就會(huì)"看到"光子反射的點(diǎn)(圖 1)。
你聲稱“照亮區(qū)域或物體上的每個(gè)點(diǎn)都會(huì)向每個(gè)方向輻射(反射)光線”。這難道不與“隨機(jī)”相矛盾嗎?
解釋為什么光會(huì)在每個(gè)可能的方向上反射超出了本課程的范圍(可以參考光物質(zhì)相互作用課程獲得完整的解釋)。然而,簡單回答你的問題:是和否。當(dāng)然,在自然界中,真實(shí)的光子會(huì)被真實(shí)的表面以特定的方向反射(因此不是隨機(jī)的),該方向由幾何拓?fù)浜凸庾釉诮稽c(diǎn)處的入射方向所定義。如果我們用肉眼觀察一個(gè)漫反射物體的表面,它看起來很光滑。但是如果我們用顯微鏡觀察它,我們會(huì)發(fā)現(xiàn)微觀結(jié)構(gòu)可能更加復(fù)雜和光滑。左側(cè)的圖像是不同放大比例下的紙張照片。光子非常小,微觀特征和形狀會(huì)反射在物體的表面上。如果一束光線照射在這個(gè)漫反射物體的表面上,光束內(nèi)的光子將會(huì)撞擊微觀結(jié)構(gòu)的不同部位,因此會(huì)以許多不同的方向反射。我們可以說,這些方向幾乎涵蓋了“每個(gè)可能的方向”。如果我們想要模擬光子和微觀結(jié)構(gòu)之間的相互作用,我們就會(huì)以隨機(jī)方向發(fā)射光線,統(tǒng)計(jì)學(xué)上來說,這與它們被反射到每個(gè)可能的方向相同。
有時(shí),材料在宏觀層面上的結(jié)構(gòu)會(huì)以特定的方向反射光線,這被描述為各向異性反射,并將在光材料相互作用課程中詳細(xì)解釋。材料的宏觀結(jié)構(gòu)也會(huì)導(dǎo)致不尋常的視覺效果,例如我們可以在蝴蝶的翅膀上觀察到的虹彩效應(yīng)。

現(xiàn)在我們可以從計(jì)算機(jī)圖形學(xué)的角度來看待這種情況。首先,我們用由像素組成的圖像平面代替我們的眼睛。在這種情況下,發(fā)射的光子將會(huì)撞擊圖像平面上的像素之一,將該點(diǎn)的亮度增加到大于零的值。這個(gè)過程會(huì)重復(fù)多次,直到所有像素都被調(diào)整,創(chuàng)建出一個(gè)計(jì)算機(jī)生成的圖像。這種技術(shù)被稱為「正向光線追蹤」,因?yàn)槲覀儚墓庠吹接^察者追蹤光子的路徑。
然而,你看到這種方法存在潛在問題嗎?
問題如下:在我們的示例中,我們假設(shè)反射光子總是與眼睛表面相交。實(shí)際上,光線會(huì)以每個(gè)可能的方向反射,每個(gè)方向都有非常非常小的可能性擊中眼睛。我們需要從光源投射無數(shù)光子,才能找到只有一個(gè)光子會(huì)擊中眼睛的情況。這就是自然界中的工作方式,因?yàn)闊o數(shù)的光子以光速沿著所有方向傳播。在計(jì)算機(jī)世界中,模擬許多光子與場景中的物體相互作用不是一個(gè)實(shí)際的解決方案,原因我們將在接下來的解釋中說明。
你可能會(huì)想:“我們需要隨機(jī)發(fā)送光子嗎?既然我們知道眼睛的位置,為什么不只是將光子沿著那個(gè)方向發(fā)送,并查看它是否通過了圖像中的像素?”這是一種可能的優(yōu)化。但是,我們只能針對某些類型的材料使用這種方法。在后面關(guān)于光與物質(zhì)相互作用的課程中,我們將解釋方向性對于漫反射表面并不重要。這是因?yàn)閾糁新瓷浔砻娴墓庾涌梢栽谝越佑|點(diǎn)處法線為中心的半球內(nèi)的任何方向上反射。但是,假設(shè)表面是一面鏡子并且沒有漫反射特性。在這種情況下,光線只能反射成一個(gè)確切的方向,即鏡像方向(我們稍后將學(xué)習(xí)如何計(jì)算)。對于這種類型的表面,如果光子應(yīng)該遵循鏡像方向,我們不能人為地改變光子的方向,這意味著這種解決方案可能更令人滿意。
眼睛只是一個(gè)點(diǎn)接收器,還是有一個(gè)表面積?即使接收面非常小,它仍然具有面積,因此比一個(gè)點(diǎn)更大。如果接收面積大于一個(gè)點(diǎn),則表面肯定會(huì)接收到不止一個(gè)光線中的 1 個(gè)。
讀者是正確的。眼睛不是點(diǎn)接收器,而是表面接收器,就像相機(jī)中的膠片或 CCD 一樣。因?yàn)檫@個(gè)課程只是光線追蹤算法的介紹,所以這個(gè)主題需要詳細(xì)解釋。相機(jī)和人眼都有一個(gè)透鏡,將反射的光線聚焦在其后面的表面上。如果透鏡的半徑非常?。ㄟ@在技術(shù)上不是這種情況),則從物體反射的光只能來自一個(gè)方向。這就是針孔相機(jī)的工作原理。我們將在相機(jī)課程中討論它們。
即使我們決定使用這種方法,只使用由漫反射物體組成的場景,我們?nèi)匀恍枰獛椭N覀兛梢詫墓庠聪驁鼍爸型渡涔庾拥倪^程可視化,就好像我們在物體表面噴灑光線(或小顆粒的顏料)。如果噴霧不夠密集,則某些區(qū)域?qū)o法均勻照亮。
想象一下試圖用白色記號(hào)筆在黑色紙張上制作點(diǎn)來繪制茶壺(將每個(gè)點(diǎn)視為光子)。如下圖所示,只有少數(shù)光子與茶壺物體相交,留下許多未覆蓋的區(qū)域。隨著點(diǎn)數(shù)的增加,光子的密度增加,直到茶壺“幾乎”完全被光子覆蓋,使物體更容易識(shí)別。

但是,即使發(fā)射 1000 個(gè)光子,甚至是 X 倍以上,也不能保證我們的物體表面被光子覆蓋。這是這種技術(shù)的一個(gè)重大缺點(diǎn)。換句話說,我們必須讓程序運(yùn)行,直到我們決定它已經(jīng)向物體表面噴灑足夠的光子才能得到準(zhǔn)確的表示。這意味著我們必須觀察圖像在被渲染時(shí)決定何時(shí)停止應(yīng)用程序。在生產(chǎn)環(huán)境中,這是不可能的。正如我們將看到的,光線跟蹤器中最昂貴的任務(wù)是找到光線和幾何體的交點(diǎn)。從光源創(chuàng)建許多光子不是問題,但在場景中找到它們的所有會(huì)議將是難以承受的昂貴的。
結(jié)論:「正向光線跟蹤」(或因?yàn)槲覀儚墓庠窗l(fā)射光線而稱為「光線跟蹤」)使得在計(jì)算機(jī)上模擬光線如何在自然中傳播成為技術(shù)上可能。然而,如上所述,這種方法可能更有效和實(shí)用。在 1980 年發(fā)表的一篇名為“用于陰影顯示的改進(jìn)照明模型”的開創(chuàng)性論文中,圖形學(xué)早期研究者之一的 Turner Whitted 寫道:
“在一種明顯的光線跟蹤方法中,從光源發(fā)出的光線沿其路徑追蹤,直到它們擊中觀察者。由于只有少數(shù)光線會(huì)到達(dá)觀察者,因此這種方法可能更好。在 Appel 提出的第二種方法中,光線沿相反的方向從觀察者到場景中的物體追蹤?!?/p>
現(xiàn)在,我們將看看 Whitted 談到的另一種模式。
反向追蹤

圖2:反向光線跟蹤。我們從眼睛到球體上的一個(gè)點(diǎn)跟蹤一條光線,然后從該點(diǎn)到光源跟蹤一條光線。
我們不是從光源到接收器(如我們的眼睛)追蹤光線,而是從接收器到物體反向追蹤光線。因?yàn)檫@個(gè)方向與自然界中的光線傳播方向相反,所以被稱為「反向光線追蹤」或「眼睛追蹤」,因?yàn)槲覀儚难劬Φ奈恢蒙涑龉饩€(圖 2)。這種方法提供了一種方便的解決方案,以彌補(bǔ)前向光線追蹤的缺陷。由于我們的模擬不能像自然界一樣快速和完美,因此我們必須妥協(xié),從眼睛射入場景中的光線。如果光線擊中一個(gè)物體,我們通過從擊中點(diǎn)向場景中的光源投射另一條光線(稱為光線或陰影光線)來確定它接收到多少光。偶爾,這個(gè)“光線”會(huì)被場景中的另一個(gè)物體遮擋,這意味著我們最初的擊中點(diǎn)在陰影中,它不會(huì)從光源接收任何照明。因此,我們不將這些光線稱為光線,而是稱為「陰影光線」。在 CG 文獻(xiàn)中,我們從眼睛(或相機(jī))射入場景中的第一條光線稱為「主光線」、「可見性光線」或「相機(jī)光線」。
在本課程中,我們使用前向追蹤來描述從光源發(fā)射光線的情況,與反向追蹤相反,其中從相機(jī)射出光線。然而,一些作者使用相反的術(shù)語。前向追蹤意味著從相機(jī)射出光線,因?yàn)樗?CG 中最常用的路徑追蹤技術(shù)。為避免混淆,你也可以使用更明確的術(shù)語光線追蹤和眼睛追蹤。這些術(shù)語更常用于雙向路徑追蹤的上下文中(請參見光傳輸部分)。
結(jié)論
在計(jì)算機(jī)圖形學(xué)中,從光源或從眼睛射出光線的概念被稱為「路徑追蹤」。也可以使用光線追蹤這個(gè)術(shù)語,但是路徑追蹤的概念表明,這種制作計(jì)算機(jī)生成圖像的方法依賴于從光源到相機(jī)(或相反)的路徑。通過以物理上真實(shí)的方式這樣做,我們可以輕松模擬光學(xué)效應(yīng),例如焦散或場景中另一個(gè)表面反射的光線(間接照明)。這些主題將在其他課程中討論。
-
光源
+關(guān)注
關(guān)注
3文章
745瀏覽量
69952 -
算法
+關(guān)注
關(guān)注
23文章
4710瀏覽量
95404 -
光線追蹤
+關(guān)注
關(guān)注
0文章
185瀏覽量
21824
發(fā)布評論請先 登錄
遞歸性質(zhì)和大數(shù)目追蹤光線解決方案

光線追蹤技術(shù)學(xué)習(xí)資料
光線追蹤技術(shù)的作用
光線追蹤技術(shù)最近又成為了行業(yè)的焦點(diǎn)
NVIDIA OptiX光線追蹤引擎的功能特性
基于光線追蹤的渲染算法實(shí)現(xiàn)

評論