基于物理的渲染(PBR)白皮书 | 迪士尼原则的BRDF与BSDF相关总结

2024-03-23 21:48

本文主要是介绍基于物理的渲染(PBR)白皮书 | 迪士尼原则的BRDF与BSDF相关总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

640?wx_fmt=gif




基于物理的渲染(Physically Based Rendering , PBR)技术,自迪士尼在SIGGRAPH 2012上提出了著名的“迪士尼原则的BRDF(Disney Principled BRDF)”之后,由于其高度的易用性以及方便的工作流,已经被电影和游戏业界广泛使用,并成为了次时代高品质渲染技术的代名词。本文的主要内容,便是对推动了这次基于物理的渲染革命的“迪士尼原则的BRDF(Disney Principled BRDF)”,以及随后2015年提出的“迪士尼BSDF(Disney BSDF)”进行深入的探讨、总结与提炼。


全文主要内容脉络如下:

  • 迪士尼与基于物理的渲染的发展

  • 迪士尼采用的BRDF可视化方案与工具

  • 迪士尼对测量材质数据库的观察结论

    • Diffuse项的观察结论

    • Specular D 项的观察结论

    • Specular F 项的观察结论

    • Specular G 项的观察结论

    • 布料(Fabric)材质的观察结论

    • 彩虹色(Iridescence)的观察结论

  • 迪士尼原则的BRDF(Disney Principled BRDF)

    • 核心BRDF模型

    • 漫反射项(Diffuse):Disney Diffuse

    • 法线分布项(Specular D):GTR

    • 菲涅尔项(Specular F):Schlick Fresnel

    • 几何项(Specular G):Smith-GGX

    • Disney Principled BRDF的理念

    • Disney Principled BRDF的参数

    • Disney Principled BRDF的着色模型

  • 迪士尼原则的分层材质(Disney Principled Layers Material)

  • Disney Principled BRDF的实现代码

  • 迪士尼BSDF(Disney BSDF)

在文章开头,依然是首先放出总结了本文核心内容脉络的两张思维导图(因图片上传后会压缩变模糊影响阅读,公众号后台回复“PBR”即可获得高清图片。)

640?wx_fmt=png

640?wx_fmt=png


OK,让我们直接开始正文。

一、迪士尼与基于物理的渲染的发展

正如这个系列前文已经提到的,基于物理的渲染其实早在20世纪就已经在图形学业界有了一些萌芽,2010年在SIGGRAPH上就已经有公开讨论的Course《SIGGRAPH 2010 Course: Physically-Based Shading Models in Film and Game Production》,而直到2012~2013年,才正式进入大众的视野,渐渐被电影和游戏业界广泛使用。


究其原因,一方面是因为硬件性能的限制,另一方面,则是因为早期的基于物理的渲染模型包含大量复杂而晦涩的物理参数,不利于美术人员的理解、使用和快速产出。


迪士尼则是这次PBR革命的重要推动者。在创作电影《无敌破坏王(Wreck-It Ralph)》期间,迪士尼动画工作室对基于物理的渲染进行了系统的研究,最终开发出了一种几乎可以用于电影的每个表面新的BRDF模型(头发除外),即迪士尼原则的BRDF(Disney Principled BRDF)。

640

图 迪士尼动画电影《无敌破坏王》(2012)


随后,迪士尼动画工作室的Brent Burley于SIGGRAPH 2012上进行了著名的talk《Physically-based shading at Disney》,正式提出了迪士尼原则的BRDF(Disney Principled BRDF),由于其高度的通用性,将材质复杂的物理属性,用非常直观的少量变量表达了出来(如金属度metallic和粗糙度roughness),在电影业界和游戏业界引起了不小的轰动。从此,基于物理的渲染正式进入大众的视野。

640

图 SIGGRAPH 2012《Physically-based shading at Disney》


在2012年受到Disney Principled BRDF的启发后,主流游戏引擎都开始从传统的渲染工作流转移到基于物理的渲染工作流。


以下是主流游戏引擎转移到基于物理的渲染的时间节点:

  • 【SIGGRAPH 2013】 UE4 :《Real Shading in Unreal Engine 4》

  • 【SIGGRAPH 2014】 Frostbite(寒霜): 《Moving Frostbite to PBR》

  • 【GDC 2014】 Unity:《Physically Based Shading in Unity》


下面,让我们正式开始分析、提炼和总结SIGGRAPH 2012上迪士尼进行的talk《Physically-based shading at Disney》,深入了解其能让基于物理的渲染技术普及于游戏和电影工业的背后原因。


二、迪士尼采用的BRDF可视化方案与工具

在BRDF可视化方面,迪士尼在分享中提出了三个方面的工具与资源,可以总结如下:

  • MERL 100 BRDF材质库。Matusik等人[Matusik et al.2003]捕获的一组100个各向同性BRDF材质样本库。涵盖了各种材质,包括油漆,木材,金属,织物,石材,橡胶,塑料和其他合成材质。对学术与研究免费授权。

    • MERL BRDF主站 

    • Database地址

  • BRDF Explorer。迪士尼为分析、比较和新开发BRDF模型而开发的可视化工具。该工具在分析测量材质,比较现有模型,以及开发新模型方面具有无可估量的价值。

    • 官方主页

    • GitHub地址

  • BRDF Image Slice切片。将θh与θd作为横轴和纵轴,对观察到的材质的BRDF进行建模的2D图像切片。

640

图 “MERL 100”BRDF数据库


640

图 BRDF Explorer


640

图:红色塑料(red-plastic)和镜面红色塑料(specular-red-plastic)的BRDF图像切片以及“切片空间(Slice Space)”示意图。


640

图 MERL 100 BRDF数据库的图像切片(Image Slice)


三、迪士尼对MERL材质数据库的观察结论

在提出Disney Principled BRDF之前,Disney已经做了大量的前置工作,其中,最主要的工作便是对材质数据库的观察与进行理论分析。按照不同项的分类,可以总结为如下6个部分:

  • Diffuse项的观察结论

  • Specular D 项的观察结论

  • Specular F 项的观察结论

  • Specular G 项的观察结论

  • 布料(Fabric)材质的观察结论

  • 彩虹色(Iridescence)的观察结论


下文将对其分别进行相关总结。


3.1 Diffuse项的观察结论

  • 漫反射(Diffuse)表示折射(refracted)到表面,经过散射(scattered)和部分吸收(partially absorbed),最终重新出表面出射的光。

  • 被着色的非金属材质的任意出射部分都可以视为漫反射。

  • 通过观察得出,很少有材质的漫反射表现和Lambert反射模型相吻合。即需要更准确的漫反射模型。

  • 通过观察得出掠射逆反射(grazing retroreflection)有明显的着色现象,即可以将掠射逆反射(grazing retroreflection)也看做一种漫反射现象。

  • 粗糙度会对菲涅尔折射造成影响,而一般的漫反射模型如Lmabert忽略了这种影响。

640

图 表现出漫反射颜色变化的材质。 上:渲染球体上的点光源响应; 下:BRDF图像切片。


640

图 红色塑料,镜面红色塑料和Lambert漫反射的点光源响应


  • Oren-Nayar模型(1995)预测粗糙漫反射表面逆向反射的增加会使漫反射形状变平。然而,其逆向反射波峰不像测量数据那样强,并且粗糙测量的材质通常不显示漫反射的平坦化。

  • Hanrahan-Krueger模型(1993),源自次表面散射理论,也预测了漫反射形状的平坦化,但在边缘处没有足够强的峰值。与Oren-Nayar相比,该模型呈现出完美光滑的表面。下图中比较了Oren-Nayar、Hanrahan-Krueger和Lambert模型。

640

图 Lambert,Oren-Nayar和Hanrahan-Krueger漫反射模型的BRDF切片和点光源响应。


3.2 Specular D 项的观察结论

  • 微观分布函数D(θh)可以从测量材质的逆反射(retroreflective)响应观察得到。

  • 绝大多数MERL材质都有镜面波瓣(specular lobes),且尾部比传统的镜面模型长得多。 即反射分布项需要更宽的尾部。

  • GGX比其他分布具有更长的尾部,但仍然无法捕捉到铬金属(chrome)样本的闪亮亮点。

640

图 MERL 铬金属(chrome)与几个镜面分布的比较。 左:镜面波峰的对数比例图); 黑色曲线表示MERL 铬金属(chrome),红色曲线表示 GGX分布(α= 0.006),绿色曲线表示Beckmann分布(m = 0.013),蓝色曲线表示 Blinn Phong(n = 12000),其中,绿色曲线和蓝色曲线基本重合。 右: chrome 、GGX和Beckmann分布的点光源响应。


3.3 Specular F 项的观察结论

  • 菲涅尔反射系数F(θd)表示了当光和视图矢量分开时镜面反射的增加。

  • 光滑表面在切线入射时有将接近100%的镜面反射。

  • 对于粗糙表面,无法实现100%的镜面反射,但反射率仍会将变得越来越高。

  • 每种材质在掠射角附近都显示出一些反射率的增加。

  • 掠射角入射附近的许多曲线的陡度已经大于菲涅尔效应的预测值。


3.4 Specular G 项的观察结论

  • 几何项的影响可以间接地看作其对方向反射率(directional albedo)的影响

  • 大多数材质的方向反射率(directional albedo)对于前70度是相对平坦的,并且切线入射处的反射率与表面粗糙度密切相关。

  • 几何项的选择会对反射率产生影响,反过来又会对表面外观产生影响。

  • 完全省略G项和1/cosθl cosθv项的模型,被称为“No G”模型,会导致在掠射角处过暗的响应。

这篇关于基于物理的渲染(PBR)白皮书 | 迪士尼原则的BRDF与BSDF相关总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/839604

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10