本文核心知识主要参照知乎毛星云浅墨的游戏编程文章总结归并,并根据个人学习方向进行了筛选摘抄,规划整体学完之后对内容进行代码实现,如有错误或不完整之处,可参照原文阅读。

PBR知识体系概览

本系列主要打算针对知乎文章PBR知识体系进行归并学习,涉及以下五个大方向的内容:

一、PBR核心理论
二、辐射度量学理论
三、渲染方程与BxDF
四、镜面反射BRDF模型(Specular BRDF)
五、基于物理的环境光照(Physically Based Environment Lighting )

本部分未包含迪士尼原则的BxDF(Disney Principled BxDF) 、漫反射BRDF模型(Diffuse BRDF)、离线渲染相关(Offline Rendering Related)、进阶渲染主题(Advanced Rendering Topics)相关内容,后续如有需要再继续深入学习。

一、PBR核心理论

PBR核心知识体系的第一部分自然是PBR的核心理论以及相关的渲染原理。比较老生常谈,但作为基础理论,是入门级知识,还是需要仔细交代。

基于物理的渲染(Physically Based Rendering,PBR)是指使用基于物理原理和微平面理论建模的着色/光照模型,以及使用从现实中测量的表面参数来准确表示真实世界材质的渲染理念。

以下是对PBR基础理念的概括:

  • 微平面理论(Microfacet Theory)。微平面理论是将物体表面建模成做无数微观尺度上有随机朝向的理想镜面反射的小平面(microfacet)的理论。在实际的PBR
    工作流中,这种物体表面的不规则性用粗糙度贴图或者高光度贴图来表示。
  • 能量守恒(Energy Conservation)。出射光线的能量永远不能超过入射光线的能量。随着粗糙度的上升镜面反射区域的面积会增加,作为平衡,镜面反射区域的平均亮度则会下降。
  • 菲涅尔反射(Fresnel Reflectance)。光线以不同角度入射会有不同的反射率。相同的入射角度,不同的物质也会有不同的反射率。万物皆有菲涅尔反射。F0是即 0 度角入射的菲涅尔反射值。大多数非金属的F0范围是0.020.04,大多数金属的F0范围是0.71.0。
  • 线性空间(Linear Space)。光照计算必须在线性空间完成,shader中输入的gamma空间的贴图比如漫反射贴图需要被转成线性空间,在具体操作时需要根据不同引擎和渲染器的不同做不同的操作。而描述物体表面属性的贴图如粗糙度,高光贴图,金属贴图等必须保证是线性空间。
  • 色调映射(Tone Mapping)。也称色调复制(tonereproduction),是将宽范围的照明级别拟合到屏幕有限色域内的过程。因为基于HDR渲染出来的亮度值会超过显示器能够显示最大亮度,所以需要使用色调映射,将光照结果从HDR转换为显示器能够正常显示的LDR。
  • 物质的光学特性(Substance Optical Properties)。现实世界中有不同类型的物质可分为三大类:绝缘体(Insulators),半导体(semi-conductors)和导体(conductors)。在渲染和游戏领域,我们一般只对其中的两个感兴趣:导体(金属)和绝缘体(电解质,非金属)。其中非金属具有单色/灰色镜面反射颜色。而金属具有彩色的镜面反射颜色。即非金属的F0是一个float。而金属的F0是一个float3,如下图:

除了PBR的基础理论,光与非光学平坦表面的交互对理解微平面理论(Microfacet Theory)至关重要。下面进行一些说明。

1.1 光与非光学平坦表面的交互原理

光在与非光学平坦表面(Non-Optically-Flat Surfaces)的交互时,非光学平坦表面表现得像一个微小的光学平面表面的大集合。表面上的每个点都会以略微不同的方向对入射光反射,而最终的表面外观是许多具有不同表面取向的点的聚合结果。

在微观尺度上,表面越粗糙,反射越模糊,因为表面取向与整个宏观表面取向的偏离更强。图片顶部所示的表面,表面相对光滑; 表面取向仅略有变化,导致反射光方向的微小变化,从而产生更清晰的反射。 图片底部所示的的表面较粗糙; 表面上的不同点具有广泛变化的方向取向,导致反射光方向的高度变化,并因此导致模糊的反射。 注意,两个表面在肉眼可见尺度下看起来都是光滑的,粗糙度差异仅在微观尺度上。

出于着色的目的,我们通常会去用统计方法处理这种微观几何现象,并将表面视为在每个点处在多个方向上反射(和折射)光。

从表面反射出的光的行为很好理解,那么,从表面折射的光会发生什么变化? 这取决于对象本身的特性:

  • 对于金属,折射光会立刻被吸收 - 能量被自由电子立即吸收。
  • 对于非金属(也称为电介质或绝缘体),一旦光在其内部折射,就表现为常规的参与介质,表现出吸收和散射两种行为。

上图是在金属中,所有折射的光能立即被自由电子吸收。

上图在非金属中,折射的光会进行散射,直到从表面重新射出,而这通常会在经过部分吸收之后。

1.2 漫反射和次表面散射本质相同

另外,漫反射和次表面散射其实是相同物理现象,本质都是折射光的次表面散射的结果。唯一的区别是相对于观察尺度的散射距离。散射距离相较于像素来说微不足道,次表面散射便可以近似为漫反射。也就是说,光的折射现象,建模为漫反射还是次表面散射,取决于观察的尺度,如下图。

图中在左上角,像素(带有红色边框的绿色圆形)大于光线离开表面之前所经过的距离。 在这种情况下,可以假设出射光从入口点(右上)射出,可以当做漫反射,用局部着色模型处理。 在底部,像素小于散射距离; 如果需要更真实的着色效果,则不能忽略这些距离的存在,需当做次表面散射现象进行处理。

1.3 PBR的范畴(Scope of PBR)

寒霜(Frostbite)引擎在SIGGRAPH 2014的分享《Moving Frostbite to PBR》中提出,基于物理的渲染的范畴,由三部分组成:

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

完整的这三者,才是真正完整的基于物理的渲染系统。而很多人一提到PBR,就说PBR就是镜面反射采用微平面Cook-Torrance模型,其实是不太严谨的。

二、辐射度量学理论

我们主要来学习几个常用的概念:

三、渲染方程与BxDF

PBR核心知识体系的第三部分是渲染方程与BxDF。渲染方程作为渲染领域中的重要理论,将BxDF代入渲染方程是求解渲染问题的一般方法。

3.1 渲染方程与反射方程

渲染方程(The Rendering Equation)作为渲染领域中的重要理论,其描述了光能在场景中的流动,是渲染中不可感知方面的最抽象的正式表示。根据光学的物理学原理,渲染方程在理论上给出了一个完美的结果,而各种各样的渲染技术,只是这个理想结果的一个近似。

渲染方程的物理基础是能量守恒定律。在一个特定的位置和方向,出射光 Lo 是自发光 Le 与反射光线之和,反射光线本身是各个方向的入射光 Li 之和乘以表面反射率及入射角。

这个方程经过交叉点将出射光线与入射光线联系在一起,它代表了场景中全部的’光线传输。所有更加完善的算法都可以看作是这个方程的特殊形式的解。

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

其中:

  • Lo 是p点的出射光亮度。
  • Le 是p点发出的光亮度。
  • fr 是p点入射方向到出射方向光的反射比例,即BxDF,一般为BRDF。
  • Li 是p点入射光亮度。
  • (Wi*n) 是入射角带来的入射光衰减
  • dwi 是入射方向半球的积分(可以理解为无穷小的累加和)。

而在实时渲染中,我们常用的反射方程(The Reflectance Equation),则是渲染方程的简化的版本,或者说是一个特例:

同样,其中:

  • Lo 是p点的出射光亮度。
  • fr 是p点入射方向到出射方向光的反射比例,即BxDF,一般为BRDF。
  • Li 是p点入射光亮度。
  • (Wi*n) 是入射角带来的入射光衰减
  • dwi 是入射方向半球的积分(可以理解为无穷小的累加和)。

3.2 BxDF

BxDF一般而言是对BRDF、BTDF、BSDF、BSSRDF等几种双向分布函数的一个统一的表示。

其中,BSDF可以看做BRDF和BTDF更一般的形式,而且BSDF = BRDF + BTDF。

而BSSRDF和BRDF的不同之处在于,BSSRDF可以指定不同的光线入射位置和出射位置。

在上述这些BxDF中,BRDF最为简单,也最为常用。因为游戏和电影中的大多数物体都是不透明的,用BRDF就完全足够。而BSDF、BTDF、BSSRDF往往更多用于半透明材质和次表面散射材质。

图 BSDF:BRDF + BTDF

我们时常讨论的PBR中的BxDF,一般都为BRDF,对于进阶的一些材质的渲染,才会讨论BSDF等其他三种BxDF。

另外,BxDF即上文所示渲染方程以及反射方程中的 fr 项。

四、镜面反射BRDF模型(Specular BRDF)

PBR核心知识体系的第四部分是Specular BRDF。这也是基于物理的渲染领域中最活跃,最主要的部分。

上图加粗部分为目前业界较为主流的模型。

游戏业界目前最主流的基于物理的镜面反射BRDF模型是基于微平面理论(microfacet theory)的Microfacet Cook-Torrance BRDF。

而微平面理论(microfacet theory)源自将微观几何(microgeometry)建模为微平面(microfacets)的集合的思想,一般用于描述来自非光学平坦(non-optically flat)表面的表面反射。

微平面理论的基本假设是微观几何(microgeometry)的存在,微观几何的尺度小于观察尺度(例如着色分辨率),但大于可见光波长的尺度(因此应用几何光学和如衍射一样的波效应等可以忽略)。且微平面理论在2013年和以前时仅用于推导单反射(single-bounce)表面反射的表达式; 而随着领域的深入,最近几年也出现了使用microfacet理论对多次反弹表面反射的一些探讨。

由于假设微观几何尺度明显大于可见光波长,因此可以将每个表面点视为光学平坦的。 如上文所述,光学平坦表面将光线分成两个方向:反射和折射。

每个表面点将来自给定进入方向的光反射到单个出射方向,该方向取决于微观几何法线(microgeometry normal)m的方向。 在计算BRDF项时,指定光方向l和视图方向v。 这意味着所有表面点,只有那些恰好正确朝向可以将l反射到v的那些小平面可能有助于BRDF值(其他方向有正有负,积分之后,相互抵消)。

在下图中,我们可以看到这些“正确朝向”的表面点的表面法线m正好位于l和v之间的中间位置。l和v之间的矢量称为半矢量(half-vector)或半角矢量(half-angle vector); 我们将其表示为h。

图中仅m = h的表面点的朝向才会将光线l反射到视线v的方向,其他表面点对BRDF没有贡献。

并非所有m = h的表面点都会积极地对反射做出贡献;一些被l方向(阴影shadowing),v方向(掩蔽masking)或两者的其他表面区域阻挡。Microfacet理论假设所有被遮蔽的光(shadowed light)都从镜面反射项中消失;实际上,由于多次表面反射,其中一些最终将是可见的,但这在目前常见的微平面理论中一般并未去考虑,各种类型的光表面相互作用如下图所示。

上图在左侧,我们看到一些表面点从l的方向被遮挡,因此它们被遮挡并且不接收光(因此它们不能反射任何)。在中间,我们看到从视图方向v看不到一些表面点,因此当然不会看到从它们反射的任何光。在这两种情况下,这些表面点对BRDF没有贡献。实际上,虽然阴影区域没有从l接收任何直射光,但它们确实接收(并因此反射)从其他表面区域反射的光(如右图所示)。microfacet理论忽略了这些相互反射。

4.1 从物理现象到BRDF

利用这些假设(局部光学平坦表面,没有相互反射),可以很容易推导出一个被称为Microfacet Cook-Torrance BRDF的一般形式的Specular BRDF项。此Specular BRDF具有以下形式:

其中:

  • D(h) : 法线分布函数 (Normal Distribution Function),描述微面元法线分布的概率,即正确朝向的法线的浓度。即具有正确朝向,能够将来自l的光反射到v的表面点的相对于表面面积的浓度。
  • F(l,h) : 菲涅尔方程(Fresnel Equation),描述不同的表面角下表面所反射的光线所占的比率。
  • G(l,v,h) : 几何函数(Geometry Function),描述微平面自成阴影的属性,即m = h的未被遮蔽的表面点的百分比。
  • 4(n·l)(n·v):校正因子(correctionfactor),作为微观几何的局部空间和整个宏观表面的局部空间之间变换的微平面量的校正。

关于Cook-Torrance BRDF,需要强调的两点注意事项:

  • 对于分母中的点积,仅仅避免负值是不够的 ,也必须避免零值。通常通过在常规的clamp或绝对值操作之后添加非常小的正值来完成。
  • Microfacet Cook-Torrance BRDF是实践中使用最广泛的模型,实际上也是人们可以想到的最简单的微平面模型。它仅对几何光学系统中的单层微表面上的单个散射进行建模,没有考虑多次散射,分层材质,以及衍射。Microfacet模型,实际上还有很长的路要走。

下面对Microfacet Cook-Torrance BRDF中的D、F、G项分别进行简要说明。

4.1.1 Specular D

法线分布函数(Normal Distribution Function, NDF)D的常见模型可以总结如下:

  • Beckmann[1963]
  • Blinn-Phong[1977]
  • GGX [2007] / Trowbridge-Reitz[1975]
  • Generalized-Trowbridge-Reitz(GTR) [2012]
  • Anisotropic Beckmann[2012]
  • Anisotropic GGX [2015]

其中,业界较为主流的法线分布函数是GGX(Trowbridge-Reitz),因为具有更好的高光长尾:

另外,需要强调一点。Normal Distribution Function正确的翻译是法线分布函数,而不是正态分布函数。之前我有一篇PBR相关的文章翻译有问题也。

其实,一些参考文献会使用术语“法线分布(distribution of normals)”来避免与高斯正态分布(Gaussian normal distribution)混淆。

4.1.2 Specular F

对于菲涅尔(Fresnel)项,业界方案一般都采用Schlick的Fresnel近似,因为计算成本低廉,而且精度足够:

菲涅尔项的常见模型可以总结如下:

  • Cook-Torrance [1982]
  • Schlick [1994]
  • Gotanta [2014]

4.1.3 Specular G

几何项G的常见模型可以总结如下:

  • Smith [1967]
  • Cook-Torrance [1982]
  • Neumann [1999]
  • Kelemen [2001]
  • Implicit [2013]

另外,Eric Heitz在[Heitz14]中展示了Smith几何阴影函数是正确且更准确的G项,并将其拓展为Smith联合遮蔽阴影函数(Smith Joint Masking-Shadowing Function),该函数具有四种形式:

  • 分离遮蔽阴影型(Separable Masking and Shadowing)
  • 高度相关掩蔽阴影型(Height-Correlated Masking and Shadowing)
  • 方向相关掩蔽阴影型(Direction-Correlated Masking and Shadowing)
  • 高度-方向相关掩蔽阴影型(Height-Direction-Correlated Masking and Shadowing)
  • 目前较为常用的是其中最为简单的形式,分离遮蔽阴影(Separable Masking and Shadowing Function)。

该形式将几何项G分为两个独立的部分:光线方向(light)和视线方向(view),并对两者用相同的分布函数来描述。根据这种思想,结合法线分布函数(NDF)与Smith几何阴影函数,于是有了以下新的Smith几何项:

  • Smith-GGX
  • Smith-Beckmann
  • Smith-Schlick
  • Schlick-Beckmann
  • Schlick-GGX

其中UE4的方案是上面列举中的“Schlick-GGX”,即基于Schlick近似,将k映射为 k=a / 2,去匹配GGX Smith方程:

后续我们会主要针对DFG三个参数进行详细讲解。

五、基于物理的环境光照(Physically Based Environment Lighting )

有了直接光部分,我们也需要环境光。所以PBR核心知识体系的第五部分是基于物理的环境光照,一般大家也直接默认环境光照的技术方案是基于图像的光照(Image Based Lighting, IBL)。这也是真正让基于物理的渲染画质提升的主要贡献者。

漫反射环境光照部分一般采用传统IBL中辉度环境映射(Irradiance Environment Mapping)技术,并不是基于物理的特有方案,这里暂不讨论。

而基于物理的镜面反射(Specular)环境光照,业界中一般会采用基于图像的光照(IBL)的方案。要将基于物理的BRDF模型与基于图像的光照(IBL)一起使用,需要求解光亮度积分(Radiance Integral),而求解光亮度积分通常会使用重要性采样(Importance Sample)。

重要性采样(Importance Sample)即通过现有的一些已知条件(分布函数),想办法集中于被积函数分布可能性较高的区域(重要的区域)进行采样,进而可高效地计算准确的估算结果的的一种策略。

【PBR系列一】PBR知识体系相关推荐

  1. 前端学习(1690):前端系列javascript之知识体系1

  2. 【PBR系列四】PBR核心原理及材质属性查询

    本文核心知识主要参照知乎毛星云浅墨的游戏编程文章总结归并,并根据个人学习方向进行了筛选摘抄,如有错误或不完整之处,可参照原文阅读. 本部分将主要关注基于物理的渲染的核心理论与渲染的光学原理,以在整个系 ...

  3. 【PBR系列七】基于物理的环境光照(下):镜面反射 IBL(Specular IBL)

    本文核心知识主要参照learnopengl-cn文章总结归并,并根据个人学习方向进行了筛选摘抄,如有错误或不完整之处,可参照原文阅读. 本文紧接[PBR系列六]基于物理的环境光照(上):漫反射辐照度( ...

  4. 【PBR系列三】BRDF方程及渲染方程

    本文核心知识主要参照<现代计算机图形学入门-闫令琪课程课件PPT>,后续光线追踪系列知识也源于此处. 一.BRDF方程 通过上一部分所有辐射度量学各种概念的定义之后,我们可以从这样一个角度 ...

  5. Android-JNI开发系列《十二》总结JNI知识体系

    人间观察 人啊 不能读太多的书 不能用圣人的话看这个世道 不然会看走了眼 本篇对jni知识体系的进行总结,本来是写完Android平台下的对mp3编解码后总结的,但是我想了下mp3编解码后续单独文章介 ...

  6. IT职场人生系列之二十三:知识体系(专家与杂家)

    这是IT职场人生系列的第二十三篇.(序言,专栏目录) 专家与杂家 专家与杂家之争由来已久. 挺专家者说:只有专一,才能学透学精:那些泛泛之辈,只能学到些皮毛,终究不能有所成就. 挺杂家者说:只有广泛, ...

  7. IT职场人生系列之二十三 知识体系(专家与杂家)

    这是IT职场人生系列的第二十三篇.(序言,专栏目录) 专家与杂家 专家与杂家之争由来已久. 挺专家者说:只有专一,才能学透学精:那些泛泛之辈,只能学到些皮毛,终究不能有所成就. 挺杂家者说:只有广泛, ...

  8. 前端知识体系-全栈系列(图谱+大纲)

    源文件地址: https://download.csdn.net/download/gongch0604/86860161 前端知识体系(图谱) 前端工程化体系 node 主流技术栈 大纲 React ...

  9. 计算机视觉专业术语总结:构建计算机视觉的知识体系

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言: 在计算机视觉中存在很多的专业术语,如先验知识,语义信息,embedding,head,neck ...

最新文章

  1. 给力开源,.Net开源地址大收集
  2. 追踪JVM中的本地内存
  3. 编程方法学26:介绍Java标准库
  4. spring boot+mybatis执行controller中拼接后的SQL
  5. webview键盘自适应_黑爵毛茸茸机械键盘:感受来自治愈系的暖萌
  6. ubuntu Qt Creator不能输入中文
  7. android 游戏引擎 排行_4月旗舰手机性能排行榜:小米10 Pro第四,OPPO Ace2第五
  8. A1107班拜年视频录制过程记录
  9. golang语言示例:--->下载网站的json文件,同时对文件进行分析输出
  10. java能写dnf辅助么,【Java8新特征】还没搞懂函数式接口?赶忙过来看看吧!_卡盟,dnf脚本...
  11. 动态规划算法(DP) JAVA 菜鸟理解
  12. Redis常用命令大集合(快速入门)
  13. 关于如何关闭Windows错误报告
  14. CacheCloud-资源归档
  15. android 5.0rom官方,Android 5.0刷机包开放下载 升级需谨慎
  16. 造成笔记本电池损耗的主要原因
  17. Qt5.6.1如何使用qpf2字体
  18. 中国科学院大学计算机考研好考吗,中国科学院大学考研难吗?一般要什么水平才可以进入?...
  19. Linux-虚拟机ping不通主机
  20. 君子签助力HR实现员工“入、转、调、离”5类场景文件在线签署

热门文章

  1. 【札记】Python处理TSV文件以及144790个英语单词的注音、释义、例句的.sql和.tsv文件下载
  2. Android中相册的实现
  3. learn-motrix and 百度网盘
  4. 实用的配音软件推荐,确定不来看看?
  5. jq输出html 单引号引号转义符,jQuery.parseJSON由于JSON中的单引号转义而引发“无效JSON”错误...
  6. Gephi安装教程及相关错误解决
  7. 史记翻译-汉初三杰-张良-留侯世家第二十五
  8. 表白,游戏,跨年,各种节日祝福的link
  9. 条形码的正确使用方法和技巧
  10. 1004.选择结构习题:奇偶数判断