目錄:我們已經有2個pdf,乙個和cos《用兩天學習光線追蹤》1.專案介紹和ppm輸出
《用兩天學習光線追蹤》2.射線、簡單相機和背景輸出
《用兩天學習光線追蹤》3.球體和表面法向量
《用兩天學習光線追蹤》4.封裝成類
《用兩天學習光線追蹤》5.抗鋸齒
《用兩天學習光線追蹤》6.漫反射材質
《用兩天學習光線追蹤》7.反射向量和金屬材質
《用兩天學習光線追蹤》8.折射向量和電介質
《用兩天學習光線追蹤》9.可放置相機
《用兩天學習光線追蹤》10.散焦模糊
《用一周學習光線追蹤》1.動態模糊
《用一周學習光線追蹤》2.bvh樹、aabb相交檢測
《用一周學習光線追蹤》3.純色紋理和棋盤紋理
《用一周學習光線追蹤》4.柏林雜訊
《用一周學習光線追蹤》5.球面紋理貼圖
《用一周學習光線追蹤》6.光照和軸對齊矩形
《用一周學習光線追蹤》7.長方體和平移旋轉
《用餘生學習光線追蹤》1.蒙特卡洛積分與概率密度函式pdf
《用餘生學習光線追蹤》2.光照散射與重要性取樣
《用餘生學習光線追蹤》3.生成球座標隨機方向
《用餘生學習光線追蹤》4.直接對光照取樣
《用兩天學習光線追蹤》5.混合密度函式取樣
ine(
θ)cosine(\theta)
cosine
(θ)相關,乙個和跟光源取樣相關。
接下來,我們將他們結合起來生成乙個混合密度。加權平均的pdf依然是乙個pdf,例如:
p df
_mix
ture
(dir
ecti
on)=
12pd
f_re
flec
tion
(dir
ecti
on)+
12pd
f_li
ght(
dire
ctio
n)pdf\_mixture(direction) = \frac pdf\_reflection(direction) + \fracpdf\_light(direction)
pdf_mi
xtur
e(di
rect
ion)
=21
pdf_
refl
ecti
on(d
irec
tion
)+21
_lig
ht(d
irec
tion
)寫成偽**:
if
(random_double()
<
0.5)
pick direction according to pdf_reflection
else
pick direction according to pdf_light
要估算pdf_mixture,就要估算 pdf
_ref
lect
ionpdf\_reflection
pdf_re
flec
tion
和 pdf_
ligh
tpdf\_light
pdf_li
ght,這需要知道兩個值:
1.當前方向的pdf值
2.生成對應該pdf分布的隨機數
接下來將pdf封裝成類。
pdf基類為:
class
pdf;
先實現pdf
_ref
lect
ionpdf\_reflection
pdf_re
flec
tion
,即之前和cos
ine(
θ)cosine(\theta)
cosine
(θ)相關的pdf。
class
cosine_pdf
:public pdf
virtual
float
value
(const vec3& direction)
const
virtual vec3 generate()
const
onb uvw;
};
vec3 color
(const ray& r, hittable *world,
int depth)..
.}..
.}
渲染效果和 《用餘生學習光線追蹤》3.生成球座標隨機方向 中的一樣:
};hittable_pdf類中宣告了乙個指向某個hittable的指標。
hittable基類中新增**如下:
class
hittable
virtual vec3 random
(const vec3& o)
const
};
在燈光的hittable類xz_rect中實現pdf_value和random這兩個方法:
class
xz_rect
:public hittable
else
return0;
}virtual vec3 random
(const vec3& o)
const
material *mp;
float x0, x1, z0, z1, k;
};
color函式修改如下:
vec3 color
(const ray& r, hittable *world,
int depth)..
.}..
.}
渲染效果和 《用餘生學習光線追蹤》4.直接對光照取樣 中的一樣:
效果如下:
正如開頭所提到的,加權平均的pdf依然是乙個pdf,將上述兩種pdf的權值分別設定為0.5:
class
mixture_pdf
:public pdf
virtual
float
value
(const vec3& direction)
const
virtual vec3 generate()
const
pdf *p[2];};
color函式修改如下:
vec3 color
(const ray& r, hittable *world,
int depth)..
.}..
.}
最終效果如下:
參考資料:
1.ray tracing: the rest of your life
《用兩天學習光線追蹤》10 散焦模糊
目錄 用兩天學習光線追蹤 1.專案介紹和ppm輸出 用兩天學習光線追蹤 2.射線 簡單相機和背景輸出 用兩天學習光線追蹤 3.球體和表面法向量 用兩天學習光線追蹤 4.封裝成類 用兩天學習光線追蹤 5.抗鋸齒 用兩天學習光線追蹤 6.漫反射材質 用兩天學習光線追蹤 7.反射向量和金屬材質 用兩天學習...
《用兩天學習光線追蹤》6 漫反射材質
目錄 用兩天學習光線追蹤 1.專案介紹和ppm輸出 用兩天學習光線追蹤 2.射線 簡單相機和背景輸出 用兩天學習光線追蹤 3.球體和表面法向量 用兩天學習光線追蹤 4.封裝成類 用兩天學習光線追蹤 5.抗鋸齒 用兩天學習光線追蹤 6.漫反射材質 用兩天學習光線追蹤 7.反射向量和金屬材質 用兩天學習...
這兩天的學習
系統學習了控制系統計算機輔助設計 matlab語言與應用,包括無約束 有約束最優化問題的求解,曲線擬合的最小二乘求解函式,高階微分方程或微分方程組轉化為一階微分方程組的一般方法,不同系統數學模型之間的相互轉換,s變換 z變換,連續轉離散,離散轉連續,模型降階演算法,各種基於狀態空間的模型降階方法,多...