unity shader development[11]

56 篇文章 2 订阅

BRDFs名人录

  现在你已经熟悉了基于物理的着色原理,以及如何确保你的BRDF实现尊重这些原理,我们可以探索过去论文中描述的一些BRDFs

  你可以从头开始发明你自己的,例如从微面理论模型中推导出它们,或者你可以从过去图形论文中描述的许多BRDF中选择一个。

BRDF Explorer

  由于在Unity中实现BRDF是一个相当大的工作量,为了探索许多可用的BRDF,我们将使用一个不同的工具。这个工具是由迪斯尼的研究人员开发的,它叫做BRDF explorer(见图11-1)。它在GitHub上是开源的,你可以在https://github.com/ wdas/brdf上找到源代码,而预编译版本在https://www.disneyanimation.com/technology/brdf.html。

在这里插入图片描述
  BRDF Explorer带有许多不同的BRDF实现和许多分析它们的方法。这些包括从中提取相关信息的图表,实时和离线渲染的BRDF预览。你还可以同时比较许多不同的BRDF。有时,图形研究论文包括他们所描述的技术的BRDF Explorer的实现。总而言之,这是一个非常有用的工具,非常值得学习。

  正如你在基于物理的shading理论一章中所知道的,BRDF之间有一些共同的参数(如入射光线方向),允许你分析BRDF在这些参数方面的行为,也可以对它们进行比较。BRDF资源管理器的开发目的是为了使它们的访问和比较更加方便。该程序带有一些.brdf文件,包含在/brdfs子文件夹中。每个文件都使用GLSL着色器语言的自定义语言来实现一个BRDF。

BRDF参数化

  你可能还记得图11-2,在关于基于物理的阴影的章节中。这些角度以及其他角度对于阅读BRDF Explorer的输出是很重要的。这是BRDF最常见的参数化之一:它用四个角度来描述两个矢量,即入射和出射的光矢量。

在这里插入图片描述
  BRDF Explorer是为了比较从现实生活中获得的BRDFs而创建的。有一个小型的、免费提供的这类BRDFs数据库,叫做MERL。这个数据库使用的坐标系与图11-2中的坐标系相比略有不同。它仍然是一个球面极坐标系统,但不是基于入射和出射的光矢量,而是基于由它们衍生的两个矢量。它们是半程矢量(或半角)和差异矢量(见图11-3)。这通常被称为替代BRDF参数化或重新参数化

在这里插入图片描述
  这种差异的原因是因为在这些角度上参数化的 BRDF 可以更有效地存储获取的数据。 尽管如此,各向同性 BRDF 仍占据大约 33MB。 各向同性意味着,当你围绕法线旋转时,反射不会改变。 在这个数据库的情况下,只包括各向同性的 BRDF 允许他们存储从捕获的 BRDF 少一个角度,这本来是角度 ϕh 。

  半角是通过将入射光向量和出射光向量相加获得的,而差角是通过更复杂的方式找到的。 一种方法是找到将中间向量与方向 (0,0,1) 对齐的旋转,并将其应用于入射光向量。

  坐标系统变化的一个后果是,半球不再以法线矢量为中心,所以部分获取的数据会在半球之下,显示为黑色。当你加载MERL BRDF并使用BRDF Explorer中的各种杠杆时,这个问题就会显示出来。

  现在让我们开始挖掘BRDF Explorer的功能,看看它有多大作用

阅读BRDF Explorer的输出

  让我们从检查一个我们相当熟悉的BRDF开始。Phong。在BRDF Explorer资源库中,有多个版本的Phong;我们现在要看的是普通版本。

Phong

  首先,我们需要打开 phong.brdf 文件,该文件位于程序根目录下的 brdf/ 文件夹中。 它将自己添加到左侧的 BRDF 参数列中。 从那里,您可以控制当前显示哪个 BRDF,操纵 BRDF 的输入,并使 BRDF 不可见,同时将其保持在列中(见图 11-4)。
在这里插入图片描述
  在列的顶部,您可以更改 thetaL 和 phiL 角度,您可以更好地将它们识别为 θi 和 ϕi 。 这是代表入射光方向的两个球面极坐标角。

  Plane的选择比较多,我们来一一介绍最重要的选择:

  • 平面上方的入射光,角度θl滑块,从0到90度

  • 平面上的入射光,角度 ϕl 滑块,从 0 到 360 度

这两个滑块指定入射光的位置。 更改将实时显示在 3D 绘图选项卡中(见图 11-5)。

在这里插入图片描述
在 phong.brdf 框中,您会发现:

  • Visible 复选框,用于打开和关闭 BRDF
  • n 值,即镜面反射指数,从 0 到 1000
  • 除以 N∙L 复选框

  如果您在更改所有这些选项的同时查看 3D Plot 面板,您将很好地了解它们对 BRDF 行为的影响。 3D Plot 面板显示了具有传入和传出光向量的半球,以及 BRDF 的形状。 例如,Phong 有一个 Specular Lobe,您可能会注意到它与第 5 章中的镜面反射近似图相似。在某些 BRDF 中,还有一个 Diffuse Lobe,它看起来也与第 5 章中的漫反射近似图相似。

  看一下phong.brdf的代码,注意到在界面中自动产生滑块和其他输入的参数声明。虽然代码不是Cg的,但GLSL与它有很多共同之处。你可以创建你自己的.brdf文件或修改现有的文件,以便在深入到Unity中实现之前尝试你的理论。

  另一个有用的面板是Lit Sphere面板(见图11-6)。它向你展示了一个球体上渲染的BRDF的实时预览。同样,对参数的任何改变都是实时显示的。

在这里插入图片描述
  如果你想在一个更有趣的环境中测试BRDF,你要使用的是Lit Object面板(见图11-7)。它使用离线渲染器进行渲染,支持基于图像的照明。你可以导入你自己的模型(它支持Obj格式)和IBS立方体地图。勾选保持采样的复选框可以获得清晰的渲染,最终。

在这里插入图片描述
  由于我们使用的是BRDFs的不同参数化,所以涉及到一些额外的角度。BRDF资源管理器允许你查看其行为的图表。

  • Theta H (θh)有θd 作为一个参数
  • Theta D (θd)有θh 作为一个参数
  • Theta V (θv)有θv 作为一个参数

  可以从 Image Slice 面板中收集所有这些值的一般概述(见图 11-8)。 Image Slice 面板对于一目了然地比较 BRDF 的行为特别有用,包括从 BRDF 捕获中获取的行为。 信息量最大的切片对应于 ϕd = 90,其中 ϕd 是入射光角围绕半向量的方位角旋转。

在这里插入图片描述
  图像的不同部分对应BRDF的不同特征,如菲涅耳反射、镜面反射、掠反射、回射(见图11-9)。 Image Slice 面板对于比较从现实生活中获取的二进制 BRDF 与其他 BRDF(二进制或代码实现)特别有用。 如第 8 章所述,BRDF 无法表达所有光现象,因此这些获得的 BRDF 可能无法显示原始材料所具有的某些方面,例如彩虹色。

在这里插入图片描述
这就是 Phong 分析

MERL 数据库

  MERL 数据库包含 100 个捕获的 BRDF。 您可以从 https://www.merl 下载所有这些。 com/brdf/ 作为 .binary 文件。 BRDF Explorer 可以读取 .binary 文件,因此您可以像在代码中实现的那样探索这些 BRDF。

比较 BRDF

  您可能已经注意到,BRDF Explorer 允许您添加许多不同的 BRDF 并切换它们。 这种比较最有用的面板之一是 Polar Plot 面板(见图 11-10)。 不同的 BRDF 用不同的颜色进行追踪,因此您可以轻松比较它们。 它与 3D Plot 面板非常相似,但在涉及多个 BRDF 时更容易阅读。
在这里插入图片描述
  要比较 BRDF,您只需要加载多个 .brdf 或 .binary 文件,您就可以使用 Visible 复选框和 Solo This BRDF 按钮切换它们。 您可以根据需要向比较中添加任意数量的 BRDF。 注意 3D Plot 面板,因为不同的 BRDF 波瓣可能会重叠并相互遮挡

  要尝试多个 BRDF 比较,让我们加载 cooktorrance.brdf 文件。 Cook Torrance 是目前非常流行的 BRDF。 它用于 Unity >= 5.x、Unreal 4 以及其他引擎。 它非常灵活,允许您仅使用一种 BRDF 来模拟多种类型的材料。 由于在引擎中为 BRDF 实现间接光仍然很麻烦,由于创建适当的立方体贴图和全局照明所需的 BRDF 相关处理,引擎倾向于选择一种,而不是有很多可用的。 您也很少会在引擎文档中发现它们以实际名称命名。

  例如,Unity 5.x 使用调用默认着色器“Standard”并且没有指定哪个 BRDF 位于该名称下。 根据平台,实际使用的 BRDF 可以是 BlinnPhong、CookTorrance 或 Disney BRDF 的变体。 找出答案的唯一方法是查看标准着色器代码。

用于实时渲染的 BRDF 的不完整列表

  快速浏览 brdf/ 文件夹下的文件,您会看到许多您可能没有听说过的 BRDF 名称。 请记住,任何以 d_ 开头的文件都是微面 BRDF 的分布项,任何以 g_ 开头的文件都是几何项。 本节介绍最相关的内容。

Ashikhmin Shirley

  这是一个各向异性的BRDF。它特别适合于金属,以及油和水层(见图11-11)。你可以在图11-12中看到它应用于我们常用的鸭子。

在这里插入图片描述
在这里插入图片描述
  这种 BRDF 是在 2000 年由 Michael Ashikhmin 和 Peter Shirley 撰写的题为 An Anisotropic Phong BRDF 模型的论文中介绍的。

Cook Torrance

  如前所述,这是一个非常灵活的 BRDF。 它可以令人信服地模拟金属、木材、塑料和许多其他材料。 它基于微平面理论。 它还可以模拟具有不同粗糙度的材料。 参见图 11-13。
在这里插入图片描述
  它是由 Robert L. Cook 和 Kenneth E. Torrance 在 1982 年题为“计算机图形的反射模型”的论文中介绍的。

Oren Nayar

  这是一个仅漫反射的 BRDF。 它比 Lambert 更灵活,并且可以模拟漫反射材料中的粗糙度。 它最初是为了模拟月球的非朗伯行为而开发的。 它不包括镜面反射组件,因此需要搭配一个来模拟需要镜面反射项的材料。 参见图 11-14。

在这里插入图片描述
  这个 BRDF 是在 1994 年由 Michael Oren 和 Shree K. Nayar 发表的题为 Generalization of Lambert’s Reflectance Model 的论文中介绍的。

Ward

  这是一个很少使用的 BRDF。 它基于经验数据,用于拟合材料中各向异性反射的测量行为。 因此,它可以很好地模拟金属。 参见图 11-15。

在这里插入图片描述
  这个 BRDF 是在 1992 年 Gregory J. Ward 的论文测量和模拟各向异性反射中介绍的。

Disney

  由 Brent Burley 发明的 BRDF,用于迪士尼的 3D 渲染动画电影。 这是一个有趣的 BRDF 分析,因为它非常灵活,但对于艺术家来说非常容易使用。 您可以从 BRDF Explorer 的 GitHub 下载它的实现,因为它不包含在二进制版本中。

  查看参数,您可能会注意到命名更加直观。 它使用实际的描述性名称而不是不透明的首字母缩略词,甚至是单个字母。 您应该在查看 Polar 或 3D Plot 面板时尝试不同的设置,以密切关注此 BRDF 的波瓣形状的巨大变化(见图 11-16)。

在这里插入图片描述
  一个简单的实验是从 0 金属切换到 1 金属,这将单独使渲染的材质看起来像金属,而无需更改任何其他参数。 请注意更改设置时可以更改多少瓣形状。 那是因为它们在非常不同的瓣之间进行插值,而不是只有一种类型的瓣。

  这个 BRDF 是在迪斯尼的基于物理着色的演讲中介绍的,布伦特伯利在 SIGGRAPH 2012 的电影和游戏制作中基于物理的实用着色课程中介绍

  这是我们对 BRDF Explorer 和一些流行的 BRDF 的介绍。 这是一个非常方便的程序,我鼓励您继续探索它的功能。

总结

  本章介绍了 BRDF Explorer 程序,并展示了检查和分析 BRDF 的有用之处。 它还展示了许多著名的 BRDF 并解释了它们可以很好地模拟的材料。

  下一章将向您展示如何在 Unity Surface 着色器中实现本章中提到的其中一个 BRDF。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值