光線追蹤

zh-hans:重定向;zh-hant:重新導向;}-透過介質中的情形來解決這種複雜的情況。在實際應用中，可以將各種電磁波或者微小粒子看成理想化的窄波束，基於這種假設，人們利用光線追跡來計算光線在介質中傳播的情況。光線追跡方法首先計算一條光線在被介質吸收，或者改變方向前，光線在介質中傳播的距離，方向以及到達的新位置，然後從這個新的位置產生出一條新的光線，使用同樣的處理方法，最終計算出一個完整的光線在介質中傳播的路徑。光線跟蹤計算機演算法的一般描述.為了生成在三維計算機圖形環境中的可見影象，光線跟蹤是一個比光線投射或者掃描線渲染更加逼真的實現方法。這種方法透過逆向跟蹤與假想的照相機鏡頭相交的光路進行工作，由於大量的類似光線橫穿場景，所以從照相機角度看到的場景可見資訊以及軟體特定的光照條件，就可以構建起來。當光線與場景中的物體或者媒介相交的時候計算光線的反射、折射以及吸收。光線跟蹤的場景經常是由程式設計師用數學工具進行描述，也可以由視覺藝術家使用中間工具描述，也可以使用從數碼相機等不同技術方法捕捉到的影象或者模型資料。由於一個光源發射出的光線的絕大部分不會在觀察者看到的光線中佔很大比例，這些光線大部分經過多次反射逐漸消失或者至無限小，所以對於構建可見資訊來說，逆向跟蹤光線要比真實地模擬光線相互作用的效率要高很多倍。計算機模擬程式從光源發出的光線開始查詢與觀察點相交的光線從執行與獲得正確的影象來說是不現實的。這種方法的一個明顯缺點就是需要假設光線在觀察點處終止，然後進行逆向跟蹤。在一定數量的最大反射之後，最後交點處的光線強度使用多種演算法進行估計，這些演算法可能包括經典的渲染演算法，也可能包括如輻射著色這樣的技術。光線跟蹤計算機演算法及其起源的詳細描述.自然現象.在自然界中，光源發出的光線向前傳播，最後到達一個妨礙它繼續傳播的物體表面，人可以將“光線”看作在同樣的路徑傳輸的光子流，在完全真空中，這條光線將是一條直線。但是在現實中，在光路上會受到三個因素的影響：吸收、反射與折射。物體表面可能在一個或者多個方向反射全部或者部分光線，它也可能吸收部分光線，使得反射或者折射的光線強度減弱。如果物體表面是透明的或者半透明的，那麼它就會將一部分光線按照不同的方向折射到物體內部，同時吸收部分或者全部光譜並發出輻射。吸收、反射以及折射的光線都來自於入射光線，而不會超出入射光線的強度。例如，一個物體表面不可能反射 66% 的輸入光線，然後再折射 50% 的輸入光線，因為這二者相加將會達到 116%。這樣，反射或者折射的光線可以到達其它的物體表面，同樣，吸收、反射、折射的光線重新根據入射光線進行計算。其中一部分光線透過這樣的途徑傳播到人的眼睛，人就能夠看到最終的渲染影象及場景。光線投射演算法.Arthur Appel 於 1968 年首次提出用於渲染的光線投射演算法。光線投射的基礎就是從眼睛投射光線到物體上的每個點，查詢阻擋光線的最近物體，也就是將影象當作一個屏風，每個點就是屏風上的一個正方形。通常這就是眼睛看到的那個點的物體。根據材料的特性以及場景中的光線效果，這個演算法可以確定物體的濃淡效果。其中一個簡單假設就是如果表面面向光線，那麼這個表面就會被照亮而不會處於陰影中。表面的濃淡效果根據傳統的三維計算機圖形學的濃淡模型進行計算。光線投射超出掃描線渲染的一個重要優點是它能夠很容易地處理非平面的表面以及實體，如圓錐和球體等。如果一個數學表面與光線相交，那麼就可以用光線投射進行渲染。複雜的物體可以用實體造型技術構建，並且可以很容易地進行渲染。位於紐約 Elmsford, New York Mathematical Applications Group, Inc.，也計算了它們如何穿透以及折射。這些研究工作幫助政府確定一些特定的軍事應用；建造能夠保護軍隊避免輻射的軍用車輛，設計可以重入的太空探索交通工具。在 Philip Mittelman 博士的指導下，科學家們開發了一種使用同樣基本軟體生成影象的方法。1972 年，MAGI 轉變成了一個商業動畫工作室，這個工作室使用光線投射技術為商業電視、教育電影以及最後為故事片製作三維計算機動畫，他們全部使用光線投射製作了 "Tron" 電影中的絕大部分動畫。MAGI 於 1985 年破產。光線追蹤演算法.下一個重要的研究突破是 Turner Whitted 於 1979 年做出的。以前的演算法從眼睛到場景投射光線，但是並不遞迴地跟蹤這些光線。當光線碰到一個物體表面的時候，可能產生三種新的型別的光線：反射、折射與陰影。光滑的物體表面將光線按照映象反射的方向反射出去，然後這個光線與場景中的物體相交，最近的相交物體就是反射中看到的物體。在透明物質中傳輸的光線以類似的方式傳播，但是在進入或者離開一種物質的時候會發生折射。為了避免跟蹤場景中的所有光線，人們使用陰影光線來測試光線是否可以照射到物體表面。光線照射到物體表面上的某些點上，如果這些點面向光源，那麼就跟蹤這段交點與光源之間的光線。如果在表面與光源之間是不透明的物體，那麼這個表面就位於陰影之中，光線無法照射。這種遞迴多層次的光線計算使得光線跟蹤影象更加真實。光線追蹤的優點.光線跟蹤的流行它比其它渲染方法如掃描線渲染或者光線投射更加能夠現實地模擬光線，象反射和陰影這樣一些對於其它的演算法來說都很難實現的效果，卻是光線跟蹤演算法的一種自然結果。光線跟蹤易於實現並且視覺效果很好，所以它通常是圖形程式設計中首次嘗試的領域。光線追蹤的缺點.光線跟蹤的一個最大的缺點就是效能，掃描線演算法以及其它演算法利用了資料的一致性從而在畫素之間共享計算，但是光線跟蹤通常是將每條光線當作獨立的光線，每次都要重新計算。但是，這種獨立的做法也有一些其它的優點，例如可以使用更多的光線以抗混疊現象，並且在需要的時候可以提高影象質量。儘管它正確地處理了相互反射的現象以及折射等光學效果，但是傳統的光線跟蹤並不一定是真實效果影象，只有在非常近似或者完全實現渲染方程的時候才能實現真正的真實效果影象。由於渲染方程描述了每個光束的物理效果，所以實現渲染方程可以得到真正的真實效果，但是，考慮到所需要的計算資源，這通常是無法實現的。於是，所有可以實現的渲染模型都必須是渲染方程的近似，而光線跟蹤就不一定是最為可行的方法。包括光子對映在內的一些方法，都是依據光線跟蹤實現一部分演算法，但是可以得到更好的效果。光線穿過場景的反方向.從眼睛發出光線到達光源從而渲染影象的過程有時也稱為"後向光線跟蹤"，這是因為它是實際光線傳播方向的反方向。但是，對於這個術語來說還有一些混淆的地方。早期的光線跟蹤經常是從眼睛開始，James Arvo 等早期研究人員用"後向光線跟蹤"表示從光源發出光線然後收集得到的結果。因為如此，將它們分成"基於眼睛"或者"基於光源"的光線跟蹤將會更加清楚。在過去的幾十年中，研究人員已經開發了許多組合了這兩種方向的計算方法與機制以生成投降或者偏離交叉表面的或多或少的光線。例如，輻射著色演算法通常根據光源對於表面的影響進行計算並且儲存這些結果，然後一個標準的遞迴光線跟蹤器可以使用這些資料生成場景的真實、物理正確的影象。在全域性照明演算法如光子對映以及 Metropolis light transport 中，光線跟蹤只是一個用來計算光線在表面之間傳輸的簡單工具。實時光線跟蹤.人們已經進行了許多努力，改進如計算機與影片遊戲這些互動式三維圖形應用程式中的實時光線跟蹤速度。OpenRT 專案包含一個高度最佳化的光線跟蹤軟體核心，並且提供了一套類似於 OpenGL 的 API 用於替代目前互動式三維圖形處理中基於光柵化的實現方法。一些光線跟蹤硬體，如 Saarland 大學開發的實驗性光線處理單元，都是設計用來加速光線跟蹤處理中那些需要大量計算的操作。自從二十世紀九十年代末開始，一些演示場景愛好者就已經開發了一些光線跟蹤的實時三維引擎軟體。但是，演示中的光線跟蹤為了實現足夠高的幀速經常使用一些不正確的近似甚至是欺騙的手段。2008年6月12日，英特爾展示了《深入敵後：雷神戰爭》的特殊版本:《》，其使用光線跟蹤技術進行渲染，在720p的解析度下每秒14-29幀。該演示採用16核Xeon Tigerton系統，執行頻率為2.93 GHz。AMD在Radeon Vega 系列顯示卡上透過GPUOpen Radeon ProRender實現實時光線跟蹤。Nvidia已經宣佈在Quadro RTX工作站顯示卡上可進行實時光線跟蹤，GeForce 20系列顯示卡已經具有實時光線跟蹤功能。除了可藉由特製的顯示卡實現之，這項技術自2019年10月起還可在支援DirectX 11的電腦上以軟體運算的方式實現。