作者:Kristof Beets,Imagination Technologies PowerVR產品管理資深總監
我們所處的世界充滿著由太陽或其他人造光源發射出的數以億計的光線。當光照射到物體表面時,光線會以各種方式反彈、分散和反射,直至最終到達我們的眼睛。正是這種復雜的交互作用創造了我們的現實“視界”。光線追蹤是一種用于三維(3D)圖形的照明技術,它可以模擬真實世界中的光線照射方式。雖然它能產生最逼真的效果,但是從傳統上看,其過程對于計算機而言還是過于復雜,以致無法實時創建三維圖形。
如今,它被廣泛用于為廣告和電影創建超逼真的渲染效果,但是在這些應用中,即使利用當今功能非常強大的計算服務器,生成每一幀數據仍需花費數小時。光線追蹤是個時髦詞,作為實時圖形的發展方向,它令人們感到非常興奮(也有人將其視為炒作,這取決于你的看法)。在本文中,我們將認識光線追蹤,并了解實現它的方法。
簡化問題
在三維游戲中,場景由各種物體組成,當這些物體組合在一起時,就會形成數百萬個三角形。光線追蹤最基本的功能就是發射出一條光線,然后沿著它在三維場景中的路徑來定位它所到達的第一個物體,進而確定應該如何對該物體進行照明。然而,用場景中的每個物體去測試一條光線以確定它們是否相交,這樣的做法效率太低、計算成本太高,完全無法實時進行。
因此,為了使用光線追蹤技術,我們需要解決這一問題。
使用場景層次結構將兔子劃分到多個小方框中
這可以通過建立光線追蹤加速結構來實現。為了做到這一點,我們可以圍繞整個游戲場景繪制一個方框,然后將其劃分為多個較小的方框,再將這些小方框細分為更小的方框,我們按這種方式不斷將方框進行細分,直到小方框中的三角形數量達到便于管理的程度為止。我們將其稱為場景層次結構,它幫助我們將問題簡化到一定程度,使現有的圖形處理器可以有效地進行處理。
這種方法之所以有用,是因為當我們向游戲場景中發射光線時,可以根據場景層次結構逐層進行檢查。首先,我們要檢查光線到底有沒有射入最大的方框(即我們的場景)。如果有,我們將繼續檢查下一層的小方框。在這個階段,我們會發現光線射入了一些方框,但沒有射入另一些方框。接下來,我們可以不斷將光線未射入的方框排除在外,只重點關注光線射入的那些方框,直至我們找到光線與三角形相交的地方。至此,我們終于找到了自己的目標。
這種層次結構使我們能夠找到光線和三角形最近的交點,而不必測試場景中的每個三角形。這極大地簡化了問題,因此可以更快地完成處理過程。
在幾何處理階段(該階段硬件會完成物體的動畫處理工作)之后,我們會將那些三角形置入一個稱為場景層次生成器的專用硬件中,該生成器可以生成上面所述的加速結構。我們還添加了一些專門的光線/方框/三角形測試器,它們是專用的固定功能硬件,用于通過加速結構進行光線追蹤,并確定光線與三角形的交點。與使用軟件可編程管線相比,在專用硬件中完成所有這些操作要快得多,而且更節省面積和功耗。
那么,當硬件確定光線照射到一個三角形之后,下一步該做什么?接下來我們會觸發一個片段著色器,這是一個小程序,可以確定該三角形特定位置的顏色,這一步和傳統的渲染方式基本相似。然后,通過該片段著色器程序,我們將更多的光線發射到三維場景中,隨著此過程的不斷重復,就可以建立起我們的光線追蹤場景。
一致性問題
但是,現在我們又有一個新問題。我們向場景中發射了大量光線,那么該如何高效地進行所有處理工作呢?我們需要從存儲器內的加速結構中獲取方框和三角形,并且當每條光線每次照射到一個物體上時都會觸發一次片段程序。
不幸的是,光線是不穩定的,它們不一定會沿著同一方向傳播。在專業術語中,我們將此描述為不一致性——這會帶來問題。不一致的數據訪問對現代的圖形處理器(GPU)來說是不利的。這有點像在按字母順序排列的名片簿中查找信息,但給我們的名字卻是按完全隨機的順序排列的——這就需要我們不停地來回翻查,會占用寶貴的時間和精力。
光線追蹤加速結構
更糟糕的是,當光線隨機地向四處反彈時,它們還會照射到不同的物體和三角形上,這些物體和三角形需要分別著色和添加陰影,這將觸發不同的著色器程序。然而,GPU喜歡以并行方式處理著色器。這正是GPU的強大之處:以大規模并行方式處理數據的能力使其比其他處理器(如CPU)更具優勢。這是因為GPU的算術邏輯單元(ALU)本質上采用了單指令多線程(SIMT)方式。但是,如果每條光線會觸發一個不同的著色器,那么將無法在GPU上運行,因為這需要多指令多線程(MIMT)架構,該架構在芯片面積和功耗方面的效率都很低。
針對此問題的一種解決方案是采用Imagination Technologies開發的一致性引擎,該引擎可以追蹤光線,并且在場景中所有混亂的光線之間找到秩序。
如果你看下面的圖片,一開始可能會覺得光線是隨機的。但是,如果你更仔細地觀察,會發現實際上是存在一致性的。
為了更清楚地對此進行解釋,請注意圖中物體的某些部分是如何反射相同黃色對象的。盡管看起來很混亂,但還是會發現有一些光線是沿著同一方向傳播的,并照射到了相似的對象上。我們的一致性引擎會對此進行查找,并將這些光線分組,從而使它們更易于被GPU處理。這就是“魔法”,我們重新實現了高效的數據訪問和執行,從而降低了處理的功耗以及對帶寬的需求。
混合渲染的好處
太好了,我們現在可以高效地進行光線追蹤了。然而,正如我們前面說的,現實世界中會有數以億計的光線向四面八方反射,從而形成我們眼睛看到的圖像。因此,即使考慮到我們實現的所有效率提升,使用光線追蹤來創建整個場景仍然是有問題的。那么解決方案是什么?混合渲染。
雖然傳統的柵格化渲染在如今是一種很好的方法,但它卻困擾于空間交互問題,例如燈光/陰影、反射和折射——而這些復雜的事情正是光線追蹤所擅長的。通過混合渲染方法,我們可以同時利用兩者的優勢,對簡單的物體使用柵格化渲染,然后從著色器發射一些光線,并有選擇性地創建數量有限的空間光線追蹤查詢,進而創建超逼真的陰影、照明效果和精確的反射。通過使用這種混合渲染方法,我們極大地減少了所需追蹤的光線數量,這最終使我們實現了實時性能。
手機上的光線追蹤:真的會實現嗎?
答案很簡單:是的,會實現。如今智能手機中的GPU相比其首次推出時已經取得了巨大的進步,這不僅體現在功能方面,在實際可實現的性能方面亦是如此。事實上,高端智能手機已經突破了1 TFLOPS(每秒萬億次浮點運算)的計算壁壘,而這曾是專用游戲機的專屬能力。這其中的核心問題是效率。智能手機依賴于電池續航時間,而光線追蹤相比傳統的渲染方法更高效,因此它很有可能會很快地被添加到移動設備體驗中。
利用上述創新,Imagination可以實現高效的光線追蹤。在智能手機中,使用傳統的柵格化方法在游戲中“偽造”陰影和反射的成本非常高。在Unity或Unreal等現代游戲引擎中,反射是使用級聯陰影貼圖生成的。這需要多次渲染屏幕中的幾何體,并將陰影貼圖查找表寫入存儲器中,所有這些操作都會消耗周期和帶寬,并產生大量的GPU和系統功耗。
通過使用光線追蹤,我們可以向光源發射一條光線,如果該光線碰到了光以外的任何東西,我們就知道該片段處于陰影中。所以,使用我們簡化且高度優化的光線追蹤解決方案會簡單得多,相比級聯陰影貼圖所需的預處理,它是一種功耗更低的解決方案。
在分析我們自2016年以來的原型光線追蹤硬件時,我們發現相比陰影、反射和其他技術,光線追蹤的功耗通常不到一半,但獲得的質量卻高得多。這里需要意識到的是,一種復雜但“虛假”的技術比簡單的光線追蹤技術功耗更高,而光線追蹤技術實現的效果卻逼真得多,這使得它不僅適合現代的高端智能手機,而且是非常理想的選擇。
人工智能和超分辨率
雖然在智能手機中應用光線追蹤是一種選擇,但我們同樣對云游戲的日益普及感到興奮,這得益于5G網絡和邊緣計算的發展。在云游戲中,我們的光線追蹤架構所實現的帶寬和功效很可能也是至關重要的。
我們需要不斷地進行創新,才能以更少的成本實現更多的成果,因此,我們對人工智能(AI)處理的飛速發展感到非常興奮。再加上神經網絡,它們可以與光線追蹤結合使用,從而提供更高的效率。例如,當我們為了提高效率僅追蹤相關光線時,可能會得到含有噪聲的結果。神經網絡在降噪方面有很好的前景,可以利用學到的“智能”來填補缺失的細節。這和現實中的工作方式是一致的,因為我們的大腦也會填補有限的人類視覺系統留下的許多空白。
神經網絡可以用來提高圖像質量,同時無需使用更高的分辨率
另一個極具潛力的概念是超分辨率。它同樣是利用神經網絡的能力,去智能地學習如何填補缺失的細節,以支持GPU以較低的分辨率進行渲染,從而提高性能并降低功耗,同時仍然保持視覺質量。
面向未來
毫無疑問,實時光線追蹤擁有光明的前景,這對于任何對三維圖形感興趣的人來說無疑是令人興奮的。由于光線追蹤基于真實世界的物理原理,因此可以提供最高水平的真實感,同時相比我們迄今為止一直在使用的技巧和近似方法,它還可以提供很高的效率。低功耗的柵格化圖形處理、開創性的光線追蹤操作,再加上人工智能和神經網絡的持續創新,所有這些結合在一起,有助于將圖形處理提升到一個新的高度。
作者簡介:
Kristof Beets,現任Imagination Technologies的PowerVR產品管理資深總監,他已在Imagination工作超過19年,先后擔任過各種開發、產品和營銷職位。
申請轉載文章
公眾號:物理演示實驗室(UPC-Phy-Demo-Lab)
審核編輯:何安
-
光線追蹤
+關注
關注
0文章
183瀏覽量
21473
發布評論請先 登錄
相關推薦
評論