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



推荐阅读
  • 本文全面解析了 gRPC 的基础知识与高级应用,从 helloworld.proto 文件入手,详细阐述了如何定义服务接口。例如,`Greeter` 服务中的 `SayHello` 方法,该方法在客户端和服务器端的消息交互中起到了关键作用。通过实例代码,读者可以深入了解 gRPC 的工作原理及其在实际项目中的应用。 ... [详细]
  • vtkGlyph3D 是一种强大的符号化可视化工具,能够将三维数据集中的每个点用预定义的几何图形(如球体或箭头)进行表示。该工具不仅支持自定义符号的方向和缩放比例,还能够在复杂的数据场中突出显示关键特征,从而提高数据的可解释性和可视化效果。通过这种方式,用户可以更直观地理解和分析三维数据集中的重要信息。 ... [详细]
  • 本文作为探讨PHP依赖注入容器系列文章的开篇,将首先通过具体示例详细阐述依赖注入的基本概念及其重要性,为后续深入解析容器的实现奠定基础。 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • CAS 机制下的无锁队列设计与实现 ... [详细]
  • 探索聚类分析中的K-Means与DBSCAN算法及其应用
    聚类分析是一种用于解决样本或特征分类问题的统计分析方法,也是数据挖掘领域的重要算法之一。本文主要探讨了K-Means和DBSCAN两种聚类算法的原理及其应用场景。K-Means算法通过迭代优化簇中心来实现数据点的划分,适用于球形分布的数据集;而DBSCAN算法则基于密度进行聚类,能够有效识别任意形状的簇,并且对噪声数据具有较好的鲁棒性。通过对这两种算法的对比分析,本文旨在为实际应用中选择合适的聚类方法提供参考。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 本文详细介绍了 Windows API 中的按钮控件及其应用实例。主要功能包括:1. `CheckDlgButton` 用于更改对话框中按钮的选中状态;2. `CheckRadioButton` 用于设置单选按钮的选中状态。此外,还探讨了按钮控件在实际开发中的多种应用场景,帮助开发者更好地理解和使用这些功能。 ... [详细]
  • 在学习LVM(逻辑卷管理)技术的过程中,我对MD(多设备)、DM(设备映射器)以及逻辑设备和RAID的实现有了深入的理解。LVM2架构主要由DM主模块及其多个子模块组成,其中linear子模块用于创建线性设备,类似于简单的磁盘分区拼接。此外,还探讨了其他子模块如striped、mirror等在提高性能和数据冗余方面的应用。通过实际操作,我掌握了LVM的基本配置和管理方法,能够灵活应对不同存储需求。 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
  • 如何在CAD阅图软件中将PDF文件高效转换为CAD格式?
    如何在CAD阅图软件中将PDF文件高效转换为CAD格式? ... [详细]
  • 在HDU 1166敌军布阵问题中,通过运用线段树数据结构,可以高效地计算指定区间的敌军数量。该算法不仅能够在限定的时间和内存条件下快速求解,还能够灵活应对动态变化的战场局势,为实时决策提供支持。 ... [详细]
  • 在使用 iframe 嵌入外部页面时,经常会遇到页面加载不同步的问题。当嵌入的页面响应较慢时,这种异步加载会导致用户体验不佳。本文介绍了如何通过监听 iframe 加载完成的事件来解决这一问题,并提出了针对双滚动条问题的有效解决方案,以提升整体的用户体验和页面加载效率。 ... [详细]
  • 基于域名、端口和IP的虚拟主机构建方案
    本文探讨了在单台物理服务器上构建多个Web站点的虚拟主机方案,详细介绍了三种主要的虚拟主机类型:基于域名、基于IP地址和基于端口的虚拟主机。每种类型的实现方式及其优缺点均进行了深入分析,为实际应用提供了全面的技术指导。 ... [详细]
  • 解决CentOS 6.4系统中sda磁盘包含BIOS RAID元数据的问题及专业应对策略
    解决CentOS 6.4系统中sda磁盘包含BIOS RAID元数据的问题及专业应对策略 ... [详细]
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社区 版权所有