引入光線追蹤目的:
- 因為光柵化不能很好地處理全局效果,例如:
- 軟陰影:光柵化需要經過兩個過程才能形成軟陰影;
- Glossy 反射:既有反射,又有本身材質的粗糙性影響;
- 間接反射:光線在空間中會反射很多次,很難渲染。
- 光柵化速度快,但是質量並不好,表現得是相似的東西;光線追蹤很精確,效果很真實,不過速度很慢。(光柵化可以達到實時,但是光線追蹤需要離線。)
第一部分:光線追蹤算法基礎
一、光線定義:
- 光線沿着直線傳播。(本課程不考慮光的波動性)
- 光線之間如果交叉不會互相碰撞。(假設)
- 光線從光源發出可以到達人眼。(但是物理上認為光線在路徑你轉不變—— Reciprocity(光可逆性))
二、光線投射(Ray Casting)
(一)定義
- 通過將光源逐像素投射生成一張圖片。
- 通過投射光線檢查陰影。
(二)生成過程
下圖例子是照射一個透明物體,會分別產生 ② 折射光線和 ④反射光線,在分別照射出去為③、投射到物體上。最后將照射在物體上的幾個黑點連接到點光源(light source),如果未被遮擋,則疊加計算到從eye point(camera point)中投射出來的像素中。使用着色模型(例如:Blin Phong模型)進行着色。
觀察上圖,可知四根shadow rays,其中長方形投射的光線被三角形擋住,因此該像素點為其他那根光線的累加值。
(三)光線等式
光線通過原點(O點)和方向(\(\overrightarrow d\))決定。公式如下:
(四)光線和球面角點
光線:\(r\left(t\right) = o +td,0 \leq t < \infty\)
球面:$ p:(p-c)^2 - R^2 = 0$
交點P: 交點P必須同時滿足射線方程和球面方程。
求解交點:\((o+td-c)^2 - R^2 = 0\)
求解交點P過程