色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

光線追蹤(RayTracing)算法描述

Dbwd_Imgtec ? 來源:未知 ? 作者:李倩 ? 2018-09-13 15:15 ? 次閱讀

一、理論基礎

1、三維場景中創建圖像

第一步:透視投影。這是一個將三維物體的形狀投影到圖像表面上的幾何過程,這一步只需要連接從對象特征到眼睛之間的線,然后在畫布上繪制這些投影線與圖像平面相交的輪廓。

第二步:添加顏色。圖像輪廓繪制好之后,給它的骨架添加顏色,這樣就完成了三維場景中的圖像創建過程。

2、物體的顏色和亮度

? 主要是光線與物體材質相互作用的結果。

? 光由光子(電磁粒子)組成,光子由各種光源發射。當一組光子撞擊一個物體時,可能發生三種情況:被吸收,反射或透射。發生這三種情況的光子百分比因材料而異,通常決定了物體在場景中的顯現方式。然而,所有材料都有一個共性:入射光子總數總是與反射光子、吸收光子、透射光子的總和相同。

? 白光由“紅”、“藍”、“綠”三種顏色光子組成。當白光照亮紅色物體時,光子吸收過程會過濾掉“綠色”和“藍色”光子。因為物體不吸收“紅色”光子,所以它們將被反射,這就是物體呈現紅色的原因。

? 我們之所以能夠看到物體,是因為物體反射的一些光子向我們傳播并擊中了我們的眼睛。我們的眼睛由光感受器組成,可以將光信號轉換為神經信號,然后我們的大腦能夠使用這些信號來辨別不同的陰影和色調。

3、光與物體的關系

? 沒有光線,我們都看不到周圍的物體。

? 周圍環境中沒有物體,我們看不到光。

二、光線追蹤(RayTracing)算法描述

1、Forward Tracing

在用計算機生成的圖像中模擬光與物體相互作用過程之前,我們需要了解一個物理現象。一束光線照射在物體上時,反射的光子中只有少數會到達我們眼睛的表面。想象一下,假設有一個每次只發射一個光子的光源,光子從光源發出并沿著直線路徑行進,直至撞擊到物體表面,忽略光子的吸收,該光子會以隨機的方向反射。如果光子撞擊到我們的眼睛表面,則我們會看到光子被反射的點。具體過程如下圖所示。

現在從計算機圖形的角度來看待這種情況。首先,我們用像素組成的平面代替我們的眼睛。在這種情況下,發射的光子將撞擊圖形平面上許多像素的一個,并將該點的亮度增加到大于零的值。重復多次直到所有的像素被調整,創建一個計算機生成的圖像。這種技術稱為前向光線追蹤(Forward Tracing),因為我們是沿著光子從光源向觀察者的前進的路徑。

但是,這種技術在計算機中模擬光子與物體相互作用是不太現實的,因為在實際中反射的光子擊中眼睛表面的可能性是非常非常低的,我們必須投射大量的光子才能找到一個能夠引起眼睛注意的。此外,我們也不能保證物體的表面被光子完全覆蓋,這是這項技術的主要缺點。

換句話說,我們可能不得不讓程序一直運行,直到足夠的光子噴射到物體的表面上獲得精確的顯示。這意味著我們要監視正在呈現的圖像以決定何時停止應用程序。這在實際生產環境中是不可能的。另外,正如我們將看到的,射線追蹤器中最昂貴的任務是找到射線幾何交點。從光源產生大量光子不是問題,但是在場景內找到所有的交點將會是非常昂貴的。

2、Backward Tracing

這項技術為前向光線追蹤技術的缺陷提供了一個方便的解決方案。由于我們的模擬不能像自然一樣快速完美,所以我們必須妥協,并追蹤從眼睛進入到場景中的光線。

光線照到一個物體時,我們可以通過將另一條光線(稱為光線或陰影光線)從擊中點投射到場景的光線,得到它所接受到的光子數量。這個“光線”有的時候會被另一個物體阻擋,這意味著我們原來的撞擊點在陰影中,沒有獲得任何照明。

三、算法實現

1、基本原理

? 光線追蹤算法采用由像素組成的圖像。對于圖像中的每個像素,它將主光線投射到場景中。該主光線的方向是通過追蹤從眼睛到像素中心線獲得的。一旦我們確定了主射線的方向,我們就開始檢查場景中的每個對象,看它是否與其中的任何一個相交。當發生主射線與多個對象相交的情況時,我們選擇交點離眼睛最近的物體。

? 然后,我們從交叉點向光線投射陰影射線。如果這條特定的光線在通往光源的路上不與某個物體相交,那么這個點就被照亮了。

? 如果它與另一個物體相交,則該物體在其上投下陰影。

? 最后,如果我們對每個像素重復這一操作,就可以獲得三維場景的二維表示。

2、偽代碼

光線追蹤算法實現的偽代碼如下所示:

for (int j = 0; j < imageHeight; ++j) { ? ?for (int i = 0; i < imageWidth; ++i) { ? ? ? ?// compute primary ray direction ? ? ? ?Ray primRay; ? ? ? ?computePrimRay(i, j, &primRay); ? ? ? ?// shoot prim ray in the scene and search for intersection ? ? ? ?Normal nHit; ? ? ? ?float minDist = INFINITY; ? ? ? ?Object object = NULL; ? ? ? ?for (int k = 0; k < objects.size(); ++k) { ? ? ? ? ? ?if (Intersect(objects[k], primRay, &pHit, &nHit)) { ? ? ? ? ? ? ? ?float distance = Distance(eyePosition, pHit); ? ? ? ? ? ? ? ?if (distance < minDistance) { ? ? ? ? ? ? ? ? ? ?object = objects[k]; ? ? ? ? ? ? ? ? ? ?minDistance = distance; // update min distance ? ? ? ? ? ? ? ?} ? ? ? ? ? ?} ? ? ? ?} ? ? ? ?if (object != NULL) { ? ? ? ? ? ?// compute illumination ? ? ? ? ? ?Ray shadowRay; ? ? ? ? ? ?shadowRay.direction = lightPosition - pHit; ? ? ? ? ? ?bool isShadow = false; ? ? ? ? ? ?for (int k = 0; k < objects.size(); ++k) { ? ? ? ? ? ? ? ?if (Intersect(objects[k], shadowRay)) { ? ? ? ? ? ? ? ? ? ?isInShadow = true; ? ? ? ? ? ? ? ? ? ?break; ? ? ? ? ? ? ? ?} ? ? ? ? ? ?} ? ? ? ?} ? ? ? ?if (!isInShadow) ? ? ? ? ? ?pixels[i][j] = object->color * light.brightness; else pixels[i][j] = 0; } }

四、加入反射和折射

1、基本原理

光學中,反射和折射是總所周知的現象。反射和折射分向都是基于相交點處的法線和入射光線(主光線)的方向。為了計算折射方向,我們還需指定材料的折射率。

同樣,我們也必須意識到像玻璃球這樣的物體同時具有反射性和折射性的事實。我們需要為表面上的給定點計算兩者的混合值。反射和折射具體值的混合取決于主光線(或觀察方向)和物體的法線和折射率之間的夾角。有一個方程式精確地計算了每個應該如何混合,這個方程被稱為菲涅耳方程。

加入反射折射后,進行以下三個步驟:

? 計算反射

為此,我們需要兩個項:交點處的法線和主光線的方向。一旦我們獲得了反射方向,我們就朝這個方向發射新的光線。我們假設反射光線撞擊了紅色球體,通過向光線投射陰影射線來找出到達紅色球體上的那個點的光線多少。這會得到一種顏色(如果是陰影,則為黑色),然后乘以光強并返回到玻璃球的表面。

? 計算折射

注意,因為光線穿過玻璃球,所以它被認為是透射光線(光線從球體的一側傳播到另一側)。為了計算透射方向,我們需要在知道擊中點的法線,主射線方向和材料的折射率。

當光線進入并離開玻璃物體時,光線的方向會改變。每當介質發生變化時都會發生折射,而且兩種介質具有不同的折射率。折射對光線有輕微彎曲的作用。這個過程就是讓物體在透視時或在不同折射率的物體上出現偏移的原因。

現在讓我們想象一下,當折射的光線離開玻璃球時,它會碰到一個綠色的球體。在那里,我們再次計算綠色球體和折射射線之間交點處的局部照明(通過拍攝陰影射線)。然后,將顏色(如果被遮擋,則為黑色)乘以光強并返回到玻璃球的表面。

? 應用菲涅爾方程

我們需要玻璃球的折射率,主光線的角度,以及擊中點的法線。使用點積,菲涅耳方程返回兩個混合值。

這種算法的美妙之處在于它是遞歸的。迄今為止,在我們研究過的情況下,反射光線照射到一個紅色的、不透明的球體上,而折射光線照射到一個綠色的、不透明的和漫射的球體上。但是,我們會想象紅色和綠色的球體也是玻璃球。為了找到由反射和折射光線返回的顏色,我們必須按照與原始玻璃球一起使用的紅色和綠色球體的相同過程。

這是光線追蹤算法的一個嚴重缺陷。想象一下,我們的相機是在一個只有反射面的盒子里。從理論上講,光線被困住了,并且會持續不斷地從箱子的墻壁反彈(或者直到你停止模擬)。出于這個原因,我們必須設置一個任意的限制值,從而防止光線相互作用導致的無限遞歸。每當光線反射或折射時,其深度都會增加。當光線深度大于最大遞歸深度時,我們就停止遞歸過程。

2、偽代碼

偽代碼如下所示:

// compute reflection color color reflectionCol = computeReflectionColor(); // compute refraction color color refractionCol = computeRefractionColor(); float Kr; // reflection mix value float Kt; // refraction mix value fresnel(refractiveIndex, normalHit, primaryRayDirection, &Kr, &Kt); // mix the two color glassBallColorAtHit = Kr * reflectionColor + (1-Kr) * refractionColor;

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4620

    瀏覽量

    93046
  • 圖像
    +關注

    關注

    2

    文章

    1087

    瀏覽量

    40499
  • 光線追蹤
    +關注

    關注

    0

    文章

    183

    瀏覽量

    21495

原文標題:計算機圖形學——光線追蹤(RayTracing)算法

文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    遞歸性質和大數目追蹤光線解決方案

    算法的遞歸性質和大數目的追蹤光線,渲染過程可能持續數小時。80-90%的渲染時間花費在計算光線和物體交點上。
    的頭像 發表于 04-13 09:10 ?6088次閱讀
    遞歸性質和大數目<b class='flag-5'>追蹤</b><b class='flag-5'>光線</b>解決方案

    光線追蹤技術學習資料

    資料是Peter Shirley的一周學會光線追蹤技術。資料為英文版.光線最終其實已經不是什么新鮮技術了,但是最近隨著英偉達最新的顯卡加入了Ray Tracing技術又被人們開始提及起來,對于該圖像技術又有什么值得稱道的呢?趕緊
    發表于 10-12 16:36

    光線追蹤技術的作用

    其實對于產品設計師而言,光線追蹤技術并不陌生。簡單的說,是自三維(3D)圖形誕生以來圖形技術領域最重要的進步之一,而且它即將從高深的電影和廣告領域轉向移動、可穿戴和汽車等嵌入式領域,作為全新的、更有
    發表于 11-02 08:21

    Imagination的光線追蹤等級系統介紹

    Imagination的光線追蹤等級系統
    發表于 12-21 06:02

    光線追蹤技術介紹

    光線追蹤:一種顛覆性技術
    發表于 01-22 07:19

    硬件光線追蹤的優勢有哪些

    硬件光線追蹤的優勢光線追蹤面臨的關鍵挑戰
    發表于 01-28 07:19

    光線追蹤等級系統的介紹

    我們為什么要發布光線追蹤等級系統?它對游戲意味著什么?
    發表于 01-29 07:41

    如何看待光線追蹤

    光線追蹤我們實際應用中經常用嗎,他到底是一項什么技術?
    發表于 03-07 08:36

    什么是光線追蹤

    什么是光線追蹤
    發表于 05-28 06:38

    怎樣實現光線追蹤

    怎樣實現光線追蹤?怎么使光線追蹤生效?
    發表于 05-31 06:51

    硬件光線追蹤的優勢有哪些?

    光線追蹤面臨的關鍵挑戰是什么?硬件光線追蹤的優勢有哪些?
    發表于 05-31 06:53

    光線追蹤技術使得PC畫質革命爆發游戲秒變電影!

    技術,效率很高,但光影效果和真實場景差距太大,無論如何都不可能追上。 其實,圖形行業一直沒有放棄對光線追蹤的努力,現在又掀起了一波新的高潮。 微軟宣布DX12中將引入DirectX Raytracing,為普及
    的頭像 發表于 03-26 07:42 ?5510次閱讀

    光線追蹤算法匯總

    在基本光線追蹤算法中,只追蹤有限數目的光線
    的頭像 發表于 05-11 15:58 ?1.7w次閱讀
    <b class='flag-5'>光線</b><b class='flag-5'>追蹤</b><b class='flag-5'>算法</b>匯總

    NVIDIA OptiX光線追蹤引擎的功能特性

    NVIDIA OptiX 光線追蹤引擎用于在 GPU 上實現出色光線追蹤性能的應用框架,提供簡單、遞歸式的靈活工作流,用于加速光線
    的頭像 發表于 09-14 09:37 ?2730次閱讀

    基于光線追蹤的渲染算法實現

    我們已經涵蓋了所有需要說的內容!我們現在準備寫我們的第一個光線追蹤器。你現在應該能夠猜到光線追蹤算法是如何工作的了。首先,注意到自然界中光的
    的頭像 發表于 10-30 08:06 ?266次閱讀
    基于<b class='flag-5'>光線</b><b class='flag-5'>追蹤</b>的渲染<b class='flag-5'>算法</b>實現
    主站蜘蛛池模板: 精品亚洲永久免费精品| 日韩一区二区天海翼| 久久久久久久网| 美女张开腿露尿口给男人亲| 人妻兽虐曲| 亚洲精品国产品国语在线试看 | 免费看成人毛片| 色老板美国在线观看| 亚洲伊人精品| gogo亚洲肉体艺术照片9090| 国产免费内射又粗又爽密桃视频| 久久青青草原综合伊人| 日日a.v拍夜夜添久久免费| 亚洲精品天堂在线| 99精品久久精品一区二区| 国产人妻人伦精品A区| 蜜芽一二三区| 午夜小视频免费观看| 最新影音先锋av资源台| 国产精品成人无码免费视频| 久久亚洲伊人| 思思99热久久精品在线6| 最近免费视频中文2019完整版| 超碰caoporn| 久久久乱码精品亚洲日韩| 色爱AV综合区| 中文字幕免费在线视频| 国产精品成人观看视频免费| 男女作爱在线播放免费网页版观看 | 国产成人在线网站| 久久视频这只精品99re6| 天堂岛www天堂资源在线| 2018高清国产一区二区三区| 国产欧美一区二区三区免费| 欧美大jiji| 伊人久久影院| 国产色婷亚洲99精品AV| 欧美性爱 成人| 曰韩一本道高清无码av| 国产精品久久久精品a级小说| 欧美自拍亚洲综合图区|