您或許沒聽說過光線追蹤,但您肯定見過它。此項圖形渲染技術可模擬光線的實際傳播方式,以打造現代電影中的超強特效。隨著RTX實時光線追蹤技術的問世,我們正努力加快此項複雜技術的應用速度、降低其應用難度,致力於為遊戲、產品設計等各類應用帶來電影級質感。作為光線追蹤技術的先驅之一,J. Turner Whitted將為大家分享一段關於現代光線追蹤技術產生的重要歷程。他撰寫的開創性論文《An Improved Illumination Model for Shaded Display》,為現代光線追蹤計算機圖形技術的發展奠定了基礎。Whitted現已加入NVIDIA研究團隊。
以下內容翻譯自J. Turner Whitted撰寫的文章:
光線追蹤的概念已誕生有數個世紀之久,相比之下,計算機圖形學中全局光照的歷史則較為短暫。
由Henri Gouraud和Bui Tuong Phong等人提出的早期計算機圖形著色模型會根據光源和表面上某個點之間的空間關係來計算反射。隨後,Jim Blinn基於Ken Torrance有關表面微觀結構相互反射的研究,開發出了一款反射模型(後來,該反射模型由Rob Cook和Ken Torrance本人拓展為應用廣泛的Cook-Torrance著色模型)。此後不久,Blinn和Martin Newell發表了一篇關於環境映射的論文,該技術會使用一張360度周圍環境紋理圖來代替光源。
就是這項環境映射技術的發展引起了我的注意。對茶壺表面反射的門窗進行的渲染,產生了我從未想像過的計算機生成圖像的逼真效果。我對著這幅圖凝視了幾個小時,苦苦思索該如何提升圖像的逼真度。環境映射確實存在很大的局限性,因為這項技術無法精確渲染目標物體附近的物體所反射的圖像。
Turner Whitted在1979年發表的SIGGRAPH論文中提供了一幅類似貝爾實驗大樓(位於新澤西州霍姆德爾鎮)的建築特寫圖,Whitted正是在此處完成了研究工作。
顯然,Phong的模型注重局部效果,而Torrance的模型及其衍生模型均注重微觀效果。如此看來,Blinn和Newell的模型自然會被視為注重「全局」效果。這便是「全局光照」之名的由來。自此,我們的問題也就演變為如何在不受環境映射限制的前提下應用此技術。
因為光線追蹤的原理非常簡單,本應成為在計算機圖形學中實現全局光照效果的不二選擇。來自IBM的Arthur Appel率先提出了用於生成圖像的光線投射概念(ray casting),而來自MAGI的Robert Goldstein及其同事則實現了這項技術的商業化應用。MAGI 最初運用多次反射光線追蹤來追蹤容器內的輻射光線。我在早期的職業生涯中接觸過海洋聲學,依稀記得有一幅在海洋不同深度折射及從海洋表面反射的光線追蹤聲波圖。最終,關於那幅圖的記憶湧入我的腦海,我也由此清晰地認識到應如何改良Blinn和Newell提出的全局光照方法。
我對使用光線追蹤唯一存疑的地方就是性能問題。實時交互中的計算機圖形與電影中的圖形之間始終存有些許不同。GE的月球著陸模擬器顯然必須保持實時運行才能訓練太空人。David Evans和Ivan Sutherland的飛行模擬器以及猶他大學的類似研究中同樣存在這一限制。Henri Gouraud的平滑著色基本能實現無成本的實時運行。在Bui Tuong Phong的學位論文中有一個章節鮮為人知,該章節包含了對實時著色的電路描述,儘管Phong著色法的大多數著色並未以實時運行。
幀緩衝器(frame buffers)的可用性顯著改變了計算機圖形的格局。以任意速度渲染圖像,並在屏幕中查看靜態圖像成為可能,而不是嘗試以CRT的刷新率渲染圖像。Ed Catmull的細分算法與z緩衝區(z-buffer)結合使用,可在幾分鐘內(而非幾毫秒)將複雜的曲面隨機渲染到幀存儲器中。而使用Blinn和Newell的環境映射法,每幀圖像需要渲染幾十分鐘。這種逼真度變高而渲染速率變低的趨勢,讓我鼓足勇氣去嘗試一些渲染速率更低的方法。
1978年,貝爾實驗室的計算機系統研究實驗室配備了一臺PDP-11/45迷你計算機數字設備和一個每像素9位的幀緩衝器。這些資源與C程式語言的結合,為嘗試通過光線追蹤改良Blinn和Newell的方案營造出一個絕佳環境。(在嘗試編寫第一個C程序之前,我本該深入研讀Brian Kernighan和Dennis Ritchie的編程手冊。我是一名未經專業培訓的彙編語言編程人員,對C語言支持遞歸併不了解。我費力地建立自己的堆棧,並手動編寫多次反射遞歸式光線追蹤程序,而沒有使用該語言自帶的遞歸函數。)
最終,相互反射球面圖出現在了屏幕上。Newell和Frank Crow已在其早期的某些圖像中包含方格圖案,我覺得有必要仿效其做法。目前為止,效果很好。此時,我們便可輕鬆追蹤射向光源的更多光線。生成陰影雖會耗費些許時間,但卻只需額外執行少量代碼工作,因此結果是值得的。
微小的編碼變化可將一組光線轉變為光線樹。作為一名毫無計算機科學背景的電氣工程師和硬體設計師,這是我從未處理過的數據結構。不過,真的有效。
1979年,Whitted利用計算機生成的開創性相互反射球面圖詮釋了光線追蹤對於全局光照的重要價值。
如果我們能夠取得那樣的成就,何不放手一搏,就像在高中物理課上所了解到的那樣加入折射效果呢?雖然這需要花些工夫,但結果卻令人十分驚嘆。
可以想像,這些新技術的執行時間難以掌控。為估算每幅圖像的渲染時間,我將512×512的圖像解析度減少為原來的64分之一,並用手錶計時。將此時間值乘以64,可相當準確地估算全解析度渲染時間。但當我們需要消除全解析度渲染出現的鋸齒時,超級採樣便是唯一切實可行的方法。不過,此法會讓估算的渲染時間延長16倍。
我曾經為SIGGRAPH大會寫過一篇論文,並要渲染論文中附帶的插圖。作品提交截止日期已經臨近,但若使用16倍超級採樣,預計渲染時間便會超出截止日期。我想到了堪比救星的自適應超級採樣法,它只會在需要的地方增加額外樣本。利用這一方法,我在幾小時內便完成了此項工作,並且還在渲染插圖時修改了論文,加入了這一新概念。
在幾個月後的一次午餐中,貝爾實驗室高管詢問了運行實時光線追蹤所需要的資源。那時,我們的新式VAX-11/780在計算簡單場景的每個像素時需耗費1/60秒,因此我提議配備大量Cray超級計算機,按單個像素進行分配,並且在每臺計算機上方分別安裝一個紅色、綠色和藍色的燈泡。這聽起來像個笑話,但結果並非如此。
在我1979年發表的光線追蹤論文中,我曾提及多個處理器之間的任務劃分。之後,我偶爾會聽到有關光線追蹤「不易並行」的言論。我在最初的論文中還簡單提到,當一個球面恰好包含在另一個球面中時,要使用加速結構。幾年後,我與Steve Rubin合作,將他的層次包圍盒(hierarchical bounding volumes)概念應用於光線追蹤技術中。此方法卓有成效,我們可以憑此渲染比漂浮在方格圖案上的球面更為複雜的場景,但這仍然不是實時渲染。
光線和陰影:窗口的這個瓶子取自一篇發表於1980年的SIGGRAPH論文,該論文介紹了使用包圍盒層次結構來加速光線追蹤的方法。
之後的幾年中,我編寫了幾個說明性的光線追蹤器作為教學工具,但那基本都轉移到其他主題上去了。慶幸的是,其他研究人員利用加速技術彌補了這一不足,讓先前不切實際的算法變得切實可行。與此同時,我們還取得了其他進步,即生成的畫質遠遠優於使用球面和方格圖案所呈現的畫質。
所有成果均得益於摩爾定律的發展頂端以及並行處理的可行性。恰似計算機圖形領域的Rip van Winkle,我也會在近40年後頓悟,將實時光線追蹤推向商業化。精尖人士將會為之付出心血並推動其實現。
*本文轉載自英偉達NVIDIA企業解決方案