- 前言
本章節是接續 淺談 physically based rendering 裡面未提到的多方向光源渲染的實作方法。
由於在 real-time 去計算所有方向的光源會是一個極大的開銷。
因此通常的作法是將環境內所有方向的光線情報 pre-compute(預先計算) ,
將結果儲存在一張影像圖(通常為一個 Cubemap)。
將結果儲存在一張影像圖(通常為一個 Cubemap)。
在渲染物體時,從這張影像圖去取得光線資料。
這種作法又稱作 Image Based Lighting (以後簡稱 IBL)。
- rendering equation
回頭複習 rendering equation (渲染方程式)[1],
物體的渲染是由物體的自發光(emitted)和來源光線涵蓋整個半球的反射光所組成的。
在 淺談 physically based rendering (2) 裡,
解釋到反射光可以分解成 Diffuse 和 Specular。
因此,反射光方程式可以改寫成

在 淺談 physically based rendering (2) 裡,
解釋到反射光可以分解成 Diffuse 和 Specular。
因此,反射光方程式可以改寫成

在預先計算光線情報時,也拆分成 Diffuse 和 Specular 來處理。
本篇接下來將集中處理 Diffuse 的部分。
本篇接下來將集中處理 Diffuse 的部分。
- Diffuse irradiance
將焦點集中在 Diffuse 的部分,

根據 淺談 physically based rendering (3) 的討論,
我使用 Normalized Lambert 作為 Diffuse BRDF。
所以方程式可以改寫成:


根據 淺談 physically based rendering (3) 的討論,
我使用 Normalized Lambert 作為 Diffuse BRDF。
所以方程式可以改寫成:

其中:
kd : refraction ratio (折射率)
c : Albedo
對同一個物體來說,其 kd 和 c 值都是固定,可視為一常數值。
因此,在預算 Diffuse 部分,只要對積分部分作處理即可。
積分部分可以改寫成:

其中 θ 和 φ 的定義如下圖所示

kd : refraction ratio (折射率)
c : Albedo
對同一個物體來說,其 kd 和 c 值都是固定,可視為一常數值。
因此,在預算 Diffuse 部分,只要對積分部分作處理即可。
積分部分可以改寫成:

其中 θ 和 φ 的定義如下圖所示

圖片來源 LearnOpenGL
使用在 importance sampling (重點採樣) 提到的 Spherical Coordinates (球面座標系)。
積分的實作上,則使用 Monte Carlo method (蒙地卡羅積分法) 最後提到的 Riemann Sum。
到此,就完成了 Diffuse BRDF 的預算處理。
就如同 淺談 physically based rendering (3) 的討論,
Diffuse BRDF 的影響並不如 Specular BRDF 來的明顯,
因此整體的計算所使用的演算法並不複雜。
但在計算 Specular BRDF 時,為了確保採樣的精準度,將會使用稍微複雜的演算法來處理。
下一篇將繼續討論並實作 Specular BRDF 的部分。
使用在 importance sampling (重點採樣) 提到的 Spherical Coordinates (球面座標系)。
積分的實作上,則使用 Monte Carlo method (蒙地卡羅積分法) 最後提到的 Riemann Sum。
- Unity 實作
由於是預先處理,且需要大量的計算。
所以我使用 Unity 的 Compute Shader 來實作 Diffuse BRDF 的預算。
首先,準備一張 Environment Map (環境貼圖),作為周遭的環境光源。
素材來源 HDRIHaven
接著在 Compute shader 內,對 θ 和 φ 每增加 0.025 就做一次取樣。
因為 Diffuse 資訊不需要太詳細,
因此我將結果儲存在一個 32x32 的 Cubemap 裡。
因此我將結果儲存在一個 32x32 的 Cubemap 裡。
- 結論
就如同 淺談 physically based rendering (3) 的討論,
Diffuse BRDF 的影響並不如 Specular BRDF 來的明顯,
因此整體的計算所使用的演算法並不複雜。
但在計算 Specular BRDF 時,為了確保採樣的精準度,將會使用稍微複雜的演算法來處理。
下一篇將繼續討論並實作 Specular BRDF 的部分。
- Reference
1. Kajiya, James T., The rendering equation (PDF), Siggraph 1986, 1986: 143–150, ISBN 978-0-89791-196-2, doi:10.1145/15922.15902
2. Learn OpenGL - Diffuse irradiance
2. Learn OpenGL - Diffuse irradiance
沒有留言:
張貼留言