欢迎光临散文网 会员登陆 & 注册

辐射度量学与蒙特卡诺积分

2023-03-11 17:26 作者:EnemyIncoming  | 我要投稿

背景:

Phong和Blinn-Phong的经验模型过于经验,没有严谨的物理定义,所以计算机图形学急需要一个能够符合物理基本规律的光照知识,这就是辐射度量学提出的背景(基于物理光学)。

概念:

1. 辐射能Q,单位是焦耳,是能量,表示穿过一个曲面(类似于电磁学的高斯面)的光能。

2. 辐射通量%5Cphi

%0A%5Cphi%3D%5Cfrac%7BdQ%7D%7Bdt%7D%20

3. 立体角%5Comega(针对球面坐标系),类比于平面角(针对极坐标系):

%5Ctheta%3D%5Cfrac%7Bl%7D%7Br%7D%20

可以得到立体角的公式:

%20%5Comega%3D%5Cfrac%7BA%7D%7Br%5E2%7D%20

如图所示,设球面上的单位面积为dA,那么可以算出:

%20%5Cbegin%7Balign%7D%20dA%26%3D(r%5C%20d%5Ctheta)(r%5Csin%5Ctheta%5C%20d%5Cphi)%3Dr%5E2%5Csin%5Ctheta%20%5C%20d%5Ctheta%20d%5Cphi%5C%5C%20d%5Comega%26%3D%5Cfrac%7BdA%7D%7Br%5E2%7D%3D%5Csin%5Ctheta%5C%20d%5Ctheta%20d%5Cphi%20%5Cend%7Balign%7D%20

4. 辐射强度E%3D%5Cphi%2F4%5Cpi(Radiant Intensity),单位为cd(坎德拉),在光学中叫做光强。他表示单位立体角的辐射通量:

%20I%3D%5Cfrac%7Bd%5Cphi%7D%7Bd%5Comega%7D%20

5. 辐照度L%3D%5Cfrac%7Bd%5Cphi%20d%5Cphi%7D%7Bd%5Comega%20dA%20%5Ccos%5Ctheta%7D%3D%5Cfrac%7BEd%5Cphi%7D%7Bd%5Comega%20%5Ccos%5Ctheta%7D%3D%5Cfrac%7BdE%7D%7Bd%5Comega%20%5Ccos%5Ctheta%7D%20(Irradiance),表示单位面积的辐射通量:

E%3D%5Cfrac%7Bd%5Cphi%7D%7BdA%7D%20

可以看出,这个量类似于我们在电磁学学到的磁通量定义公式:

%5CPhi%3D%5Cint_%5COmega%20%5Cvec%7BE_e%7D%5Ccdot%20d%5Cvec%7BA%7D%20

所以,E可以表示一个球面(或者叫高斯面)上单位面积的接收到光强。那么EI有什么区别呢?E表示的是一个球面上单位面积的接收到光强,而I表示的是一束光的光强而已。

这个理论可以解释为什么在Phong模型中,光强按照平方阶次衰减。

如图,离光源最近的辐照度(半径为1),而距离光源为r的辐照度E'%3D%5Cphi%2F4%5Cpi%20r%5E2%3DE%2Fr%5E2,所以两者的比值是1%2Fr%5E2,这就证明了衰减是平方衰减。(可以看出来这里和电磁学非常相似,道理都是相通的)

6. 辐射率L%0A(Radiance),又叫光亮度。这是最常用(最重要)的一个物理量,也是构建渲染方程的主要物理量。他每表示单位立体角,每单位垂直面积的辐射通量。很像是Intensity和irradiance的结合。它同时指定了光的方向与照射到的表面所接受到的亮度。(就是这个单位面积在某个方向上吸收的光能)

%20L(%7B%5Crm%20p%7D%2C%5Comega)%3D%5Cfrac%7Bd%5E2%5Cphi(%7B%5Crm%20p%7D%2C%20%5Comega)%7D%7Bd%5Comega%20dA%20%5Ccos%5Ctheta%7D%20

其中p是入射点。

那么L%0AE的关系是啥呢?作如下变形:

L%3D%5Cfrac%7Bd%5Cphi%20d%5Cphi%7D%7Bd%5Comega%20dA%20%5Ccos%5Ctheta%7D%3D%5Cfrac%7BEd%5Cphi%7D%7Bd%5Comega%20%5Ccos%5Ctheta%7D%3D%5Cfrac%7BdE%7D%7Bd%5Comega%20%5Ccos%5Ctheta%7D

这样进一步得到:

%20%5Cbegin%7Balign%7D%20dE(%7B%5Crm%20p%7D%2C%5Comega)%26%3DL_i(%7B%5Crm%20p%7D%2C%5Comega)%5Ccos%5Ctheta%20d%5Comega%20%5C%5C%20E(%7B%5Crm%20p%7D)%26%3D%5Cint_%7BH%5E2%7D%20L_i(%7B%5Crm%20p%7D%2C%5Comega)%5Ccos%5Ctheta%20d%5Comega%20%5Cend%7Balign%7D%20

其中H%5E2是上半球。所以这个式子很好解释了Radiance是单位面积在某个方向上接受到的光强,而Irradiance是整个Radiance的求和(即所有方向上接收到的光强的总和)。

BRDF函数与渲染方程:

考虑一个位置为x的单位面积dA,接收到某个方向的光强dE(%5Comega_i),经过材质的吸收能量后,反射出的光强为dL_r(x%2C%5Comega_r),为了衡量反射出的光强与入射的光强的关系,类比于反射率的定义,我们定义一个函数来表示这个关系:

%20f_r(%5Comega_i%20%5Crightarrow%20%5Comega_r)%3D%5Cfrac%7BdL_r(x%2C%5Comega_r)%7D%7BdE(%5Comega_i)%7D%3D%5Cfrac%7BdL_r(x%2C%5Comega_r)%7D%7BL_i(x%2C%5Comega_i)%5Ccos%5Ctheta_i%20d%5Comega_i%7D%20

这个函数f,就是BRDF函数。因为这个函数的物理意义就是反射率,所以又叫做反射率函数。

因此,反射出的光强可以解出来是:

%20L_r(x%2C%5Comega_r)%3D%5Cint_%7BH%5E2%7Df_r(%5Comega_i%20%5Crightarrow%20%5Comega_r)%5C%20L_i(x%2C%5Comega_i)%5C%20%5Ccos%5Ctheta_i%5C%20d%5Comega_i

这就是反射方程。

考虑到物体还能自身发光,所以反射出的光强还包括物体自身的光强:

%20L_r(x%2C%5Comega_r)%3DL_e(x%2C%5Comega_r)%2B%5Cint_%7BH%5E2%7Df_r(%5Comega_i%20%5Crightarrow%20%5Comega_r)%5C%20L_i(x%2C%5Comega_i)%5C%20%5Ccos%5Ctheta_i%5C%20d%5Comega_i

这就是渲染方程。

渲染方程的物理意义

渲染方程可以这样写:

L_o(p%2C%5Comega_o)%3DL_e(p%2C%5Comega_o)%2B%5Cint_%7B%5COmega%5E%2B%7Df_r(p%2C%5Comega_i%2C%5Comega_o)%5C%20L_i(p%2C%20%5Comega_i)%5C%20(%5Cvec%7Bn%7D%5Ccdot%20%5Cvec%7B%5Comega_i%7D)%5C%20d%5Comega_i%20

大部份物理意义上面已经说过了,因为这里的积分其实本质是一种卷积,所以可以用算子来简化,这里讲解一下算子理解,为了简化方程,我们可以这样写一个方程大致表示渲染方程:

L%3DE%2BKL

这是一种递归的写法,$L$为反射光强,$E$为光源光强,而$K$是反射算子(一种矩阵)。由线性代数的知识有:

%20%5Cbegin%7Balign%7D%20L%26%3DE%2BKL%5C%5C%20L-KL%26%3DE%5C%5C%20IL-KL%26%3DE%5C%5C%20(I-K)L%26%3DE%5C%5C%20L%26%3D(I-K)%5E%7B-1%7DE%20%5Cend%7Balign%7D%20

由泰勒展开,有:

%20(I-K)%5E%7B-1%7D%3DI%2BK%2BK%5E2%2BK%5E3%2B...%20

所以反射光强:

L%3DE%2BKE%2BK%5E2E%2BK%5E3E%2B...%3D%5Csum_%7Bi%3D0%7DK%5EiE%20

所以可以理解为,反射光强等于光源光强,加上光源经一次反射后的光强,加上光源经两次反射后的光强,以此类推。这就是真实的全局光照了。

蒙特卡诺积分

现在有了渲染方程,但如果直接数值方法计算定积分,效率太低了。所以引入概率学的蒙特卡诺方法,类似于几何概型。

蒙特卡诺方法会将:

%20%5Cint_a%5Ebf(x)dx%20

以概率的角度,求出他的近似值。

考虑一个函数图像:

选定一个随机变量X_i%5Csim%20P(x),遵循某种分布P(x)。从这个分布随机挑选出一个值x_i%5Cin%20X_i%5Cin%5Ba%2Cb%5D,因为这个集合关系,所以就会导致P(x_i)的范围为:

1%2FP(x_i)%5Cin%5Ba%2C%20b%5D%20

所以1%2FP(x_i)决定了矩形的宽度,可以用来计算矩形面积。

然后取f(x_i)作为矩形的高度,然后计算矩形面积:

%20S%3Df(x_i)%2FP(x_i)%20

重复$N$次,最后取算术平均数,就是这个积分的近似值了(是不是很像几何概型):

F_N%3D%5Cfrac%7B1%7D%7BN%7D%5Csum_%7Bi%3D1%7D%5EN%5Cfrac%7Bf(x_i)%7D%7BP(x_i)%7D%20

于是:

%20%5Cint_b%5Eaf(x)dx%5Capprox%20%5Cfrac%7B1%7D%7BN%7D%5Csum_%7Bi%3D1%7D%5EN%5Cfrac%7Bf(x_i)%7D%7BP(x_i)%7D%20

如果我们采用均匀分布,那么X_i%5Csim%20U(a%2Cb),就有P(x_i)%5Cequiv1%2F(b-a),这个时候每次的获取的矩形面积的宽度都是(b-a),于是每次随机计算出的矩形面积为:

%20S%3Df(x_i)(b-a)%20

于是:

%20F_%7BN%7D%3D%5Cfrac%7Bb-a%7D%7BN%7D%5Csum_%7Bi%3D1%7D%5ENf(x_i)%20

证明蒙特卡诺积分的正确性

因为蒙特卡诺是概率模型,我们计算数学期望,如果值就是积分本身,那么这个模型就是正确的:

%0AE%5Cleft%5B%5Cfrac%7Bf(x_i)%7D%7BP(x_i)%7D%5Cright%5D%3D%5Cint%20%5Cfrac%7Bf(x_i)%7D%7BP(x_i)%7DP(x_i)dx%3D%5Cint%20f(x_i)dx%20

证明完毕


辐射度量学与蒙特卡诺积分的评论 (共 条)

分享到微博请遵守国家法律