光線追蹤如何實現即時3D繪圖?

作者 : Kristof Beets,Imagination Technologies PowerVR產品管理資深總監

光線追蹤是一種用於3D繪圖的照明技術,它可以模擬真實世界中的光線照射方式。雖然它能產生最逼真的效果,但是從傳統上看,其過程對於電腦而言還是過於複雜,以致無法即時創建3D繪圖。在本文中,我們將認識光線追蹤,並瞭解其實作方法...

我們所處的世界充滿著由太陽或其它人造光源發射出的數以億計光線。當光照射到物體表面時,光線會以各種方式反彈、分散和反射,直至最終到達我們的眼睛。正是這種複雜的互動作用創造了我們的現實「視界」。

「光線追蹤」(ray tracing)是一種用於三維(3D)繪圖的光線渲染技術,它可以模擬現實世界中的光線照射方式。雖然它能產生最逼真的效果,但從傳統上來看,其過程對於電腦而言還是過於複雜,以至於無法即時創造3D繪圖。

如今,它被廣泛用於為廣告和電影創建超逼真的渲染效果,但是在這些應用中,即使利用當今功能非常強大的運算伺服器,產生每一格畫面資料仍需花費數小時。光線追蹤則是一個流行詞,在朝著即時繪圖的方向前進時,也讓人們感到非常興奮(或被視為炒作,這取決於個人看法)。在本文中,我們將討論什麼是光線追蹤以及如何實現這一技術應用。

簡化問題

在3D遊戲中,場景由各種物體組成,當這些物體組合在一起時,就會形成數百萬個三角形。光線追蹤最基本的功能就是發射出一道光線,然後沿著它在3D場景中的路徑來定位它所到達的第一個物體,進而確定應該如何對該物體進行照明。然而,用場景中的每個物體去測試單一光線以確定其是否相交,這樣的做法效率太低、運算成本太高,完全無法即時進行。

因此,為了使用光線追蹤技術,我們需要解決這一問題。

這可以透過建立光線追蹤加速結構來實現。為了做到這一點,我們可以圍繞整個遊戲的場景繪製一個方框,然後將其劃分為多個較小的方框,再將這些小方框細分為更小的方框,我們按這種方式不斷將方框進行細分,直到小方框中的三角形數量達到便於管理的程度。我們將其稱為場景層次結構,它有助於我們將問題簡化到一定程度,使現有的繪圖處理器(GPU)可以有效地進行處理。

圖1:使用場景層次結構將兔子圖形劃分到多個小方框中。

這種方法之所以可行,是因為當我們向遊戲場景中發射光線時,可以根據場景層次結構逐層進行檢查。首先檢查光線究竟是否射入最大的方框(即我們的場景)。如果是的話,我們將繼續檢查下一層的小方框。在這個階段,我們發現光線穿透至一些方框,但另一些方框則否。接下來,我們可以不斷地將光線未射入的方框排除在外,只重點關注光線射入的那些方框,直至找到光線與三角形相交的地方。至此,我們終於找到了自己的目標。

這種層次結構使我們能夠找到光線和三角形最近的交點,而不必測試場景中的每個三角形。這極大地簡化了問題,因而可以更快地完成處理過程。

在幾何處理階段(硬體執行物體動畫處理的階段)之後,我們就可以將那些三角形置入一個稱為場景層次產生器的專用硬體中,該產生器可以產生上述的加速結構。我們還添加了一些專有的光線/方框/三角形檢測器,這些固定功能的專用硬體透過加速結構進行光線追蹤,並確定光線與三角形的交點。相較於使用軟體可編程的管線,在專用硬體中完成這些所需的操作會更快得多,而且也更節省面積和功耗。

那麼,當硬體確定光線照射到一個三角形之後,下一步該做什麼?接下來我們會觸發一個片段著色器(fragment shader),這個小程式可以確定該三角形中特定位置的顏色,這一步驟基本上和傳統的渲染方式相似。透過該片段著色器程式,就可以將更多的光線發射到3D場景中,而隨著此過程的不斷重複,就可以建立起我們的光線追蹤場景。

一致性問題

但是,現在又出現了一個新的問題。我們開始將大量光線發射至場景中,但該如何高效地進行所有處理工作呢?我們需要從記憶體的加速結構中獲取方框和三角形,而且當每道光線每次照射到一個物體時都會觸發一次片段程式。

遺憾的是,光線是不穩定的,它們不一定會沿著同一方向傳播。以專業術語來看,我們將此描述為不一致性——這會帶來問題。不一致的資料存取對於現代的GPU來說相當不利。這有點像是要在按字母順序排列的名片簿中查找資訊,但提供給我們的名字卻是完全隨機出現的——這使得我們必須不停地來回翻找,佔用寶貴的時間和精力。

圖2:光線追蹤加速結構。

更糟糕的是,當光線隨機地向四處反彈時,它們還會照射到不同的物體和三角形上,這些物體和三角形需要分別著色和添加陰影,這將觸發不同的著色器程式。然而,GPU最好是以平行方式處理著色器。這正是GPU的強大之處:以大規模平行方式處理資料的能力使其比其它處理器(如CPU)更具優勢。這是因為GPU的算數邏輯單元(ALU)本質上採用了單指令多執行緒(SIMT)方式。

但是,如果每道光線會觸發一個不同的著色器,那麼將無法在GPU上運行,因為這需要多指令多執行緒(MIMT)架構——該架構在晶片面積和功耗方面的效率都很低。針對此問題的一種解決方案是採用Imagination Technologies開發的一致性引擎,可用於追蹤光線,並且在場景中所有混亂的光線之間找到秩序。

如果你看看圖3,一開始可能會覺得光線是隨機的。但是,如果你更仔細地觀察,會發現實際上是存在一致性的。

3:乍看之下似乎很混亂,但仔細觀察就會發現有些光線沿著同一方向傳播。

為了更清楚地對此進行解釋,請注意圖3中物體的某些部份如何反射相同黃色物件。儘管看起來很混亂,但還是會發現有一些光線是沿著同一方向傳播的,並照射到了相似的物體上。我們的一致性引擎會對此進行查找,並將這些光線分組,從而使其更易於被GPU處理。透過這個「魔法」,我們重新實現了高效的資料存取和執行,從而降低了處理的功耗以及對頻寬的需求。

混合渲染的好處

太好了,我們現在可以高效地進行光線追蹤了。然而,正如我們前面說的,現實世界中會有數以億計的光線向四面八方反射,從而形成我們眼睛看到的影像。因此,即使能夠如此提升效率,使用光線追蹤來創建整個場景仍然是有問題的。那麼解決方案是什麼?混合渲染(hybrid rendering)。

雖然傳統的柵格化渲染如今已是一種理想方法,但它卻仍為空間互動問題所擾,例如燈光/陰影、反射和折射——而這些複雜的事情正是光線追蹤所擅長的。透過混合渲染方法,我們可以同時利用兩者的優勢,對簡單的物體使用柵格化渲染,然後從著色器發射一些光線,並有選擇性地創建數量有限的空間光線追蹤查詢,進而創建超逼真的陰影、光源效果和精確的反射。使用這種混合渲染途徑,有助於大幅減少了所需追蹤的光線數量,最終使我們實現了即時性能。

手機上的光線追蹤:可能實現嗎?

答案很簡單:是的,會實現。如今智慧型手機中的GPU較其首次推出時已經取得了巨大的進步,這不僅是指功能,在實際可實現的性能方面亦是如此。事實上,高階智慧型手機已經突破了1 TFLOPS(每秒兆次浮點運算)的電腦壁壘,而這曾經是專用遊戲機的專屬能力。這其中的核心問題是效率。智慧型手機依賴於電池續航時間,而光線追蹤比起傳統的渲染方法更高效,因此它很有可能很快地就會被添加到行動裝置體驗中。

利用上述創新,可以實現高效的光線追蹤。在智慧型手機中,使用傳統的柵格化方法在遊戲中「偽造」陰影和反射的成本非常高。在Unity或Unreal等現代遊戲引擎中,反射是使用級聯陰影貼圖產生的。這需要多次渲染螢幕中的幾何體,並將陰影貼圖查找表寫入記憶體中,所有這些操作都會花耗費週期和頻寬,並耗用大量的GPU和系統功耗。

透過使用光線追蹤,可以向光源發射一道光線,如果該光線碰到光以外的任何東西,我們就知道該片段處於陰影中。所以,使用簡化且高度最佳化的光線追蹤解決方案會簡單得多,相較於級聯陰影貼圖所需的預處理,它是一種功耗更低的解決方案。

在分析自2016年以來的原型光線追蹤硬體時,我們發現在陰影、反射和其他技術方面,光線追蹤的功耗通常不到一半,但所獲得的品質卻更高得多。這裡需要瞭解的是,複雜又「虛假」的技術比起簡單的光線追蹤技術功耗更高,而光線追蹤技術實現的效果卻逼真得多,這使其不僅適合現代的高階智慧型手機,而且是非常理想的選擇。

人工智慧和超解析度

雖然在智慧型手機中應用光線追蹤是一種選擇,但我們同樣對於雲端遊戲的日益普及感到興奮,這得益於5G網路和邊緣運算的發展。在雲端遊戲中,光線追蹤架構所實現的頻寬和功效也可能是至關重要的。

4:光線追蹤技術為雲端遊戲帶來所需要的頻寬和功效。

我們需要不斷地創新,才能以更少的成本實現更多的成果。因此,我們對人工智慧(AI)處理的飛速發展感到非常興奮。再加上神經網路,還可能搭配光線追蹤共同使用,從而帶來更高的效率。例如,當我們為了提高效率僅追蹤相關光線時,可能會得到含有雜訊的結果。神經網路在降噪方面有很好的前景,可以利用學到的「智慧」來填補缺失的細節。這和現實中的工作方式是一致的,因為我們的大腦也會填補有限的人類視覺系統所留下的許多空白。

圖5:神經網路無需使用更高的解析度,就可以用於提高影像品質。

另一個極具潛力的概念是超解析度。它同樣是利用神經網路的能力,智慧地學習如何填補缺失的細節,以支援GPU以較低的解析度進行渲染,從而提高性能並降低功耗,同時仍然保持視覺品質。

展望未來

毫無疑問,即時光線追蹤擁有光明的前景,這對於任何對3D繪圖感興趣的人來說無疑是令人興奮的。由於光線追蹤基於現實世界的物理原理,因此可以提供最高度的真實感,同時相較於迄今一直在使用的技巧和近似方法,它還可以提供很高的效率。低功耗的柵格化繪圖處理、開創性的光線追蹤操作,再加上人工智慧和神經網路的持續創新,這些最終將會結合在一起,有助於提升繪圖處理到一個新的高度。

(本文同步刊登於《電子工程專輯》雜誌2020年8月號;參考原文: What is ray tracing and how is it enabling real-time 3D graphics?)

掃描或點擊QR Code立即加入 “EETimes技術論壇” Line 群組 !

 EET-Line技術論壇-QR

發表評論