圖形學筆記:光線追蹤

光線追蹤是一種經典的渲染方法。

Ray Tracing

概述

光線追蹤算法假設光線從眼睛出發,追蹤光線的路徑,由此找到對應像素的信息。

這裏寫圖片描述

光線生成

投影

3D場景到2D圖像的轉變有不同的投影方式,主要有平行投影和透視投影。其中透視投影和人眼的視覺特點一致。

這裏寫圖片描述

光線

在透視投影中,光線的原點是人眼位置,方向爲從眼睛到每個像素的方向。

這裏寫圖片描述

交點

從眼睛發出的光線需要計算和場景中物體的交點。主要有線與球的交點,線和三角形的交點。其中線和三角形的交點比較常用。這一步的做法是聯立方程組,求解交點座標。

着色

在着色這一步主要考慮有光,陰影和鏡面反射。

光由三部分組成:環境光,漫反射光和鏡面反射光。

L=kaIa+kdImax(0,nl)+ksImax(0,nh)n

因此在每個頂點處需要記錄紋理顏色k 和法線方向n

陰影

從交點處和光源連線,如果中間有遮擋,那麼這裏就是陰影。

鏡面反射

鏡面反射的解決方法是遞歸調用,反覆尋找上一個交點。

僞代碼

function raycolor( ray e + td, real t0, real t1 ) #求某個像素着色
hit-record rec, srec
if (scene→hit(e + td, t0, t1, rec)) then   #視線與物體相交
    p = e + (rec.t) d
    color c = rec.ka Ia  #環境光
    if (not scene→hit(p + sl,epsilon, ∞, srec)) then  #不是陰影
        vector3 h = normalized(normalized(l) + normalized(−d))
        c = c + rec.kd I max (0, rec.n · l) + (rec.ks) I (rec.n · h)rec.p
    return c   #出現陰影就返回環境光
else
    return background-color #沒有和物體相交返回背景光
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章