视频系列:RTX实时射线追踪(上)
視頻系列:RTX實時射線追蹤(上)
Video Series: Practical Real-Time Ray Tracing With RTX
RTX在游戲和應用程序中引入了一個令人興奮的和根本性的轉變。在這個視頻系列中,NVIDIA工程師Martin Karl Lefrancois和Pascal Gautron幫助您開始實時光線跟蹤。您將了解如何管理數據和渲染、加速結構和著色器如何工作,以及管道需要哪些新組件。我們還將包括本視頻系列所基于的演示文稿中的關鍵幻燈片。
這些視頻包含豐富的信息,但在您觀看時不要擔心記下東西;我們已經為您做了筆記。你可以從每一個以子彈形式呈現的片段中找到“關鍵的東西”。不過,我們強烈建議你在挖掘子彈之前先看視頻,以確保你得到了正確的上下文。
Part1: Ray Tracing: An Overview (3:15 min)
Key things from part 1
光線跟蹤是一個與光柵化根本不同的渲染過程,如圖1所示。
Figure 1. Instead of the triangle being projected on the screen, we take the position from the eye, send a ray through the pixel, and try to find the triangle underneath.
可以跟蹤更多光線來計算該像素的陰影。
當你追蹤光線時,它會擊中最近的三角形并將其返回給你。
你不必解決它。它只會返回沿射線最近的三角形。
當場景中有很多三角形時會發生什么?如何快速處理?您需要一個加速結構,如圖2所示。場景中的所有對象周圍都有一個大的邊界框,一種算法將拆分該框并重復執行此操作,直到該框僅包含幾個三角形。然后,你就可以用這些三角形來測試了。
Figure 2. The construction of this acceleration structure is provided by RTX API.
Part2: Data and Rendering (11:14 min)
Martin Karl解釋了實時光線跟蹤中數據的組成,并說明了加速度結構、管道和綁定表是如何協同工作的。
Key things from part 2
圖形程序包括用戶界面和交互、引擎更新、數據和渲染。我們對光線跟蹤的數據和渲染組件特別感興趣。
光柵包括頂點緩沖區和包含場景中所有三角形的索引,如圖3所示,以及頂點和片段著色器。
Figure 3. Raster scene construction.
聚集一起,他們將有助于繪制你的場景。在光線跟蹤中,必須將頂點和索引的緩沖區轉換為加速度結構。同樣,頂點和片段著色器必須轉換為不同類型的著色系統。在光柵中,這些是分開的。在光線跟蹤器中,你必須把這些東西結合起來。
底層加速度結構(BLAS)和頂層加速度結構(TLAS)代表兩部分。為什么結構會這樣分裂?讓我們考慮一個城市、汽車和卡車的例子,如圖4所示。
Figure 4. Splitting the acceleration structure into top and bottom halves improves performance.
一個加速結構支撐著城市。你把所有的建筑都放在里面。這都是靜態的;你想渲染和光線跟蹤那塊非常快。
另一個加速結構支撐著汽車。在本例中,有兩個實例使用它,因為同一輛車在場景中可以是不同的顏色。
最后,我們使用一個實例添加一個truck。
您可以輕松地重建頂層。汽車可以在整個城市移動,你不必重建整個系統。
你可以在底層重建。如果一個結構必須調整,比如說,一場車禍,你可以在不改變其他結構的情況下做出改變。
出于性能原因,您希望最小化底部結構的數量。追蹤光線穿過兩個重疊的BLA需要做兩倍的工作來找到最近的交點…這一點很重要。
讓我們看看光線跟蹤管道,如圖5所示。
Figure 5. The Ray Tracing Pipeline
管道由一組著色器組成,如圖6所示。
首先是轉到光線生成著色器的像素。這就是你決定開始的地方和你拍攝光線的方向,一個叫做光線生成的過程,以每像素為單位執行。這將為您準備的每個像素調用。
然后,它將轉到遍歷,并調用交叉點著色器。有一個內置的三角形(可以重寫)。
Figure 6. Ray tracing shader architecture
還有一個任意命中材質球。這是內置在管道中的,但您可以覆蓋它。例如,葉子形狀由alpha紋理定義的樹。你想讓這個系統經歷所有的困難,直到它真的碰到什么東西。它測試alpha,只有當葉子的身體受到真正的觸碰,而不是僅僅觸碰葉子的外部時,才會產生最接近的命中率。
您也可以將此用于陰影光線。
最接近的命中材質球在實際接觸對象時起作用。最近的命中保存了陰影的代碼。你也可以從那里追蹤新的光線并追蹤到你的影子。
當你什么都不碰的時候,你就會發現“小姐”的影子。你完全忽略了場景中的所有對象。例如,這將是您的環境著色器。
All together now
圖7中的圖表顯示了完全使用光線跟蹤著色器管道的可能性。
Figure 7. This diagram shows one possible data flow using ray tracing shaders.
你有一個TLAS(頂層加速結構)和一個BLAS(底層加速結構)。
管道是找到編譯的著色器和聲明所有著色器的位置。
著色綁定表將綁定著色器的元素。
它們共同維護一個復雜的關系,但不太復雜,如圖8中的組裝圖所示。
Figure 8. This assembly view shows the relationship between the ray tracing pipeline and the shader binding table. This is what you have to do in DX12.
在渲染方面,光線跟蹤只需要一個調用dispatchray。然后你可以移動到無人機,并渲染目標。
Figure 9. The rendering side of ray tracing uses just a single call.
Part3: RTX Acceleration Structures (8:04 min)
Pascal現在提供了一個更深入的研究,當您嘗試使用基于光柵的應用程序并使其與光線跟蹤一起工作時會發生什么。
Key Things from Part 3
雖然本系列視頻的焦點是直接X12,但基本原理都轉移到Vulkan。閱讀我們的博客文章關于Vulkan射線跟蹤如何與RTX工作的更多細節。
Regarding acceleration structures
將場景分為底層實例(BLAS)
為每個實例生成底層加速結構
少BLAS更好
將動態對象保存在它們自己的BLAS中
對動態對象使用重新裝配
生成頂層加速結構(TLAS)
How do we build the BLAS?
從描述符開始,如圖10所示。
您將能夠重用基于光柵的應用程序中使用的數據。通常,您可以指向頂點和索引緩沖區,并訪問完全相同的數據。在基于光柵的應用程序中,可以使用與每個對象對應的任何范圍來描述對象。
Figure 10. Setting up bottom-level acceleration structures
您可以將不同的對象放在一個BLAS中,并使用轉換緩沖區來定位它們,該緩沖區會將它們烘焙到一個加速結構中。
三角形將被內部轉換并放置在加速結構的正確位置。
我們構建了另一個描述符,它將給我們一些關于BLAS將是什么的信息。我們需要定義是否能夠更新結構,如圖11所示。
Figure 11. More BLAS setup requirements
Obtain pre-build information
確定產生的加速度結構的尺寸。
scratch數據大小描述了加速結構構建器在構建過程中需要多少內存。你需要分配這個內存。
在DX12中沒有隱藏的分配;必須顯式地執行所有操作。
scratch空間僅在構建期間使用。之后,您可以取消分配。
一旦分配了暫存空間,就可以重用所有的描述符。您可以創建另一個帶有更新標志的描述符,用于可選的重新安裝。最后,可以構建BLAS,這在GPU上發生得很快。
Build the TLAS
就像處理場景圖一樣,只有兩個級別。
每個實例都有一個ID,它描述了在哪里找到與對象對應的著色器,如圖12所示。
Figure 12. Top level acceleration structure setup
再次,我們有一個轉變,這次是在TLAS。如果我們想在世界上移動一個完整的底部水平,我們可以使用這個,并有非常快速的重新擬合,而不必接觸實際的幾何。
您遵循與使用BLAS相同的原則,但我們將獲取實例化信息,而不是幾何體。
總結
以上是生活随笔為你收集整理的视频系列:RTX实时射线追踪(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 提示和技巧:光线跟踪最佳实践
- 下一篇: 视频系列:RTX实时射线追踪(下)