RTX顯卡支持的實時光線追蹤是什么?
今年計算機圖形學上什么最火爆?那莫過于實時光線追蹤了。GDC 2018上,微軟率先為DirectX 12 API增加了光線追蹤模塊,命名為DirectX Raytracing (DXR);NVIDIA則是發布了基于實時光線追蹤的RTX技術;AMD也宣布是自家的ProRender渲染引擎將支持實時光線追蹤。此外諸如EA 寒霜引擎、EA Seed、Unreal 引擎、3DMark、Unity 引擎已經宣布將會引入光線追蹤。但這些似乎距離我們還有些遙遠,直到前兩天NVIDIA發布了RTX 2080 Ti、RTX 2080、RTX 2070游戲顯卡,明確表示從硬件級別支持光線追蹤!那么到底什么是光線追蹤?
光線追蹤能達到什么樣的效果?其實這個我們每一個人都體驗過,絕大部分科幻、動作電影里面或多或少都會用上光線追蹤這一技術。比如令人血脈賁張的《極品飛車》、《權力游戲》中的火焰、煙霧和爆炸效果仿佛身臨其境,可以說光線追蹤生成的影像與攝影機拍攝的影像難以區分,這就是光線追蹤能達到的極致效果。但具體如何做到的,請聽我娓娓道來。
其實剛聽說要詳細講一下什么是光線追蹤我是拒絕的,因為,你不能讓我寫,我就馬上去寫,第一里面涉及到算法、數學原理實在是太多了,因為我不愿意寫的時候涉及過多公式,“Duang”一下,顯得很高大上,這樣觀眾出來一定會罵我,根本看不懂你在講什么,那就等于白講了。后來想了想,希望以最通俗易懂方式來講解光線追蹤是怎么回事,盡可能地少涉及到數學公式以及算法原理,因為我要讓觀眾看到,我能理解的是這樣子,你們看完之后也會是這個樣子!
B站地址:av21083762 里面有很多P,可以選1080分辨率享受
光柵化
想要了解什么是光線追蹤,這里我們不得不提及耳熟能詳的專業名詞“光柵化”,因為它是光線追蹤的基礎,也是高效替代方案。為什么會出現這樣看似矛盾的定義?
因為光柵化是一個非常宏大的概念,它有可能是指代某一個框架,也可能是具體到某一個技術上。就目前現階段來說,我們并不愿意將光柵化放到與光線追蹤的對立面上,因為光線追蹤還是需要光柵化作為基礎,同時起到錦上添花作用,因此現階段實現的依然是混合渲染,兩者相輔相成,缺一不可,并不是部分自媒體吹噓的那樣,光線追蹤可以完全替代光柵化。
光柵化的簡單原理:
圖片來源
按照字面意思就是把圖像柵格化、像素化,將電腦生成的矢量圖轉換成屏幕像素點的過程。比方說,游戲中物體建模的時候都是三維,由點線面構成,但要顯示在二維的顯示器上,就需要一個“降維打擊”——光柵化,成為能夠被顯示的像素點,其實就是三維向二維的轉化過程,這是目前渲染的基石。
圖片來源
NVIDIA親自解釋光柵化過程:(不看也不影響閱讀系列)
圖片來源
每個三角形的頂角與大小和形狀不同的其他三角形的頂點相交,每個頂點關聯著大量信息,包括其在空間中的位置以及有關顏色、紋理及其“正常形式”的信息,這些信息用于確定物體所朝向表面的形式。 計算機隨后將3D模型的三角形轉換為2D屏幕上的像素或點,可以根據存儲在三角形頂點中的數據為每個像素分配一個初始顏色值。
進一步像素處理或“陰影處理”,包括基于場景中的光線如何碰撞像素改變像素顏色,以及將一個或多個紋理應用于像素,從而結合生成應用于像素的最終顏色。
這種技術的計算量異常大。一個場景中的所有物體模型可以使用多達數百萬個多邊形,4K顯示器中有近800萬個像素。而且屏幕上顯示的每個幀或圖像通常會在顯示器上每秒刷新30-90次。
此外,還要使用內存緩沖區(為加快運行速度預留出來的一點臨時空間)在即將到來的幀于屏幕上顯示之前預先渲染這些幀。還需使用深度或“Z緩存” 存儲像素深度信息,以確保在屏幕上顯示像素的X-Y屏幕位置上的頂層物體,并且頂層物體背后的物體保持隱藏狀態。
光柵化過后的平面圖像其實并不真實,這是原理所決定的,因此后期圖形學中出現了增強真實感的各種渲染技術,包括“全局照明”、“環境光遮蔽”、“漫反射”以及“軟陰影”,他們都是意圖用更低開銷實現更真實的光照效果。
由于都是通過算法來實現,并沒有統一標準,游戲開發商可以自行選擇并使用,因此我們看到一些游戲里面有各種光影特效,而另一些游戲中就沒有。如此之多、五花八門的技術就是為了創造以假亂真的光照效果,其實說到底就是我們的顯卡算力太弱了,只配用這種近似解的方案。
圖片來自artofvfx
光線追蹤
而在電影行業中,早就用上了我們提及的光線追蹤,他們已經有相當成熟的解決方案,完全可以達到以假亂真的效果,你看看漫威的科幻大片,是不是給你一種異常真實的錯覺?沒錯,這就是光線追蹤的魅力。
至于為什么電影行業能這樣做,原因不外乎有兩個:一是有時間,他們采用的離線光線追蹤,是要慢慢一幀幀渲染出來;二是有錢,通常特效工作室會使用到NVIDIA所說的渲染農場,不是一臺電腦在算,而是一個個渲染集群服務器在工作,算力是你機箱里的GTX 1080 Ti成千上萬倍,因此它們可以這樣玩。
圖片來源
光線追蹤的歷史
其實光線追蹤并不是近幾年才有的概念,它的歷史甚至可以追溯到上世紀70年代。
1968年,Arthur Appel在其論文《 Some techniques for shading machine rendering of solids》提出Ray Casting(光線投射)的新概念,這也是后來光線追蹤的基石。
圖片來源見水印
其具體思路是從每一個像素發出一條光線,然后找出會擋住傳播路徑的物體,那么只要計算被擋住之前的傳播路徑(直接光照部分),而視平面上每個像素的顏色取決于從可見光表面產生的亮度。
1969年就任于IBM的Arthur Appel在《Some Techniques for Shading Machine Renderings of Solids》論文中首次提出Ray Tracing(光線追蹤)。此技術可追蹤通過2D視平面上每個像素發射的光線路徑,并應用到場景的3D模型中。
但一直等到10年后的1979年,Turner Whitted才繼續在論文《An Improved Illumination Model for Shaded Display》中,具體解析如何捕捉反射、陰影和反射。在光線投射的基礎上,加入光與物體表面的交互。
圖片來源見水印
光線追蹤主要思想是從視點向成像平面上的像素發射光線,找到阻擋光線傳播的最近物體,如果交點表面為散射面,則計算光源直接照射該點產生的顏色;如果該交點表面為鏡面或折射面,則繼續向反射或折射方向跟蹤另一條光線,如此往復循環,直到光線射出場景或者達到規定計算次數(還是為了節省資源)。這個方法被稱之為經典光線跟蹤方法或者遞歸式光線追蹤方法。
圖片來源見水印
順帶提醒一下大家,Turner Whitted作為光線追蹤的創始人,目前就任于NVIDIA 研究事業部,所以你能理解NVIDIA為什么那么熱衷于光線追蹤追蹤了嗎?
光線追蹤目前的瓶頸——計算量龐大、小樣本計算噪點
光線追蹤是三維計算機圖形學中的特殊渲染算法,它與之前計算光源光線傳播路徑不一樣,利用光的可逆性質,反向計算,跟蹤從眼睛發出的光線,通過技術生成編排好的數學模型展現出來,這樣的得到畫面效果更佳,對于反射與折射有更準確的模擬效果,并且效率非常高,因此在電影制作過程往往會采用這種高質量的渲染方式。
圖片來源NVIDIA
但很遺憾,光線追蹤最大缺陷在于對算力要求極高,計算量非常龐大,目前的單一硬件很難滿足實時光線追蹤的需求。光柵圖形學中的算法,利用了數據的一致性從而在像素之間共享計算,而光線跟蹤通常是將每條光線當作獨立的光線,每次都要重新計算。所以盡管電影特效工作室有龐大的計算集群,但他們也會“偷懶”,只有在關鍵幀、關鍵元素上采用光線追蹤來處理,其余部分依然使用光柵化進行渲染,依然能夠提供非常出色的畫面效果。由此可想而知計算量之大。
按道理來說,每一條光線都有自己的計算,可以正確地處理出光線反射、折射等光學現象,但實際出來的效果有可能與真實情況不一樣。這因為最終的畫面是求解通過渲染方程得到,但有時候方程式解不出來,只能利用蒙特卡洛積分做近似解,需要用到大量的樣本進行求解,在電影使用的離線渲染中,由于沒有計算時間限制,他們通常會采用幾百到幾千以內大樣本進行計算,出來的光線追蹤效果會更好。
一旦用到游戲上就不同了,要達到60fps,也就是一幀只有16ms時間給你進行光線追蹤運算,那么樣本只能盡可能小,這樣就會導致出來解不夠準確,畫面會有大量噪點。
NVIDIA開創了實時光線追蹤新時代
NVIDIA已經預料這一點,針對極低樣本數量的光線追蹤結果進行實時降噪的研究,并且取得了不錯的結果,最后成為GameWorks SDK 中一個光線追蹤降噪模塊,也就是Denoising算法。最終可以用比較低樣本的光線追蹤應用到實時渲染中,最終渲染質量可以媲美大樣本下的光線追蹤收斂圖像。
另一方面,隨著顯卡計算性能日益提升,NVIDIA認為顯卡加入硬件級光線追蹤支持的時機已經成熟,光線追蹤也會成為未來3A級游戲競相使用的技術,以達到玩家們夢寐以求的畫面效果。因此NVIDIA在經歷Volta游戲顯卡跳票后,帶來了擁有專門處理光線追蹤的RT Core的Turing游戲顯卡,不僅僅可以讓游戲開發者進行實時光線追蹤計算,所見即所得,而玩家也能從游戲中感受到前所未有、電影級的畫質。
就像NVIDIA所說的那樣,圖靈架構顯卡凝聚了過去10年里在計算機圖形算法和 GPU 架構領域所取得的成果。
想了解更多有關科技、數碼、游戲、硬件等專業問答知識,歡迎右上角點擊關注我們【超能網】頭條號。