PBR -- Physically Based Rendering

  1. 总纲
  2. 微平面理论
  3. 能量守恒
  4. 参考

总纲

本文基于基于物理的渲染(PBR)白皮书】(一) 开篇:PBR核心知识体系总结与概览来布局内容,在此基础上加上自己的理解完成

相比局部光照模型与着色而言,基于物理的渲染技术PBR,是指使用基于物理原理和微平面理论建模的着色或光照模型,以及使用现实中测量的表面参数来准确表示真实世界材质的渲染理念,自迪士尼在SIGGRAPH2012上提出了迪士尼原则Disney Principled的BRDF,被广泛采用。
Scope of PBR

PBR的范畴,PBR不仅仅是镜面反射采用微平面Cook-Torrance模型,Frostbite在SIGGRAPH2014的分享《Moving Frostbite to PBR》中提出基于物理渲染的范畴,有三部分组成

  • 基于物理的材质 Material
  • 基于物理的光照 Lighting
  • 基于物理适配的摄像机 Camera

PBR的总概念有

  • 微平面理论Microfacet Theory

    微平面理论是将物体表面建模成无数微观尺度上有随机朝向的理想镜面反射的小平面microfacet,实践中表面的不规则性用粗糙度贴图或高光度贴图来表示

  • 能量守恒Energy Conservation

    出射光线的能量永远不能超过入射光线的能量

  • 菲涅尔反射Fresnel Reflectance

    光线以不同角度入射会有不同的反射率,相同的入射角不同的物质也会有不同的反射率

    大多数非金属的F0是\(0.02 \sim 0.04\),大多数的金属的F0范围是\(0.7 \sim 1.0\)

  • 线性空间Linear Space

    光照计算必须在线性空间完成,如shader中的带gamma的贴图可能需要转换成线性空间

    描述物体表面属性的贴图如粗糙度、高光、金属等必须保证是线性空间的

  • 色调映射Tone Mapping

    是将宽范围的照明级别拟合到屏幕有限色域内的过程

    基于HDR渲染出来的亮度值会超过显示器能够最大显示亮度,就需要将光照结果从HDR映射到LDR

  • 物质的光学特性Substance Optical Properties

    现实中的物理中物质可分为三类

    1. 绝缘体Insulators
    2. 半导体semi-conductors
    3. 导体conductors

    渲染中一般只对金属导体和非金属绝缘体,前者具有彩色的镜面反射颜色,后者具有单色或灰色镜面反射颜色

微平面理论

Microfacet Theory

反射现象,光在均匀介质中是沿直线传播的,光在两种物质分界面上改变传播方向又返回原来物质中的现象。两种反射:

  • 一是镜面反射,反射面是光滑平面(如镜子),平行光线经反射后沿某一个方向平行射出,即只能在某一个方向接收到反射光线,如潜水艇上的潜望镜、穿衣镜都是镜面反射;
  • 二是漫反射,反射面是粗糙平面或曲面,平行光线经界面反射后向各个不同的方向反射出去,即在各个不同的方向都能接收到反射光线,如电影院里银幕上接收光线产生漫反射。

光学平面,指平面的粗糙度(即表面的起伏)远小于波长。表面对光的散射比较小,绝大部分光被反射(镜面)、透射(介质)、被吸收。简而言之,光学平面可以有效降低光散射,至于光的透射还是反射等取决于具体材料。

  • 粗糙度较小,相对光滑,表面取向略有变化,导致反射光方向的微小变化,产生较清晰的反射
  • 粗糙度较大,表面上不同点的方向取向变化较大,导致反射光方向的高度变化,产生较模糊的反射

非光学平坦表面Non-Optically-Flat Surfaces,可以看成是微小的光学平面表面的大集合,表面上的每个点都以略微不同的对入射光反射等,最终的表面外观是许多不同微小平面的聚合结果。

漫反射次表面散射它们是相同的物理现象,本质都是折射光的次表面散射的结果,唯一的区别是相对于观察尺度的散射距离,即像素区域与散射距离的关系来确定,如果像素大于光线离开表面之前所经过的距离,可当场漫反射;像素小于散射距离,则当场次表面散射。

出于着色渲染的目的,通常使用统计方法去处理这种微观上的几何现象。

微平面理论将微观几何microgeometry建模为微平面microfacet的思路,用来描述非光学平坦表面的表面反射。理论假设的是微观几何的尺度小于观察尺度,但大于可见光波长的尺度。该理论在2013以前仅用于推导单反射single-bounce表面反射的表达式,现在开始慢慢地实践多次反弹表面反射的一些探讨。

每个微平面的表面点将给定进入的光反射到单个出射方向,取决于微观几何法线\(\mathcal{m}\)的方向,在计算BRDF项时,指定光方向\(\mathcal{l}\)和视图方向\(\mathcal{v}\),这样可以看成只有那些恰好可以将\(\mathcal{l}\)反射到\(\mathcal{v}\)的那些平面有助于BRDF值,其他方向有正有负,积分后就抵消掉。如下左侧图所示,只有\(\mathcal{m}=\mathcal{h}\)时,某个方向的光对应的视图方向的值就是这些的累计值。

上图右侧所示,即使\(\mathcal{m}=\mathcal{h}\)时,也有些复杂的情况,被\(\mathcal{l}\)方向shadowing阴影遮蔽,\(\mathcal{v}\)方向掩蔽masking,microfacet模型理论忽略了一些反射,或多次次表面反射的情况,从结果上来看是可接受的。

能量守恒

根据光学的物理学原理,渲染方程描述了光能在场景中的流动,其理论是能量守恒,而各种各样的渲染计算都是只是这个理论结果的一个近似。

渲染方程The Rendering Equation

是渲染中不可感知的抽象,是指导实现渲染的总纲。在一个特定的位置和方向,出射光\( \mathcal{Lo} \)是自发光\( \mathcal{Le} \)与反射光线之和,反射光线本身是各个方向的入射光\( \mathcal{Li} \)之和乘以表面反射率以及入射角。

某一点p的渲染方程,可以表示为

$$ Lo = Le + \int_{\Omega}{f_{r} \cdot L_{i} \cdot (w_{i} \cdot n) \cdot dw_{i}} $$

其中\(Lo\)是p点的出射光亮度; \(Le\)是p点发出的光亮度; \(f_{r}\)是p点入射方向到出射方向光的发射比例,即BxDF,一般是BRDF;\(L_{i}\)是p点入射光亮度;\((w_{i} \cdot n)\)是入射角带来的入射光衰减;\(\int_{\Omega}{...dw_{i}}\)是入射方向半球的积分(可理解为无穷小的累加和)。

在实时渲染中,常用反射方程The Reflectance Equation,是渲染方程的简化版本,或者说是一个特例。

$$ Lo = \int_{\Omega}{f_{r} \cdot L_{i} \cdot (w_{i} \cdot n) \cdot dw_{i}} $$

BxDF

BxDF指几种双向分布函数的一个统一表示。

  • 双向反射分布函数Bidirectional Reflectance Distribution Function,BRDF,最为简单,也最常用,对于很少透明的场景来说足够了,包括游戏和电影中都有应用。
  • 双向透射分布函数Bidirectional Transmittance,BTDF,用于半透明材质
  • 双向散射分布函数Bidirectional Scattering,BSDF可以看成是BRDF+BTDF,半透明材质和次表面散射材质
  • 双向散射表面反射分布函数Bidirectional Scattering-Surface Reflectance,BSSRDF可以指定不同的光线入射位置和出射位置。
Disney Principled BxDF

迪士尼原则的BRDF的提出奠定了游戏和电影行业的PBR的方向和标准,由于其高度的通用性,将材质复杂的物理属性用非常直观的少量变量表达了出来。

其核心理念是着色模型是艺术导向Art Directable的,而不一定要是完全物理正确physically correct的,并对微平面BRDF的各项都进行了严谨的调用,并提出了清晰明确而简单的解决方案。

  • 应使用直观的参数,而不是物理类的晦涩参数
  • 参数应尽可能少
  • 参数在其合理范围内应该为0到1
  • 允许参数在有意义时超出正常的合理范围
  • 所有参数组合应尽可能健壮和合理

基于此理念,得到一个颜色参数和描述的标量参数

  1. baseColor基础色,表面颜色,通常由纹理贴图提供
  2. subsurface次表面,使用次表面近似控制漫反射形状
  3. metallic金属度,0电介质,1金属,两者不同模型之间的线性混合,金属没有漫反射,且具有等于基础色的入射镜面反射
  4. specular镜面反射强度,入射镜面反射量,用于取代折射率
  5. specularTint镜面反射颜色,对美术控制的让步,用于对基础色的入射镜面反射进行颜色控制,掠射镜面反射仍然是非彩色的。掠射指光从光疏介质向光密介质传播,入射角接近于90度时为掠射
  6. roughness粗糙度,表面粗糙度,控制漫反射和镜面反射
  7. anisotropic各向异性强度,用于控制镜面反射高光的纵横比,0各向同性,1最大的各向异性
  8. sheen光泽度,一种额外的掠射分量grazing component,主要用于布料
  9. sheenTint光泽颜色,对sheen的颜色控制
  10. clearcoat清漆强度,有特殊用途的第二个镜面波瓣specular lobe
  11. clearcoatGloss清漆光泽度,控制透明涂层光泽度,0缎面satin外观,1光泽gloss外观
Disney Principled BSDF

2015年迪士尼动画工作室在BRDF基础上修订,提出了Extending the Disney BRDF to a BSDF with Integrated Subsurface Scattering。blender实现了Disney的BSDF。

Diffuse BRDF

漫反射BRDF模型,分为传统型和基于物理型:传统主要是Lambert;基于物理的有多种。

  • Oren Nayar[1994]
  • Simplified Oren-Nayar[2012]
  • Disney Diffuse[2012]
  • Renormalized Disney Diffuse[2014]
  • Gotand Diffuse[2014]
  • PBR diffuse for GGX+Smith[2017]
  • MultiScattering Diffuse BRDF[2018]
Speecular BRDF

镜面反射BRDF模型,目前游戏行业最主流的模型是基于微平面理论的Microfacet Cook-Torrance BRDF。怎么用物理量精确描述光线?这就要引入物理模型了。

在进入物理模型前先介绍一下立体角,先从二维的弧度radians定义说起,\(\theta=\frac{l}{r}\),三维的立体角steradians定义是\(\Omega=\frac{A}{r^2}\)。确定球体空间中的一个方向\(\theta,\phi\),在这两个角度上分别增加一个微分值,其中\(rd\theta\)是微分面积元的高,\(rsin\theta d\phi\)是微分面积元的宽,则有

$$ d\omega = \frac{dA}{r^2} = \frac{(rd\theta) \cdot rsin\theta d\phi}{r^2} = sin\theta d\theta d\phi $$

可以对\(d\omega\)在整个球体上求积分来验证三维立体角的定义

$$ \Omega = \int_{S^2}{d\omega} = \int_{0}^{2\pi}{\int_{0}^{\pi}{sin\theta d\theta d\phi}} = 4\pi $$

辐射度量学是对光照的一套测量系统和单位,它能够准确的描述光线的物理性质。先介绍一些概念

  • 辐射能量Radiant energy,辐射能量就是辐射出来的电磁能量,单位为焦耳\(\mathcal{Q[J=Joule]}\)。
  • 辐射通量Radiant flux,辐射通量,或说辐射功率Radiant power,是单位时间内的能量,具体地偏向用radiant flux来衡量光线的亮度,如说白炽灯灯泡时说的是60\(\mathcal{w}\)亮度,它的定义是\(\Phi \equiv \frac{d\mathcal{Q}}{dt}[W=Watt][lm=Lumen]\)。
  • 辐射强度Radiant intensity,是指从一个光源处向某个方向上的亮度,就是每单位立体角上的功率\(I(\omega) \equiv \frac{d\Phi}{d\omega}[\frac{W}{sr}][\frac{lm}{sr}=cd=candela]\)
  • irradiance是指每单位照射面积所接收到的能量power,\(E(x) \equiv \frac{d\Phi(x)}{dA}[\frac{W}{m^2}][\frac{lm}{m^2}=lux]\),借助于irradiance可以解释在Billn-Phone所提到的Lambert's Law,即光线亮度在计算时需要乘上一个\(cos\theta\)。在Blinn-Phong模型所提到的光线越远衰减越快,此现象可用irradiance解释,因为光的功率始终一致,离点光源所照射到的圆面积越大,分母越大,分子不变,值就越小啦。
  • radiance是衡量一条传播光线所具有的亮度,就是每单位立体角,每单位垂直面积的功率,它同时指定了光的方向与照射到的表面所接收到的亮度。\(L(p,\omega) \equiv \frac{d^2\Phi(p,\omega)}{d\omega dAcos\theta}[\frac{W}{srm^2}][\frac{cd}{m^2}=\frac{lm}{srm^2}=nit]\), \(cos\theta\) accounts for projected surface area

上图中分别图示了几个概念的物理现象,从左到右,最终的计算要落实到radiance上来,与irradiance的关系也随之而出

$$ L(p,\omega) = \frac{dE(p)}{d\omega cos\theta} \Rightarrow dE(p,\omega) = L_{i}(p,\omega) cos\theta d\omega \Rightarrow E(p) = \int_{H^2}{L_{i}(p,\omega) cos\theta d\omega} $$

其中\(E(p)\)就是点p的irradiance,其物理含义就是提到的过点p的每单位照射面积的功率,而\(L_{i}(p,\omega)\)是指入射光每立体角每垂直面积的功率,对\(d\omega\)积分,相当于对所有不同角度的入射光线做一个求和。含义就是一个点(微分面积元)所接收到的亮度irradiance,由所有不同方向的入射光线亮度radiance共同贡献所得。

双向反射分布函数BRDF

有了上面的一些概念,现在从理解光线的反射开始,一个点p(微分面积元)在接收到一定方向上的亮度(\(d E_{{\omega}_{i}}\))之后,再向不同方向把能量辐射出去(\(d L_{r}({\omega}_{i})\))理想光滑平面会把入射光线完全反射到镜面反射方向,其他方向则完全没有反射;理想粗糙表面会把入射光线均匀的反射到所有方向。因此所谓BRDF就是描述这样一个从不同方向入射之后,反射光线分布情况的函数。,其定义如下

$$f_{r}({\omega}_{i} \rightarrow {\omega}_{r})=\frac{dL_{r}({\omega}_{r})}{dE_{i}({\omega}_{i})}=\frac{dL_{r}({\omega}_{r})}{L_{i}({\omega}_{i}) cos{\theta}_{i} d{\omega}_{i}}[\frac{1}{sr}]$$

BRDF函数接收两个参数,入射光方向\({\omega}_{i}\),反射光方向\({\omega}_{r}\),函数值为反射光的radiance与入射光的irradiance的比值。现在反射方程就可以是如下形式了

$$L_{r}(p, {\omega}_{r})=\int_{H^2}{f_{r}(p, {\omega}_{i} \rightarrow {\omega}_{r})L_{i}(p, {\omega}_{i}) cos{\theta}_{i} d{\omega}_{i}}$$

即摄像机(人眼观察方向)所接收到的\({\omega}_{r}\)方向上的反射光,是由所有不同方向上入射光线的irradiance贡献得到的,而不同方向入射光线的irradiance对反射方向\({\omega}_{r}\)的贡献程度是受限物体表面材质属性,这就是乘上一个BRDF函数的原因。至此,通过辐射度量学和BRDF系数得到的反射方程是一个完全正确的光线传播模型,由反射方程逆推渲染方程,就是多一个自发光项。

公式中的入射光线的radiance不仅仅是光源所引起的(直接的),还有可能是由其他物体上着色点的反射光线的radiance,恰好反射到当前的着色点p(间接的),同时其他物体上的反射光线的radiance依然是由直接与间接的光照构成的,这就变成一个递归过程,查字典一样的逻辑,要求解方程还是比较难的。

渲染方程的物理含义解释

上面从物理概念到最后的完全正确的光线传播模型,是理论上的推导,实践中的计算可能没法对正确的光线传播模型进行精确求解,但可以简化计算的过程,而简化后的计算模型也必须符合物理含义才行。通用的渲染方程现在可写成

$$L_{o}(p,{\omega}_{o}) = L_{e}(p, {\omega}_{o}) + \int_{{\Omega}^{+}}{L_{i}(p,{\omega}_{i}) f_{r}(p, {\omega}_{i}, {\omega}_{o}) (n \cdot {\omega}_{i}) d{\omega}_{i}}$$

先简化场景为一个点光源和单个物体的场景的渲染

$$L_{r}(x, {\omega}_{r}) = L_{e}(x, {\omega}_{r}) + L_{i}(x, {\omega}_{i})f(x, {\omega}_{i}, {\omega}_{r})({\omega}_{i}, n)$$

多个点光源和单个物体

$$L_{r}(x, {\omega}_{r}) = L_{e}(x, {\omega}_{r}) + \sum{L_{i}(x, {\omega}_{i})f(x, {\omega}_{i}, {\omega}_{r})({\omega}_{i}, n)}$$

面光源可以看成由无穷多个点光源的集合,只需要对面光源所在的立体角范围内进行积分,且能够确定不同立体角方向的面光源的入射光radiance,就有如下

$$L_{r}(x, {\omega}_{r}) = L_{e}(x, {\omega}_{r}) + \int_{\Omega}{L_{i}(x, {\omega}_{i})f(x, {\omega}_{i}, {\omega}_{r}) cos{\theta}_{i} d{\omega}_{i}}$$

在场景中加入多个物体,物体之间发生的光线交互:

$$L_{r}(x, {\omega}_{r}) = L_{e}(x, {\omega}_{r}) + \int_{\Omega}{L_{r}(x^{'}, -{\omega}_{i})f(x, {\omega}_{i}, {\omega}_{r}) cos{\theta}_{i} d{\omega}_{i}}\label{eqWithMultiIndirectLighting}$$

其他物体看成是面光源,对其所占立体角进行积分,只不过对其他物体的立体角积分不像面光源是所有入射方向都有radiance,它们的立体角可能只有个别几个方向上有入射的radiance(即多次间接光照反射之后恰好照射到当前点x),这样看来其他间接光都可视作面光源看待。

方程[\ref{eqWithMultiIndirectLighting}]中有两个radiance,其他项都是已知的,现在进行numerically处理,fredholm integral equation of second kind with canonical form,得到下面的公式

$$\mathcal{l}(u) = e(u) + \int{\mathcal{l}(u)K(u,v)dv}$$

与方程[\ref{eqWithMultiIndirectLighting}]中各项一一对应(有数学严格推导的,可查阅相关资料),其中\(K(u,v)dv\)是kernel of equation Light Transport Operator。把公式离散化成线性代数的形式

$$L=E+KL$$

其中\(L,E\)是向量,L就是要求的反射光,E是自发光(就是光源的发光项),\(K\)是light transport matrix可以理解为对光线进行反射的一种算子操作。利用线性代数的知识推导可有

$$L=E+KL \Rightarrow IL - KL = E \Rightarrow L = (I - K)^{-1}E $$

其中I为单位矩阵,对\((I-K)^{-1}\)使用广义二项式定理得到

$$L=(I+K+K^2+K^3+...)E \Rightarrow L = E + KE + K^2E + K^3E + ...$$

这个式子中,E是光源发出的光,K为反射算子,KE表示对光源反射一次的结果,即直接光照,前两项之和就是光栅化当中的着色所考虑的结果;对于全局光照来说,就是后续的项的累计了,\(K^2E\)是一次弹射的间接照明,\(K^3E\)是两次弹射的间接照明,依次类推下去。从渲染方程推导出来的这个抽象公式,解释了渲染方程的物理意义。

参考

Physically Based Rendering:From Theory To Implementation

Bidirectional Reflectance:An Overview with Remote Sensing Applications & Measurement Recommendations

An Overview of BRDF Models

Physically Based Shading at Disney

Three.js PBR渲染入门

Ray Tracing in One Weekend