1. 程式人生 > >課堂筆記_ 光線跟蹤原理

課堂筆記_ 光線跟蹤原理

Turner Whitted於1980年首次提出一個包含光反射和折射效果的模型:Whitted模型,並第一次給出光線跟蹤演算法的示例,是計算機圖形學歷史上的里程碑。發表於Communications of the ACM 1980。

定義:

光線跟蹤

特徵:

通過光線跟蹤,可以很容易地表現出例如陰影、反射、折射等引人入勝的視覺效果。除了基本的幾何形狀,(例如球體、椎體、立方體等),光線跟蹤容易適用於更復雜的物體表示方法,(例如多邊形網格表示或者符合形狀等)

核心虛擬碼:

遞迴實現
求交點,計算區域性光照,判斷折射反射方向,遞迴求解。

光線求交

光線的表示

光線的表示

光線與平面求交

光線與平面求交
光線與平面求交

光線與三角形求交

一般做法:
1.首先計算光線與三角形所在平面的交點
2.判斷交點是否在三角形的內部

三角形與光線的交點可以通過結合重心座標快速計算:

重心座標的表示,在三角形內部的點P將三角形可以分為三個小三角形,分別用小三角形的面積除以大三角形的面積得到三個數來刻畫P點的座標。

重心座標
光線與三角形求交
光線與三角形求交
可以通過線性求解得到交點的重心座標以及直線引數t。

光線與多邊形求交

不能像三角形那樣方便的利用重心座標計算,需要一個更普適的方法,即上邊提到的首先計算光線與多邊形所在平面的交點,然後判斷這個交點是否在多邊形內部。

光線與多邊形求交
二維來處理
交點檢測
注:交點在頂點的時候得考慮;光線方向是水平的。

最快的點包含判別演算法–弧長法
弧長法
按逆時針方向遍歷多邊形的每條邊,每條邊與點P形成一個角度,這個角度也是帶符號的,上圖中左邊圖形的角度之和為0,右邊的圖形角度之和為360度。但是求角度需要反三角函式,計算困難。好處是穩定,可靠性高,對於比較小的誤差可以忽略

以被測點為圓心,作單位圓,計算其在單位圓上弧長的代數和。
–代數和為0:點在多邊形外部。
–代數和為2π:點在多邊形內部。
–代數和為π:點在多邊形邊上。

上述弧長法的主要缺點在於角度計算量,但是魯棒性很好,對此提出改進的弧長法:
弧長法改進
穿過兩個象限:
弧長法改進
弧長法改進

光線與球面求交

光線與球面求交

1.代數方法求解:有可能出現奇異值導致的不穩定性


代數方法求解

2.幾何法求解:能快速判斷光線與球面是否相交、光源是否在球體內部、光線的方向
球面求交的幾何方法
這樣求解魯棒性好。

光線與長方體(包圍盒)求交

光線與長方體求交

Slab演算法和Woo演算法:複雜度類似。

光線追蹤實現思路

光線投射

由視點向該畫素中心投射一條光線,射向場景當中。對場景中的各個物體,計算與投射光線的交點,儲存所有物體的交點中距離視點最近的一個。接著根據光照、物體材質、以及法向方向,使用區域性光照模型計算畫素顏色值

明暗效果僅僅由第一次相交的物體表面法向方向、材質、視點和光照方向、以及光照強度等因素共同決定。而光線投射並不考慮第二層以及更深層次的光線,因此不具有陰影、反射、折射等效果。

新增陰影

當前的交點處發射一條光線(陰影測試線),陰影測試線射向光源,如果測試線被物體遮擋,則就在陰影下,否則不在陰影下。注意此處只是考慮與物體是否相交,而不關心具體的交點。

新增反射和折射效果

光線跟蹤具有模擬物體表面反射效果以及折射效果的能力:

首先,計算光線與場景中物體的最近的交點。
然後,計算光線在交點處被物體反射和折射所產生的新的光線的方向,新的方向由入射光方向、物體表面法向、以及介質共同決定。
對新產生的管線(反射光線和折射光線)分別繼續進行跟蹤。

遞迴結束(一般三次):
1.在光線彈射一定次數後停止
2.在光線的貢獻衰減到足夠小時停止

新增紋理

一些問題思考

1.計算精度問題;
2.加速問題;
3.光線跟蹤為什麼要以視點來反向跟蹤?如果按照光源發射的多條光線來計算,由於經過彈射最終能夠抵達視點的光線是及其少的,得到的效果會很差,計算也很複雜。