渲染方程
Lo(p, wo) = 自己发光 + 来自其它的反射或直射光。
$$ L_o(p,w_o) = L_e(p,w_o) + \int_{\Omega^+}L_i(p, w_i)f_r(p, w_i, w_r)(n \cdot \omega_i)dw_i $$
说明:
\(H^2\)或\(\Omega^+\):都是表示上半球。定义的积分域为上半球,即不考虑折射。
\((n \cdot \omega_i)\):和\(\cos\theta\)是一个意思。参考link
第一项:自己发光超某个方向辐射的能量。
第二项:从各个角度来的反射光或直射光向某个方向辐射的能量。
理解1:1个入射光线。[47:44]
$$ L_o(x,w_r) = L_e(x, w_r) + L_i(x, w_i)f(x, w_i, w_r)(n \cdot \omega_i) $$
👆 原视频公式中有两个错误:
折射光Lr不包含自己发光项。Lo才是reflect和emission之和。
最后一项角度用点号不用逗号。
✅ 只考虑一根入射光线的情况不需要积分
理解2:多个入射光线 [47:57]
$$ L_o(x,w_r) = L_e(x, w_r) + \sum L_i(x, w_i)f(x, w_i, w_r)(n \cdot \omega_i) $$
把多个入射光的贡献加起来
理解3:1个面光源 [48:30]
$$ L_o(p,w_r) = L_e(p,w_r) + \int_{\Omega}L_i(p, w_i)f(p, w_i, w_r)(n \cdot \omega_i)dw_i $$
面光源可以看作是无穷多个小的点光源的积分。
因此单个点光源的累加变成了\(d\omega_i\)的积分。
理解4:来自其它物体的反射光作为入射光线[49:31]
x是X物体上的一个点,X'是另一个物体。
\(L_r(X', -\omega_i)\)是X'发出(自身发光或反射)的光以\(\omega_i\)角度辐射x
\(L_r(X, \omega_o)\)是X发出(自身发光或反射)辐的光,可能也在以某个角度辐射另一个物体。
递归问题
把“理解4”中的公式简化,得:
$$ l(u) = e(u) + \int l(v)K(u,v)dv $$
其中:
l(u):未知量
e(u):自己发的光
I(v):未知量
K(u,v)dV:材料属性
进一步简化得到公式的算子形式:
$$ L = E + K L $$
解得:
$$ L = E + KE + K^2E + k^3E + \dots $$
其中:
E:光源直接发出的能量
KE:光源辐射能量经过一次反射后的能量,又称为直接光照
\(K^nE\):多次反射,统称为间接光照
全局光照:直接光照与间接光照的集合
光栅化中的着色:包含光源和直接光照,不包含间接光照,因此效果有限
效果
- 直接光照
- 直接光照 + 1次间接光照
💡 为什么这么复杂的光照过程能被看上去这么简单的公式精确模拟?
因为它是基于物理的简化,物理规律就是简洁且真实的。
本文出自CaterpillarStudyGroup,转载请注明出处。
https://caterpillarstudygroup.github.io/GAMES101_mdbook/