光照可分爲局部光照和全局光照。性能
局部光照:直接照射到物體表面的光照spa
全局光照:物體表面受周圍環境影響的光照blog
左圖中點x接收到周圍環境的光線照射,來自周圍表面的反射光照稱爲全局光照;右圖中點x接收來自太陽光的直接照射,來自太陽發射的直接光照稱爲局部光照。渲染
在現實環境中,全局光照的狀況更爲複雜,例如:反射
其餘例子還有不少,全局光照會比局部光照效果更佳柔和天然,但考慮到其複雜性,應用到實時渲染中也是有必定難度的。im
咱們在前幾篇中經過理論獲得的BRDF光照模型公式實際爲局部光照模型中,還欠缺了全局光照因素。img
下面,咱們來研究一下BRDF的局部反射模型,先來看下最簡單的Lambertian反射模型。di
Lambertian反射稱做徹底漫反射。這是一種理想狀況,現實中不存在徹底漫反射,但Lambertian能夠用來近似的模擬一些粗糙表面的效果,好比紙張。co
對於Lambertian表面,入射方向與出射方向無關,\({\omega_i}\)與\({\omega_o}\)無關,\({L_o(p, \omega_o)}\)能夠表示爲\({L_o(p, \omega_o)} = {L_r(p)}\)。background
在上一篇中,咱們知道反射輻射度的方程爲:
\({L_o(p,\omega_o)} = \int_{\Omega_i}{f_r(p, \omega_i, \omega_o)}\, {L_i(p, \omega_i)}\, {\cos \theta_i}\, {d\omega_i}\)
在Lambertian反射模型中,因爲\({\omega_i}\)與\({\omega_o}\)無關,BRDF項\({f_r(p, \omega_i, \omega_o)} = {f_r(p)}\),上式可表示爲:
\({L_r(p)} = {f_r(p)\int_{\Omega_i}L_i(p, \omega_i)\, \cos \theta_i \, d\omega_i} = {f_r(p)\, E_i(p)}\)
\(\Rightarrow {f_r(p)} = \frac{L_r(p)}{E_i(p)}\)
在上一篇的反射率中,\({\Omega_o}\)內的反射通量\({d\Phi_o} = {dA\int_{\Omega_o}L_o(p,\omega_o) \, \cos \theta_o \, d\omega_o}\)
在整個Lambertian表面半球積分(\({\Omega_o} = {2\pi}\))中:
\({d\Phi_o} = {dAL_r(p)\int_{2\pi}\cos \theta_o \, d\omega_o} = {dA \, L_r(p) \, \pi}\)
式中的\({\int_{2\pi}\cos \theta_o \, d\omega_o} = {\pi}\),這是一個半球積分,在第一篇中咱們推出過該結果。
\({d\Phi_i} = {dA\int_{2\pi} L_i(p, \omega_i) \, \cos \theta_i \, d\omega_i} = {dA \, E_i(p)}\)
反射率\({\rho_d(p)} = \frac{d\phi_o}{d\phi_i} = \frac{L_r(p) \, \pi}{E_i(p)} = {f_r(p) \, \pi}\)
這樣,咱們就獲得了Lambertain BRDF:\({f_r(p)} = \frac{\rho_d(p)}{\pi}\)
其中\({\rho_d}\)能夠用常數項表示:\({\rho_d} = {k_d \, c_d}\),\({k_d \in [0, 1]}\),表示漫反射係數;\({c_d}\)表示漫反射顏色。
Lambertain BRDF又可寫爲\({f_r(p)} = \frac{k_d \, c_d}{\pi}\)
咱們一般在實時渲染出於性能方面的考慮,會省略掉\(\pi\),咱們熟知的漫反射顏色計算公式,就是從反射輻射度方程中簡化而來的:
反射輻射度方程:\({L_o(p,\omega_o)} = {f_r(p, \omega_i, \omega_o)}\int_{\Omega_i}{L_i(p, \omega_i)}\, {\cos \theta_i}\, {d\omega_i}\)
漫反射着色公式:\({L_r} = {k_d \, c_d} {\sum_{1}^{n} \, L_i \, (n * l)} \)
對比看一下,是否是很像?\(\sum_{1}^{n}\)表示逐個光源求和近似積分,\({L_i}\)表示光源強度,\({n * l}\)表示\({\cos \theta_i}\)項