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。

unity shader development[11]相关推荐

  1. Unity Shader PostProcessing - 11 - Depth Fog/Height Fog - 雾效/深度雾效/高度雾/深度+高度雾

    文章目录 观察生活中的雾 Scenario 1 - Pure Depth Fog - 纯深度雾 提取有用信息 Scenario 2 - Height Fog - 带高度的雾 提取有用信息 Scenar ...

  2. Unity Shader - Post Processing 15 - Height Fog (Plus) - 后效 高度雾 改进版 (Parallax)、模拟闪电在云层中SSS

    文章目录 环境 问题 Parallax 原理 GGB 效果 模拟闪电在云层中SSS 测试脚本 效果 GIF Project References 环境 Unity : 2018.2.11f1, 201 ...

  3. 《Unity Shader入门精要》学习笔记第11章 让画面动起来

    本文章用于帮助自己学习,因此只记录一些个人认为比较重要或者还不够熟悉的内容. 原作者:http://blog.csdn.net/candycat1992/article/ 第十一章 让画面动起来 11 ...

  4. Unity shader学习之屏幕后期处理效果之高斯模糊

    高斯模糊,见 百度百科. 也使用卷积来实现,每个卷积元素的公式为: 其中б是标准方差,一般取值为1. x和y分别对应当前位置到卷积中心的整数距离. 由于需要对高斯核中的权重进行归一化,即使所有权重相加 ...

  5. vs unity shader插件_一些Shader资料

    [Unity Shader] 常用的数值类型和语义 unity shader编辑器语法高亮插件 Unity Shader-法线贴图(Normal)及其原理 Unity 提供的CG/HLSL语义 (se ...

  6. Unity Shader 序列帧动画

    shader中的序列帧动画属于纹理动画中的一种,主要原理是将给定的纹理进行等分,再根据时间的变化循环播放等分中的一部分. Unity Shader 内置时间变量 名称 类型 描述 _Time floa ...

  7. qnetworkreply 获取状态_谈谈Unity Shader中的采样器状态和(Texture Filtering)纹理滤波方式

    参考文章: 使用采样器状态 - Unity 手册​docs.unity3d.comhttps://blog.csdn.net/chenjinxian_3D/article/details/518169 ...

  8. Unity Shader 之 透明效果

    本文引用 Unity Shader入门精要 开启透明混合后,一个物体被渲染到屏幕上时,每个片元除了颜色值和深度值外,还有--透明度.透明度为1,则完全不透明,透明度为0,则完全不会显示. 在Unity ...

  9. 【Unity Shader】(六) ------ 复杂的光照(上)

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题.              [Unity Sha ...

  10. Unity Shader PostProcessing - 8 - Bloom 泛光

    文章目录 实现 提取亮度图 将提取的像素模糊 将模糊的像素与原图叠加 Project References 事情一大堆,要拿快递,又要寄快递,还要帮人板家具,还要去买菜,还要偶尔做饭,还要做包子,拖地 ...

最新文章

  1. 对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀
  2. java 反射 new区别_JAVA的newInstance()和new的区别(JAVA反射机制,通过类名来获取该类的实例化对象)...
  3. AVL树平衡旋转详解
  4. mysql 磁盘组_AIX使用LV创建ASM磁盘组
  5. 两节点的最小公共祖先LCA
  6. Coursera自动驾驶课程第15讲:GNSS and INS Sensing for Pose Estimation
  7. bzoj 1042 HAOI2008 硬币购物
  8. 华为麦芒9正式亮相:6400万三摄,2199元起
  9. iOS开发最新之CocoaPods环境配置教程
  10. linux iphone 存储空间,iOS 11 将会自动删除低使用率 App来释放 iPhone 存储空间
  11. OptiSystem 快捷键及使用技巧
  12. Mysql安装 | 跟着黑马程序员视频安装Mysql,少走随机密码错误的弯路【有手就行系列】
  13. VMware12 pro 安装win7时operating system not found
  14. cuba_认识CLI for CUBA平台
  15. Kubernetes 安全容器技术 kata gvisor
  16. linux登录界面配置有趣的图案 /etc/motd,附带图片转字符串网址
  17. java 有五个学生 每个学生有3门课_1、有五个学生,每个学生有3门课(语文、数学、英语)的成绩, 写一...
  18. MATLAB中assignment模块,Simulink Matlab Function 模块使用问题求教
  19. FANUC机器人通过PNS功能实现自动运行
  20. 实战项目一:地铁人流量预测

热门文章

  1. WSAStartup(0x0101, wsaData); (WSADATA wsaData;)
  2. 项目是通过文件流的方法查看文件 无法直接在线查看mht后缀文件的解决方案
  3. 基于PHP的学生学籍管理系统
  4. php调用API支付接口 可个人使用,无需营业执照(使用第三方接口,调用的天工接口。)(转自刘68)...
  5. PowerBI制作报表背景图
  6. Matlab实现sift特征检测和两幅图像的特征点匹配(D. Lowe)
  7. 铁路订票系统的简单设计(转自云风)
  8. html前端实现李峋爱心代码 百分百复刻
  9. java线程锁有哪几种_Java锁有哪些种类,以及区别
  10. 作为面试官,我是如何甄别应聘者的包装程度