0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于光線(xiàn)追蹤實(shí)現(xiàn)反射折射效果

穎脈Imgtec ? 2024-11-09 01:07 ? 次閱讀

本文翻譯自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)在只需要知道它的存在,并將幫助確定混合值。

f59649ac-9df3-11ef-8084-92fbcf53809c.gif

圖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)用菲涅耳方程。

f5a96456-9df3-11ef-8084-92fbcf53809c.png

首先,我們計(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é)果好。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 追蹤算法
    +關(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
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    光線(xiàn)追蹤技術(shù)的作用

    ,雖然可以實(shí)現(xiàn)很美觀的效果,但其始終受限于一個(gè)事實(shí),即這些技術(shù)僅僅是在模擬光照。光線(xiàn)追蹤技術(shù)則是模擬光照在真實(shí)世界中如何表現(xiàn),以創(chuàng)建更精確、更程序化的
    發(fā)表于 11-02 08:21

    光線(xiàn)追蹤如何實(shí)現(xiàn)實(shí)時(shí)三維圖形?

    什么是光線(xiàn)追蹤?光線(xiàn)追蹤如何實(shí)現(xiàn)實(shí)時(shí)三維圖形?
    發(fā)表于 02-26 07:03

    什么是光線(xiàn)追蹤?

    什么是光線(xiàn)追蹤
    發(fā)表于 05-28 06:38

    怎樣實(shí)現(xiàn)光線(xiàn)追蹤?

    怎樣實(shí)現(xiàn)光線(xiàn)追蹤?怎么使光線(xiàn)追蹤生效?
    發(fā)表于 05-31 06:51

    模擬光線(xiàn)折射與全反射小程序

    使用LabVIEW模擬光線(xiàn)折射與全反射
    發(fā)表于 11-16 15:56

    【驚呆!】光線(xiàn)追蹤效果竟然這么震撼!

    路徑的模型”。一旦實(shí)現(xiàn)就將徹底顛覆現(xiàn)在的光柵化渲染技術(shù),它幾乎完美還原一個(gè)真實(shí)的世界,幫發(fā)燒友成就真正電影化的游戲圖形應(yīng)用。Intel、NVIDIA、AMD等行業(yè)公司都在其中投入了巨大的精力。但是使用光線(xiàn)追蹤技術(shù)的運(yùn)算量異常龐大
    發(fā)表于 02-10 07:14 ?405次閱讀

    光線(xiàn)投射,光線(xiàn)追蹤與路徑追蹤的概念與區(qū)別

    線(xiàn)渲染方法的結(jié)果,但是這種方法有更好的光學(xué)效果,例如對(duì)于反射折射有更準(zhǔn)確的模擬效果,并且效率非常高,所以當(dāng)追求高質(zhì)量的效果時(shí)經(jīng)常使用這種方
    的頭像 發(fā)表于 04-19 14:59 ?1.1w次閱讀
    <b class='flag-5'>光線(xiàn)</b>投射,<b class='flag-5'>光線(xiàn)</b><b class='flag-5'>追蹤</b>與路徑<b class='flag-5'>追蹤</b>的概念與區(qū)別

    將NVIDIA RTX平臺(tái)光線(xiàn)追蹤功能和AI效果應(yīng)用到游戲當(dāng)中

    NVIDIA RTX 平臺(tái)自面市以來(lái)一躍成為行業(yè)標(biāo)準(zhǔn)游戲開(kāi)發(fā)平臺(tái),成功將實(shí)時(shí)光線(xiàn)追蹤技術(shù)運(yùn)用至游戲。采用 NVIDIA Turing 架構(gòu)的全新 RT Core 可憑借對(duì)陰影、反射、折射
    的頭像 發(fā)表于 08-28 14:34 ?4161次閱讀

    光線(xiàn)追蹤技術(shù)最近又成為了行業(yè)的焦點(diǎn)

    計(jì)算機(jī)中的光線(xiàn)追蹤或者更精確的路徑追蹤過(guò)程與真實(shí)世界中的光線(xiàn)傳播方式是相反的。光線(xiàn)實(shí)際上是從相機(jī)的某個(gè)視角照射到場(chǎng)景內(nèi)的物體上,然后算法會(huì)計(jì)
    的頭像 發(fā)表于 10-24 16:01 ?4147次閱讀

    GTX10系列是如何實(shí)現(xiàn)光線(xiàn)追蹤

    就在剛剛,隨著新一輪驅(qū)動(dòng)更新,GeForce GTX 1060 6GB以上的帕斯卡架構(gòu)顯卡正式加入光線(xiàn)追蹤技術(shù)陣營(yíng)。這意味著擁有GeForce GTX 1060 6GB以上顯卡的小伙伴不用升級(jí)到GeForce RTX 20系列顯卡,也可以開(kāi)啟一定的
    發(fā)表于 04-12 14:19 ?2736次閱讀

    Imaginantion發(fā)布了光線(xiàn)追蹤等級(jí)系統(tǒng)

    目前,面向Windows系統(tǒng)桌面級(jí)PC的第二代光線(xiàn)追蹤顯卡剛剛上市,實(shí)現(xiàn)首次支持光線(xiàn)追蹤效果4K
    的頭像 發(fā)表于 10-21 11:05 ?2069次閱讀

    洞悉光線(xiàn)追蹤加速技術(shù)在圖形處理行業(yè)中的未來(lái)

    光線(xiàn)追蹤是一種渲染技術(shù),可以精確地追蹤場(chǎng)景中光線(xiàn)的路徑,相比傳統(tǒng)的光柵化技術(shù),它可以渲染出可信且具有更高真實(shí)感和保真度的反射、
    的頭像 發(fā)表于 10-21 11:09 ?2044次閱讀

    移動(dòng)端的光線(xiàn)追蹤是如何實(shí)現(xiàn)

    是一個(gè)在二維(2D)屏幕上呈現(xiàn)三維(3D)圖像的方法。這樣的定義可能比較抽象,實(shí)際上光線(xiàn)追蹤就是為了計(jì)算出光線(xiàn)發(fā)出后經(jīng)過(guò)一系列衰減(吸收、反射折射
    的頭像 發(fā)表于 11-11 09:34 ?2277次閱讀

    英特爾的Meteor Lake 的 iGPU將具有光線(xiàn)追蹤硬件

    光線(xiàn)追蹤可以實(shí)現(xiàn)更為逼真的陰影和反射效果,同時(shí)還可以大大改善半透明度和散射,帶來(lái)相似于人眼所看到的更為真實(shí)場(chǎng)景
    的頭像 發(fā)表于 08-22 11:00 ?1407次閱讀

    光線(xiàn)追蹤:計(jì)算機(jī)模擬自然光的奧秘

    反射、折射等過(guò)程,最終計(jì)算出這條光線(xiàn)的顏色和亮度。通過(guò)對(duì)每個(gè)像素重復(fù)這個(gè)過(guò)程,就可以得到整個(gè)圖像的渲染結(jié)果。光線(xiàn)追蹤的歷史
    的頭像 發(fā)表于 10-10 10:08 ?1382次閱讀
    <b class='flag-5'>光線(xiàn)</b><b class='flag-5'>追蹤</b>:計(jì)算機(jī)模擬自然光的奧秘

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品