辐射度量学提供了一系列方便的概念来描述渲染中的光学问题,所以渲染中大量运用到这些符号(与物理含义)。渲染中的光学做了一些简化。
光线不会自相交
光线沿直线传播
光线是线性可加的
光线不会闪烁
光线保持能量守恒
衍射和干涉等波动光学的概念几乎不考虑
辐射度量学
Energy 能量
单位焦耳,物理里最常见的符号之一。某个波长的光线能量实质上是含有光子的数量。一个光子所带的能量可以用以下公式来刻画,λ \lambda λ 为波长,h为普朗克常数:
Q = h c λ
Q = \frac{hc}{\lambda}
Q = λ h c
Flux
称为power(功率),单位瓦特(w), 又可以被称为Radiant flux,单位流明(lm)。Flux可以通过能量对时间做微分得到
Φ = d Q d t
\Phi = \frac{\text{d}Q}{\text{d}t}
Φ = d t d Q
一个在空间中的球形光源每单位时间内对周围360度空间内辐射的能量就是功率, 也就是Flux。
Irradiance
给定一个有限的面积, 我们可以得到单位时间内单位面积 所得到的能量。
E = Q A t = Φ A
E = \frac{Q}{At} = \frac{\Phi}{A}
E = A t Q = A Φ
考虑一个空间中的点光源,以它为圆心,处于半径r处的圆壳上所收到的单位时间,单位面积的能量为
E = Φ 4 π r 2
E = \frac{\Phi}{4 \pi r^2}
E = 4 π r 2 Φ
radiance
要理解radiance要先理解立体角,在二维的情况下圆只有一个角度θ \theta θ ,在三维下有两个角度相对z轴的θ \theta θ 和绕z轴旋转的ϕ \phi ϕ ,立体角的单位是ω \omega ω 。
radiance的符号是L,渲染中用的最多的符号,代表沿着某个单位立体角方向、单位时间、单位面积 的光线强度。
下式描述了在p点,沿着ω \omega ω 立体角方向的radiance:
L ( p , ω ) = d E ω ( p ) d ω
L(p,\omega) = \frac{\text{d} E_\omega (p)}{\text{d}\omega}
L ( p , ω ) = d ω d E ω ( p )
由于立体角方向往往与面积所在的平面不垂直,所以还需要加上投影项cos \cos cos .
与ω \omega ω 垂直的单位面积d A ′ dA' d A ′ 大约是真实的d A dA d A (在xy平面)的cos θ \cos\theta cos θ 倍(直观的想,当ω \omega ω 方向与d A dA d A 的法线平行的时候,此时dA = dA')。
因此radiance可以被写作
L ( p , ω ) = d 2 Φ ( p , ω ) d ω d A cos θ
L(p,\omega) = \frac{\text{d}^2\Phi(p,\omega)}{\text{d}\omega \text{d}A \cos\theta}
L ( p , ω ) = d ω d A cos θ d 2 Φ ( p , ω )
渲染方程
BRDF与反射方程
BRDF(Bidirectional Reflectance Distribution Function),双向反射分布函数,刻画了由ω i \omega_i ω i 方向进入的radiance ,在点P处得到了irradiance后,沿着若干个ω o \omega_o ω o 方向反射出去之间的比例关系。即每一个ω o \omega_o ω o 方向的radiance与点p沿着ω i \omega_i ω i 方向所进入的radiance之间的关系。
其中
f r ( ω i ⇒ ω r ) = d L r ( ω r ) d E i ( ω i ) = d L r ( ω r ) L i ( ω i ) cos θ i d ω i
f_r(\omega_i \Rarr \omega_r ) = \frac{dL_r(\omega_r)}{dE_i(\omega_i)} = \frac{dL_r(\omega_r)}{L_i(\omega_i)\cos\theta_i d\omega_i}
f r ( ω i ⇒ ω r ) = d E i ( ω i ) d L r ( ω r ) = L i ( ω i ) cos θ i d ω i d L r ( ω r )
有了上述的物理量以后,我们可以定义渲染方程了。首先,如果知道了一个点来自各个方向 的radiance , 我们可以沿着所有方向对radiance 进行积分,从而得出这个所在的点的*irradiance 。
L ( p , ω ) = d 2 Φ ( p , ω ) d ω d A cos θ ⇒ L ( p , ω ) = d E ( p , ω ) d ω cos θ ⇒ d E ( p , ω ) = L ( p , ω ) cos θ d ω
L(p,\omega) = \cfrac{\text{d}^2\Phi(p,\omega)}{\text{d}\omega \text{d}A \cos\theta}\\
\rArr \\
L(p,\omega) = \cfrac{\text{d} E(p,\omega)}{\text{d}\omega \cos\theta} \\
\rArr \\
\text{d} E(p,\omega) = L(p,\omega)\cos\theta \text{d}\omega
L ( p , ω ) = d ω d A cos θ d 2 Φ ( p , ω ) ⇒ L ( p , ω ) = d ω cos θ d E ( p , ω ) ⇒ d E ( p , ω ) = L ( p , ω ) cos θ d ω
在渲染的环境下,反射方程只考虑物体表面外的半球体的入射、反射,因此做半球积分,
E ( p ) = ∫ Ω + L i ( p , ω ) cos θ i d ω
E(p) = \int_{\Omega^+} L_i(p,\omega)\cos\theta_i \text{d}\omega
E ( p ) = ∫ Ω + L i ( p , ω ) cos θ i d ω
我们关心的是相机方向收到的radiance ,而不是点p收到的irradiance ,所以在上式中加入BRDF项,得到反射方程。
L r ( p , ω r ) = ∫ Ω + f r ( ω i ⇒ ω r ) L i ( p , ω ) cos θ i d ω
L_r(p,\omega_r)= \int_{\Omega^+} f_r(\omega_i \Rarr \omega_r ) L_i(p,\omega)\cos\theta_i \text{d}\omega
L r ( p , ω r ) = ∫ Ω + f r ( ω i ⇒ ω r ) L i ( p , ω ) cos θ i d ω
可以观察下图中,L r L_r L r ,L i L_i L i 的方向
最后,物体是可以自发光的,所以以上公式还缺了一个发光项,由于我们假设了光线是线性可加的,因此直接加上就可以了
L r ( p , ω r ) = L e ( p , ω o ) + ∫ Ω + f r ( ω i ⇒ ω r ) L i ( p , ω ) cos θ i d ω w h e r e : cos θ i = n ⋅ w i
L_r(p,\omega_r)= L_e(p,\omega_o) + \int_{\Omega^+} f_r(\omega_i \Rarr \omega_r ) L_i(p,\omega)\cos\theta_i \text{d}\omega\\
where:
\cos\theta_i = \mathbf{n} \cdot \mathbf{w_i}
L r ( p , ω r ) = L e ( p , ω o ) + ∫ Ω + f r ( ω i ⇒ ω r ) L i ( p , ω ) cos θ i d ω w h ere : cos θ i = n ⋅ w i
这个公式要注意,w i w_i w i 在图中只是为了说明这是一个入射光, 实际上在计算中,w i w_i w i 的方向应从p点指向外面,否则cos \cos cos 项会为负数。
这个方程中有循环定义,因为某一个方向的L r L_r L r 依赖于另一个方向L i L_i L i ,而L i L_i L i 也是未知的,因为L i L_i L i 实质上也是从其他方向进来的L L L 所得到的。所以很遗憾,这个式子是没有解析解的,只能得到数值解, 解这个式子最常用的方法是蒙特卡罗积分,最常见的实现是路径追踪。
Reference
闫令琪 GAMES101 课件14,15
PBRT v3
Top