计算机图形学(一)——辐照度学概述

辐照度(irradiance)定义为电磁辐射入射于曲面时每单位面积的功率,直观理解为能量在入射点处的量化值。在计算机图形学中,就是要求解场景中任意位置的辐照度大小。如果求得辐照度的大小,剩下的事情就是如何利用所求解得到的辐照度渲染出一张静帧图像,而不同的求解方法,对应着不同的渲染算法,每一个算法都有其独特的风格。本部分就是要理清计算机图形学中最基本的辐照度物理量之间的定义与关系。

 

1.1 立体角

立体角的概念其实是平面几何中角的概念的扩展。数学上定义平面角度是在单位圆上,两射线张角的弧长即为张出的角度,单位为radian;则类比平面几何中对角度的定义,我们可以去如下定义立体角的概念:在单位球体上,球心处一个锥形包含的球表面积定义为这个锥形的立体角(如图1),单位为stereo radian,简写为sr。计算机图形学中常用粗体的来表示一个立体角。需要注意的是,立体角的形状并不仅限于像图1中那样的锥形,还可以是像那样的不规则形状,我们仅用单位圆内该立体角内部包含的球表面积来度量它的角度,由于单位球面的表面积为$4pi$,所以一个立体角的取值范围也在$left[{0,4pi} ight]$之间。有了上述的介绍,我们就可以继续定义立体角的微分了。即当一个立体角所包含的单位球表面积趋于$0$时,我们称其为立体角的微分,写为。为表述简便,后续有关“方向”的概念,如果没有特殊说明,默认都是在说指向这个方向的一个立体角。

1.2 辐照度中的基本量及其关系

辐照度学中,定义了如下表1的常见基本量,详细请参见相关的教材。

上述物理量中,较为常用的几个物理量为辐射通量$Phi_e$、辐照度$E_e$和辐射率$L_e$。为表述简便,后续的内容都会省略角标,即简写为$Phi$、$E$和$L$。现定义它们之间满足的基本关系。

egin{equation}
label{eq:E}
{E}=frac{{{ m{d}}{Phi}}}{{{ m{d}}A}}
end{equation}
式中之所以用单位面积$ m{d}A$上入射的功率$Phi$而不是能量$Q$来定义辐照度$E$是因为前者考虑了时间因素,把时间度量统一到单位时间。如果按照后者来定义的话,会造成物理量$E$与时间相关,这样做并不是一个明智的选择。

 


定义垂直入射光方向的辐照度
egin{equation}
label{eq:Ebot}
{E_ot}=frac{{{ m{d}}{Phi}}}{{{ m{d}}A_ot}}
end{equation}
根据图2,上式中的$A_ot$与$A$有如下的关系
egin{equation}
label{eq:aabot}
{A_ot}=Acos heta
end{equation}
式( ef{eq:aabot})中,$ heta$是入射方向与法线的夹角,注意这里的$ heta$取值范围为$0le hetalefrac{pi}{2}$,使得$cos heta$总是非负数。为简便起见,我们规定入射方向是沿着入射点朝向入射源的,直观上这与“入射”的含义相悖,但是并不影响后续的分析。这样一来,所有有关“方向”的概念都是沿物体表面入射点朝向表面外,反而会使很多式子的形式得到简化。我们进而又能很简单地得到$E$与$E_ot$之间的关系
egin{equation}
label{eq:eebot}
{E_ot}=frac{E}{cos heta}
end{equation}

有了式( ef{eq:E}),我们可以进一步定义辐射率
egin{equation}
label{eq:L}
{L}=frac{{{ m{d}}{E_ot}}}{{{ m{d}}f{omega}}}
end{equation}
所以
egin{equation}
label{eq:llbot}
L=frac{{{{ m{d}}}Phi }}{{{ m{d}}{A_ ot }{ m{d}}f{omega} }} = frac{{{{ m{d}}}Phi }} {{ m{d}}A{ m{d}}f{omega}cos heta}
end{equation}
由( ef{eq:eebot})、( ef{eq:L})可得
egin{equation}
label{eq:elrelation}
{ m{d}} E = Lcos heta { m{d}}{f{omega}}
end{equation}
之所以定义辐射率的概念,是因为我们经常要衡量单位球表面上任意一点的辐照度,但是点的面积是不存在的,所以要用辐照度微分与立体角微分之比的形式来定义辐射率。式( ef{eq:llbot})、( ef{eq:elrelation})是很重要的公式,在之后对表面处的辐射率估计的推导中会经常用到。

1.3 符号约定

由于后续的推导过程中运用了大量的数学概念,我们在正式介绍这些内容之前,首先要约定符号的写法以及各种物理量的表达方式,否则很容易造成混淆。我们规定:

1) 立体角用粗体小写的$f{omega}$来表示,其微分形式为${ m{d}}{f{omega}}$,这在1.1节中已经陈述。
2) 以物体表面任意点$x$处,沿表面局部法线建立的半球面区域写为$Omega_x$,其立体角恒为$2pi$。
3) 双向反射分布函数(下文会详细介绍)用$f_r$来表示,且其第一个参数$x$为参考点的位置,第二个参数为入射方向,第三个参数为出射方向。
4) 表1中的辐照度(irradiance)和辐射度(radiosity)的符号应该予以统一,以符号$E_i$表示辐照度,以符号$E_o$表示辐射度。类似地,规定入射辐射率符号为$L_i$,出射辐射率符号为$L_o$。


1.4 双向反射分布函数(BRDF)

1.4.1 BRDF的定义

双向反射分布函数(Bidirectional Reflectance Distribution Function, BRDF),是用于描述物体表面性质的重要函数之一,它被定义为沿出射光方向$f{omega}_o$出射的辐射率$L_o$与沿入射光方向$f{omega}_i$入射的辐照度$E_i$的比值,单位为$ m{sr^{-1}}$。由上述表述,则在物体表面$x$点处的BRDF的定义式即为

egin{equation}
label{eq:brdfdef}
f_r left( {x,f{omega} _i ,f{omega} _o } ight) = frac{{{ m{d}}L_o (x,f{omega} _o )}}{{{ m{d}}E_i (x,f{omega} _i )}} = frac{{{ m{d}}L_o left( {x,f{omega} _o } ight)}}{{{ m{d}}E_{i,ot} left( {x,f{omega} _i } ight)cos heta _i }} = frac{{{ m{d}}L_o left( {x,f{omega} _o } ight)}}{{L_i left( {x,f{omega} _i } ight)cos heta _i { m{d}}f{omega} _i }}
end{equation}

如图3所示,为形式简便,将入射方向规定为由参考点指向源点,这样所有有关方向的物理量均统一为沿表面指向外界。${f{n}}$为物体局部法线,一束入射方向为$f{omega}_i$的光线击中物体表面$x$点处,其能量会在以$x$点处形成的半球面沿一定分布特征辐射出去。那么以$f{omega}_i$为入射方向,以$f{omega}_o$为我们要考察的出射方向,沿$f{omega}_o$方向出射的能量${ m{d}}{L_o}$与入射光线在$x$点处对物体表面的辐照度贡献${ m{d}}{E_i}$之比,即被定义为在$x$处,沿入射方向$f{omega}_i$和出射方向$f{omega}_o$的双向反射系数$f_rleft({x,f{omega}_i,f{omega}_o} ight)$。

这里请注意式( ef{eq:brdfdef})中“$ m{d}$”的含义与数学上严格意义上的微分是有区别的,$L_oleft(x,{f{omega}}_o ight)$是指在物体表面$x$点处,半球面${f{omega}}_x$区域内所有入射光的能量总和作为输入时,沿${f{omega}}_o$方向出射的辐射率;而${ m{d}}L_oleft(x,{f{omega}}_o ight)$则特指以方向${f{omega}}_i$处入射光的能量作为输入时,沿${f{omega}}_o$方向出射的辐射率。${ m{d}}E_ileft(x,{f{omega}}_i ight)$特指方向${f{omega}}_i$处的辐照度。${ m{d}}E_ileft(x,{f{omega}}_i ight)$和$E_ileft(x,{f{omega}}_i ight)$的含义是相同的。

针对BRDF的定义式,有如下两个问题需要解释:

1) 为什么要用微分形式去定义?
2) 为什么不定义成$frac{{ m{d}}{L_o}}{{ m{d}}{L_i}}$或者$frac{{ m{d}}{E_o}}{{ m{d}}{E_i}}$,使得它变成一个纯粹的系数而不是一个具有量纲$ m{sr^{-1}}$这样奇怪的一个物理量?
接下来我们就来回答上面两个问题。之所以要用微分形式去定义,在于后面有关BRDF的所有计算几乎都涉及到积分,所以原始的BRDF定义式将BRDF定义为微分形式会更有利于后续对积分式的计算,而且形式美观简洁,但之后进行公式推导时,仍需要明确分子的$L_o$是特指${f{omega}}_i$方向上对出射辐射率的贡献,以后为强调这个事实,也常用$L_o left( {x,{f{omega}} _o } ight)left| {_{{f{omega}} _i } } ight.$表示${ m{d}}L_oleft(x,{f{omega}}_o ight)$;而针对BRDF的量纲问题,则可以这样解释:BRDF的定义是根据对实际现象的物理建模而得出的,这个量也最好应该能够通过实验仪器测得,那么定义式的形式,实际上就决定了对测量仪器的要求。直接测量物体表面某点沿某入射方向的入射光辐照率$L_i$是有困难的,而想测量沿着某一方向的出射辐射率$L_o$则很简单,只需要将一个管状测量仪器对准入射点处,就能测得沿着管状测量仪出射的辐射率$L_o$。虽然测量入射光辐照率由困难,但是测量入射光的辐照度$E_i$则很简单,因为辐照度没有方向的概念,所以研究者仅需要制作一个半球状的光线接收器即可。

实际计算的时候,通常是以物体表面参考点$x$为原点,以物体表面$x$点处指向物体表面外侧的局部法线${f{n}}$为$z$轴建立的求坐标系来进行积分的求解,所以式( ef{eq:brdfdef})中的BRDF定义式也可以写为$f_r left( {x, heta _i ,varphi _i , heta _o ,varphi _o } ight)$,如果物体表面的反射特性与参考点$x$的位置无关(通常情况下),那么我们可以在$f_r$中省略变量$x$,变为$f_r left( { heta _i ,varphi _i , heta _o ,varphi _o } ight)$,图3中$ heta _i$、$varphi _i$是${f{omega}}_i$的球坐标系参数表示,$ heta _o$、$varphi _o$是${f{omega}}_o$的球坐标系参数表示。
很多实验室测得的BRDF数据都是一个巨大的四维表格(例如MERL BRDF数据库,每种材质表面测得的BRDF数据有34MB,具体详见http://www.merl.com/brdf/),用户在实际使用这张表格的时候,就是依据$ heta _i$、$varphi _i$、$ heta _o$和$varphi _o$四个独立变量来查表得到对应的BRDF值,进而完成渲染的。


1.4.2 BRDF的性质

BRDF具有以下三条重要性质:
1) 非负性:对于物体表面上任意点$x$以及半球面内所有${f{omega}}_i$和${f{omega}}_o$,BRDF函数值均非负。这一性质很好理解,即便是绝对黑体,它的BRDF也是恒为$0$而不可能出现负值。
egin{equation}
f_rleft({x,{f{omega}}_i,{f{omega}}_o} ight) ge 0
end{equation}
2) 互易性:由基本光路可逆原理,若交换入射方向和出射方向,BRDF函数值不变。此性质可将原始BRDF数据量降为原来的一半。
egin{equation}
f_rleft({x,{f{omega}}_i,{f{omega}}_o} ight) = f_rleft({x,{f{omega}}_o,{f{omega}}_i} ight)
end{equation}
3) 能量守恒性:沿半球面向外辐射的辐射率总和应小于等于入射光的辐射率总和。即对于$forall {f{omega}}_i$,
egin{equation}
intlimits_{ Omega _x } {f_r left( {x,{f{omega}} _i ,{f{omega}} _o } ight)cos { heta _o } { m{d}}{f{omega}} _o } le 1
end{equation}
BRDF的能量守恒性可以用来鉴别给定的BRDF函数是否合理,同时也可以给未归一化的BRDF进行归一化操作。下面我们就来简单证明一下上述的能量守恒性。

证明:假设有一束辐照度$E_i left( {x,{f{omega}} _i } ight)$
的光线,沿${f{omega}}_i$方向入射并击中物体表面$x$点处。设$x$点处朝物体表面外的半球面区域为$Omega_x$,由能量守恒定律,在排除该物体表面为光源的前提下,沿半球面$Omega_x$向外辐射的所有辐射度之和应小于等于入射光的辐照度。即满足
egin{equation*}
label{eq:energy_conservation}
intlimits_{Omega _x } {{ m{d}}left[ {E_o left( {x,{f{omega}} _o } ight)left| {_{{f{omega}} _i } } ight.} ight]} le E_i left( {x,{f{omega}} _i } ight)
end{equation*}
上式中的$E_o left( {x,{f{omega}} _o } ight)left| {_{{f{omega}} _i } } ight.$是特指沿方向${f{omega}}_i$入射的光线所造成的辐射度贡献。
由式( ef{eq:elrelation})可得
egin{equation*}
intlimits_{Omega _x } {left[ {L_o left( {x,{f{omega}} _o } ight)left| {_{{f{omega}} _i } } ight.} ight]{ m{cos}} heta _{ m{o}} { m{d}}{f{omega}} _o } le E_i left( {x,{f{omega}} _i } ight)
end{equation*}
根据式( ef{eq:brdfdef}),又有
egin{equation*}
intlimits_{Omega _x } {left[ {f_r left( {x,{f{omega}} _i ,{f{omega}} _o } ight)E_i left( {x,{f{omega}} _i } ight)} ight]{ m{cos}} heta _o { m{d}}{f{omega}} _o } le E_i left( {x,{f{omega}} _i } ight)
end{equation*}

$$
intlimits_{Omega _x } {f_r left( {x,{f{omega}} _i ,{f{omega}} _o } ight)cos heta _o { m{d}}{f{omega}} _o } le 1
$$
对于$forall {f{omega}}_i$均成立。


 

原文地址:https://www.cnblogs.com/time-flow1024/p/10208850.html