光照模型和BRDF

@TOC

本文参考了本篇博客,同时加入了Phong光照模型

一、预备知识

在介绍光照模型和BRDF(双向反射分布函数)时,我们要先理解一些基本概念,这些概念与辐射度学有关

1. 能量

每个光子都具有一定的能量(Energy),能量大小与频率有关。用符号表示,单位是焦耳

2. 功率

==功率、辐射通量、通量==

功率(Power),也被称为辐射通量(Radiant Flux)或者通量(Flux),指的是单位时间内通过表面或者空间区域的能量的总量。用符号表示,,单位为瓦特,或者焦耳/秒

3. 辐照度和辐出度

==辐照度(辐射通量密度)==

==辐出度、辐射出射度、辐射度(辐射通量密度)==

  • 辐照度(Irradiance)指单位时间内到达单位面积的辐射能量,或单位面积的辐射通量,即通量对于面积的密度。用符号表示,,单位
  • 辐出度(Radiant Existance),也称为辐射出射度、辐射度(Radiosity)。与辐照度不同的是,辐出度是衡量离开表面的通量密度,二者都可以被称为辐射通量密度(Radiant Flux Density)。用符号表示

注意辐射通量和辐射通量密度之间的区别

如下图所示

一束平行光之间的间距为,一个垂直入射,一个与表面法线成的角度入射,观察表面的间距,其中左图间距为,右图为,相对于左图,右图的间距增大了。由于辐射通量是单位时间内通过表面或空间区域内的能量总和,所以辐射通量相同;而辐射通量密度是单位时间内通过单位面积的能量,右边面积大,所以右边辐射通量密度变小

让我们来看一下二者辐射通量密度的差异:假设右图中不垂直于光线方向的表面面积为,将他投影到垂直于直线方向得到一个虚拟表面,面积为,通过这两个面积的通量相同,设为,则表面接收到的辐射通量密度,虚拟表面的辐射通量密度,得到

同理对于点光源,假想以点光源为中心不同半径的求包围着点光源,穿过这些球的辐射通量是相通的,均为,球的表面积为,得到辐射通量密度,即通量密度与距离的平方成反比,即光的衰减与距离的平方成反比

4. 辐射强度

==辐射强度==

立体角:度量三维角度的量,用符号表示,立体角计算为,单位球的表面积为,所以球面的立体角也为

辐射强度(Radiant Intensity),通过单位立体角的辐射能量,用符号表示,,单位

引入辐射强度的原因是:有时候需要度量通过一个点的通量的密度,因为点的面积是0,无法直接使用辐射通量密度,所以引入辐射强度。辐射强度不会随距离的增大而衰减,这是因为立体角不会随距离的变化而变化

5. 辐射率

==辐射率==

辐射率(Radiance),每单位面积每单位立体角的辐射通量密度,用符号表示,,单位为,其中是微分面积在垂直于光线方向的投影,如图

辐射率可以看成我们眼睛看到(相机拍到)的物体上一点的颜色,基于物理着色时,计算表面一点的颜色就是计算它的辐射率,辐射率不会随距离变化而衰减,这和我们日常感受一致,在没有雾霾的干扰时,我们看到的物体表面上一点的颜色并不会随距离变化而变化。为什么辐照度会随距离增大而衰减,但是我们看到的颜色却不会衰减呢?这是因为随着距离变大,我们看到的物体上的一块区域到达视网膜的通量密度会变小,同时这块区域在视网膜表面上的立体角也会变小,正好抵消了通量密度的变化

二、BRDF

我们看到一个表面,实际上是周围环境的光照射到表面上,然后表面将一部分光反射到我们眼睛里。双向反射分布函数BRDF(Bidirectional Reflectance Distribution Function)就是描述表面入射光和反射光关系的

对于一个方向的入射光,表面会将光反射到表面上半球的各个方向,不同方向反射的比例是不同的,我们用BRDF来表示指定方向的反射光和入射光的比例关系,BRDF定义为:

  • :BRDF,是入射光方向,是观察方向,即反射光方向
  • :表面反射到方向的反射光的微分辐射率。表面反射到方向的反射光的辐射率为,来自于表面上半球所有方向的入射光线的贡献,而微分辐射率特指来自方向的入射光贡献的反射辐射率
  • :表面上来自入射光方向的微分辐照度。表面接收到的辐照度为,来自上半球所有方向的入射光线的贡献,而微分辐照度特指来自于方向的入射光

表面对不同频率的光反射率可能不一样,因此BRDF和光的频率有关。在图形学中,将BRDF表示为RGB向量,三个分量各有自己的函数

BRDF需要处理表面上半球的各个方向,如下图使用球坐标系定义方向更加方便。球坐标系使用两个角度来确定一个方向:

  • 方向相对法线的角度,称为极角(Polar Angle)或天顶角(Zenith Angle)
  • 方向在平面上的投影相对于平面上一个坐标轴的角度,称为方位角(Azimuthal Angle)

所以BRDF也可以表示成。对于各向同性材质,当同时绕法线旋转时,值保持不变,此时可以用在平面投影的夹角来代替

为什么BRDF要定义成辐射率和辐照度的比值,而不是直接定义为辐射率和辐射率比值,有两种解释

==第一种解释参考BRDF为什么要定义为一个单位是sr-1的量?==

结合下面辐射通量密度和辐射率测量仪的示意图来看:辐照度(辐射通量密度)测量仪接受平面上半球的所有光线,可以测量一个较小面积来自于四面八方的所有光通量,光通量除以传感器面积就可以得到辐照度(辐射通量密度)。辐射度测量仪则有一个长筒控制光线只能从一个很小的立体角进入测量仪,光通量除以传感器面积和立体角就可以得到辐射率

测平面上一点在某一个方向的出射辐射率很简单,只需要用仪器从该方向对准该点就可以了。而测平面一点入射的辐射率则没有那么简单,必须保证光源正好覆盖测量仪开口立体角,大了该点会接受到比测量值更多的光照,导致测量值比实际值小,小了则与仪器的设计立体角不一致,可在实际中是基本做不到光源大小正好覆盖测量仪开口立体角的。而测表面的辐照度则简单得多,只要保证光源很小,而且没有来自其他方向的光干扰,这时候测到的辐照度就是平面上来自光源方向的微分辐照度

==第二种解释从数学的角度出发==

对于现实世界中的非光学平面,一束光线射到表面上后,被表面反射到各个方向,其中一个出射方向的光通量只是整个反射光通量极小的一部分,当出射方向立体角趋于0时,,所以在实际计算中使用辐射率和辐射率比值是没有意义的。而如果分母改成表面上接收到的来自光源方向的微分辐照度,我们知道,由于给入射辐射率乘了一个趋于零的微分立体角,的值会小很多,比值是有意义的,而不是0

下面我们来看看怎么用BRDF来计算表面辐射率

我们考虑来自方向的入射光辐射率,由辐射率和辐照度的定义:

则照射到表面来自于方向l的入射光贡献的微分辐照度:

表面反射到方向的由来自于方向l的入射光贡献的微分辐射率:

符号表示按向量的分量相乘,因为都包含RGB三个分量

要计算表面反射到v方向的来自上半球所有方向入射光线贡献的辐射率,可以将上式对半球所有方向的光线积分:

上式称为反射方程(Reflectance Equation),用来计算表面反射辐射率

对于点光源、方向光等理想化的精准光源(Punctual Light),计算过程可以大大简化。我们考察单个精准光源照射表面,此时表面上的一点只会被来自一个方向的一条光线照射到(而面积光源照射表面时,表面上一点会被来自多个方向的多条光线照射到),则辐射率:

对于多个精准光源,只需简单累加就可以了:

这里使用光源的辐照度,对于阳光等全局方向光,可以认为整个场景的辐照度是一个常数,对于点光源,辐照度随距离的平方衰减,用公式就可以求出到达表面的辐照度,是光源的功率,比如100瓦的灯泡,r是表面离光源的距离

回头看看反射方程,是对表面上半球所有方向的入射光线积分,这里面包含了来自精准光源的光线,也包括周围环境反射的光线。处理来自周围环境的光线可以大幅提高光照的真实程度,在实时图形学中,这部分光照可以用基于图像的光照(Image Based Lighting)来模拟。我们将在下篇文章讨论基于图像的光照。

上面给出了BRDF的定义和使用BRDF计算表面反射辐射率的公式。但这个定义实际上是无法直接用于计算表面反射辐射率的,我们还要建立一个能模拟真实光照的模型,使得输入入射方向和出射方向,能输出表面反射微分辐射率和入射微分辐照度的比率。

1967年Torrance-Sparrow在Theory for Off-Specular Reflection From Roughened Surfaces中使用辐射度学和微表面理论建立了模拟真实光照的BRDF模型,1981年Cook-Torrance在A Reflectance Model for Computer Graphics中把这个模型引入到计算机图形学领域,现在这个模型已经成为基于物理着色的标准,被称为Cook-Torrance模型。下面我们来看看微表面理论和Cook-Torrance模型的推导过程。

三、Phong光照模型

光照到物体表面时,物体对光会发生反射、透射和吸收。简单光照模型只考虑物体对直接光照的反射作用,而物体间的光反射作用,只用环境光来表示。此时光源被假定为点光源,反射作用被细分为镜面反射和漫反射

==Phong光照模型==

根据Phong光照模型,物体被感知的亮度由环境光、漫反射光及镜面反射光组成,物体表面的反射光强度为

  • :分别为环境光、漫反射光及镜面反射光系数
  • :入射的环境光强度
  • :光源的入射光强度
  • :入射光与物体表面法线之间的夹角
  • :反射光与视线之间的夹角
  • :镜面反射参数

1. 漫反射

理想漫反射当光源来自一个方向时,漫反射光均匀向各方向传播,与视点无关,他是由表面的粗糙不平引起的,因而漫反射光的空间分布是均匀的。记入射光强为,物体表面上点的法向量为,从点指向光源的向量为,当为单位向量时,理想漫反射光强表示为:

:与物体有关的漫反射系数,取值。在RGB模型下,漫反射系数有三个分量分别表示RGB三原色的漫反射系数,反应物体颜色,通过调整三个分量可以改变物体的颜色,也可以吧入射光强设为三个分量通过调整这些分量来调整光源的颜色

2. 镜面反射

镜面反射光对于理想镜面,反射光集中在一个方向,并遵守反射定律。对一般光滑表面,反射光集中在一个范围内,且由反射定律决定的反射方向光强最大。因此对于同一点来说,从不同位置所观察到的镜面反射光强是不同的,镜面反射光强可以表示为:

  • :与物体有关的镜面反射系数
  • :视线方向与反射方向的夹角
  • :反射指数,反映了物体表面的光泽程度,一般为1~2000,数目越大表示物体表面越光滑

镜面反射光将会在反射方向附近形成很亮的光斑,称为高光现象,将看做单位向量,镜面反射光强可以重写为:

其中,镜面反射光产生的高光区域只反映光源的颜色,例如在红光照射下,一个物体的高光域是红光,镜面反射系数是一个与物体颜色无关的参数,在简单光照明模型中,只能通过改变物体的漫反射系数来控制物体的颜色

3. 环境光

环境光指光源间接对物体的影响,是在物体和环境之间多次反射,最终达到平衡时的一种光,可以近似地认为同一环境下的环境光,其光强分布是均匀的,他在任何一个方向上的分布都相同,在简单光照模型中,用一个常数来模拟环境光,用式子表示为:

Error: API rate limit exceeded for 18.232.43.19. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)