games101-3 BRDF101

这篇具有很好参考价值的文章主要介绍了games101-3 BRDF101。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

BRDF101

概述

本文基于知乎Maple对brdf的文章,在此基础又收集了一些其它来源的关于brdf的文章,希望能够完全理解记忆相关知识
关于Jakub Boksansky的文章,看的过程中又去搜集了很多其它文章来理解,发现已经超出了我目前的知识厚度,因此只会简单的翻译一下我能理解的部分,感兴趣的可以自行看原文。
侵删~~~

Maple

文章地址:https://zhuanlan.zhihu.com/p/21376124
文章讨论了BRDF(Bidirectional Reflectance Distribution Function)双向分布反射函数
介绍了辐射度量学、BRDF定义、如何使用BRDF计算

ScratchPixel

scratchpixel关于brdf的教学内容偏少 基本上被maple的文章内容所覆盖 但是仍然可以起到补充的作用
地址:https://www.scratchapixel.com/lessons/3d-basic-rendering/brdf-linear-exposure/intro-brdf.html

Flux(辐射通量)、Irradiance(辐照度)与Radiance(辐射率)

games101-3 BRDF101

结合上图理解
辐照度可以看作量化给定点的入射光子数,而辐射率是量化给定点从特定方向的入射光子数,辐射率可以代表从给定方向观察看到的点的颜色
其中给定点指的是很小的面积 \(dA\) 在这个极小的面积上辐射通量可以看做是不变的
而特定方向可以用一个非常小的圆柱体来表示 由于透视关系显示为小圆锥体
并且上图中的\(\theta\) 代表着通过该点的光子数占总光子数的比例 当圆柱体垂直时 全部光子通过该点 当圆柱体平行该点时 通过该点的光子数为0
根据辐照度与辐射率的单位或者具体的定义
我们可以得出 一个点的总辐照度 可以通过聚合打到该点半球上所有方向的入射光线辐射率:

games101-3 BRDF101

而当我们只考虑一个方向时 就得到了辐照度的微分表示:

games101-3 BRDF101

而BRDF定义了入射光辐照度 和 反射光辐射率的比值:

games101-3 BRDF101

我们经过积分 就可以得到从特定方向观察到的某个点的颜色 即特定方向该点的辐射率:

games101-3 BRDF101

Jakub Boksansky

Jakub Boksansky是一位来自英伟达的图形程序员,他的博客里实现了brdf 并且也是 Ray Tracing Gems II Chapter 14 的配套代码
地址:https://boksajak.github.io/blog/BRDF

BRDF的性质

独立性

BRDF 描述了给定的入射光和出射光方向组合的表面反射率。换句话说,它决定了当一定量的光从另一个方向入射时,有多少光在给定方向上反射,具体取决于表面的特性。这个公式非常灵活,因为它使我们能够将表面材料的响应封装到 BRDF 实现及其参数设置中,这独立于光传输的底层算法。请注意,BRDF 不区分直接和间接入射光,这意味着它可用于计算场景中放置的虚拟光(局部照明)和从其他表面反射一次或多次的间接光(全局照明)的贡献。这也意味着BRDF独立于灯光的实现,可以单独开发和编写(BRDF只需要知道入射光的方向及其在阴影点的强度)。

渲染算法和光照的独立性意味着我们可以将这种抽象的 BRDF 实现为“材质插件”,通过简单的 API 访问,而且不同渲染器产生的视觉结果将是相同的。

物理上真实

为了使BRDF实现的效果更加逼真,一般要求提出的BRDF模型要满足以下两个条件:
Helmholtz reciprocity------入射和出射方向可以交换(因此称为双向),并且所得反射率将相同。请注意,某些算法会跟踪来自相机的光线(路径跟踪),其他算法会跟踪来自光源的光线(光子映射)或两者都追踪(双向路径跟踪)。Helmholtz reciprocity确保所有类型的算法得到一致的结果。

Energy conservation(能量守恒)------对于具有完全白色反照率且无吸收的表面,从表面反射的能量应等于接收到的能量

但是一些成功的模型并不满足这些要求。 Disney 模型不是能量守恒的,而 Autodesk 模型不一定满足Helmholtz reciprocity。迪士尼模型与单向路径追踪结合使用,缺乏双向性不会带来重大问题。完美的能量守恒也可能不是一个严格的要求,因为除非 BRDF 反射的能量多于它接收到的能量,否则不太可能造成问题,除了能量损失带来的表面变暗。

几种常见的BRDF模型

常用的向量参数讲解

games101-3 BRDF101

矢量 𝑁 是给定表面的着色法线(可能来自法线贴图)。矢量𝑉,,指定从着色点到观察者(相机)的方向,更一般地说,它指定出射光方向,在典型的路径追踪器中,这与光线方向相反。矢量 𝐿 指向光源,或者根据上下文指定入射光线反射的方向。向量 𝐻,半向量位于 𝑉 和 𝐿 之间。它也等于第 4 节中讨论的微表面模型的微表面法线。矢量 𝑅 是矢量 𝐿 沿法线 𝑁 的完美镜面反射方向,矢量 𝑇 是三角形平面上垂直于 𝑁 的切线。所有这些向量都被标准化。向量 𝑣 和 𝑙 是 𝑉 和 𝐿 在三角形平面上的投影。 注意\(\varphi_{v} \theta_{v}\)\(\varphi_{l} \theta_{l}\) 是 𝑉 与 𝐿的球面坐标表达。

Lambertian diffuse BRDF

朗伯函数是用于漫反射项的最简单的 BRDF 函数之一,它假设入射光在所有可能的方向上均匀散射(在表面法线周围的半球内),即是完美的漫反射。
定义为:

games101-3 BRDF101

考虑余弦项(代表着入射光方向带来的能量的损失):

games101-3 BRDF101

其中\(diffuseReflectance\)代表着有多少光被反射 \(PI\)是球面积分 保证能量守恒的结果

Phong Reflection Model

Phong引入了过去常与 Lambertian 一起使用的另一种流行的反射模型,为实时渲染提供计算成本低廉的镜面高光。不要将 Phong 反射模型与 Phong 着色相混淆——Phong 着色是一种用于实现平滑镜面高光的法线插值方法。虽然 Phong 的原始论文指出,他的反射模型是基于物理的,但按照今天的标准,它并不是基于物理的,因为它缺乏非镜面峰值、菲涅尔反射等现象。
定义为:

games101-3 BRDF101

高光的宽度由指数(通常称为光泽度shinines)控制,这是一个无界参数,但通常将其范围限制在 10000 左右。为了实现 Phong 模型,我们必须计算向量 𝑅 ,但正如 Blinn 在其优化版本中所示,可以使用半程向量 𝐻 代替

由于它既不能量守恒也不双向,因此将其称为这种形式的“Phong BRDF”在技术上是不正确的,但是,已经有人尝试修复这些缺陷。 Blinn 推出了一个优化版本,并将 Phong 的镜面高光与朗伯漫反射和恒定环境项相结合,创建了 Blinn-Phong 反射模型,该模型成为实时应用程序的标准,直到被更先进的基于物理的模型所取代

关于其它修正的Phong模型的BRDF 可自行到原文的参考文献查阅

Oren-Nayar Diffuse Reflectance Model

Oren 和 Nayar 引入了更先进的漫反射反射模型,该模型考虑了表面粗糙度。他们的模型基于这样的观察:当视线方向接近入射光方向时,粗糙表面反射的光比Lambertian模型预测的要多(这种效应称为反向散射,这种非Lambertian表面的一个例子是月球)。 Oren-Nayar 模型通过推广朗伯模型并使其对表面粗糙度和观察方向敏感。
Oren 和 Nayar 提出了他们模型的几个版本,并进行了不同程度的简化。本文附带的代码使用最简单的“定性”模型:

games101-3 BRDF101

粗糙度。。。。。

Disney (Burley) Diffuse Model

另一种流行且广泛使用的模型是 Disney 漫射模型,有时也称为 Burley 漫射模型。它是通过观察测量数据得出的经验模型。它类似于 Oren-Nayar 模型,但评估起来更简单。它基于 Schlick 菲涅尔近似公式(见后),并扩展了基本朗伯模型。
定义:

games101-3 BRDF101

微表面模型

使用微面模型的 RDF 通常被称为基于物理的,以表明它们是根据物理定律(光学)设计的,而不是根据观察经验进行设计的,尽管在计算机图形学中,我们经常使用简化和近似来使计算简化。

一个著名的微表面模型Cook and Torrance :

games101-3 BRDF101

其中各参数含义简述如下:

D 项 – 微面分布函数 – 告诉我们有多少微面面向方向 𝐻,该方向可以将从方向 L 传入的光沿着方向 𝑉 反射

F 项 – 菲涅尔项,评估给定入射角有多少光会从表面反射

G 项 – 几何衰减项(也称为掩蔽和阴影项),说明微表面的相互遮蔽,有时也用于 BRDF 的标准化

分母 – 来自使用完美镜面作为微表面的微表面模型的推导

微表面分布项 或者说微表面的法线分布函数(NDF)

常用的NDF 本文介绍了两种
一种是Beckmann:

games101-3 BRDF101

其中\(\theta_{h}\)代表着法线与半程向量的夹角 \(\alpha\)代表着材质的粗糙率
一种是GGX:

games101-3 BRDF101

对于上面的两个公式 我们可以将tan角使用余弦角来表示 因为余弦更加容易计算 只需要一个点积:

games101-3 BRDF101

games101-3 BRDF101

两者随着余弦角度变化的对比图:

games101-3 BRDF101

从上图中可以看出 GGX有着更长的尾巴,意味着镜面高光下降的更为缓慢,更符合现实,因此GGX被更为广泛的应用

还有一个由 Blinn 使用 Phong 反射模型导出的 NDF(称为 Blinn-Phong NDF),并且在 Walter 的论文中也进行了讨论,他得出的结论是,对于某些粗糙度值,Beckmann 和 Blinn-Phong 分布非常适合相似的,这可以解释 Phong 着色模型的长寿,因为它能够准确地表示某些材料(尤其是塑料)。

正如我们所看到的,每个模型的粗糙度单位可能有很大不同。 Torrance 和 Sparrow 以及 Oren-Nayar 模型直接使用正态分布的标准差,Beckmann 和 Trowbridge-Reitz 使用斜率的统计均方根,而 Burley 使用在合理范围内根据经验选择的值。当多个 BRDF 耦合在一起时(通常是镜面反射和漫反射 BRDF),将艺术家指定的粗糙度仔细转换为底层 BRDF 使用的粗糙度单位非常重要。

几何遮挡项

几何衰减项 𝐺 解释了由于微表面的几何形状而导致的反射光衰减,这种衰减是在某些微面相互遮挡时发生的。

𝐺 项抵消了菲涅尔项,并导致了菲涅尔预测的高反射率因掠射角处的 𝐺 项产生的显着阴影而减弱,对于某些粗糙度的材料会出现“非镜面峰值”,即峰值反射率出现在较低的角度

微表面的几何形状由用于模拟其形状的轮廓给出。有两种重要的微表面轮廓:V-Cavity模型,假设微表面由一定宽度和高度的V形凹槽组成,以及基于斜率随机分布的Smith模型。 Cook-Torrance 和 Oren-Nayar 在他们的 BRDF 中使用了 V-Cavity模型,但正如 Heitz 的一篇文章展示的,Smith 函数是更为正确的模型,因此,我们将只讨论 Smith 的𝐺函数,定义为:

games101-3 BRDF101

其中 𝑆 是 𝐿 或 𝑉 向量,𝐻 是微表面法线,λ 是特定于所选分布函数 (NDF) 的函数:

games101-3 BRDF101

在考虑微表面的入射光与反射光时。我们可以发现两者均会发生遮蔽现象,所以我们的G函数会由两部分组成
games101-3 BRDF101

games101-3 BRDF101

如果我们考虑到微表面更深的面被阴影和遮蔽的可能性更高,还有一种更为精确的G函数提出:

games101-3 BRDF101

任一形式的 𝐺函数 都可以用于前面介绍的微面模型反射公式中的 𝐺 项,但后一种更可取,因为它只是稍微贵一点但是更准确。

菲涅尔项

菲涅耳项𝐹决定了有多少光将从表面反射,有效地告诉我们有多少光将有助于评估 BRDF。剩余部分 (1 − 𝐹) 将传递到底层材料层(例如,漫反射 BRDF 或透射 BTDF)。到目前为止,我们的实现仅讨论了两层(镜面反射和漫反射),但可以创建具有多个层的复杂材质。菲涅耳项应在光从一层传播到另一层的每个界面上进行评估。为简单起见,各个层的厚度通常为零,但可以结合光谱渲染对某些厚度进行建模,以产生诸如当层界面比穿过它的光的波长薄时发生的衍射(虹彩)等效果。

Christophe Schlick 引入了一种广泛使用的菲涅尔近似值,用于计算机图形学 。正如他指出的那样,完整的菲涅尔方程不仅计算成本昂贵,而且依赖于不直观的折射率 𝑛 和消光 𝑘,这不符合我们对可预测且易于使用的参数的需求。更复杂的是,全折射率是一个由实部(折射率)和虚部(消光系数)组成的复数,并且是按波长指定的。这不适合使用 RGB 三元组进行渲染。 Naty Hoffman 题为“被认为有害的菲涅尔方程” 的文章对该主题进行了进一步讨论,并得出结论,除非使用光谱渲染,否则完整的菲涅尔方程并不比 Schlick 近似更精确。

Schlick 近似使用这样的观察结果:在 90 度以下观察时,所有材料都表现出完美的反射率,并且我们可以仅使用一个参数 ------ 法线入射(0 度到F0度)下的表面反射率来近似完整的菲涅尔方程:

games101-3 BRDF101

其中 𝑢 是法线与观察方向之间角度的余弦 (𝑢 = 𝑁 ∙ 𝑉),并且 \(F_{90}\) 等于 1,除了接下来讨论的情况。请注意,折射率和消光系数已被消除,但我们现在需要指定从法线入射时的反射率\(F_{0}\)

消除折射率和消光系数简化了计算,但也导致失去对材料是否表现为电介质(低吸收系数——塑料、木材等)或导体(高吸收系数——铜、金等)的控制。正如 Cook 和 Torrance 所指出的,金属反射是根据法线入射材质的基色着色的(表示为 \(F_{0}\))。利用这些知识,我们可以通过引入一个称为金属度的参数来“修复”对于金属菲涅尔反射的颜色,该参数将 \(F_{0}\) 计算为电介质的默认反射率和金属的基色之间的混合:

games101-3 BRDF101

\(F_{0Dielectrics}\)的常见选择是 0.04(4% 反射率),例如 UE4 和 Frostbite 使用的

混合BRDF

在本文中,为了将镜面 BRDF 与漫反射 BRDF 结合起来,我们使用一种基于菲涅耳项的简单方法,将镜面反射和漫反射 BRDF 混合在一起。请注意,微面模型已经用 𝐹 衡量镜面 BRDF 的权重,因此我们可以用 (1 − 𝐹) 衡量漫反射 BRDF 的权重。这是受到分层材料的启发,其中光与每一层相互作用,菲涅耳项用于评估有多少光从表面反射以及有多少散射到表面。文章来源地址https://www.toymoban.com/news/detail-857908.html

到了这里,关于games101-3 BRDF101的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Games101作业5解读

    Games101作业5解读

    在scene中加入两个球一个地板和两个点光源 在Render中我们从eye_pos向屏幕打出一根一根的ray与场景相交 第一步先与场景的求交,如果光线打到了物体,就继续判断打到的物体的材质,根据不同的材质进行不同的处理,这里重点说下REFLECTION和default 在REFLECTION中,这一段代码有点问

    2024年02月09日
    浏览(11)
  • GAMES101作业2

    GAMES101作业2

    在屏幕上画出一个实心三角形, 换言之,栅格化一个三角形。上一次作业中,在视口变化之后,我们调用了函数 rasterize_wireframe(const Triangle t)。但这一次,你需要自己填写并调用 函数 rasterize_triangle(const Triangle t)。 该函数的内部工作流程如下: 创建三角形的 2 维 bounding box。

    2024年02月16日
    浏览(12)
  • 【GAMES101】03 Transformation

    【GAMES101】03 Transformation

    1、Scale(缩放)  2、Reflection Matrix(反射矩阵)  3、Shear Matrix(剪切矩阵)  4、Rotation Matrix(旋转矩阵) 推导过程:     5、Translation Matrix(平移矩阵) 平移操作不属于线性变换的范畴。 引入 齐次坐标 ,通过增加维度,来将平移坐标写成同样的矩阵形式。 很显然,平移无

    2024年02月02日
    浏览(15)
  • games101 作业3

    games101 作业3

    1.项目才打开时无法运行。 解决方法: 切换成c++17 解决方法引用: Games101 作业3 环境问题 - 知乎  注:知乎里面的关于越界限制的控制不适用,虽然可以解决部分作业的问题,但是在bump里面依然会出现越界错误。应该用以下大佬的代码。  2.出现越界错误   解决方法: 在头

    2023年04月25日
    浏览(10)
  • GAMES101:作业7记录

    GAMES101:作业7记录

    在之前的练习中,我们实现了 Whitted-Style Ray Tracing 算法,并且用 BVH等加速结构对于求交过程进行了加速。在本次实验中,我们将在上一次实验的基础上实现完整的 Path Tracing 算法。至此,我们已经来到了光线追踪版块的最后一节内容。 请认真阅读本文档,按照本文档指示的流程完成

    2024年02月01日
    浏览(15)
  • Games101笔记-模型、视图、投影

    Games101笔记-模型、视图、投影

    在旋转点,旋转矩阵的逆等于矩阵的转置 左边3*3是线性变换,右边一列是仿射变换(平移) 先线性再平移 x叉乘y得到z,y叉乘z得到x, xyz给任何两个可以得到另一个 (循环对称) z叉乘x得到y,所以y是反的 任意绕3d轴旋转可以分解为绕x,y,z轴旋转。三个角为欧拉角 罗德里格斯旋

    2024年03月19日
    浏览(11)
  • GAMES101 OpenCV环境安装

    GAMES101 OpenCV环境安装

    作业2中用到了OpenCV 下载OpenCV 源码 OpenCV 4.5.4 下载OpenCV_contrib OpenCV_contrib 4.5.4 注意:这两个源码的版本号要一致 将源码解压后,不要放在有中文路径的目录 使用管理员权限打开CMake, 一开始未使用,发现点击Configure时会报错,使用管理员权限打开CMake后,点击Configure未报错。

    2024年02月17日
    浏览(7)
  • 【GAMES101】Lecture 06 抗锯齿

    【GAMES101】Lecture 06 抗锯齿

    目录 锯齿与走样  反走样 ​编辑 MSAA(Multisample Anti-Aliasing)多重采样坑锯齿 我们在前一节课讲过在三角形光栅化的时候会出现锯齿的情况 这个也叫走样,是采样不够的结果,如下这个周期函数,如果我们每隔一定间隔对函数进行采样,最后发现我们采样出来的结果(就是图

    2024年01月17日
    浏览(21)
  • Games101学习笔记 - 变换矩阵基础

    Games101学习笔记 - 变换矩阵基础

    缩放变换 : 1均匀缩放 2不均匀缩放 注意:上图是默认二维旋转的是以远点为圆转重心,并且逆时针旋转 旋转矩阵推导原理: 引入原因: 上面说了ax + by 的方式都可以写成矩阵的形式,但是平移的操作的公式如下,不能写成矩阵的形式。 只能写成如下: 为了同意变换,让他

    2024年02月15日
    浏览(12)
  • 17 - Games101 - 笔记 - 材质与外观

    17 - Games101 - 笔记 - 材质与外观

    自然界中的材质:丝绸、头发、蝴蝶翅膀表面、寿司表面等等 图形学中的材质:同一个模型之所以渲染出不同结果的原因就是因为材质。在图形学中是给不同的物体指定不同的材质,知道它们如何和光线作用后就能正确的渲染。 漫反射材质:光线打到一个点上后均匀分散到

    2024年04月10日
    浏览(6)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包