《用兩天學習光線追蹤》5 混合密度函式取樣

2021-10-10 09:30:30 字數 4090 閱讀 6946

目錄:

《用兩天學習光線追蹤》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.混合密度函式取樣

我們已經有2個pdf,乙個和cos

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

​pdf

_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變換,連續轉離散,離散轉連續,模型降階演算法,各種基於狀態空間的模型降階方法,多...