|
|
光綫跟蹤是一種真實地顯示物體的方法,該方法由appel在1968年提出。光綫跟蹤方法沿着到達視點的光綫的反方向跟蹤,經過屏幕上每一個象素,找出與視綫相交的物體表面點p0,並繼續跟蹤,找出影響p0點光強的所有光源,從而算出p0點上精確的光綫強度,在材質編輯中經常用來表現鏡面效果。
光綫跟蹤或 稱光跡追蹤是計算機圖形學的核心算法之一。在算法中,光綫從光源被拋射出來,當他們經過物體表面的時候,對他們應用種種符合物理光學定律的變換。最終,光綫進入虛擬的攝像機底片中,圖片被生成出來。由於該算法是成像係統的完全模擬,所以可以模擬生成十分復雜的圖片。
業界公認此算法為turner whitted在1980年提出。近日,世界主要國傢的圖形學學生都要實習此算法。他的一個著名的實現是開源軟件。 |
|
在自然界中,光源發出的光綫嚮前傳播,最後到達一個妨礙它繼續傳播的物體表面,我們可以將“光綫”看作在同樣的路徑傳輸的光子流,在完全真空中,這條光綫將是一條直綫。但是在現實中,在光路上會受到三個因素的影響:吸收、反射與折射。物體表面可能在一個或者多個方向反射全部或者部分光綫,它也可能吸收部分光綫,使得反射或者折射的光綫強度減弱。如果物體表面是透明的或者半透明的,那麽它就會將一部分光綫按照不同的方向折射到物體內部,同時吸收部分或者全部光譜或者改變光綫的顔色。吸收、反射以及折射的光綫都來自於入射光綫,而不會超出入射光綫的強度。例如,一個物體表面不可能反射 66% 的輸入光綫,然後再折射 50% 的輸入光綫,因為這二者相加將會達到 116%。這樣,反射或者折射的光綫可以到達其它的物體表面,同樣,吸收、反射、折射的光綫重新根據入射光綫進行計算。其中一部分光綫通過這樣的途徑傳播到我們的眼睛,我們就能夠看到最終的渲染圖像及場景。 |
|
下一個重要的研究突破是 turner whitted 於 1979 年做出的。以前的算法從眼睛到場景投射光綫,但是並不跟蹤這些光綫。當光綫碰到一個物體表面的時候,可能産生三種新的類型的光綫:反射、折射與陰影。光滑的物體表面將光綫按照鏡像反射的方向反射出去,然後這個光綫與場景中的物體相交,最近的相交物體就是反射中看到的物體。在透明物質中傳輸的光綫以類似的方式傳播,但是在進入或者離開一種物質的時候會發生折射。為了避免跟蹤場景中的所有光綫,人們使用陰影光綫來測試光綫是否可以照射到物體表面。光綫照射到物體表面上的某些點上,如果這些點面嚮光綫,那麽就跟蹤這段交點與光源之間的光綫。如果在表面與光源之間是不透明的物體,那麽這個表面就位於陰影之中,光綫無法照射。這種新層次的光綫計算使得光綫跟蹤圖像更加真實。 |
|
光綫跟蹤的流行來源於它比其它渲染方法如掃描綫渲染或者光綫投射更加能夠現實地模擬光綫,象反射和陰影這樣一些對於其它的算法來說都很難實現的效果,卻是光綫跟蹤算法的一種自然結果。光綫跟蹤易於實現並且視覺效果很好,所以它通常是圖形編程中首次嘗試的領域。 |
|
光綫跟蹤的一個最大的缺點就是性能,掃描綫算法以及其它算法利用了數據的一致性從而在像素之間共享計算,但是光綫跟蹤通常是將每條光綫當作獨立的光綫,每次都要重新計算。但是,這種獨立的做法也有一些其它的優點,例如可以使用更多的光綫以抗混疊現象,並且在需要的時候可以提高圖像質量。儘管它正確地處理了相互反射的現象以及折射等光學效果,但是傳統的光綫跟蹤並不一定是真實效果圖像,衹有在非常緊似或者完全實現渲染方程的時候才能實現真正的真實效果圖像。由於渲染方程描述了每個光束的物理效果,所以實現渲染方程可以得到真正的真實效果,但是,考慮到所需要的計算資源,這通常是無法實現的。於是,所有可以實現的渲染模型都必須是渲染方程的近似,而光綫跟蹤就不一定是最為可行的方法。包括光子映射在內的一些方法,都是依據光綫跟蹤實現一部分算法,但是可以得到更好的效果。 |
|
人們已經進行了許多努力,改進如計算機與視頻遊戲這些交互式三維圖形應用程序中的實時光綫跟蹤速度。
openrt 項目包含一個高度優化的光綫跟蹤軟件內核,並且提供了一套類似於 opengl 的 api 用於替代目前交互式三維圖形處理中基於rasterization 的實現方法。
一些光綫跟蹤硬件,如斯坦福大學開發的實驗性的光綫處理單元,都是設計成加速光綫跟蹤處理中那些需要大量計算的操作。
自從二十世紀九十年代末開始,一些 demo programmers 愛好者就已經開發了一些光綫跟蹤的實時三維引擎軟件。但是,demos 中的光綫跟蹤為了實現足夠高的幀速經常使用一些不正確的近似甚至是欺騙的手段。 |
|
計算機圖形學中的光綫跟蹤的名稱與原理源自於二十世紀最初十年就已經開始出現的光學鏡頭設計中的古老技術。幾何光綫跟蹤用於描述光綫通過鏡頭係統或者光學儀器時的傳輸特性,並建立係統的成像屬性模型。這用於建造前優化光學儀器的設計,例如減少色像差或者其它的光學像差。光綫跟蹤也用於計算光學係統中的光程差,光程差用於計算光學波前,而光學波前用於計算係統的衍射作用,例如點擴展函數、調製傳遞函數以及 strehl ratio。光綫跟蹤不僅用於攝影領域的鏡頭設計,也可以用於微波設計甚至是無綫電係統這樣的較長波長應用,也可以用於紫外綫或者x射綫光學這樣的較短波長領域。
計算機圖形學與光學設計領域所用的光綫跟蹤的基本原理都是類似的,但是光學設計所用的技術通常更加嚴格,並且能夠更加正確地反映光綫行為。尤其是光的色散、衍射效應以及光學鍍膜的特性在光學鏡頭設計中都是非常重要的,但是在計算機圖形學領域就沒有那麽重要了。
在計算機出現以前,光綫跟蹤需要使用三角以及對數表手工計算,許多傳統攝影鏡頭的光學公式都是許多人共同完成優化的,每個人衹能處理其中一小部分的計算工作。現在這些計算可以在如來自於 lambda research 的 oslo 或者 tracepro、code-v 或者 zemax 這些光學設計軟件上完成。一個簡單的光綫跟蹤版本是光綫傳遞矩陣分析,它通常用於激光光學諧振腔的設計。 |
|
光綫跟蹤算法 | 實時光綫跟蹤 | 光綫跟蹤的優點 | 光綫跟蹤的缺點 | |
|