我們周圍的世界充滿了太陽或其他人造光源所發(fā)出的數十億種光線。當光線擊中物體和物體表面時,光線以各種方式反彈、斷裂和反射,直到它們最終到達我們的眼睛;正是這種復雜的互動創(chuàng)造了我們對現實的看法。光線追蹤是一種三維圖形的照明技術,模仿現實世界的方法,雖然它產生了最現實的結果,但這一過程傳統上過于復雜,計算機無法實時生成3d圖形。
如今,它被廣泛用于為廣告和電影制作超現實的畫面,但在這些情況下,即使是在當今強大的計算機服務器上,也需要花費數小時來生成每一個畫面。射線追蹤是一個流行詞,它可以產生大量的興奮(或大肆宣傳,視你的觀點而定),作為實時圖形的前進之路。在這篇文章中,我們研究了射線追蹤,以及是什么使它成為現實。
減少問題
在3d游戲中,世界是由物體組成的,如果結合起來,它由數百萬個三角形組成。射線追蹤的最基本功能是發(fā)出光線,沿著它的路徑穿過3D世界,找到它到達的第一個物體,以確定該如何照明。即使是用每一個場景中的物體來測試一個光線,看它們是否相互交叉,都是效率太低,計算成本太高,無法實時應用。
為了使用射線追蹤,我們需要解決這個問題。
利用場景層次結構將這只兔子分成幾個盒子
這可以通過建立射線追蹤加速度結構來實現。為了做到這一點,我們在游戲世界中畫了一個盒子,然后我們將它細分為更小的盒子,然后再將那些盒子細分為更小的盒子,直到我們最終擁有一個小盒子,里面包含可以控制的三角形數量。我們稱之為場景層次結構,正是這個幫助我們將問題減少到當前圖形處理器能夠有效處理的東西。
它之所以有效,是因為當我們向游戲世界發(fā)送光線時,我們首先在最大的盒子上檢查光線。光線會擊中我們的世界嗎?如果是的話,我們會檢查下一級別的小盒子。在這個階段,我們發(fā)現我們的射線已經穿透了一些盒子,而不是其他的。因此,我們排除了它所錯過的東西,只深入到被光線擊中的盒子里,直到我們找到光線與三角形交叉的地方。在這一點上,我們最終找到了目標。
這種分層結構使我們能夠找到最近的光線和三角形的交叉點,而不必測試場景中的每一個三角形。它大大簡化了問題,因此可以更快地完成。
在硬件完成動畫化對象工作的幾何處理階段之后,我們將這些三角形輸入到一個名為"場景層次生成器"的專門硬件中,它生成了上面描述的加速度結構。我們還增加了一些專用的射線/盒/三角測試器,它們是專用的固定功能硬件,通過這種加速度結構來追蹤光線,并定位射線和三角形的交點。與使用可編程的軟件管道相比,在專用硬件中完成所有這些工作要快得多,面積更大,效率更高。
那么,一旦硬件確定光線擊中三角形,下一步是什么?所發(fā)生的是,我們觸發(fā)了一個片段著色器,一個小程序,它決定了該三角形特定位置的顏色,這一步驟與傳統的呈現基本相似。通過這個片段著色程序,我們將更多的光線發(fā)送到3D世界,當這個過程被重復時,它建立了我們的光線追蹤場景。
連貫性問題
但現在我們有了新問題。我們正在向現場發(fā)送大量的射線,但是我們如何有效地處理所有這些?我們需要從我們的內存中的加速度結構中獲取盒子和三角形,每個光線每次擊中一個物體時都會觸發(fā)一個片段程序。
不幸的是,光線是不穩(wěn)定的東西,它們不一定是朝同一方向移動的。從技術上講,我們將其描述為不連貫--這是個問題。不連貫的數據訪問是不良的現代GPS。這有點像試圖在字母表中查找信息,但是這些名字是完全隨機地給我們的--提示我們來回閃爍,占用寶貴的時間和寶貴的精力。
射線追蹤加速度結構
更糟糕的是,當光線在周圍隨機反彈時,它們也會擊中不同的物體和三角形,這些物體需要不同的顏色和陰影,這將觸發(fā)不同的著色程序。然而,GPS喜歡以并行的方式處理著色器。這正是GPS強大的地方:他們能夠以大規(guī)模并行的方式處理數據,這使他們比CPU等其他處理器更有優(yōu)勢。這是因為他們的算術邏輯單元(Alus)本質上是單個指令、多個線程(Simt)。如果每一個射線觸發(fā)一個不同的著色器,它將不會工作在一個GPU上,因為這將需要一個多重指令,多個線程(MIMT)架構,這是硅面積和功率效率低下。
一種解決辦法是通過想象技術開發(fā)出的連貫性引擎,它追蹤光線,并在場景中所有光線的混亂中找到秩序。
如果你觀察圖片(下面),光線最初可能看起來是隨機的。然而,如果你更仔細地看,你會注意到,實際上,有一致性。
為了解釋,請注意物體的某些部分是如何反映同一個黃色物體的。盡管表面上看起來很混亂,但一些射線正朝著同一個方向運動,并擊中類似的物體。我們的一致性引擎尋找這一點,將這些射線分類成組,從而使它們更容易處理的GPU。這就是"魔力",因為我們重新獲得數據訪問和執(zhí)行效率,從而降低了處理中的功率和帶寬。
混合繪制的好處
這太棒了,我們現在可以追蹤光線,并且有效地進行。然而,正如我們之前所說的,現實在周圍反射了數十億的光線,使我們的眼睛看到的圖像,所以即使我們的效率提高了,使用射線追蹤創(chuàng)造了一個完整的場景,仍然是個問題。答案是什么?混合繪制。
雖然傳統的光柵化繪制今天做得很好,但它與空間相互作用,如光/影,反射和折射--正是光線追蹤擅長的復雜事物。通過混合繪制,我們抓住了兩個世界中最好的東西,用光柵化處理簡單的物體,然后從我們的著色器中選擇性地產生有限數量的空間射線跟蹤查詢,以產生超現實的陰影、照明效果和精確的反射。通過使用這種混合方法,我們大幅度地減少了我們需要追蹤的射線數量,這最終使我們進入了實時性能的領域。
雷追蹤電話:真的有可能嗎?
簡單的回答是是。如今智能手機中的gp自首次推出以來,不僅在功能集方面,而且在現實世界中的性能方面都取得了巨大的進步。事實上,高端智能手機已經突破了TFLOPS計算障礙,這是以前專用游戲機的唯一領域。這里真正的問題是效率。智能手機依賴于電池壽命,由于射線追蹤比傳統的繪制方法更有效,它很有可能很快被添加到移動體驗中。
利用上述的創(chuàng)新,想象力使有效的射線追蹤成為可能。在智能手機中,在游戲中假裝陰影和反射的成本已經很高了。在現代游戲引擎中,如統一或不真實,反射是使用級聯陰影映射生成的。這就需要多次繪制屏幕的幾何形狀,并將陰影映射查找表寫入內存,所有這些都需要周期和帶寬,耗費大量的GPU和系統力量。
通過光線追蹤,我們向光源發(fā)送一個光線,如果光線擊中光以外的任何東西,我們知道碎片在陰影中。使用我們的流線型超優(yōu)化射線追蹤解決方案,這要簡單得多,因此比級聯陰影映射所需的預處理功率更低。
在分析2016年的原型射線追蹤硬件時,我們發(fā)現,對于陰影、反射和其他技術,功率消耗往往不到一半,由此產生的質量更高。這里的認識是,一種復雜但"假冒"的技術比簡單的射線追蹤更消耗能量,這提供了更現實的結果,使它不僅適合而且可取于現代高端智能手機。
人工智能和超分辨率
雖然基于智能手機的射線追蹤是一種選擇,但我們同樣為云游戲日益流行而興奮,這是由于5G網絡和邊緣計算的增長所支撐。在這里,我們的光線追蹤架構所支持的帶寬和功率效率可能是至關重要的。
創(chuàng)新總是需要以更少的成本提供更多的產品,因此,我們對人工智能加工的快速進步感到非常興奮。再加上神經網絡,這些可以與射線追蹤相結合,從而提供更高的效率。例如,由于我們只是為了提高效率而追蹤相對較多的射線,我們可能會得到較多的結果。神經網絡顯示出巨大的希望,減少噪音填補缺失的細節(jié),使用學習的"智能"。同樣,這也是現實的運作方式,因為我們的大腦也填補了我們有限的人類視覺系統留下的許多空白。
神經網絡可以用來提高質量,而不必轉移到更高的分辨率
另一個巨大的潛在概念是超分辨率。這再次利用了神經網絡的力量,這一次聰明地學習如何填補缺失的細節(jié),使GPS能夠在較低的分辨率呈現,從而提高性能和減少耗電,同時仍然保持視覺質量。
未來
毫無疑問,實時射線追蹤有著光明的未來,這無疑是對3D圖形感興趣的人興奮的時刻。由于它基于現實世界的物理學,射線追蹤提供了最高水平的現實主義,但它也提供了很高的效率,相對于我們迄今為止一直在使用的黑客和近似。低功率光柵化圖形,開拓性的射線追蹤工作,以及在人工智能和神經網絡中持續(xù)的創(chuàng)新,所有這些結合起來,幫助將圖形提升到下一個層次。