图形学中的辐射度


写在前面

  光线追踪中最基础的部分是光线的传播和反射(一般把表面双向透射分布函数[BTDF]和双向反射分布函数[BRDF]统一处理为 BSDF,即双向散射分布函数),辐射度测量学则提供了相关数学概念,构成了基于物理渲染算法推导过程的基本内容。
  本文使用和 PBRT 相同的左手系,即球坐标中 表示范围为 的旋转角,方向以左手法则沿四指旋转为正; 表示 的俯仰角,由上方向(本文默认为 z 轴)向平面倾斜的角度。但是,使用哪一种坐标系对渲染没有影响。

辐射度基本量值

  辐射度可以简单理解为光照的强弱程度,一般用一个变量 Spectrum 来表示,通俗的来说就是光照的 R,G,B 值。
  渲染中使用的量值一般有以下四种:通量(flux)、入(出)射辐射照度(irradiance/radiant exitance)、光强(intensity)和辐射亮度(radiance),以上所有的量值都是波长相关的,且由能量学推导而出。
  大家可能会感到迷惑,辐射照度和辐射亮度有什么区别?其实光从英文名字上就会发现真的非常相似,而国内的书籍都同样翻译成辐射度而已,但其实两者相差比较大,我刻意在名称上加以区分,关于网上的理解可以看[这里][1]。
  总的来说,辐射照度表示某一极小区域对所有可能方向发出或接收的功率,表示为功率对面积的微分:;辐射亮度表示该极小区域对特定方向发出或接收的功率,表示为功率对面积以及方向的微分:,辐射亮度对所有方向光照功率的积分就表示辐射照度。
  更直白一些,计算机中能用 R,G,B 直接表示的一般都是辐射亮度,而辐射照度表示一个积分,毫不客气地说,解辐射照度积分几乎等同于解渲染方程。是不是还不太清楚?请先看下去。

能量

  能量用焦耳表示,光源发射光子会携带特定数量的能量和特定波长的光子。光子携带能量和波长的关系是



  其中 表示光速(), 表示普朗克常数(

通量

  辐射通量又称为功率(power),表示单位时间内通过表面或者区域的所有能量,单位为瓦特(W)。辐射通量可以使用能量对时间的微分得到:


  通常来说,已知通量关于时间的函数,可以使用积分得到能量:


  下图显示了光源的通量,针对围绕该光源的虚拟球体,虽然较大球体每单位表面积穿越的能量较少,但两个球体的全部通量相等

光源发出能量两个球体半径不同,通量相同

入射辐射照度和出射辐射照度

  已知一个有限的区域 ,可以定义该区域的平均能量密度。辐射通量到达表面的密度时使用 irradiance(E)来表示,辐射通量离开表示时用 radiant exitance(M)来表示,上述单位均使用 表示。之所以称为辐射照度,通常用来表示光源对点 处的影响,表示所有光线到达物体表面 点(单位面积)所产生的的能量,经常需要使用蒙特卡洛方法来进行采样估计辐射照度(渲染方程)。在某种程度上,辐射照度表示功率概念,辐射亮度表示在某一个方向观察该功率点观察到的强度(亮度)。
  对于上图所示,外部球体上一点的入射辐射照度大于内部球体的入射辐射照量,当球体半径为 时,有


  而且,上式也表示了一个非常重要的现象:功率以平方距离衰减
  入射辐射照度和出射辐射照度也可以用通量相对面积的微分来表示:


  即

  回忆一下 Lambertian 定律,为什么在光栅化渲染中,着色时总要乘一个余弦值?因为到达表面的光线数量正比于光线方向和表面法相夹角的余弦值,即光照强度不变的情况下,两者面积之比为余弦值,自然两者的功率(辐射照度)之比为余弦值的倒数。
lambert_lawLambert定律。到达表面的辐射照度随光照入射夹角的余弦值变化

  对于面积为 ,通量为 的光源,如果垂直向下照射有

如果光源和表面呈现一定角度,则接收光照的表面积将要增加为 ,可以得到


立体角(solid angle)和光强

  还记得刚开始出现的 吗?它表示立体角,可视为平面内二维角度值在球体角度的拓展,在单位球体上投影面积的大小,如下图所示

solid_angle对象 的立体角表示为:单位球上的投影面积,球体上最大为 ,半球中最大为

  注意,立体角始终表示的是球面度的概念。对于这个角度使用 来表示,而且立体角一般单位化后才有意义。在积分转换时, 可以当做 来看待,因为在球上任意取一点,它向切面的任意方向偏移,对 的总体影响是相同的(平方和仍为 1),这符合立体角的定义。
  为什么不是球面坐标?当向下偏移的时候 变大,而 不变,需要额外乘上 才能平衡,那么合起来有 ,固定 。而恰好有,将 代入就说明两组基的转换差一个
  对于被单位球面包围的点光源,可以轻易地得到往各个方向的光强:

  对于通常意义上的光强,由通量相对立体角的微分得到:


  即


  通过前面的公式,光强又可以看做对一整块面积的辐射亮度的积分。即,光线从光源发出,撞击到某个区域的所有功率就称之为光强;辐射照度(功率)、辐射亮度、光强的联系一目了然了吧。

辐射亮度

  最后也是最重要的量值——辐射亮度(L),注意与辐射照度区分。辐射度表示单位面积单位立体角方向的功率,单位为 。请见如下定义:

  这里使用 表示垂直于 的辐射量。辐射度常常用来表示特定方向的光照功率大小,一般用来模拟反射光线以及符合 delta 分布的光源比如点光源,聚光灯,方向光等等。立体角将功率、立体角、面积联系起来,非正对面积需要考虑余弦项,如下所示:


  其中, 表示与 垂直的投影面积。
辐射度辐射度 定义为每单位立体角 以及每单位投影面积 的通量
 

  辐射度表达了极限情况下,“一根光线”的功率大小,符合一般认知,但是要知道,生活中没有绝对的符合 delta 分布的光源,而且反射模型往往需要模拟反射整个半圆的光线(蒙特卡洛方法)来求辐射照度,对于区域光源的采样,以及各种反射模型能量计算,辐射照度必不可少。

渲染积分

  渲染中经常需要进行辐射量值的积分运算,有许多积分工具可以对此类计算进行简化。下面介绍三个渲染中比较重要的辐射照度积分的例子。
  使用采样入射辐射照度(E)计算作为示例。已知半球所有的方向集合为 ,法向量为 的点 处的入射辐射照度为:


  其中, 表示为入射辐射亮度函数, 表示为 和表面法线 之间的夹角,辐射亮度 不论是入射还是出射,方向均指向半球外。如下图所示:
Li 处的辐射照度(E)表示为:在该点上方的半球体上,辐射量度乘以入射方向余弦值的积分

球体坐标积分运算

  在渲染中,经常需要将立体角积分转换为球体坐标 积分。已知, 可以根据球面角来表示表示,由下图所示:


球面角转换
若给定 x,y,z 基向量,方向向量可根据球体坐标 表示。球面角公式可方便在两种表达方式之间予以转换。

  那么如何确定方向角的转换呢?由极限定理知道 弧长,所以微分面积 表示为微分边长 间的乘积,有
球面角微分微分立体角构成的微分面积 表示为两条边的微分长度 之间的乘积。
最终结果 为立体角积分和球面角积分转换间的核心内容。

  所以半球入射辐射照度又可记为如下形式


  如果源自各方向的辐射度均等,则上式简化为

面积积分运算

  最后一个用于简化计算的积分转换是将方向积分转换为面积积分。比较难,主要用于解区域光源对某一点贡献的辐射照度。
  假设四边形包含恒定的出射辐射照度,并计算 点处的最终入射辐射照度。如果在这里直接进行方向积分缺乏直观性——判断某区域是否在特定方向可见比较麻烦;而使用面积积分进行计算则相对简单。
  微分面积与微分立体角有如下关联:

  其中, 表示为 的表面法线和 向量之间的夹角, 表示为 之间的距离。此处并不打算对计算结果进行推导,面积在角方向上以 递增,且有一定偏向角,故而需要乘上 来表示投影到单位半圆上的方位角微分。
立体角积分转换面积积分微分面积 形成的微分立体角等于

  因此,对于区域光源,入射辐射照度积分如下所示

  其中, 表示此区域表面的发射辐射亮度, 表示点 处表面法线与光线上 方向之间的夹角, 表示光线上点 处表面法线与 方向之间的夹角,如下图所示。
四边形光源计算辐射照度  当采用区域光源计算点 处的辐射照度,与不规则方向集的积分相比,可方便地采用表面积积分进行计算。


转载请带上本文永久固定链接:http://www.gleam.graphics/radiance_in_graphics.html


本文参考:
[1] PBRT
[2] Irradiance和Radiance的区别
[3] 理解radiance irradiance

About the Author

说点什么

您将是第一位评论人!

avatar