热门标签 | 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



推荐阅读
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 深入理解 .NET 中的中间件
    中间件是插入到应用程序请求处理管道中的组件,用于处理传入的HTTP请求和响应。它在ASP.NET Core中扮演着至关重要的角色,能够灵活地扩展和自定义应用程序的行为。 ... [详细]
  • Appium + Java 自动化测试中处理页面空白区域点击问题
    在进行移动应用自动化测试时,有时会遇到某些页面没有返回按钮,只能通过点击空白区域返回的情况。本文将探讨如何在Appium + Java环境中有效解决此类问题,并提供详细的解决方案。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 本文将详细介绍多个流行的 Android 视频处理开源框架,包括 ijkplayer、FFmpeg、Vitamio、ExoPlayer 等。每个框架都有其独特的优势和应用场景,帮助开发者更高效地进行视频处理和播放。 ... [详细]
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社区 版权所有