Physically Based Render

PBR的概念

PBR一开始是离线渲染的技术,主要用来制作电影。通过基于物理规则的光与物质交互的规律,来计算光照。这样可以得到和照片一样写实的渲染效果。
一束光线,根据光线击中物体的角度不同,物体接受到的光照,和它反射出的光照,两者的比例关系我们称之为BSDF (bidirectional scattering distribution function),或者光照模型。一个BSDF是光线被反射或吸收概率的描述,一种BSDF就是我们认知中一种材料的概念。

传统的光照模型有Lambert模型、Phong模型、Blinn-Phong模型。基于物理渲染指的是基于真实世界中光照的物理特性而建立的一种光照算法。在过往的游戏模型制作过程中, 美术人员可能将材质受到光照后的效果同时烘焙在贴图上。通过传统的光照模型计算出来的材质效果,在预设光照环境下,是可以达到很好的效果的,但当材质转换到不同的光照环境,例如极光或极暗的场景中时,就很容易出现不真实甚至很奇怪的材质效果,进而影响场景的真实表现。
基于物理的意思是光照计算满足物理规律,能量守恒,材质贴图参数在真实世界都有参考值,光照和材质是分开的。
其中光照和材质是分开的,物体在画布上的颜色不是物体的颜色,而是物体的颜色和光照的综合作用。在不同的光照下物体将呈现不同的颜色。传统的创作经常会将光照信息画到贴图上,但是PBR需要将这些分开,贴图只描述物体的物理属性,最终颜色将有引擎根据光照渲染得出。
我们身边的各种物体都有不根据光照而变化的固有色,这些固有色的部分在接收到光线时,会吸收某个频率的光线,反弹其他频率的光线,一束红光照在纯绿色的物体上,我们看到的是纯黑色;一束包含所有可见频率的白光,照在只吸收蓝色光的物体上,红色和绿色光会被反弹到我们的眼睛里,之后我们的大脑会将它解读为黄色。

PBR的基础理论

光与物质的交互(微平面理论)
从物理上讲,人眼能够看到图像,是由于光线打到物质表面反射到人眼的缘故,所以首先要讨论光线与物质表面的交互过程。反射遵循入射角=反射角的规律,如图所示。

按照反射规律,理论上只有当视线与反射光方向相同时,我们才能看到物体。但这显然与我们的生活经验不符,现实中大多数物体我们都可以从各个方向看到,这是因为生活中绝大多数物体的表面都不是绝对平坦的,因此其反射方向就会散向四面八方,如图所示。

这种将物质表面视为由无数微小的面片组成的模型,称为微面元模型(microfacet model)。微面元模型是PBR中用来描述物质表面的主要模型。
除了表面凹凸不平以外,还有一种因素会导致反射光线面向四面八方。光在打到物质表面的时候,直接反射的光线只占一部分,另一部分光线会进入物质内部,经过多次折射反射后穿出表面,如下图所示。

我们将这种四面八方的反射称为漫反射(diffuse reflection),而将具有明显方向性的反射称为镜面反射(specular reflection)。由于直接从表面反射的光线常常带有一定的方向性(除非表面极其粗糙),因此,我们所谈到的漫反射特指经过多次折射反射后从物质内部射出的光线,而镜面反射特指直接从物质表面反射的光线。
在微观尺度下,没有任何平面是完全光滑的。然而由于这些微平面已经微小到无法逐像素的继续对其进行区分,因此我们只有假设一个粗糙度(Roughness)参数,然后用统计学的方法来概略的估算微平面的粗糙程度。我们可以基于一个平面的粗糙度来计算出某个向量的方向与微平面平均取向方向一致的概率。这个向量便是位于光线向量l和视线向量v之间的中间向量(Halfway Vector)。

微平面的取向方向与中间向量的方向越是一致,镜面反射的效果就越是强烈越是锐利。然后再加上一个介于0到1之间的粗糙度参数,这样我们就能概略的估算微平面的取向情况了,我们可以看到,较高的粗糙度值显示出来的镜面反射的轮廓要更大一些。与之相反地,较小的粗糙值显示出的镜面反射轮廓则更小更锐利。

能量守恒
反射光线的能量永远不能超过入射光线的能量,发光面除外。随着粗糙度的上升镜面反射区域的面积会增加,作为平衡,镜面反射区域的平均亮度则会下降。反射光与折射光它们二者之间是互斥的关系,无论何种光线,其被材质表面所反射的能量将无法再被材质吸收。
当光线接触到一个表面的时候折射光是不会立即就被吸收的。通过物理学我们可以得知,光线实际上可以被认为是一束没有耗尽就不停向前运动的能量,而光束是通过碰撞的方式来消耗能量。每一种材料都是由无数微小的粒子所组成,这些粒子都能与光线发生碰撞。这些粒子在每次的碰撞中都可以吸收光线所携带的一部分或者是全部的能量而后转变成为热量。
一般来说,并非所有能量都会被全部吸收,而光线也会继续沿着(基本上)随机的方向发散,然后再和其他的粒子碰撞直至能量完全耗尽或者再次离开这个表面。而光线脱离物体表面后将会协同构成该表面的(漫反射)颜色。不过我们常用的反射方程(The Reflectance Equation)中我们进行了简化,假设对平面上的每一点所有的折射光都会被完全吸收而不会散开。而有一些被称为次表面散射(Subsurface Scattering)技术的着色器技术将这个问题考虑了进去,它们显著的提升了一些诸如皮肤,大理石或者蜡质这样材质的视觉效果,不过伴随而来的则是性能下降代价。
金属与非金属
光与金属和非金属的交互过程是非常不一样的,有必要区别对待。对于非金属,光线的反射遵循我们上面描述的特点,存在从表面直接反射的分量和经过多次折射反射后从物质内部射出的分量。如果不考虑下文将要提到的菲涅尔效应,即如果入射光笔直地以平行于法线的方向照射到非金属表面的话,那么光线直接从非金属表面反射的量事实上极少(大约仅占4%左右),绝大多数出射光线是被物质吸收,折射反射后射出的。即,非金属主要以漫反射为主。

金属的表现则完全不同。金属是由金属阳离子和自由电子组成的,进入金属内部的光子会被自由电子完全吸收,无法再反射出来。因此金属只有镜面反射,没有漫反射。此外,直接从金属表面反射的光线比率也比非金属要大得多,远大于4%。

菲涅尔反射
日常生活中我们时常能够在非金属上观察到强烈的镜面反射现象,比如大理石和水面等,事实上这和反射中的菲涅尔效应有关。
当我们站在海边的时候,越远的海面越不容易看清水下的物体,而海平线处的海面几乎完全是镜面反射光,完全看不到水下了。而如果我们笔直地朝下看水面的话,那么水下物体将看得非常清楚,几乎看不到镜面反射光。法国物理学家菲涅尔最先系统性地研究了这一现象,并给出了一组描述反射率和折射率的方程,称为菲涅尔方程。完整的菲涅尔方程较为复杂,图形学里也较少使用,我们将会给出图形学较为常用的简化公式,只需记住,光线入射角越大,镜面反射的比例越大。

辐射理论
光是一种电磁波,具备辐射能量。假设物体表面积为A,设光源在时间t内辐射到该表面的总能量为Q,那么该物体单位时间内受到的辐射功率称为通量(flux),记为ϕ,单位为瓦特。显然我们有:
ϕ=dQ/dt
单位表面积的物体所受的辐射功率称为照度(irradiance),单位为瓦特每平方米,记为E。显然又有:
E=dϕ/dA
照度代表了被照射的点所受到的光照。如果把相机想像成一张曝光底片的话,那么底片上每点的照度值正是图形渲染所需要计算的。然而,渲染中并不是将相机作为一张曝光底片来对待的。渲染中每个像素实际上代表的是不同方向照射到相机上的光照。因此,我们还需要寻找能够代表”某一方向上的光照”的物理量。为此首先需要給“方向”寻找良好的物理定义,我们引入立体角(solid angle)的概念。
立体角是平面上的角度在三维上的延申。它可以想象为圆锥的顶角张开的角度。类似于二维角度的弧度定义法,圆锥顶角的立体角大小定义为圆锥切割圆心在顶角的球面所得的表面积与该球半径平方的比值,立体角的单位为球面度(sr)。球的立体角为4π,半球为2π,如图:

设光源入射到物体表面所张开的立体角大小为ω,那么单位立体角内的辐射功率称为辐射强度(radiant intensity),记为I,单位为瓦特每球面度,显然:
I=dϕ/dω
单位面积单位立体角所受到的辐射功率称为辐射率(radiance),记为L,单位为瓦特每平方米每立体角,有:

Aproj为物体在光线方向上的投影面积。假设光线从光源出发,以立体角ω打到表面A上,辐射功率为ϕ。设入射光方向与表面法线的夹角为θ,如图所示:

那么我们显然有dAproj=dAcosθ,辐射率才是相机和人眼所真正测量的物理量,也是渲染所要计算的真正目标。
渲染方程
以上述辐射理论为基础,1986年,Jim Kajiya和David Immel et al同时提出了著名的渲染方程,成为了渲染领域的核心。可以说,无论是实时渲染还是离线渲染,其本质就是求解这个方程。
完整的渲染方程的形式如下:

渲染方程描述的概念很简单,即出射光等于自发光再加上各方向上的入射光乘以反射率。由于这个方程左右两边都有未知项(Li和Lo),因而其求解非常困难。离线渲染中的蒙特卡洛路径追踪法(Monte Carlo Path Tracing)实际上就是以蒙特卡洛方法对该积分方程进行近似求解。在实时渲染中,通常不考虑波长λ和时间t的影响。此时,渲染方程简化为:

迪士尼与PBR

迪士尼是PBR革命的重要推动者。在创作电影《无敌破坏王(Wreck-It Ralph)》期间,迪士尼动画工作室对基于物理的渲染进行了系统的研究,最终开发出了一种几乎可以用于电影的每个表面新的BRDF模型(头发除外),即迪士尼原则的BRDF(Disney Principled BRDF, Bidirectional Reflectance Distribution Function,双向反射分布函数)。随后,迪士尼动画工作室的Brent Burley于SIGGRAPH 2012上进行了著名的talk《Physically-based shading at Disney》,正式提出了迪士尼原则的BRDF(Disney Principled BRDF),由于其高度的通用性,将材质复杂的物理属性,用非常直观的少量变量表达了出来(如金属度metallic和粗糙度roughness),在电影业界和游戏业界引起了不小的轰动。从此,基于物理的渲染正式进入大众的视野。
Disney Principled BRDF的理念
在2012年迪士尼原则的BRDF被提出之前,基于物理的渲染都需要大量复杂而不直观的参数,此时PBR的优势,并没有那么明显。在2012年迪士尼提出,他们的着色模型是艺术导向(Art Directable)的,而不一定要是完全物理正确(physically correct) 的,并且对微平面BRDF的各项都进行了严谨的调查,并提出了清晰明确而简单的解决方案。
迪士尼的理念是开发一种“原则性”的易用模型,而不是严格的物理模型。正因为这种艺术导向的易用性,能让美术人员用非常直观的少量参数,以及非常标准化的工作流,就能快速实现涉及大量不同材质的真实感的渲染工作。而这对于传统的着色模型来说,是不可能完成的任务。
迪士尼原则的BRDF(Disney Principled BRDF)核心理念如下:

  1. 应使用直观的参数,而不是物理类的晦涩参数;
  2. 参数应尽可能少;
  3. 参数在其合理范围内应该为0到1;
  4. 允许参数在有意义时超出正常的合理范围;
  5. 所有参数组合应尽可能健壮和合理。
    而从本质上而言,Disney Principled BRDF模型是金属和非金属的混合型模型,最终结果是基于金属度(metallic)在金属BRDF和非金属BRDF之间进行线性插值。

正因为这套新的渲染理念统一了金属和非金属的材质表述,可以仅通过少量的参数来涵盖自然界中绝大多数的材质,并可以得到非常逼真的渲染品质。也正因如此,在PBR的金属/粗糙度工作流中,固有色(baseColor)贴图才会同时包含金属和非金属的材质数据:金属的反射率值、非金属的漫反射颜色。
Disney Principled BRDF的参数
以上述理念为基础,迪士尼动画工作室对每个参数的添加进行了把关,最终得到了一个颜色参数baseColor(固有色):表面颜色,通常由纹理贴图提供,以及下面描述的十个标量参数:

  1. subsurface(次表面):使用次表面近似控制漫反射形状。
  2. metallic(金属度):金属(0 = 电介质,1 =金属)。这是两种不同模型之间的线性混合。金属模型没有漫反射成分,并且还具有等于基础色的着色入射镜面反射。
  3. specular(镜面反射强度):入射镜面反射量。用于取代折射率。
  4. specularTint(镜面反射颜色):对美术控制的让步,用于对基础色(basecolor)的入射镜面反射进行颜色控制。掠射镜面反射仍然是非彩色的。
  5. roughness(粗糙度):表面粗糙度,控制漫反射和镜面反射。
  6. anisotropic(各向异性强度):各向异性程度。用于控制镜面反射高光的纵横比。(0 =各向同性,1 =最大各向异性。)
  7. sheen(光泽度):一种额外的掠射分量(grazing component),主要用于布料。
  8. sheenTint(光泽颜色):对sheen(光泽度)的颜色控制。
  9. clearcoat(清漆强度):有特殊用途的第二个镜面波瓣(specular lobe)。
  10. clearcoatGloss(清漆光泽度):控制透明涂层光泽度,0 = “缎面(satin)”外观,1 = “光泽(gloss)”外观。

迪士尼原则的分层材质(Disney Principled Layers Material)
迪士尼原则的分层材质(Disney Principled Layers Material)的核心设计原则是,所有参数需允许健壮地插值,以基于纹理Mask在不同材质之间进行线性混合,实现复杂的材质外观。这样的好处是使所有参数是归一化的并且至少是感知线性的,材质通常以非常直观的方式插值。如下图,所有10个参数都是线性插值的。

迪士尼BSDF(Disney BSDF)
双向散射分布函数(Bidirectional Scattering Distribution Function,BSDF),前文提到,Disney BRDF模型本质上是金属和非金属的混合型模型,对于Disney BSDF,Disney仍然延续了之前的设计理念,采用了混合的方式并结合已有的Disney BRDF模型进行实现。如下图,Disney新增了⼀个参数specTrans(镜面反射透明度)来控制BRDF 和BSDF的混合。基于specTrans完成混合后,再使用和Disney BRDF类似的方式,基于metallic再进行一次混合。
即Disney BRDF模型的本质是金属BRDF、非金属BRDF、与Specular BSDF三者的混合型模型。

参数方面,Disney BSDF按普通表面和薄表面各有不同:
对于普通表面,Disney BSDF在Disney BRDF的基础上新增specTrans(镜面反射透明度)和scatterDistance(散射距离)两个参数,共12个。
对于薄表面(Thin-surface),Disney BSDF在Disney BRDF的基础上新增specTrans(镜面反射透明度)、scatterDistance(散射距离)和flatness(平坦度)三个参数,共13个。

主要参考文章原文链接:
PBR理论体系整理(一):基础理论
https://blog.csdn.net/SZ_Silence06/article/details/96647951
从零开始理解PBR( Physically Based Rendering)
https://blog.csdn.net/xyxsuoer/article/details/103049091
【基于物理的渲染(PBR)白皮书】(三)迪士尼原则的BRDF与BSDF相关总结
https://zhuanlan.zhihu.com/p/60977923
由浅入深学习PBR的原理和实现
https://www.cnblogs.com/timlly/p/10631718.html?from=timeline&isappinstalled=0

Physically Based Render初学者PBR整理相关推荐

  1. Learn OpenGL 笔记7.1 PBR Theory(physically based rendering基于物理的渲染 理论)

    PBR,或更通常称为基于物理的渲染,是一组渲染技术,它们或多或少基于与物理世界更接近的相同基础理论.由于基于物理的渲染旨在以物理上合理的方式模拟光线,因此与我们的原始光照算法(如 Phong 和 Bl ...

  2. PBR (Physically Based Rendering)概念篇

    一.PBR是什么? Physically Based Rendering:基于物理的渲染 PBR:是一套框架,通过PBR保证整体的色调以及画面的统一 什么是基于物理渲染? 对现实世界中的一种近似,而不 ...

  3. SIGGRAPH Course: Physically Based Shading in Theory and Practice(PBR渲染技术相关一些课程资源和文章)

    原文:https://blog.selfshadow.com/publications/s2015-shading-course/#course_content 相关资源请见以下列表 [2015] P ...

  4. opengl-PBR基于物理的渲染(Physically Based Rendering):理论基础

    PBR文档链接 PBR-learnOpengl官方文档 理论基础 PBR概念 PBR基于物理的渲染(Physically Based Rendering),它指的是一些在不同程度上都基于与现实世界的物 ...

  5. Physically Based Rendering——史上最容易理解的BRDF中D函数NDF的中文资料

    粗糙度决定了D函数的分布,一般粗糙度是D函数的方差 本文假定读者已经对PBR即Physcially Based Rendering 基于物理的渲染有了初步的了解,对于PBR的入门有很多文章都介绍的不错 ...

  6. 【翻译】Feeding a physically based shading model

    Feeding a physically based shading model 怎么满足基于物理的渲染(PBR)模型 Sebastien Lagarde August 17, 2011 译者注:本文 ...

  7. 什么是Physically Based Rendring基于物理的渲染?

    什么是Physically Based Rendring基于物理的渲染? PBR不是一种技术,而是一种渲染方式 PBR的优点 什么是Physically Based Shader? 材质的光学特性 微 ...

  8. Adopting a physically based shading model

    原文:https://seblagarde.wordpress.com/2011/08/17/hello-world/ With permission of my company : Dontnod ...

  9. AMD Cubemapgen for physically based rendering

    JUNE 10, 2012 57 COMMENTS Version : 1.67 – Living blog – First version was 4 September 2011 AMD Cube ...

最新文章

  1. 【从零开始的ROS四轴机械臂控制】(七)- ROS与arduino连接
  2. centos防火墙端口配置
  3. 使用OpenCV进行图像编辑--绘画和素描
  4. plsql 设置鼠标行执行_Excel中执行“宏”的方法有哪些?我列举了这5个,你会几个...
  5. 深度学习入门指北——从硬件到软件
  6. birt脚本for循环语句_如何使用 for 循环语句嵌套方法!
  7. 2006年9月全国计算机等级考试三级数据库技术笔试试卷(含有答案)
  8. java api es_ES 常用java api
  9. 控件Repeater的嵌套使用
  10. 不常用,但热门的IOS第三方库(转)
  11. 计算机网络设备维修会计分录,设备维修记录什么会计科目
  12. Unity中Transform和rotation相关小知识点
  13. oracle中间人投毒漏洞,‘TNS Listener’远程数据投毒漏洞
  14. PMP笔记:Line Manager与Functional Manager
  15. 1041:奇偶数判断
  16. 一、Jmeter总结
  17. GMS(Google Mobile Services)简介
  18. Ubuntu 22 04 LTS gcc 安装失败
  19. 关于Google账号被封、被下架、提审被拒等原因分析及建议
  20. GROUP Function

热门文章

  1. An End-to-End Steel Surface Defect Detection Approach via Fusing Multiple Hierarchical Features
  2. 真的!!!两行css代码实现瀑布流,html,css最简单的瀑布流实现方式且没有缺点!...
  3. cardboard下载_如何在Android上设置Google Cardboard
  4. 工业镜头基础知识整理
  5. 基于Redis解决业务场景中延迟队列的应用实践
  6. linux 压缩固定大小,tar gz压缩文件为指定大小
  7. vite 设置启动Network 为本地ip
  8. java责任链模式审批请假_14-学生生病请假:责任链模式
  9. MySQL深入学习——第六章 查询优化批量导入操作学习笔记
  10. 阿里身份实名认证实例