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