本文翻譯自Scratchapixel 3.0[1],是一個關(guān)于計算機(jī)圖形學(xué)的系統(tǒng)性的學(xué)習(xí)教程。如果有誤,歡迎在評論區(qū)討論。
由伊本·海塔姆描述的現(xiàn)象解釋了我們看到物體的原因?;谒挠^察,可以得出兩點有趣的評論:首先,沒有光,我們什么也看不見;其次,如果我們環(huán)境中沒有物體,我們也看不到光。如果我們在星際空間旅行,這通常就會發(fā)生。如果我們周圍沒有物質(zhì),我們只能看到黑暗,即使光子潛在地穿過那個空間(當(dāng)然,如果有光子,它們必須來自某個地方。如果你直接看它們,如果它們進(jìn)入你的眼睛,你會看到它們反射或發(fā)射的物體的圖像)。
正向追蹤
圖1:光源發(fā)射的無數(shù)光子撞擊綠色球體,但只有一個光子會到達(dá)眼睛表面。
如果我們試圖在計算機(jī)生成的圖像中模擬光與物體的相互作用過程,那么還有另一個物理現(xiàn)象需要我們注意。相對于物體反射的光線總數(shù),只有少數(shù)幾條光線會到達(dá)我們眼睛的表面。舉個例子,想象我們創(chuàng)建了一個只發(fā)射一束光子的光源。現(xiàn)在讓我們看看這個光子會發(fā)生什么。它從光源發(fā)射出來,沿著直線路徑行進(jìn),直到撞到我們物體的表面。忽略光子吸收,我們可以假設(shè)光子會以隨機(jī)方向反射。如果光子撞到我們眼睛的表面,我們就會"看到"光子反射的點(圖 1)。
你聲稱“照亮區(qū)域或物體上的每個點都會向每個方向輻射(反射)光線”。這難道不與“隨機(jī)”相矛盾嗎?
解釋為什么光會在每個可能的方向上反射超出了本課程的范圍(可以參考光物質(zhì)相互作用課程獲得完整的解釋)。然而,簡單回答你的問題:是和否。當(dāng)然,在自然界中,真實的光子會被真實的表面以特定的方向反射(因此不是隨機(jī)的),該方向由幾何拓?fù)浜凸庾釉诮稽c處的入射方向所定義。如果我們用肉眼觀察一個漫反射物體的表面,它看起來很光滑。但是如果我們用顯微鏡觀察它,我們會發(fā)現(xiàn)微觀結(jié)構(gòu)可能更加復(fù)雜和光滑。左側(cè)的圖像是不同放大比例下的紙張照片。光子非常小,微觀特征和形狀會反射在物體的表面上。如果一束光線照射在這個漫反射物體的表面上,光束內(nèi)的光子將會撞擊微觀結(jié)構(gòu)的不同部位,因此會以許多不同的方向反射。我們可以說,這些方向幾乎涵蓋了“每個可能的方向”。如果我們想要模擬光子和微觀結(jié)構(gòu)之間的相互作用,我們就會以隨機(jī)方向發(fā)射光線,統(tǒng)計學(xué)上來說,這與它們被反射到每個可能的方向相同。
有時,材料在宏觀層面上的結(jié)構(gòu)會以特定的方向反射光線,這被描述為各向異性反射,并將在光材料相互作用課程中詳細(xì)解釋。材料的宏觀結(jié)構(gòu)也會導(dǎo)致不尋常的視覺效果,例如我們可以在蝴蝶的翅膀上觀察到的虹彩效應(yīng)。
現(xiàn)在我們可以從計算機(jī)圖形學(xué)的角度來看待這種情況。首先,我們用由像素組成的圖像平面代替我們的眼睛。在這種情況下,發(fā)射的光子將會撞擊圖像平面上的像素之一,將該點的亮度增加到大于零的值。這個過程會重復(fù)多次,直到所有像素都被調(diào)整,創(chuàng)建出一個計算機(jī)生成的圖像。這種技術(shù)被稱為「正向光線追蹤」,因為我們從光源到觀察者追蹤光子的路徑。
然而,你看到這種方法存在潛在問題嗎?
問題如下:在我們的示例中,我們假設(shè)反射光子總是與眼睛表面相交。實際上,光線會以每個可能的方向反射,每個方向都有非常非常小的可能性擊中眼睛。我們需要從光源投射無數(shù)光子,才能找到只有一個光子會擊中眼睛的情況。這就是自然界中的工作方式,因為無數(shù)的光子以光速沿著所有方向傳播。在計算機(jī)世界中,模擬許多光子與場景中的物體相互作用不是一個實際的解決方案,原因我們將在接下來的解釋中說明。
你可能會想:“我們需要隨機(jī)發(fā)送光子嗎?既然我們知道眼睛的位置,為什么不只是將光子沿著那個方向發(fā)送,并查看它是否通過了圖像中的像素?”這是一種可能的優(yōu)化。但是,我們只能針對某些類型的材料使用這種方法。在后面關(guān)于光與物質(zhì)相互作用的課程中,我們將解釋方向性對于漫反射表面并不重要。這是因為擊中漫反射表面的光子可以在以接觸點處法線為中心的半球內(nèi)的任何方向上反射。但是,假設(shè)表面是一面鏡子并且沒有漫反射特性。在這種情況下,光線只能反射成一個確切的方向,即鏡像方向(我們稍后將學(xué)習(xí)如何計算)。對于這種類型的表面,如果光子應(yīng)該遵循鏡像方向,我們不能人為地改變光子的方向,這意味著這種解決方案可能更令人滿意。
眼睛只是一個點接收器,還是有一個表面積?即使接收面非常小,它仍然具有面積,因此比一個點更大。如果接收面積大于一個點,則表面肯定會接收到不止一個光線中的 1 個。
讀者是正確的。眼睛不是點接收器,而是表面接收器,就像相機(jī)中的膠片或 CCD 一樣。因為這個課程只是光線追蹤算法的介紹,所以這個主題需要詳細(xì)解釋。相機(jī)和人眼都有一個透鏡,將反射的光線聚焦在其后面的表面上。如果透鏡的半徑非常?。ㄟ@在技術(shù)上不是這種情況),則從物體反射的光只能來自一個方向。這就是針孔相機(jī)的工作原理。我們將在相機(jī)課程中討論它們。
即使我們決定使用這種方法,只使用由漫反射物體組成的場景,我們?nèi)匀恍枰獛椭?。我們可以將從光源向場景中投射光子的過程可視化,就好像我們在物體表面噴灑光線(或小顆粒的顏料)。如果噴霧不夠密集,則某些區(qū)域?qū)o法均勻照亮。
想象一下試圖用白色記號筆在黑色紙張上制作點來繪制茶壺(將每個點視為光子)。如下圖所示,只有少數(shù)光子與茶壺物體相交,留下許多未覆蓋的區(qū)域。隨著點數(shù)的增加,光子的密度增加,直到茶壺“幾乎”完全被光子覆蓋,使物體更容易識別。
但是,即使發(fā)射 1000 個光子,甚至是 X 倍以上,也不能保證我們的物體表面被光子覆蓋。這是這種技術(shù)的一個重大缺點。換句話說,我們必須讓程序運行,直到我們決定它已經(jīng)向物體表面噴灑足夠的光子才能得到準(zhǔn)確的表示。這意味著我們必須觀察圖像在被渲染時決定何時停止應(yīng)用程序。在生產(chǎn)環(huán)境中,這是不可能的。正如我們將看到的,光線跟蹤器中最昂貴的任務(wù)是找到光線和幾何體的交點。從光源創(chuàng)建許多光子不是問題,但在場景中找到它們的所有會議將是難以承受的昂貴的。
結(jié)論:「正向光線跟蹤」(或因為我們從光源發(fā)射光線而稱為「光線跟蹤」)使得在計算機(jī)上模擬光線如何在自然中傳播成為技術(shù)上可能。然而,如上所述,這種方法可能更有效和實用。在 1980 年發(fā)表的一篇名為“用于陰影顯示的改進(jìn)照明模型”的開創(chuàng)性論文中,圖形學(xué)早期研究者之一的 Turner Whitted 寫道:
“在一種明顯的光線跟蹤方法中,從光源發(fā)出的光線沿其路徑追蹤,直到它們擊中觀察者。由于只有少數(shù)光線會到達(dá)觀察者,因此這種方法可能更好。在 Appel 提出的第二種方法中,光線沿相反的方向從觀察者到場景中的物體追蹤?!?/p>
現(xiàn)在,我們將看看 Whitted 談到的另一種模式。
反向追蹤
圖2:反向光線跟蹤。我們從眼睛到球體上的一個點跟蹤一條光線,然后從該點到光源跟蹤一條光線。
我們不是從光源到接收器(如我們的眼睛)追蹤光線,而是從接收器到物體反向追蹤光線。因為這個方向與自然界中的光線傳播方向相反,所以被稱為「反向光線追蹤」或「眼睛追蹤」,因為我們從眼睛的位置射出光線(圖 2)。這種方法提供了一種方便的解決方案,以彌補前向光線追蹤的缺陷。由于我們的模擬不能像自然界一樣快速和完美,因此我們必須妥協(xié),從眼睛射入場景中的光線。如果光線擊中一個物體,我們通過從擊中點向場景中的光源投射另一條光線(稱為光線或陰影光線)來確定它接收到多少光。偶爾,這個“光線”會被場景中的另一個物體遮擋,這意味著我們最初的擊中點在陰影中,它不會從光源接收任何照明。因此,我們不將這些光線稱為光線,而是稱為「陰影光線」。在 CG 文獻(xiàn)中,我們從眼睛(或相機(jī))射入場景中的第一條光線稱為「主光線」、「可見性光線」或「相機(jī)光線」。
在本課程中,我們使用前向追蹤來描述從光源發(fā)射光線的情況,與反向追蹤相反,其中從相機(jī)射出光線。然而,一些作者使用相反的術(shù)語。前向追蹤意味著從相機(jī)射出光線,因為它是 CG 中最常用的路徑追蹤技術(shù)。為避免混淆,你也可以使用更明確的術(shù)語光線追蹤和眼睛追蹤。這些術(shù)語更常用于雙向路徑追蹤的上下文中(請參見光傳輸部分)。
結(jié)論
在計算機(jī)圖形學(xué)中,從光源或從眼睛射出光線的概念被稱為「路徑追蹤」。也可以使用光線追蹤這個術(shù)語,但是路徑追蹤的概念表明,這種制作計算機(jī)生成圖像的方法依賴于從光源到相機(jī)(或相反)的路徑。通過以物理上真實的方式這樣做,我們可以輕松模擬光學(xué)效應(yīng),例如焦散或場景中另一個表面反射的光線(間接照明)。這些主題將在其他課程中討論。
-
光源
+關(guān)注
關(guān)注
3文章
703瀏覽量
67767 -
算法
+關(guān)注
關(guān)注
23文章
4607瀏覽量
92828 -
光線追蹤
+關(guān)注
關(guān)注
0文章
183瀏覽量
21473
發(fā)布評論請先 登錄
相關(guān)推薦
評論