BRDF

前言

现实世界中的表面绝大多数都是凹凸不平的。在这种情况下,可以把表面看成是大量朝向各异的微小光学平面的集合,我们肉眼可见的每个点都包含了很多个这样的微小光学平面。
光线照射到这些微小表面上时,同样一部分在表面发生反射。这些朝向不同的微表面把入射光线反射到不同的方向。另一部分光线发生折射,折射光线何去何从取决于物质的组成成分。
对于金属,折射进表面的光线的能量会立即被金属中的自由电子吸收,转换成电子的能量,不再可见(下图左边)。对于非金属(电介质或绝缘体),它们往往不是由单一成分构成,而可以认为其中包含了很多折射率不同的微粒,光线遇到这些粒子后发生反射折射,在物质内部不断传播,散射到不同方向,其中一部分会再次穿过表面被观察到,这种现象称为次表面散射(Subsurface Scattering,下图右边穿出表面的蓝色光线),也有一部分在传输过程中被吸收。

这里写图片描述

根据物质属性和观察尺度的不同,次表面散射会表现出不同的效果。
如下面的左上图,如果光线在物质中传播距离小于观察尺度(绿色区域,可以认为是一个像素区域),我们看到情况如下面的右上图,入射点、反射点、次表面散射的出射点看起来是同一个点。其中反射部分(图中浅棕色出射光)就是我们常说的高光(Specular Light),常聚集在一个方向周围,向这个方向观察该点会看到明显的高光,从其他方向观察该点时高光则比较微弱;次表面散射部分(图中蓝色出射光)是漫射光(Diffuse Light),光线被散射到各个方向。双向反射分布函数BRDF就是用来模拟这种现象的,这也是本文的重点。
如果光线在物质中的传播距离大于观察尺度,如下面的下图,就需要使用次表面散射算法来建模(基于物理着色(四)- 次表面散射)。

这里写图片描述

光照模型

1. 测量模型

MERL等实验室使用仪器测量了上百种真实材质表面在不同光照角度和观察角度下的反射数据,并记录在MERL BRDF Database等数据库中。这些数据由于采集自真实材质,所以使用它渲染出来的结果很真实,但缺点是没有可供调整效果的参数,无法基于这些数据修改成想要的效果,另外部分极端角度由于仪器限制,无法获取到数据,而且采样点密集,数据量非常庞大,所以并不适合游戏等实时领域,一般可用在电影等离线渲染领域,也可以用来做图形学研究,衡量其他模型的真实程度。

2. 经验模型

经验模型并不是基于物理原理,而是提出经验公式,通过调整参数来模拟光照。
1975年Phong提出Phong反射模型(Phong Reflection Model) :

IPong=kaIa+kd(nl)Id+ks(rv)αIs

下标a表示环境光(Ambient Light);
下标d表示漫射光(Diffuse Light);
下标s表示高光(Specular Light);
k表示反射系数或者材质颜色,I表示光的颜色或者亮度;
α 可以模拟表面粗糙程度,值越小越粗糙,越大越光滑。
反射向量r根据光线入射向量l相对法线n做反射得到: r=2(nl)nl

1977年Blinn对Phong模型做出修改,这就是后来广泛使用的Blinn-Phong反射模型:

IBlinnPhong=kaIa+kd(nl)Id+ks(nh)αIs

向量H(半角 Half-Angle)是光线入射向量L和观察向量V的中间向量: h=l+v||l+v||

Blinn-Phong相比Phong,在观察方向趋向平行于表面时,高光形状会拉长,更接近真实情况。

3.基于物理的分析模型

1967年Torrance-Sparrow在Theory for Off-Specular Reflection From Roughened Surfaces中使用辐射度学和微表面理论推导出粗糙表面的高光反射模型,1981年Cook-Torrance在A Reflectance Model for Computer Graphics中把这个模型引入到计算机图形学领域,现在无论是CG电影,还是3D游戏,基于物理着色都是使用的这个模型。我们将在下文中详细分析它的推导过程。

辐射度学基本量

如表1所示列出了各个辐射度学的物理量

表 1: 辐射度量学中的基本度量,这些度量也成为光照⽅程的基本度量。

名称符号表达式含义
辐射能量(radiant energy) Q hcλ电磁波的能量
辐射通量(radiant flux)/功率(power) Φ dQdt 单位时间内通过表面或者空间区域的能量的总量
辐射照度(irradiance) E dΦdA到达表面的通量密度
辐射出度(Radiant Existance) M dΦdA离开表面的通量密度
辐射强度(radiant intensity) I dΦdω通过单位立体角的辐射通量
辐射亮度(radiance)/辐射率 L dΦdωdA每单位面积每单位立体角的辐射通量密度


点光源向四周辐射能量,假想以点光源为中心不同半径的球包围着点光源,穿过这些球的辐射通量是相同的,均为 Φ ,而球的表面积为 4πr2 ,可得通量密度 E=Φ4πr2 ,也就是说通量密度与距离的平方成反比,离光源越远,通量密度越低,这也是为什么光的衰减与距离的平方成正比。
这里写图片描述


立体角是度量三维角度的量,用符号 ω 表示,单位为立体弧度(也叫球面度,Steradian,简写为sr),等于立体角在单位球上对应的区域的面积(实际上也就是在任意半径的球上的面积除以半径的平方 ω=sr2 ),单位球的表面积是 4π ,所以整个球面的立体角也是 4π

BRDF

双向反射分布函数BRDF(Bidirectional Reflectance Distribution Function)就是描述表面入射光和反射光关系的。
对于一个方向的入射光,表面会将光反射到表面上半球的各个方向,不同方向反射的比例是不同的,我们用BRDF来表示指定方向的反射光和入射光的比例关系,BRDF定义为:

f(l,v)=dLo(v)dE(l)

其中f就是BRDF,l是入射光方向,v是观察方向,也即反射光方向。
dLo(v) 是表面反射到v方向的反射光的微分辐射率。
Lo(v) 为表面反射到v方向的反射光的辐射率,
Lo(v) 来自于表面上半球所有方向的入射光线的贡献,而微分辐射率 dLo(v) 特指方向l的入射光贡献的反射辐射率。
dE(l) 是表面上来自入射光方向l的微分辐照度。
E 为表面接收到的辐照度,
E来自上半球所有方向的入射光线的贡献,而微分辐照度 dE(l) 特指来自于方向l的入射光。

在图形学中,将BRDF表示为RGB向量,三个分量各有自己的 f 函数。

球坐标系:用两个角度来确定一个方向
1. 方向相对法线的角度θ,称为极角(Polar Angle)或天顶角(Zenith Angle)
2. 方向在平面上的投影相对于平面上一个坐标轴的角度 ϕ ,称为方位角(Azimuthal Angle)
这里写图片描述

BRDF也可以表示成 f(θi,ϕi,θo,ϕo)
下面我们来看看怎么用BRDF来计算表面辐射率。
我们考虑来自方向l的入射光辐射率 Li(l) ,由辐射率和辐照度的定义:

Li(l)=dΦdωidA=dΦdωidAcosθi=dE(l)dωicosθi

则照射到表面来自于方向 l 的入射光贡献的微分辐照度:
dE(l)=Li(l)dωicosθi

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

dLo(v)=f(l,v)dE(l)=f(l,v)Li(l)dωicosθi

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

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

Lo(v)=Ωf(l,v)Li(l)cosθidωi

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

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

Lo(v)=f(l,v)ELcosθi

对于多个精准光源,只需简单累加就可以了:
Lo(v)=k=1nf(lk,v)ELkcosθik

这里使用光源的辐照度,对于阳光等全局方向光,可以认为整个场景的辐照度是一个常数,对于点光源,辐照度随距离的平方衰减,用公式 EL=Φ4πr2 就可以求出到达表面的辐照度, Φ 是光源的功率,比如100瓦的灯泡,r是表面离光源的距离。
上面给出了BRDF的定义和使用BRDF计算表面反射辐射率的公式。但这个定义实际上是无法直接用于计算表面反射辐射率的,我们还要建立一个能模拟真实光照的模型,使得 输入入射方向和出射方向 f(l,v) 输出表面反射微分辐射率和入射微分辐照度的比率。这个模型已经成为基于物理着色的标准,被称为Cook-Torrance模型。

微表面理论

微表面理论(Microfacet Theory)认为我们看到的表面上的一点是由很多朝向各异且光学平的微小表面组成。当光线从l方向照射到这点,而我们在v方向观察时,由于光学平面只会将光线l反射到关于法线对称的v方向,而l和v已经确定,所以只有法线朝向正好是l和v的半角向量h的微表面才会将光线发射到v方向(如下图),从而被我们看见。

这里写图片描述

法线分布函数(Normal Distribution Function,简写为NDF)D(h)来描述组成表面一点的所有微表面的法线分布概率,现在可以这样理解:向NDF 输入一个朝向h输出朝向是h的微表面数占微表面总数的比例
但实际上并不是所有微表面都能收到接受到光线,如下面左边的图有一部分入射光线被遮挡住,这种现象称为Shadowing。也不是所有反射光线都能到达眼睛,下面中间的图,一部分反射光线被遮挡住了,这种现象称为Masking。光线在微表面之间还会互相反射,如下面右边的图,这可能也是一部分漫射光的来源,在建模高光时忽略掉这部分光线。

这里写图片描述

Shadowing和Masking用几何衰减因子(Geometrical Attenuation Factor)G(l, v)来建模,输入入射和出射光线方向输出值表示光线未被遮蔽而能从l反射到v方向的比例
光学平面并不会将所有光线都反射掉,而是一部分被反射,一部分被折射,反射比例符合菲涅尔方程(Fresnel Equations)F(l, h)
Torrance-Sparrow基于微表面理论,用上述三个函数建立了高光BRDF模型:

f(l,v)=F(l,h)G(l,v)D(h)4cosθicosθo=F(l,h)G(l,v)D(h)4(nl)(nv)

其中n是宏观表面法线,h是微表面法线

Cook-Torrance模型

我们考察一束光照射到一组微表面上,入射光方向 ωi ,观察方向 ωo ,对反射到 ωo 方向的反射光有贡献的微表面法线为半角向量 ωh ,则这束光的微分通量

dΦh=Li(ωi)dωidA(ωh)=Li(ωi)dωicosθhdA(ωh)

dA(ωh) 是法线为半角向量
ωh 的微分微表面面积
dA(ωh) dA(ωh) 在入射光线方向的投影, θh 为入射光线 ωi 和微表面法线 ωh 的夹角

Torrance-Sparrow将微分微表面面积 dA(ωh) 定义为

dA(ωh)=D(ωh)dωhdA

Torrance-Sparrow将前两项解释为单位面积微表面中朝向为 ωh 的微分面积。不过这里塞一个 dωh 略诡异,我的理解乘以 dωh 并没有明确的数学或者物理上的意义。要从一组微表面面积 dA 中得到朝向为 ωh 的微表面面积 dA(ωh) ,只需要将 D(ωh) 定义为 dA 中朝向为 ωh 的比例,取值范围在[0, 1]就可以了。这里引入 dωh 的实际用途我们稍后再讨论。
由上两式可得
dΦh=Li(ωi)dωicosθhD(ωh)dωhdA

设定微表面反射光线遵循菲涅尔定理,则反射通量
dΦo=Fr(ωo)dΦh

由上两式可得反射辐射率
dLo(ωo)=dΦodωocosθodA=Fr(ωo)Li(ωi)dωicosθhD(ωh)dωhdAdωocosθodA

由BRDF的定义可得
fr(ωi,ωo)=dLo(ωo)dEi(ωi)=dLo(ωo)Li(ωi)cosθidωi=Fr(ωo)cosθhD(ωh)dωhcosθocosθidωo

这里需要特别强调几个夹角:
θh 是入射光线 ωi 与朝向为 ωh 的微表面法线的夹角
θi 是入射光线 ωi 与宏观表面法线的夹角
θo 是反射光线 ωo 与宏观表面法线的夹角

回头看反射方程 Lo(v)=Ωf(l,v)Li(l)cosθidωi 是对 dωi 积分,而上式分母包含 dωo ,需要想办法把 dωo 消掉,我估计这也是为什么Torrance-Sparrow在 dA(ωh)=D(ωh)dωhdA 中塞一个 dωh ,:可以通过找到 dωhdωo 的关系,把 dωo 消掉。塞入 dωh 并不会影响方程的合理性,因为 D(ωh) 是可以调整的,现在D( ωh )是一个有单位的量,单位为1/sr。

关于 dωh dωo 关系的推导(在14.5.1节)预设了一个前提: θi=2θh ,可这会导致 θi θh 的定义和前面推导过程中的定义不一致。

这里写图片描述

如上图,入射光线照射到一个微表面上,与微表面的单位上半球相交于点I,与微表面相交于点O,反射光线与单位上半球相交于点R,反射光束立体角 dωo (图中是 dωr )等于光束与单位上半球相交区域面积 dAr ,法线立体角 dωh (图中是 dω )等于法线立体角与单位上半球相交区域面积 dA ,因此求 dωhdωo 等价于求 dAdAr

连线 IR 与法线 n 相交于点P,则IR = 2IP,由于 dAr dA 半径的比值等于 IRIP ,而面积为 πr2 ,与半径的平方成正比,所以 dAr=4dA

连线 OQ 长度为1,OP长度为 cosθi ,所以 dAdA=1cos2θi

dA=dAcosθi

由以上几式可得 dAdAr=14cosθi

需要注意的是,上图中的 θi 实际上是微表面的半角 θh ,所以 dωhdωo=14cosθh

因此 fr(ωi,ωo)=Fr(ωo)D(ωh)4cosθocosθi

前面讲到过并非所有朝向为 ωh 的微表面都能接受到光照(Shadowing),也并非所有反射光照都能到达观察者(Masking),考虑几何衰减因子G的影响,则

fr(ωi,ωo)=Fr(ωo)D(ωh)G(ωi,ωo)4cosθocosθi

参考

https://zhuanlan.zhihu.com/p/21376124

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值