shader入门精要读书笔记47 基于物理的渲染 理论和数学基础

一、基于物理的渲染技术(Physically Based Shading, PBS)

BRDF 光照模型 :这个 Disney BRDF 模型被广泛应用于实时渲染领域,各大游戏引擎在此基础上实现了各自的 PBS 光照模型,大大提升了游戏画面渲染质量。

吸收、散射、折射。

光在传播时介质的折射率发生了变化,光的传播方向就会发生变化。如果折射率是突变的,就会发生光的散射现象。

菲涅耳等式(Fresnel equations): 描述折射、反射,百分之多少被折射,多少被反射。

光被折射到物体的内部,一部分被介质吸收,一部分又被散射到外部。金属材质具有很高的吸收系数,因此,所有被折射的光往往会被立刻吸收,被金属内部的自由电子转化成其他形式的能量。而非金属材质则会同时表现出吸收和散射两种现象,这些被散射出去的光又被称为次表面散射光(subsurface-scattered light)。

次表面散射的光线会从不同于入射点的位置射出,(左图),此时需要使用次表面散射渲染技术。
如果这些距离值小于需要被着色的像素大小,那么渲染就可以完全在局部完成。
在这里插入图片描述
下面的内容均建立在不考虑次表面散射的距离,而完全使用局部着色渲染。

二、渲染方程

这个在图形学中大名鼎鼎的渲染方程公式如下:
该方向上的出射辐射率Lo(v)等于该点向观察方向发出的自发光辐射率 Le(v)加上所有有效的入射光 Li(ωi)到达观察点的辐射率积分和。
所有有效的入射光 Li(ωi)到达观察点的辐射率积分和 = 积分(被反射到观察方向的光照×到达当前点的光照×衰减)。
在这里插入图片描述
渲染方程是计算机图形学的核心公式,当去掉其中的自发光项 Le(v)后,剩余的部分就是著名
的反射等式(Reflectance Equation)。我们可以这样理解反射等式:想象我们现在要计算表面上某
点的出射辐射率,我们已知到该点的观察方向,该点的出射辐射率是由从许多不同方向的入射辐
射率叠加后的结果。其中,f (ωi, v)表示了不同方向的入射光在该观察方向上的权重分布。我们把
这些不同方向的光辐射率(Li(ωi)部分)乘以观察方向上所占的权重(f (ωi, v)部分),再乘以它们
在该表面的投影结果((n·ωi)部分),最后再把这些值加起来(即做积分)就是最后的出射辐射
率。

在实时渲染中,自发光项通常就是直接加上某个自发光值。除此之外,积分累加部分在实时
渲染中也基本无法实现,因此积分部分通常会被若干精确光源的叠加所代替,而不需要计算所有
入射光线在半球面上的积分。

三、精准光源

在真实的物理世界中,所有的光源都是有面积概念的,即所谓的面光源。由于面光源的光照计算通常要耗费大量的时间,因此在实时渲染中,我们通常会使用精确光源(punctual light sources)来近似模拟这些面光源。图形学中常见的精确光源类型有点光源、平行光和聚光灯等,这些精确光源被认为是大小为无限小且方向确定的,尽管这并不符合真实的物理定义,但它们在大多数情况下都能得到令人满意的渲染效果。
使用 clight表示它的颜色。使用精确光源的最大的好处在于,我们可以大大简化上面的反射等式。我们在这里省略推导过程(有兴趣的读者可以阅读参考文献[1]),直接给出结论,即对于一个精确光源,我们可以使用下面的等式来计算它在某个观察方向 v 上的出射辐射率:式子使用一个特定的方向的 f (lc, v)值来代替积分操作,这大大简化了计算。如果场景中包含了多个精确光源,我们可以把它们分别代入上面的式子进行计算,然后把它们的结果相加即可。

在这里插入图片描述

四、 BRDF 光照模型

这个 Disney BRDF 模型被广泛应用于实时渲染领域,各大游戏引擎在此基础上实现了各自的 PBS 光照模型,大大提升了游戏画面渲染质量。
双向反射分布函数,即 BRDF,用来:当给定某个入射方向的入射光后,有多少百分比的光照被反射到了观察方向上,也就是上面的f (lc, v),。
其中 l 为入射方向和 v 为观察方向(双向的含义)。

绕着表面法线旋转入射方向或观察方向并不会影响 BRDF 的结果,这种 BRDF 被称为是各项同性(isotropic)的 BRDF。与之对应的则是各向异性(anisotropic)的 BRDF。

BRDF 有两种理解方式—第一种理解是,当给定入射角度后,BRDF 可以给出所有出射方向上的反射和散射光线的相对分布情况;第二种理解是,当给定观察方向(即出射方向)后,BRDF 可以给出从所有入射方向到该出射方向的光线分布。一个更直观的理解是,当一束光线沿着入射方向 l 到达表面某点时,f (l, v)表示了有多少部分的能量被反射到了观察方向 v 上。

可以看出,BRDF决定了着色过程是否是基于物理的。这可以由 BRDF 是否满足两个特性来判断:它是否满足交换律(reciprocity)和能量守恒(energy conservation)。
有这两个定律:BRDF 可以用于描述两种不同的物理现象:表面反射和次表面散射。针对每种现象,BRDF通常会包含一个单独的部分来描述它们—用于描述表面反射的部分被称为高光反射项(specular term),以及用于描述次表面散射的漫反射项(diffuse term)。

一种完全真实的方法是使用精确的光学仪器在真实的物理世界中对这些材质进行测量,通过不断改变光照入射方向和观察方向并对当前材质的反射光照进行采样,我们就可以得到它的 BRDF 图像切片。一些机构和组织向公众公开了他们测量出来的 BRDF 数据库,

五、漫反射项

我们之前所学习的 Lambert 模型就是最简单、也是应用最广泛的漫反射 BRDF。准确的Lambertian BRDF 的表示为
在这里插入图片描述

cdiff表示漫反射光线所占的比例,它也通常被称为是漫反射颜色(diffuse color),上面的式子之所以要除以π,是因为我们假设漫反射在所有方向上的强度都是相同的,而 BRDF 要求在半球内的积分值为 1,
在这里插入图片描述

在这里插入图片描述
baseColor 是表面颜色,通常由纹理采样得到,roughness 是表面的粗糙度。上面的漫反射项既考虑了在掠射角漫反射项的能量变化,还考虑了表面的粗糙度对漫反射的影响。Disney使用了 Schlick 菲涅耳近似等式来模拟在掠射角的反射变化,同时使用表面粗糙度来进一步修改它,这使得光滑材质可以在掠射角具有更为明显的阴影边,而又使得粗糙材质在掠射角具有亮边。

六、高光反射项

在基于物理的渲染中,BDRF 中的高光反射项大多数都是建立在微面元理论(microfacet theory)的假设上的。微面元理论认为,物体表面实际是由许多人眼看不到的微面元组成的,虽然物体表面并不是光学平滑的,但这些微面元可以被认为是光学平滑的,也就是说它们具有完美的高光反射。当光线和物体表面一点相交时,实际上是和一系列微面元交互的结果。

BRDF 的高光反射项可以用下面的通用形式来表示:
在这里插入图片描述
这就是著名的 Torrance-Sparrow 微面元模型(Torrance 和 Sparrow 来源于两个作者的姓名)。上面的式子看起来难以理解,实际上其中的各个项对应了我们之前讲到的不同现象。D(h)是微面元的法线分布函数(normal distribution function,NDF),它用于计算有多少比例的微面元的法线满足 m=h,只有这部分微面元才会把光线从 l 方向反射到 v 上。G(l, v, h)是阴影—遮掩函数(shadowing-masking function),它用于计算那些满足 m=h 的微面元中有多少会由于遮挡而不会被人眼看到,因此它给出了活跃的微面元(active microfacets)所占的浓度,只有活跃的微面元才会成功地把光线反射到观察方向上。F(l, h)则是这些活跃微面元的菲涅尔反射(Fresnel reflectance)函数,它可以告诉我们每个活跃的微面元会把多少入射光线反射到观察方向上,即表示了反射光线占入射光线的比率。事实上,现实生活中几乎所有的物体都会表现出菲涅耳现象。最后,分母4(n ⋅ l)(n⋅ v)是用于校正从微面元的局部空间到整体宏观表面数量差异的校正因子。

在这里插入图片描述
七、法线分布函数:
在这里插入图片描述
在这里插入图片描述
八、阴影遮挡函数:
在这里插入图片描述
这个选择完全省略可见性项,即把该项的值设为 1。

在这里插入图片描述
在这里插入图片描述
九、PBS 中的光照:
基于图像的光照(image-based lighting, IBL)同样是非常重要的光照来源。
基于图像的光照通常指的是把场景中远处的光照存储在类似环境贴图的图像中这些环境贴图可以表示光滑物体表面反射的环境光,从而允许我们可以快速得到有很高细节的真实光照效果。在 Unity 中,这种光照通常是由反射探针(Reflection Probes)机制来实现的,我们可以在 Shader中获取当前物体所在的反射探针并在需要时对它们的采样结果进行混合。

十、Unity的PBS模型:

共实现了两种 PBS 模型。一种是基于 GGX 模型的,另一种则是基于归一化的 Blinn-Phong 模型的,这两种模型使用了不同的公式来计算高光反射项中的法线分布函数D(h)和阴影-遮掩函数 G(l, v, h)。Unity 5.3 以前的版本默认会使用基于归一化后的 Blinn-Phong 模型来实现基于物理的渲染,但在 Unity 5.3 及后续版本中,默认将使用 GGX 模型,这和很多其他主流引擎的选择一致。

Unity 使用的 BRDF 中的漫反射项都与 Disney BRDF 中的漫反射项相同,
在这里插入图片描述
高光反射项中的菲涅耳反射函数 F(l, h)也与 Disney BRDF 中的一致,即使用的 Schlick 菲涅
耳近似等式:’
在这里插入图片描述
Untiy的两种法线 分布:
在这里插入图片描述
需要注意的是,不同 Unity 版本在上述实现上可能会略有不同,比如 roughness 的指数部分会有所不同。

阴影-遮掩函数的选择更加复杂一些。在 Unity 5.3 之前的版本中,基于 GGX 模型和归一化
Blinn-Phong 模型的 PBS 的阴影-遮掩函数分别是为 GGX 和 Beckmann 设计的 Smith-Schlick 模型。 它们的公式分别如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值