光線跟蹤

光線跟蹤

光線跟蹤是一種真實地顯示物體的方法,該方法由Appe在1968年提出。光線跟蹤方法沿著到達視點的光線的反方向跟蹤,經過螢幕上每一個象素,找出與視線相交的物體表麵點P0,並繼續跟蹤,找出影響P0點光強的所有光源,從而算出P0點上精確的光線強度,在材質編輯中經常用來表現鏡面效果。光線跟蹤或稱光跡追蹤是計算機圖形學的核心算法之一。在算法中,光線從光源被拋射出來,當他們經過物體表面的時候,對他們套用種種符合物理光學定律的變換。最終,光線進入虛擬的攝像機底片中,圖片被生成出來。

基本介紹

  • 中文名:光線跟蹤
  • 外文名:Ray tracing
  • 又稱:光跡追蹤或光線追跡
  • 提出者:Appe
  • 提出時間:1968年
  • 學科:光學
簡介,自然現象,一般描述,遞歸算法,特點,優點,缺點,實時跟蹤,光學設計,

簡介

光線跟蹤(Ray tracing),又稱為光跡追蹤或光線追跡,來自於幾何光學的一項通用技術,它通過跟蹤與光學表面發生互動作用的光線從而得到光線經過路徑的模型。它用於光學系統設計,如照相機鏡頭、顯微鏡、望遠鏡以及雙目鏡等。這個術語也用於表示三維計算機圖形學中的特殊渲染算法,跟蹤從眼睛發出的光線而不是光源發出的光線,通過這樣一項技術生成編排好的場景的數學模型顯現出來。這樣得到的結果類似於光線投射與掃描線渲染方法的結果,但是這種方法有更好的光學效果,例如對於反射與折射有更準確的模擬效果,並且效率非常高,所以當追求這樣高質量結果時候經常使用這種方法。
光線跟蹤場景光線跟蹤場景
在物理學中,光線追跡可以用來計算光束在介質中傳播的情況。在介質中傳播時,光束可能會被介質吸收,改變傳播方向或者射出介質表面等。我們通過計算理想化的窄光束(光線)通過介質中的情形來解決這種複雜的情況。
在實際套用中,可以將各種電磁波或者微小粒子看成理想化的窄波束(即光線),基於這種假設,人們利用光線追跡來計算光線在介質中傳播的情況。光線追跡方法首先計算一條光線在被介質吸收,或者改變方向前,光線在介質中傳播的距離,方向以及到達的新位置,然後從這個新的位置產生出一條新的光線,使用同樣的處理方法,最終計算出一個完整的光線在介質中傳播的路徑。
由於該算法是成像系統的完全模擬,所以可以模擬生成十分複雜的圖片。
業界公認此算法為Turner Whitted在1980年提出。世界主要國家的圖形學學生都要實習此算法。他的一個著名的實現是開源軟體

自然現象

在自然界中,光源發出的光線向前傳播,最後到達一個妨礙它繼續傳播的物體表面,我們可以將“光線”看作在同樣的路徑傳輸的光子流,在完全真空中,這條光線將是一條直線。但是在現實中,在光路上會受到三個因素的影響:吸收、反射與折射。物體表面可能在一個或者多個方向反射全部或者部分光線,它也可能吸收部分光線,使得反射或者折射的光線強度減弱。如果物體表面是透明的或者半透明的,那么它就會將一部分光線按照不同的方向折射到物體內部,同時吸收部分或者全部光譜或者改變光線的顏色。吸收、反射以及折射的光線都來自於入射光線,而不會超出入射光線的強度。例如,一個物體表面不可能反射66% 的輸入光線,然後再折射50% 的輸入光線,因為這二者相加將會達到 116%。這樣,反射或者折射的光線可以到達其它的物體表面,同樣,吸收、反射、折射的光線重新根據入射光線進行計算。其中一部分光線通過這樣的途徑傳播到我們的眼睛,我們就能夠看到最終的渲染圖像及場景。

一般描述

為了生成在三維計算機圖形環境中的可見圖像,光線跟蹤是一個比光線投射或者掃描線渲染更加逼真的實現方法。這種方法通過逆向跟蹤與假象的照相機鏡頭相交的光路進行工作,由於大量的類似光線橫穿場景,所以從照相機角度看到的場景可見信息以及軟體特定的光照條件,就可以構建起來。當光線與場景中的物體或者媒介相交的時候計算光線的反射、折射以及吸收。 光線跟蹤的場景經常是由程式設計師用數學工具進行描述,也可以由視覺藝術家使用中間工具描述,也可以使用從數位相機等不同技術方法捕捉到的圖像或者模型數據。
由於一個光源發射出的光線的絕大部分不會在觀察者看到的光線中占很大比例,這些光線大部分經過多次反射逐漸消失或者至無限小,所以對於構建可見信息來說,逆向跟蹤光線要比真實地模擬光線相互作用的效率要高很多倍。計算機模擬程式從光源發出的光線開始查詢與觀察點相交的光線從執行與獲得正確的圖像來說是不現實的。
這種方法的一個明顯缺點就是需要假設光線在觀察點處終止,然後進行逆向跟蹤。在一定數量的最大反射之後,最後交點處的光線強度使用多種算法進行估計,這些算法可能包括經典的渲染算法,也可能包括如輻射著色這樣的技術。

遞歸算法

對圖像中的每一個像素 {
創建從視點通過該像素的光線
初始化 最近T 為 無限大,最近物體為空值
對場景中的每一個物體 {
如果光線與物體相交 {
如果交點處的 t 比最近T小 {
設定最近T 為焦點的 t 值
設定 最近物體 為該物體
}
}
}
如果最近物體為空值{
用背景色填充該像素
} 否則 {
對每個光源射出一條光線來檢測是否處在陰影中
如果表面是反射面,生成反射光;遞歸
如果表面透明,生成折射光;遞歸
使用最近物體 和最近T來計算著色函式
以著色函式的結果填充該像素
}
}

特點

優點

光線跟蹤的流行來源於它比其它渲染方法如掃描線渲染或者光線投射更加能夠現實地模擬光線,象反射和陰影這樣一些對於其它的算法來說都很難實現的效果,卻是光線跟蹤算法的一種自然結果。光線跟蹤易於實現並且視覺效果很好,所以它通常是圖形編程中首次嘗試的領域。

缺點

光線跟蹤的一個最大的缺點就是性能,掃描線算法以及其它算法利用了數據的一致性從而在像素之間共享計算,但是光線跟蹤通常是將每條光線當作獨立的光線,每次都要重新計算。但是,這種獨立的做法也有一些其它的優點,例如可以使用更多的光線以抗混疊現象,並且在需要的時候可以提高圖像質量。儘管它正確地處理了相互反射的現象以及折射等光學效果,但是傳統的光線跟蹤並不一定是真實效果圖像,只有在非常緊似或者完全實現渲染方程的時候才能實現真正的真實效果圖像。由於渲染方程描述了每個光束的物理效果,所以實現渲染方程可以得到真正的真實效果,但是,考慮到所需要的計算資源,這通常是無法實現的。於是,所有可以實現的渲染模型都必須是渲染方程的近似,而光線跟蹤就不一定是最為可行的方法。包括光子映射在內的一些方法,都是依據光線跟蹤實現一部分算法,但是可以得到更好的效果。

實時跟蹤

人們已經進行了許多努力,改進如計算機與視頻遊戲這些互動式三維圖形應用程式中的實時光線跟蹤速度。
OpenRT 項目包含一個高度最佳化的光線跟蹤軟體核心,並且提供了一套類似於 OpenGL 的 API 用於替代互動式三維圖形處理中基於rasterization 的實現方法。
一些光線跟蹤硬體,如史丹福大學開發的實驗性的光線處理單元,都是設計成加速光線跟蹤處理中那些需要大量計算的操作。
自從二十世紀九十年代末開始,一些 demo programmers 愛好者就已經開發了一些光線跟蹤的實時三維引擎軟體。但是,demos 中的光線跟蹤為了實現足夠高的幀速經常使用一些不正確的近似甚至是欺騙的手段。

光學設計

計算機圖形學中的光線跟蹤的名稱與原理源自於二十世紀最初十年就已經開始出現的光學鏡頭設計中的古老技術。幾何光線跟蹤用於描述光線通過鏡頭系統或者光學儀器時的傳輸特性,並建立系統的成像屬性模型。這用於建造前最佳化光學儀器的設計,例如減少色像差或者其它的光學像差。光線跟蹤也用於計算光學系統中的光程差,光程差用於計算光學波前,而光學波前用於計算系統的衍射作用,例如點擴展函式調製傳遞函式以及 Strehl ratio。光線跟蹤不僅用於攝影領域的鏡頭設計,也可以用於微波設計甚至是無線電系統這樣的較長波長套用,也可以用於紫外線或者X射線光學這樣的較短波長領域。
計算機圖形學與光學設計領域所用的光線跟蹤的基本原理都是類似的,但是光學設計所用的技術通常更加嚴格,並且能夠更加正確地反映光線行為。尤其是光的色散衍射效應以及光學鍍膜的特性在光學鏡頭設計中都是非常重要的,但是在計算機圖形學領域就沒有那么重要了。
在計算機出現以前,光線跟蹤需要使用三角以及對數表手工計算,許多傳統攝影鏡頭的光學公式都是許多人共同完成最佳化的,每個人只能處理其中一小部分的計算工作。這些計算可以在如來自於 Lambda Research 的 OSLO 或者 TracePro、Code-V 或者 Zemax 這些光學設計軟體上完成。一個簡單的光線跟蹤版本是光線傳遞矩陣分析,它通常用於雷射光學諧振腔的設計。

相關詞條

熱門詞條

聯絡我們