热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

计算机图形学基础:辐照度学原理与应用综述

辐照度(irradiance)是指单位面积上接收到的电磁辐射功率,可视为入射点处的能量密度。在计算机图形学领域,辐照度计算是确定场景中每个位置光照效果的关键步骤。通过对辐照度的精确建模,可以实现更加逼真的光照渲染,提升视觉效果的真实感和沉浸感。本文综述了辐照度的基本原理及其在计算机图形学中的多种应用,探讨了当前研究的热点和技术挑战。

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

 

1.1 立体角

 

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

 

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

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

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

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

 


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

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

 

1.3 符号约定

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

1) 立体角用粗体小写的$\bf{\omega}$来表示,其微分形式为${\rm{d}}{\bf{\omega}}$,这在1.1节中已经陈述。
2) 以物体表面任意点$x$处,沿表面局部法线建立的半球面区域写为$\Omega_x$,其立体角恒为$2\pi$。
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),是用于描述物体表面性质的重要函数之一,它被定义为沿出射光方向$\bf{\omega}_o$出射的辐射率$L_o$与沿入射光方向$\bf{\omega}_i$入射的辐照度$E_i$的比值,单位为$\rm{sr^{-1}}$。由上述表述,则在物体表面$x$点处的BRDF的定义式即为

\begin{equation}
\label{eq:brdfdef}
f_r \left( {x,\bf{\omega} _i ,\bf{\omega} _o } \right) = \frac{{{\rm{d}}L_o (x,\bf{\omega} _o )}}{{{\rm{d}}E_i (x,\bf{\omega} _i )}} = \frac{{{\rm{d}}L_o \left( {x,\bf{\omega} _o } \right)}}{{{\rm{d}}E_{i,\bot} \left( {x,\bf{\omega} _i } \right)\cos \theta _i }} = \frac{{{\rm{d}}L_o \left( {x,\bf{\omega} _o } \right)}}{{L_i \left( {x,\bf{\omega} _i } \right)\cos \theta _i {\rm{d}}\bf{\omega} _i }}
\end{equation}

 

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

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

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

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

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


1.4.2 BRDF的性质

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

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

$$
\int\limits_{\Omega _x } {f_r \left( {x,{\bf{\omega}} _i ,{\bf{\omega}} _o } \right)\cos \theta _o {\rm{d}}{\bf{\omega}} _o } \le 1
$$
对于$\forall {\bf{\omega}}_i$均成立。

 


 

转:https://www.cnblogs.com/time-flow1024/p/10208850.html



推荐阅读
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • Bootstrap Paginator 分页插件详解与应用
    本文深入探讨了Bootstrap Paginator这款流行的JavaScript分页插件,提供了详细的使用指南和示例代码,旨在帮助开发者更好地理解和利用该工具进行高效的数据展示。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 龙蜥社区开发者访谈:技术生涯的三次蜕变 | 第3期
    龙蜥社区的开发者们通过自己的实践和经验,推动着开源技术的发展。本期「龙蜥开发者说」聚焦于一位资深开发者的三次技术转型,分享他在龙蜥社区的成长故事。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • HTML前端开发:UINavigationController与页面间数据传递详解
    本文详细介绍了如何在HTML前端开发中利用UINavigationController进行页面管理和数据传递,适合初学者和有一定基础的开发者学习。 ... [详细]
  • 本文详细探讨了BCTF竞赛中窃密木马题目的解题策略,重点分析了该题目在漏洞挖掘与利用方面的技巧。 ... [详细]
author-avatar
那是电话卡技术的
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有