本文核心知识主要参照《现代计算机图形学入门-闫令琪课程课件PPT》,后续光线追踪系列知识也源于此处。

一、BRDF方程

通过上一部分所有辐射度量学各种概念的定义之后,我们可以从这样一个角度理解光线的反射,如下图所示:

一个点(微分面积元)在接受到一定方向上的亮度 dE(wi) 之后,再向不同方向把能量辐射出去 dLr(wr)

从直观的理解来说,不同物体表面材质自然会把一定方向上的入射亮度( dE(wi) )反射到不同的方向的光线上( dLr(wr)),如理想光滑表面会把入射光线完全反射到镜面反射方向,其它方向则完全没有。如理想粗糙表面会把入射光线均匀的反射到所有方向。因此所谓 BRDF 就是描述这样一个从不同方向入射之后,反射光线分布情况的函数,定义如下:


上图中下方的式子即为BRDF,它接收两个参数,入射光方向[公式],反射光方向[公式],函数值为反射光的radiance与入射光的iiradiance的比值。(从某个方向接受到的光能有多少反射到另外一个方向)

借助BRDF,可以定义出反射方程如下:


即摄像机所接受到的 wr 方向上的反射光,是由所有不同方向上入射光线的irradiance贡献得到的(即图中式子的[公式]),而不同方向入射光线的irradiance对反射方向[公式]的贡献程度则由物体表面材质决定,所以乘上了一个BRDF函数。

到这里,通过辐射度量学,以及BRDF最终得到的反射方程正是一个完全正确的光线传播模型了,解决了在第一章提到的现有模型的所有缺点!(渲染方程只是在反射方程的基础之上加了一个自发光项,关于渲染方程会在下一章仔细去了解)。

在进入到渲染方程之前,再仔细观察一下反射方程:


不难发现正如上图中所说的,入射光线的radiance不仅仅是光源所引起的,还有可能是其他物体上着色点的反射光线的radiance,恰好反射到当前的着色点p(即间接光照),同时其他物体上的反射光线的radiance依然也是由直接光照和间接光照构成,因此这与whitted-style当中的光线追踪过程十分类似,也是一个递归的过程。所以说想要解这样一个方程还是比较难的。

接下来,我们会引入渲染方程,并对渲染方程做一些直观上的物理解释,对于反射方程或者说是渲染方程的具体求解,留在之后系列的光线追踪去实现。

二、渲染方程及其物理含义解释

正如在上一节中提到的,渲染方程知识在反射方程的基础之上添加了一个自发光项(Emission term),从而使得反射方程更加的general:

其中 Le(p,wo) 为自发光项,反射方程中的 cosQn*wi 代替。 (tips:所有光线方向均指向外)

接下来从一个点光源和单个物体的场景开始理解渲染方程:


(点光源对一个点来说自然只有一个方向有入射光,所以这里没有了积分)

多个点光源一个物体的情况:


将这些所有的点光源的贡献全部求和即可,那么如果点光源变成了面光源呢?如下图所示:


其实面光源就相当于无穷多个点光源的集合,只需要对 面光源所在的立体角范围进行积分,并且能够确定不同立体角方向的面光源的入射光radiance即可。

那么更进一步的,再在场景当中加入其它物体,使得物体之间发生光线交互之后是什么情况呢:


如上图所示,可以把其它物体同样考虑成面光源,对其所占立体角进行积分即可,只不过对其它物体的立体角积分不像是面光源所有入射方向都有radiance,物体的立体角可能只有个别几个方向有入射的radiance(即多次物体间光线反射之后恰好照射到着色点x),其它方向没有,但本质上都可以视作是面光源。

观察一下图中的渲染方程可以发现除了两个radiance,其它所有项都是知道的,可以将上式进一步写成如下图下方所示的式子:


其中各项与原渲染方程中一一对应,(这里其实是有数学严格推导的,不过我们只是为了接下来构建直观的物理解释,对于这些推导不必在意,默认成立即可),再接着,可以把该式子离散化写为线性代数的形式:


其中L其实就是想要求得的反射光,E是自发光其实就是光源的发光项,K可以理解为对光线进行反射的一种算子操作(因为它由BRDF化来的)。那么利用线性代数的知识很容易就可以推导出L的结果如下:

仔细观察这个式子,注意E是光源所发出的光,K为反射算子,这样一个式子的物理含义如下图所示:

E 为光源发出的光,KE 则代表对光源反射一次的结果,即直接光照,那么前两项之和就是光栅化当中着色所考虑的结果,对于全局光照来说,还考虑了 K2E,即一次弹射的间接照明, K3E 就是两次弹射的间接照明,依次类推,如果所有的间接光照都考虑进去也就是我们常说的全局光照。

这样来看整个结果是不是就很清晰了,就是光源发光加上直接光照与多次间接光照的结果!而这一切都是从渲染方程推导而来的,因此这也正是渲染方程的物理意义!

三、BxDF系列

BxDF一般而言是对BRDF、BTDF、BSDF、BSSRDF等几种双向分布函数的一个统一的表示。

其中,BSDF可以看做BRDF和BTDF更一般的形式,而且BSDF = BRDF + BTDF。

而BSSRDF和BRDF的不同之处在于,BSSRDF可以指定不同的光线入射位置和出射位置。

在上述这些BxDF中,BRDF最为简单,也最为常用。因为游戏和电影中的大多数物体都是不透明的,用BRDF就完全足够。而BSDF、BTDF、BSSRDF往往更多用于半透明材质和次表面散射材质。


图 BSDF:BRDF + BTDF

我们时常讨论的PBR中的BxDF,一般都为BRDF,对于进阶的一些材质的渲染,才会讨论BSDF等其他三种BxDF。

另外,BxDF即上文所示渲染方程以及反射方程中的 fr 项(图片中也已标出)。

总结

以上【PBR系列二】辐射度量学理论和本章渲染方程相关知识就是所有的关于PBR的一些相关基础知识了,我们从辐射度量学入手,掌握了正确衡量光线属性的方法,由此定义出了BRDF,来表示物体的材质,即它对于光线的反射能量分布,最后结合辐射度量学与BRDF得到渲染方程,一个个真正完全正确的光线传播模型,这也是后续系列光线追踪的理论基础!

下一节我们也会具体来看PBR效果的实现。

【PBR系列三】BRDF方程及渲染方程相关推荐

  1. 闫令琪:Games101 现代计算机图形学-光线追踪(三):渲染方程和路径追踪path ray tracing 作业Assignment07解析

    文章目录 0 whitted光线追踪的局限 1 辐射度量学 1.1 光线的表示 Radiance 1.2 物体表面上一个点的亮度 Irradiance 1.3 BRDF(Bidirectional R ...

  2. [计算机图形学]辐射度量学、渲染方程与全局光照(前瞻预习/复习回顾)

    一.前言 我们前面讲到的Blinn-Phong着色,Whitted-Style光线追踪都有一定问题,那就是它们并没有严格的按照物理规则定义各个变量.比如,Blinn-Phong中的光的强度,并没有一个 ...

  3. 计算机图形学GAMES101(十四)光线追踪(辐射度量学、渲染方程与全局光照)

    本节涉及内容: 辐射度量学(Basic radiometry) 光线的传播:反射方程以及渲染方程 全局光照 为什么要学辐射度量学? 之前使用的Whittled style光线追踪很多物理量都没有精确的 ...

  4. 计算机图形学笔记十三:Ray Tracing3(辐射度量学,渲染方程)

    辐射度量学,渲染方程 1.辐射度量学(Basic Radiometry) 1.1基本属性 1.2辐射强度(Radiant Intensity) 1.3辐射照度(Irradiance) 1.4辐射亮度( ...

  5. 18、计算机图形学——BRDF与渲染方程

    一.BRDF(Bidirectional Reflectance Distribution Function)双向反射分布函数 基于https://blog.csdn.net/Master_Cui/a ...

  6. GAMES101课程学习笔记—Lec 14(2)~16:Ray Tracing(2) BRDF、渲染方程、全局光照、路径追踪

    GAMES101课程学习笔记-Lec 14(2)~16:Ray Tracing(2) BRDF.渲染方程.全局光照.路径追踪 0 引入--辐射度量学概述 1 相关概念 1.1 Radiant Ener ...

  7. 计算机图形学十四:基于物理渲染的基础知识(辐射度量学,BRDF和渲染方程)

    基于物理渲染的基础知识 摘要 1 为什么需要辐射度量学? 2 辐射度量学 2.1 辐射能量(Radiant energy)和辐射通量(Radiant flux) 2.2 辐射强度(Radiant in ...

  8. 全局照明算法基础——从辐射亮度到渲染方程

    全局照明(Global Illumination)问题上已经有很多著名的算法,如路径追踪(Path Tracing),辐照度(Radiosity)等.绝大部分书籍/教材都直接介绍了做法,在理论方面有所 ...

  9. GAMES101-现代计算机图形学入门-闫令琪 - lecture15 光线追踪3 - 辐射度量学、渲染方程(Ray Tracing 3) - 课后笔记

    光线追踪3 - 辐射度量学.渲染方程和全局光照 内容: 辐射度量学 光线传输(Light transport) 反射方程(The reflection equation) 渲染方程(The rende ...

最新文章

  1. Nginx学习4:负载均衡实例
  2. python中模块的__all__属性解读
  3. 一张脑图说清 Nginx 的主流程
  4. Android LayoutInflater详解
  5. 数据结构实验之链表九:双向链表
  6. mysql引擎机制_关于MySQL中的InnoDB引擎的MVCC机制的理解
  7. 由DWR1.0到DWR2.0常出现的问题
  8. 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作
  9. 计算机实物知识需求市场调研,能力本位计算机维护论文
  10. ubuntu18.04安装python3_在 Ubuntu 18.04 上安装 Python 3.7
  11. 带你认识4种设计模式:代理模式、装饰模式、外观模式和享元模式
  12. graphpad7.04多组比较p值_R语言缺失值处理(MICE/Amelia/missForest/Hmisc/mi)
  13. SD从零开始29-30
  14. 日常小tip_Bat命令运行Java程序
  15. 一次旅行:汕尾-汕头-梅州
  16. 巧妙利用工厂方法+反射+配置类解决多个同一方法不同实现
  17. Android 高通Camx架构学习 - 第1章
  18. JavaScript 是怎么运行起来的?
  19. C#输出字符串组合排列
  20. 苹果怎么换行打字_通过这 684 关小游戏,你的打字速度可以赢过专业录入员

热门文章

  1. CodeForces - 1008D - Pave the Parallelepiped (容斥原理+重复组合公式+状态压缩+思维)
  2. 四旋翼定高篇之惯导加速度+速度+位置三阶互补融合方案
  3. 若有以下定义和语句:double r=99, *p=r;*p=r; 则以下正确的叙述是 A) 以下两处的*p含义相同,都说明给指针变量p赋值 B) 在“double r=99, *p=r;“中,
  4. MySql计算两个日期的时间差函数
  5. GCN:图卷积神经网络
  6. Webpack配置全解析(基础篇)
  7. Android获取一周每一天的日期
  8. 零售数字化必经哪四个阶段?
  9. MSB30M-ASEMI贴片整流桥MSB30M
  10. 场效应管调光电路图_一种LED驱动场效应管调光控制电路的制作方法