本文翻譯自Scratchapixel 3.0[1],是一個(gè)關(guān)于計(jì)算機(jī)圖形學(xué)的系統(tǒng)性的學(xué)習(xí)教程。如果有誤,歡迎在評(píng)論區(qū)討論。
光線(xiàn)追蹤的另一個(gè)優(yōu)點(diǎn)是,通過(guò)擴(kuò)展光線(xiàn)傳播的思想,我們可以非常容易地「模擬反射」和「折射」等效果,這在模擬玻璃材料或鏡面表面時(shí)非常方便。在一篇名為《用于陰影顯示的改進(jìn)照明模型》的 1979 年論文中,Turner Whitted 首次描述了如何擴(kuò)展 Appel 的光線(xiàn)追蹤算法以進(jìn)行更高級(jí)的渲染。Whitted 的想法擴(kuò)展了 Appel 發(fā)射光線(xiàn)的模型,以包括反射和折射的計(jì)算。
在光學(xué)中,反射和折射是眾所周知的現(xiàn)象。雖然后面的課程將專(zhuān)門(mén)講解反射和折射,但我們將研究模擬它們所需的內(nèi)容。我們將以具有折射和反射特性的玻璃球?yàn)槔?。只要我們知道與球相交的光線(xiàn)的方向,就很容易計(jì)算它發(fā)生的情況。反射和折射方向都基于交點(diǎn)處的法向量和入射光線(xiàn)(主光線(xiàn))的方向。為了計(jì)算折射方向,我們還需要指定材料的折射率。雖然我們之前說(shuō)過(guò)光線(xiàn)直線(xiàn)傳播,但我們可以將折射可視化為光線(xiàn)彎曲。當(dāng)光子撞擊不同介質(zhì)(因此折射率不同)的物體時(shí),其方向會(huì)改變。這個(gè)科學(xué)將在后面更深入地討論。只要我們記住這兩個(gè)效應(yīng)取決于法向量和入射光線(xiàn)方向,而折射取決于材料的折射率,我們就可以繼續(xù)前進(jìn)。同樣,我們還必須意識(shí)到像玻璃球這樣的物體同時(shí)具有反射和折射性質(zhì)。我們需要計(jì)算給定表面上的兩者,但是我們?nèi)绾位旌纤鼈儯课覀儗⒎瓷浣Y(jié)果的 50%與折射結(jié)果的 50%混合嗎?不幸的是,它比那更復(fù)雜。值的混合取決于主光線(xiàn)(或視角方向)和物體法線(xiàn)以及折射指數(shù)之間的角度。幸運(yùn)的是,一個(gè)方程可以精確地計(jì)算每個(gè)值應(yīng)該如何混合。這個(gè)方程被稱(chēng)為菲涅耳方程。為了保持簡(jiǎn)潔,我們現(xiàn)在只需要知道它的存在,并將幫助確定混合值。

圖1:使用光學(xué)定律計(jì)算反射和折射光線(xiàn)。
讓我們回顧一下。Whitted 算法如何工作?我們從眼睛發(fā)射主光線(xiàn),并與場(chǎng)景中的物體最近的交點(diǎn)(如果有)相交。如果光線(xiàn)擊中不是漫反射或不透明的物體,我們必須進(jìn)行額外的計(jì)算工作。為了計(jì)算例如玻璃球上的那個(gè)點(diǎn)的結(jié)果顏色,你需要計(jì)算反射顏色和折射顏色并將它們混合。記住,我們需要分三步進(jìn)行。計(jì)算反射顏色,計(jì)算折射顏色,然后應(yīng)用菲涅耳方程。

首先,我們計(jì)算反射方向。為此,我們需要兩個(gè)項(xiàng)目:交點(diǎn)處的法向量和主光線(xiàn)的方向。一旦我們獲得反射方向,我們發(fā)射一個(gè)新光線(xiàn)?;氐轿覀兊呐f例子,假設(shè)反射光線(xiàn)擊中了紅色球。使用 Appel 的算法,我們通過(guò)向光源發(fā)射陰影光線(xiàn)來(lái)確定達(dá)到紅色球上那個(gè)點(diǎn)的光線(xiàn)量。這將獲得顏色(如果被遮擋則為黑色),乘以光強(qiáng)度并返回到玻璃球的表面。
現(xiàn)在,我們對(duì)折射做同樣的事情。因?yàn)楣饩€(xiàn)穿過(guò)了玻璃球,所以它被稱(chēng)為傳輸光線(xiàn)(光線(xiàn)從球的一側(cè)傳輸?shù)搅硪粋?cè);已傳輸)。為了計(jì)算傳輸方向,我們需要交點(diǎn)處的法向量,主光線(xiàn)方向和材料的折射率(在這個(gè)例子中,它可能是類(lèi)似于玻璃材料的 1.5)。使用計(jì)算出的新方向,折射光線(xiàn)繼續(xù)到玻璃球的另一側(cè)。在那里,因?yàn)樗淖兞私橘|(zhì),所以光線(xiàn)又被折射了一次。正如你在相鄰的圖像中看到的那樣,當(dāng)光線(xiàn)進(jìn)入和離開(kāi)玻璃物體時(shí),光線(xiàn)的方向會(huì)改變。每當(dāng)有介質(zhì)變化時(shí)都會(huì)發(fā)生折射,而光線(xiàn)退出的介質(zhì)和進(jìn)入的介質(zhì)具有不同的折射率??諝獾恼凵渎史浅=咏?1,而玻璃的折射率約為 1.5。折射會(huì)使物體在看不同折射率的物體時(shí)或通過(guò)不同折射率的物體看時(shí)出現(xiàn)偏移。假設(shè)當(dāng)折射光線(xiàn)離開(kāi)玻璃球時(shí),它擊中了綠色球。我們通過(guò)發(fā)射陰影光線(xiàn)計(jì)算了綠色球和折射光線(xiàn)之間的交點(diǎn)處的局部照明。然后,將顏色(如果被遮擋則為黑色)乘以光強(qiáng)度并返回到玻璃球的表面。
最后,我們計(jì)算菲涅耳方程。我們需要玻璃球的折射率,主光線(xiàn)與命中點(diǎn)法線(xiàn)之間的角度。使用點(diǎn)積(我們將在稍后解釋?zhuān)?,菲涅耳方程返回兩個(gè)混合值。
以下是一些偽代碼,以加強(qiáng)它的工作方式:
// compute reflection colorcolor reflectionCol = computeReflectionColor();
// compute refraction colorcolor refractionCol = computeRefractionColor();
float Kr; // reflection mix valuefloat Kt; // refraction mix value
fresnel(refractiveIndex, normalHit, primaryRayDirection, &Kr, &Kt);
// mix the two colors. Note that Kt = 1 - KrglassBallColorAtHit = Kr * reflectionColor + Kt * refractionColor;
在上面的代碼中,我們?cè)谧⑨屩袑?xiě)道Kt = 1 - Kr。換句話(huà)說(shuō),Kr + Kt = 1。這是因?yàn)樵谧匀唤缰?,光線(xiàn)不能被創(chuàng)造或摧毀。因此,如果一些入射光被反射,那么剩余的入射光(未被反射的部分)必然會(huì)被折射。如果你將反射和折射光的總和相加,它等于入射光的量。通常,菲涅耳方程為我們提供了Kr和Kt的值(如果它做正確的事情,它們的總和應(yīng)該等于 1),因此你可以直接使用函數(shù)返回的值。然而,如果我們只有其中一個(gè),這就足夠了。如果你有Kr,你可以得到Kt(1-Kr)。如果你有Kt,你可以得到Kr(1-Kt)。
這個(gè)算法最后一個(gè)美妙的事情是它是「遞歸」的(這在某種程度上也是一種詛咒?。?。在我們研究的情況下,反射光線(xiàn)擊中了一個(gè)紅色的不透明球體,折射光線(xiàn)擊中了一個(gè)綠色的、不透明的、散射的球體。然而,我們會(huì)想象紅色和綠色的球體也是玻璃球。要找到反射和折射光線(xiàn)返回的顏色,我們必須對(duì)紅色和綠色球體使用與原始玻璃球相同的過(guò)程:也就是說(shuō),向場(chǎng)景中射入更多的反射和折射光線(xiàn)。這是射線(xiàn)跟蹤算法的一個(gè)缺點(diǎn),有時(shí)會(huì)成為一個(gè)頭痛的問(wèn)題。想象一下我們的相機(jī)在一個(gè)只有反射面的盒子里。理論上,光線(xiàn)被困住了,將會(huì)無(wú)限地反彈在盒子的墻壁上(或者直到你停止模擬)。因此,我們必須設(shè)置一個(gè)任意的限制,防止光線(xiàn)相互作用,從而無(wú)限遞歸。每次光線(xiàn)反射或折射時(shí),它的深度都會(huì)增加。當(dāng)光線(xiàn)深度大于最大遞歸深度時(shí),我們停止遞歸過(guò)程。你的圖像不一定會(huì)看起來(lái)完全準(zhǔn)確,但是有一個(gè)近似的結(jié)果總比沒(méi)有結(jié)果好。
-
追蹤算法
+關(guān)注
關(guān)注
2文章
9瀏覽量
7695 -
計(jì)算機(jī)圖像
+關(guān)注
關(guān)注
2文章
5瀏覽量
2342 -
光線(xiàn)追蹤
+關(guān)注
關(guān)注
0文章
185瀏覽量
21755
發(fā)布評(píng)論請(qǐng)先 登錄
光線(xiàn)追蹤技術(shù)的作用
光線(xiàn)追蹤如何實(shí)現(xiàn)實(shí)時(shí)三維圖形?
【驚呆!】光線(xiàn)追蹤效果竟然這么震撼!
光線(xiàn)投射,光線(xiàn)追蹤與路徑追蹤的概念與區(qū)別

將NVIDIA RTX平臺(tái)光線(xiàn)追蹤功能和AI效果應(yīng)用到游戲當(dāng)中
光線(xiàn)追蹤技術(shù)最近又成為了行業(yè)的焦點(diǎn)
GTX10系列是如何實(shí)現(xiàn)光線(xiàn)追蹤的
Imaginantion發(fā)布了光線(xiàn)追蹤等級(jí)系統(tǒng)
洞悉光線(xiàn)追蹤加速技術(shù)在圖形處理行業(yè)中的未來(lái)
移動(dòng)端的光線(xiàn)追蹤是如何實(shí)現(xiàn)的
英特爾的Meteor Lake 的 iGPU將具有光線(xiàn)追蹤硬件
光線(xiàn)追蹤:計(jì)算機(jī)模擬自然光的奧秘

評(píng)論