图形学笔记(十二)光线追踪2——使用AABB包围盒加速光线追踪、空间划分(八叉树、KD树、BSP树)、物体划分(BVH加速结构)、光线与物体求交
图形学笔记(十四)光线追踪4——蒙特卡洛(Monte Carlo)积分、路径追踪详细过程(Whitted-Style的问题于RR(俄罗斯轮盘赌)算法、Ray Generation)、照片级真实感渲染
1 辐射度量学(Basic radiometry)
1.1 辐射度量学的动机
光源中定义L=10,但是10代表的是什么无法确定,缺少单位。
1.2 概览
辐射度量学就是在物理上准确度量光照的方法。
它定义了一系列的方法和单位,准确的定义了光在空间中的属性:
- 定义了光照的新属性:Radiant flux(辐射通量),intensity(辐射强度),irradiance(辐射[照]度),radiance(辐[射]亮度)
为什么学,学的是什么,这个新的东西是怎么运用的
1.3 角、立体(solid)角、微分立体角
角Angle 圆上的弧长与半径的比值。
- θ = l r \theta=\frac{l}{r} θ=rl
- 圆的角度为 2 π 2\pi 2πradians(弧度数)
立体角 Solid angle 球面上的面积和半径平方的比值。
- Ω = A r 2 \Omega=\frac{A}{r^2} Ω=r2A
- 球的立体角为 4 π 4\pi 4π steradians
微分(Differential)立体角 通过两个角度定义球面上的唯一一个方向( θ \theta θ(方向与z轴的夹角) ϕ \phi ϕ(方向绕着z轴旋转的夹角))。
下图的 d ω d\omega dω就是微分立体角(单位面积与 r 2 r^2 r2的比值),这个角非常小。
通过积分可以得到,整个球的立体角是4 π \pi π。
1.4 Radiant Energy and Flux(Power)
1.4.1 Radiant Energy
定义 Radiant energy是一种电磁辐射的能量。它由焦耳(J=Joule)单位来度量,用符号Q来表示。
1.4.2 Radient Flux(Power)
定义 Radient flux(Power) 是单位时间的发射出的、反射的、传播的和接收的能量。
另一种定义:单位时间辐射出光子的数量。
1.5 与光相关的物理量
关键的物理量 光源辐射出的能量(Radiant Intensity),物体表面接收的光的能量(Irrdiance),光线在传播过程中的能量(Radiance)。
1.5.1 Radient intensity
定义 Radient intensity是每单位立体角辐射的能量。
1.5.2 Irradiance(辐射[照]度)
定义 Irradiance是单位面积的辐射通量(面必须和光线垂直,否则要变成和投影面垂直的)。
通过Irradiance解读现象
- 冬夏温度之分是因为点光源辐射的能量到达辐射点的角度不同步(阳光和不同区域的夹角不同),导致接收的能量不同。
- Irradiance会衰减,如下图所示(不是Intensity衰减)。
1.5.3 Radiance
Radiance描述光线在传播过程中的属性。
定义 Radiance是在单位立体角发射的在单位面积由表面反射、发射或接收的能量。
由于 Irradiance是单位面积的辐射通量,Intensity是单位立体角发出的能量。
所以 Radiance是每单位立体角的Irradiance,Radiance是每单位面积的正交Intensity。
Incident Radiance
Incident Radiance是每单位立体角的到达表面的irradiance。
Exiting Radiance
Exiting surface radiance是每单位面积向某个角度辐射出的radiance。
1.5.4 Irradiance与Radiance
Irradiance:被区域dA吸收的所有的能量。
Radiance:被区域dA的来自 d ω d\omega dω的能量。
1.6 各向同性点光源 Isotropic Point Source
如果点光源均匀的辐射出光,则可以得到点光源的强度I如下所示。
2 双向反射分布函数 Bidirectional Reflectance Distribution Function(BRDF)
引入 来自于 ω i \omega_i ωi立体角的Radiance转化成dA接受的能量E,然后能量E会变成向着任何其他方向 ω \omega ω的radiance。
意义 BRDF用于表示某个微小面积 d A dA dA从某个微小立体角 d ω i d\omega_i dωi接受的irradiance会如何被分配到不同的立体角去。
如下图所示,来自于 ω i \omega_i ωi立体角的到达微小表面的irradiance—— d E ( ω i ) dE(\omega_i) dE(ωi)经过吸收后,被向着某一方向 ω r \omega_r ωr发射出去,发射出去的radiance是 d L r ( x , ω r ) dL_r(x,\omega_r) dLr(x,ωr)。
BRDF用于表示从每个入射方向进来的光线会每个向出射方向 ω r \omega_r ωr反射的能量多少。
BRDF就是任何一个出射方向的radiance的微分除以在入射点上irradiance的微分,BRDF如下所示。
2.1 反射方程
BRDF是描述光线对物体时如何作用的,所以可以用于定义不同的材质。
把每一个方向对出射方向的贡献都加起来就会获得向某个方向反射出光照的结果。
2.2 递归方程
反射radiance取决于入射radiance,而入射radiance不仅取决于光源,还有被其他物体反射的光,具有递归关系。
2.3 渲染方程 Rendering Equation
2.3.1 推导(由反射方程)
已知反射方程如下,可以从反射方程推出渲染方程,
渲染方程首先要在反射方程的基础上加上自己辐射的radiance,假设所有方向都向外,渲染方程如下( Ω + \Omega^+ Ω+和 H 2 H^2 H2都表示半球):
其中 c o s θ i = n ⋅ ω i cos\theta_i = n · \omega_i cosθi=n⋅ωi, L i ( x , ω i ) L_i(x,\omega_i) Li(x,ωi)表示来自光源的入射光, f ( x , ω i , ω r ) f(x,\omega_i,\omega_r) f(x,ωi,ωr)为BRDF表示材质的性质, L e ( x , x r ) L_e(x,x_r) Le(x,xr)为反射物体自身发出的光, L r ( x , x r ) L_r(x,x_r) Lr(x,xr)是最终的反射光。
场景中往往由很多光源,所以如果有很多点光源,就累加它们。
L r ( x , ω r ) = L e ( x , ω r ) + Σ L i ( x , ω i ) f ( x , ω i , ω r ) ( ω i , n ) L_r(x,\omega_r)=L_e(x,\omega_r)+\Sigma L_i(x,\omega_i)f(x,\omega_i,\omega_r)(\omega_i,n) Lr(x,ωr)=Le(x,ωr)+ΣLi(x,ωi)f(x,ωi,ωr)(ωi,n)
对于面光源,则进行积分。
L r ( x , ω r ) = L e ( x , ω r ) + ∫ Ω L i ( x , ω i ) f ( x , ω i , ω r ) cos θ i d ω i L_r(x,\omega_r)=L_e(x,\omega_r)+\int_{\Omega}L_i(x,\omega_i)f(x,\omega_i,\omega_r)\cos \theta_id\omega_i Lr(x,ωr)=Le(x,ωr)+∫ΩLi(x,ωi)f(x,ωi,ωr)cosθidωi
如果考虑其他物体反射的radiance,就把反射物体和反射面当成光源,可以把渲染方程写成更通用的形式。
L r ( x , ω r ) = L e ( x , ω r ) + ∫ Ω L r ( x ′ , − ω i ) f ( x , ω i , ω r ) cos θ i d ω i L_r(x,\omega_r)=L_e(x,\omega_r)+\int_{\Omega}L_r(x',-\omega_i)f(x,\omega_i,\omega_r)\cos \theta_id\omega_i Lr(x,ωr)=Le(x,ωr)+∫ΩLr(x′,−ωi)f(x,ωi,ωr)cosθidωi
以上的式子可以简单的表达为,
l ( u ) = e ( u ) + ∫ l ( v ) K ( u , v ) d v l(u)=e(u)+\int l(v)K(u,v)dv l(u)=e(u)+∫l(v)K(u,v)dv
K为反射操作符,进一步简写为
L = E + K L L=E+KL L=E+KL
可以看出L是递归定义的。
2.3.2 结论
渲染方程如下所示,而我们的目的是解出L。
L = E + K L L=E+KL L=E+KL
解L的方法如下所示,其中K也可以理解成反射次数,反射次数越多,项越多, K 2 K^2 K2代表光弹射两次。
全局光照是直接和间接光照( K E + K E 2 + K 3 E + . . . KE+KE^2+K^3E+... KE+KE2+K3E+...)的集合。
光栅化的着色一般只有E+EK,而后面的间接光照部分光栅化难以做到,一般使用光线追踪来进行计算。