光線追蹤與光柵化之間到底有何相異之處?

作者 Brian Caulfield

你有看過這部電影。確實是這樣沒錯。

電腦圖形領域以外的人或許不清楚什麼是光線追蹤技術,不過呢,其實很多人都看過這項技術。

只要去離你最近的一間電影院,付20塊錢,再帶包爆米花入座。

現代的電影靠著光線追蹤技術來產生或增強特效。想想各種栩栩如生的反射、折射和陰影效果。確切地運用這些特效,可以讓史詩科幻片裡的星式戰鬥機呼嘯飛行在天際、讓汽車轟隆奔馳在街頭,還讓戰爭片的火熖、煙霧及爆炸場景看起來逼真不虛假。

光線追蹤技術產生的影像跟攝影機拍攝出的影像,讓人難以區分。真人動作的影片流暢混合了電腦生成的效果與在真實環境裡拍攝的影像,而動畫電影則是以光影來遮掩數位技術生成的場景,表現出的效果張力跟攝影師拍攝的畫面一模一樣。

最簡單去想像光線追蹤技術的方法就是現在環視你的四周,光束照亮你看到的物體。現在反過來跟著那些光束的路徑,從眼睛回到與光線產生相互作用的物體上。那便是光線追蹤。


如果你最近有去看過電影,就有見過光線追蹤技術。

只不過以前電腦硬體的運算速度還不夠快,無法即時使用這些技術,像是在電玩遊戲裡。製作影片的人愛花多長時間來渲染單幀畫面都可以,因此他們會在算圖農場裡以離線方式進行渲染。電玩遊戲的畫面只會顯示不到一秒鐘的時間,大多數即時圖形會運用光柵化這項技術。

何謂光柵化?

長期以來即時電腦圖形使用「光柵化」(rasterization)技術,在 2D 平面螢幕上顯示 3D 立體物體。這項技術的速度很快,效果又好,只是還比不上光線追蹤。

運用光柵化技術,以虛擬三角形網格或多邊形建立螢幕上的物體和物體的 3D 立體模型。在這個虛擬網格裡,各三角形的角點(稱為頂點)與其它不同尺寸和形狀的三角形的頂點進行相互作用。許多資訊皆與各頂點有關,包括它在空間裡的位置,還有顏色、紋理和「法線」等相關資訊,法線這項資訊用於判斷物體表面朝著哪個方向。

接著電腦將 3D 立體模型的三角形轉成 2D 平面螢幕上的像素或點,可以按照三角形頂點裡的資料為各像素分配一個初始色值。

進一步處理像素或是「加入陰影」,包括按照場景裡的光線如何照射在像素上以改變像素的顏色,還有將一個或多個紋理套用到像素上,在組合後產生出套用在像素上的最終顏色。

這是一項需要密集進行運算的作業。一個場景裡的所有物體模型可能用到數百萬個多邊形,而 4K 顯示器大約有著800萬個像素,螢幕上顯示的每一幀或圖像通常每秒會更新30到90次。

加上會在螢幕上顯示後續畫幀前,先使用記憶體緩衝區(即用於加快存取速度的臨時空間)進行渲染作業;還會使用深度或「z 緩衝區」來儲存像素的深度資訊,確保像素 x-y 畫面位置最前方的物體會顯示在螢幕上,最前面物體後方的物體則是保持隱藏狀態。

這正是現在那些有著豐富大量圖形的電腦遊戲,得依賴強大的 GPU 才能順利顯示畫面的原因。

何謂光線追蹤?

光線追蹤就不同了。光源照亮我們在現實世界裡看到的 3D 立體物體,光子會在物體間彈跳,然後再進入觀看者的眼睛。

某些物體可能會遮住光線而造成陰影,或者光線會從一個物體反射到另一個物體上,像是我們看到一個物體的影像反射在另一個物體的表面上。還有折射,指光線穿過玻璃或水這些透明或半透明物體時發生變化的情況。

光線追蹤技術從我們的眼睛(或觀景攝影機)回過頭來取得這些效果,1969年 IBM 的 Arthur Appel 在其著作《Some Techniques for Shading Machine Renderings of Solids》裡首次描述這項技術。它追蹤光線通過 2D 觀看平面上的各像素,構成場景裡 3D 立體模型的路徑。

十年後則是迎來下一項重大突破。在1979年的《An Improved Illumination Model for Shaded Display》這篇報告裡,現任職於 NVIDIA Research 部門的 Turner Whitted 描述了如何捕捉反射、陰影及折射的情況。


Turner Whitted 在1979年提出的報告,展開了光線追蹤技術復興時代,進而拍攝出畫面更逼真的電影作品。

從 Whitted 的技術來看,光線遇到場景裡的物體時,物體表面上與光線的碰撞點的顏色及光照資訊,會影響像素的顏色和亮度水準。如果光線在到達光源前便彈開或穿越不同物體的表面,來自那些物體的顏色和光照資訊便會影響到最終的像素顏色。

1980年代的另外兩篇報告為電腦圖形革命奠定了其餘的知識基礎,顛覆了製作電影的方式。

1984年 Lucasfilm 的 Robert Cook、Thomas Porter 與 Loren Carpenter 詳細介紹 了光線追蹤技術如何結合多項常用的電影製作技術,包括動態模糊、景深、半影、半透明和模糊反射,直到那時才能搭配攝影機來製作電影特效。

兩年後加州理工學院教授 Jim Kajiya 的《The Rendering Equation》這篇報告,補全了將生成電腦圖形的方式映射到物理學的過程,以更深入的方式說明光在整個場景裡散射的情況。

將這項研究與現代的 GPU 兩相結合,使得電腦影像裡的陰影、反射與折射情況,與在真實環境裡拍攝之照片或影片裡的陰影、反射與折射情況並無二致。這種逼真程度讓現代電影圈在製作時開始使用光線追蹤技術。



這是 Enrico Cerica 使用 OctaneRender 製作出的電腦影像,顯示燈具玻璃扭曲光線、窗戶漫射光線,以及地板上燈具的磨砂玻璃反射在相框上的情況。

這同樣需要進行大量運算,所以電影製作者得使用大量伺服器或算圖農場的原因,而且要花上好幾天甚至幾週的時間,才能呈現出複雜的特效畫面。

不可否認的是,許多因素與光線追蹤的整體圖形品質及效能有著密切關係。光線追蹤要用到極為龐大的計算量,通常會用在渲染場景裡呈現最真實視覺效果的區域或物體,而其餘部分則使用光柵化技術進行渲染。光柵化技術仍可呈現出極為出色的圖形品質。

光線追蹤的未來發展為何?

隨著 GPU 的運算能力不斷變得更為強大,未來會有更多人使用光線追蹤技術,像是產品設計師和建築師使用 Autodesk 的 ArnoldChaos Group 的 V-Ray 或是 Pixar 的 Renderman 等光線追蹤工具,搭配強大的 GPU,在短短數秒內便可產生出寫實的作品模型,以提高業者間的合作程度,還無需製作昂貴的原型樣品。



建築師與照明設計師運用光線追蹤技術來模擬光線與設計間的交互作用。

在 GPU 提供更強大計算能力的情況下,電玩遊戲則是這項技術下一個有待開發的領域NVIDIA 在週一宣布推出 NVIDIA RTX 光線追蹤技術,讓遊戲開發者能即時享受到電影品質般的渲染結果。這是電腦圖形演算法與 GPU 架構領域十年來的發展成果。

這包括在 NVIDIA Volta 架構 GPU 上運行光線追蹤引擎,旨於通過多種介面支援光線追蹤技術。NVIDIA 與 Microsoft 合作,藉由 Microsoft 全新的 DirectX Raytracing (DXR) API,全面支援 RTX。 

NVIDIA 還宣布 GameWorks SDK 將加入光線追蹤降噪模組,以利遊戲開發者充分利用這些功能。即將推出的新版 GameWorks SDK 包括光線追蹤區域陰影與光線追蹤光澤反射功能。

這些功能都將使得遊戲開發者及其他人能在作品裡運用光線追蹤技術,建立更真實的反射、陰影和折射效果,讓你在家中打電動的同時,還能享受到好萊塢大片般的出色特效。

缺點:你得自己弄些爆米花來吃了。

閱讀Matt PharWenzel Jakob Greg Humphreys 的《Physically Based Rendering: From Theory to Implementation》報告,其中提供了製作現代逼真渲染畫面的數學理論與實用技術。

想知道這對遊戲玩家代表著什麼嗎? 請見GeForce.com 上的《NVIDIA RTX Technology: Making Real-Time Ray Tracing A Reality for Games》一文。