伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

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

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

3天內不再提示

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

穎脈Imgtec ? 2024-10-30 08:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文翻譯自Scratchapixel 3.0[1],是一個關于計算機圖形學的系統性的學習教程。如果有誤,歡迎在評論區討論。

我們已經涵蓋了所有需要說的內容!我們現在準備寫我們的第一個光線追蹤器。你現在應該能夠猜到光線追蹤算法是如何工作的了。

首先,注意到自然界中光的傳播只是從光源發出無數條射線,反彈直到它們撞到我們眼睛的表面。因此,光線追蹤是優雅的,因為它直接基于我們周圍發生的事情。除了它按照相反的順序跟隨光線的路徑外,它是一個完美的自然模擬器。光線追蹤算法使用由像素組成的圖像。對于圖片中的每個像素,它向場景中發射一個主射線。該主射線的方向是通過從眼睛到該像素中心的線追蹤得到的。一旦我們設置了該主射線的方向,我們檢查場景中的每個對象,看它們是否與任何對象相交。在某些情況下,主射線將與多個對象相交。當這種情況發生時,我們選擇離眼睛最近的交點所在的對象。然后,我們從交點向光源發射一個陰影射線(圖 1)。

d996eb9c-9652-11ef-8084-92fbcf53809c.gif

圖1:我們通過像素中心發射一個主射線來檢查可能的對象相交。當我們找到一個對象時,我們發射一個陰影射線來確定該點是否被照亮或在陰影中。

如果這條射線在到達光源的路上沒有與其他對象相交,那么擊中點就被照亮了。如果它與另一個對象相交,那個對象就會對它產生陰影(圖 2)。

d9a78a42-9652-11ef-8084-92fbcf53809c.gif

圖2:小球在大球上投下了陰影。陰影射線在到達光源之前與小球相交。

如果我們對每個像素重復這個操作,我們就可以得到我們三維場景的二維表示(圖 3)。

d9c00680-9652-11ef-8084-92fbcf53809c.gif

圖3:為了渲染一個幀,我們為每個幀緩沖區的像素發射一個主射線。

以下是算法的偽代碼實現:

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 the intersection Point pHit; 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; }}

正如我們所看到的,光線追蹤的美妙之處在于它只需要幾行代碼;一個基本的光線追蹤器只需要 200 行代碼。與其他算法(如掃描線渲染器)不同,光線追蹤的實現需要很少的努力。Arthur Appel 在 1969 年的一篇名為“一些用于給固體著色的機器渲染技術”的論文中首次描述了這種技術。那么,如果這個算法如此出色,為什么它沒有取代所有其他渲染算法呢?主要原因在于速度,當時(甚至今天在某種程度上)是這樣的。正如 Appel 在他的論文中所提到的:

“這種方法非常耗時,通常需要比線框圖繪制多幾千倍的計算時間才能獲得有益的結果。其中約有一半時間用于確定投影和場景之間的點對點對應關系。”

換句話說,它很慢(正如 Kajiya 所說的,他是所有計算機圖形學歷史上最有影響力的研究人員之一:“光線追蹤不慢,計算機慢”)。查找光線和幾何圖形之間的交點非常耗時。幾十年來,算法的速度一直是光線追蹤的主要缺點。然而,隨著計算機變得更快,它越來越不是問題。盡管仍有一件事必須說:與其他技術(如 z 緩沖算法)相比,光線追蹤仍然要慢得多。然而,隨著今天的快速計算機,我們可以在幾分鐘內計算出以前需要一個小時才能完成的幀。實時和交互式光線追蹤器是一個熱門話題。

總之,重要的是要記住,渲染例程可以被認為是兩個單獨的過程。一步確定一個物體表面上的點是否從特定的像素可見(可見性部分),第二步著色該點(著色部分)。不幸的是,這兩個步驟都需要昂貴和耗時的光線-幾何交點測試。這個算法是優雅而強大的,但是它迫使我們在渲染時間和精度之間進行權衡。自 Appel 發表論文以來,已經進行了大量研究來加速光線-物體交點例程。隨著計算機變得更加強大并結合這些加速技術,光線追蹤成為了日常生產環境中可用的方法,并且是大多數渲染離線軟件所使用的事實標準。視頻游戲引擎仍在使用光柵化算法。然而,隨著 GPU 加速光線追蹤技術(2017-2018)和 RTX 技術的最近出現,實時光線追蹤也在可及范圍內。雖然一些視頻游戲已經提供了可以打開光線追蹤的模式,但僅限于簡單的效果,如清晰的反射和陰影。

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

    關注

    3

    文章

    800

    瀏覽量

    71413
  • 追蹤器
    +關注

    關注

    0

    文章

    178

    瀏覽量

    26680
  • 光線追蹤
    +關注

    關注

    0

    文章

    185

    瀏覽量

    22127
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    NVIDIA DLSS 5發布并首次引入實時神經網絡渲染模型

    NVIDIA 今天發布 NVIDIA DLSS 5,這是自 2018 年實時光線追蹤首次亮相以來,NVIDIA 在計算機圖形領域最重大的突破。
    的頭像 發表于 03-19 15:33 ?274次閱讀

    電子凸輪同步追蹤的方案分析

    電子凸輪同步追蹤技術作為工業自動化領域的核心控制策略,其本質是通過軟件算法模擬機械凸輪的運動特性,實現多軸間的高精度相位同步。該技術突破了傳統機械凸輪的物理限制,在包裝機械、印刷設備、數控機床等場景中展現出顯著優勢。以下從技術原
    的頭像 發表于 03-02 17:13 ?665次閱讀

    BLE SoC,如何助力管理者實現高效的資產追蹤

    基于BLE SoC的資產追蹤方案,具備低功耗、高集成和生態成熟,實現高效資產定位與管理。
    的頭像 發表于 12-22 14:16 ?373次閱讀
    BLE SoC,如何助力管理者<b class='flag-5'>實現</b>高效的資產<b class='flag-5'>追蹤</b>?

    SM4算法實現分享(一)算法原理

    ,Xi、Yi、rki為字,i=0,1,2,…,31。則本算法的加密實現為: 本算法的解密實現與加密實現結構是相同的,不同的只是提供的輪
    發表于 10-30 08:10

    復雜的軟件算法硬件IP核的實現

    具體方法與步驟 通過 C 語言實現軟件算法,并驗證了算法的有效性以后,就可以進行算法的 HDL 轉化工作了。通過使用 Altium Designer 的 CHC 編譯器(C to H
    發表于 10-30 07:02

    目標追蹤的簡易實現:模板匹配

    重新出現在幀圖象中時,迅速地重新捕捉到目標。 以上對目標追蹤這一領域做了簡要的說明,下面將會介紹目標追蹤算法中最簡單的一種 —— 模板匹配算法。 三、模板匹配
    發表于 10-28 07:21

    詳解ROMA中復雜圖表的渲染實現

    一、背景 ROMA承接很多復雜圖表的渲染需求,在京東金融APP內,特別是首頁首屏的圖表,對圖表渲染的及時性要求很高。近期業務反饋頻繁重啟時,首頁的黃金走勢圖偶現渲染不出的問題,通過梳理圖表的
    的頭像 發表于 10-21 13:57 ?611次閱讀
    詳解ROMA中復雜圖表的<b class='flag-5'>渲染</b><b class='flag-5'>實現</b>

    知乎開源“智能預渲染框架” 幾行代碼實現鴻蒙應用頁面“秒開”

    ,交互延遲等核心痛點,通過智能預測用戶瀏覽目標進行提前渲染,只需幾行代碼即可顯著提升復雜頁面的加載性能,實現“頁面秒開”的高效體驗,為鴻蒙開發者帶來開發效率和用戶體驗的雙重飛躍。 隨著鴻蒙生態快速發展,應用開發者難免會遇到一些性能問題
    的頭像 發表于 08-29 14:32 ?683次閱讀
    知乎開源“智能預<b class='flag-5'>渲染</b>框架” 幾行代碼<b class='flag-5'>實現</b>鴻蒙應用頁面“秒開”

    如何使用樹莓派與OpenCV實現面部和運動追蹤的云臺系統?

    大家好,這是一個樹莓派和OpenCV的連載專題。使用樹莓派與OpenCV實現姿態估計和面部特征點追蹤使用樹莓派與OpenCV實現面部和運動追蹤的云臺系統使用樹莓派和OpenCV
    的頭像 發表于 08-14 17:45 ?2138次閱讀
    如何使用樹莓派與OpenCV<b class='flag-5'>實現</b>面部和運動<b class='flag-5'>追蹤</b>的云臺系統?

    如何使用樹莓派+OpenCV實現姿態估計和面部特征點追蹤

    大家好,這是一個樹莓派和OpenCV的連載專題。使用樹莓派與OpenCV實現姿態估計和面部特征點追蹤使用樹莓派與OpenCV實現面部和運動追蹤的云臺系統使用樹莓派和OpenCV
    的頭像 發表于 08-13 17:44 ?1416次閱讀
    如何使用樹莓派+OpenCV<b class='flag-5'>實現</b>姿態估計和面部特征點<b class='flag-5'>追蹤</b>?

    光線跳線怎么用

    光線跳線(光纖跳線)是用于連接光纖設備(如交換機、路由器、光模塊、光纖收發器等)或實現光信號靈活分配的關鍵組件,其使用方法需結合具體場景和設備類型。以下是詳細的使用指南: 一、光線跳線的基本組
    的頭像 發表于 07-18 09:40 ?1079次閱讀

    基于FPGA實現FOC算法之PWM模塊設計

    哈嘍,大家好,從今天開始正式帶領大家從零到一,在FPGA平臺上實現FOC算法,整個算法的框架如下圖所示,如果大家對算法的原理不是特別清楚的話,可以先去百度上學習一下,本教程著重介紹
    的頭像 發表于 07-17 15:21 ?3649次閱讀
    基于FPGA<b class='flag-5'>實現</b>FOC<b class='flag-5'>算法</b>之PWM模塊設計

    通道渲染:釋放渲染的全部潛能!通道渲染的作用、類型、技巧

    在3D圖形創作中,渲染通道(RenderPasses)是一項至關重要的技術,它通過將復雜的渲染圖像拆分為多個圖層,如陰影、光照、法線等,使藝術家能夠在后期制作中更精準地控制和調整畫面。我們常常驚嘆于
    的頭像 發表于 07-15 14:22 ?839次閱讀
    通道<b class='flag-5'>渲染</b>:釋放<b class='flag-5'>渲染</b>的全部潛能!通道<b class='flag-5'>渲染</b>的作用、類型、技巧

    基于FPGA的壓縮算法加速實現

    本設計中,計劃實現對文件的壓縮及解壓,同時優化壓縮中所涉及的信號處理和計算密集型功能,實現對其的加速處理。本設計的最終目標是證明在充分并行化的硬件體系結構 FPGA 上實現算法時,可
    的頭像 發表于 07-10 11:09 ?2518次閱讀
    基于FPGA的壓縮<b class='flag-5'>算法</b>加速<b class='flag-5'>實現</b>

    CPU渲染、GPU渲染、XPU渲染詳細對比:哪個渲染最快,哪個效果最好?

    動畫渲染動畫3D渲染技術需要應對復雜的計算任務和精細的圖像處理,作為渲染技術人員,選擇合適的渲染模式,會直接影響制作效率和成品質量。在主流的渲染
    的頭像 發表于 04-15 09:28 ?1919次閱讀
    CPU<b class='flag-5'>渲染</b>、GPU<b class='flag-5'>渲染</b>、XPU<b class='flag-5'>渲染</b>詳細對比:哪個<b class='flag-5'>渲染</b>最快,哪個效果最好?