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