15 Games101 - 笔记 - 光线追踪(辐射度量学、BRDF与渲染方程)

15 光线追踪(辐射度量学、BRDF与渲染方程)

基于物理渲染的基础知识

摘要

本篇文章将会从基于物理渲染(PBR)的动机开始讲起,逐步介绍PBR相关的基础知识,如辐射度量学(怎么用物理量精确的描述光线),以及通过辐射度量学从而定义出来的BRDF(Bidirectional Reflectance Distribution Function),最后会给出渲染方程,以及它直观的物理解释,帮助理解。

1 为什么需要辐射度量学?

首先,想一想到目前为止我们对光线亮度的定义是什么?只是简单的用3维(R,G,B)向量来描述,但却没有任何的单位,如果想要一个完全正确的模型,这显然是不应该的,必须用合适的物理量来描述光线!

其次,考虑在前两篇文章中提到的whited-style光线追踪模型,它真的是一个正确的模型吗?显然不是,原因如下:

1 whited-style光线追踪并没有对漫反射的光线进行追踪,而是直接返回当前着色点颜色

2 在计算光源直接照射的贡献时,使用了Blinn-Phong模型,而Blinn-Phong模型本身就是一个不准确的经验模型,使用的这种模型的whited-style光线追踪自身自然也是不正确的

而就以上的各种缺点而言,所有的问题都能在辐射度量学之中得到完美解决!

2 辐射度量学

辐射度量学其实是对光照的一套测量系统和单位,它能够准确的描述光线的物理性质。

具体来说,我们需要明白的是其中的几个关于光线的概念,分别为: 辐射能量(Radiant energy),辐射通量(Radiant flux),辐射强度(Radiant intensity),irradiance,radiance,(对后两种概念没有合适的中文,所以就直接用英文了),接下来就对这些概念进行具体解释。

2.1 辐射能量(Radiant energy)和辐射通量(Radiant flux)

首先看一看Radiant energy的定义:

image-20240328105314637

所谓辐射能量其实非常直观,就是辐射出来的电磁能量,单位为焦耳。可以用物理当中的做功的大小来进行类比。

接下来是Radiant flux(power):

img

所谓辐射通量或者说辐射功率,其实就是在辐射能量的基础之上除以时间,也就是单位时间的能量。同样也可以用物理当中的功率来进行类比。

(tips: 具体来说一般偏向用radiant flux来衡量光线的亮度,因为我们更关心的是单位时间的效果,事实上也是这么做的,想想在说白炽灯泡的时候也是说60W亮度,80W亮度)

2.2 辐射强度(Radiant intensity)

在进行具体的数学定义之前,先借助如下一张图建立对剩下3个概念的一些直观的理解:

img

1 Radiant itensity其实就是指从一个光源出发某一方向上的亮度

2 Irradiance指某一微小平面所接受到的光线亮度

3 radiance衡量的是一条传播光线所具有的亮度(不受传播方向影响而改变)

(这里的亮度也可以理解为radiant flux(power)。)

好了,接下来首先看Radiant intensity的数学定义:

img

Radiant intensity一句话来说就是从光源发出的每单位立体角上的功率,关于辐射功率的定义在上文已经解释,这里唯一还不知道的就是立体角(solid angle)了。

solid angle其实就是对应二维空间中圆的弧度在三维空间中球上的拓展。 首先看在二维计算弧度公式如下:

image-20240328124309182

即立体角度所对应球上的投影面积比上半径的平方,整个球的立体角为4PI。

那么对于Radiant intensity的定义当中,微分立体角dw计算如下:

image-20240328124437995

image-20240328124452331

image-20240328124535517

image-20240328124602754

image-20240328124616488

2.3 irradiance

image-20240328124803866

image-20240328124822462

image-20240328124920063

image-20240328125017639

该现象也完全可以用irradiance解释,因为光的功率始终一致,离点光源所照射到的圆球面积也就越大,因此根据irradiance的式子,分母的面积值也就越大,irradiance也就越小。

2.4 radiance

最后,我们终于来到了最后一条概念了,这条概念也是所有辐射度量学的概念当中最为重要的一个,那么首先直接就来看他的数学定义是怎么样的:

image-20240328125113379

用一句话概述的话,所谓radiance就是指每单位立体角,每单位垂直面积的功率,直观来看的话,很像是Intensity和irradiance的结合。它同时指定了光的方向与照射到的表面所接受到的亮度

但这里有一个细微的区别,在irradiance中定义的每单位照射面积,而在radiance当中,为了更好的使其成为描述一条光线传播中的亮度,且在传播过程当中大小不随方向改变,所以在定义中关于接收面积的部分是每单位垂直面积,而这一点的不同也正解释了图中式子分母上的cosθ,具体可以观察如下图:

image-20240328125524976

image-20240328125537842

image-20240328130027118

image-20240328130004324

3 双向反射分布函数(BRDF)

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

image-20240328130505955

image-20240328130558066

image-20240328130708062

image-20240328130833811

image-20240328131014526

image-20240328131109322

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

接下来,在最后一章我们会引入渲染方程,并对渲染方程做一些直观上的物理解释,对于反射方程或者说是渲染方程的具体求解,留在下一篇文章里面去说。

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

image-20240328131301871

image-20240328131404651

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

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

image-20240328131541070

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

image-20240328131616839

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

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

image-20240328131654421

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

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

image-20240328131927158

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

image-20240328132239285

image-20240328132254429

image-20240328132353027

image-20240328132410433

最后以几张基于物理渲染的图片作为本篇文章的结束 一次反射直接光照:

image-20240328132507889

image-20240328132525708

image-20240328132544637

image-20240328132600841

(考虑次数越多越接近真实图片效果,趋近收敛)

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/776252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL高阶SQL语句

文章目录 MySQL高阶SQL语句MySQL常用查询1、按关键字排序1.1 语法1.2 ASC和DESC1.3 对数据表中信息进行排序1.3.1 普通排序1.3.2 结合where进行条件过滤1.3.3 对多个字段进行排序 2、区间判断及查询不重复记录2.1 and/or —— 且/或2.1.1 普通查询2.1.2 嵌套/多条件查询 2.2 di…

OD C卷 - 反射计数

反射计数(200) 给定一个包含0 、1的二维矩阵;一个物体从给定的初始位置出发,在给定的速度下移动,遇到矩阵的边缘则发生镜面反射,无论物体经过0还是1,都不影响其速度;经过t时间单位后…

【unity】如何汉化unity编译器

在【unity】如何汉化unity Hub这篇文章中,我们已经完成了unity Hub的汉化,现在让我们对unity Hub安装的编译器也进行下汉化处理。 第一步:在unity Hub软件左侧栏目中点击安装,选择需要汉化的编译器,再点击设置图片按钮…

淘宝自动发货接口是指淘宝开放平台提供的一种接口,用于实现商家在淘宝平台上自动发货的功能

淘宝自动发货接口是指淘宝开放平台提供的一种接口,用于实现商家在淘宝平台上自动发货的功能。通过该接口,商家可以将订单信息与物流信息传递给淘宝平台,由平台自动完成订单发货的操作,提高发货效率和准确性。 淘宝自动发货接口的…

手机termux免root安装kali:一步到位+图形界面_termux安装kali-

1.工具 安卓包括鸿蒙手机、WiFi、充足的电量、脑子 2.浏览器搜索termuxvnc viewer下载安装。 3.对抗华为纯净模式需要一些操作先断网弹窗提示先不开等到继续安装的时候连上网智能检测过后就可以了 termux正常版本可以通过智能监测失败了就说明安装包是盗版 4.以后出现类似…

Jenkins常用插件安装及全局配置

Jenkins常用插件安装及全局配置 前言 ​ Jenkins是一个流行的持续集成工具,通过安装适用的插件,可以扩展Jenkins的功能,并与其他工具和系统集成。本文将介绍一些常用的Jenkins插件以及安装和配置的步骤。通过安装和配置这些常用插件&#xf…

【EI会议征稿通知】电子、通信与智能科学国际会议(ECIS 2024)

电子、通信与智能科学国际会议(ECIS 2024) The International Conference on Electronics, Communications and Intelligent Science 电子、通信与智能科学国际会议(ECIS 2024)将于2024年05月24日-05月27日在中国长沙召开。ECIS…

指数强劲反弹,计算机板块表现活跃,北京两融开户佣金和融资融券利息率最低多少?哪个券商最低?支持量化交易?

股市行情的波动是由多种因素共同影响的,其中包括市场情绪、投资者对经济走势的预期、政策变化等等。本文提到的指数强劲反弹和计算机板块的活跃表现可能是由以下几个因素所推动的: 市场情绪改善:当投资者对市场的信心增加时,他们更…

C语言字节对齐关键字__attribute__((aligned(n)))的使用

0 前言 在进行嵌入式开发的过程中,我们经常会见到对齐操作。这些对齐操作有些是为了便于实现指针操作,有些是为了加速对内存的访问。因此,学习如何使用对齐关键字是对于嵌入式开发是很有必要的。 1 对齐规则 1.0 什么叫做对齐 众所周知&a…

谈谈变压器中的位置编码

变压器中的位置编码 一、说明 在上一期的“Transformers for Everyone”系列中,我们介绍了 Transformer 的概念,并深入研究了第一个关键架构元素:输入嵌入。如果你错过了第一集,你可以通过阅读来赶上:适合所有人的变形…

IRIS / Chronicles 数据库结构

对于我们用得最多的关系型数据库来说,首先有的是数据库名字,然后是表名字,然后就是字段名,随后就是一条一条的数据。 对于 IRIS 来说,因为是使用的层级数据库,所以上面的定义就不能完全的照搬了&#xff0…

【傅里叶变换、短时傅里叶变换、小波变换】

傅里叶:可以知道信号中的成分,但对非平稳过程,不能看出各成分出现的时刻短时傅里叶变换-:加固定窗的傅里叶变换,无法满足非稳态信号变化的频率的需求小波变换:时域能量有限,频域带通滤波 一、傅…

系统可靠性分析与设计相关知识总结

一、软件可靠性定义 软件可靠性使软件产品在规定的条件下和规定的时间区间内完成规定的功能的能力。是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统功能特性的基本能力。 规定的条件:直接与软件运行相关的使用该软件的计算机系统…

husky配置实现代码提交前校验与规范提交信息

husky是一个Git Hook管理工具,主要用于实现提交前eslint校验和commit信息的规范校验。 Husky 的原理是让我们在项目根目录中写一个配置文件,然后在安装 Husky的时候把配置文件和 Git Hook 关联起来,这样我们就能在团队中使用 Git Hook 了。 …

Matplotlib数据可视化实战-2绘制折线图(2)

2.11营业额可视化 已知某学校附近一个烧烤店2022年每个月的营业额如下图所示。编写程序绘制折线图对该烧烤店全年营业额进行可视化,使用红色点画线连接每个月的数据,并在每个月的数据处使用三角形进行标记。 烧烤店营业额 月份123456789101112营业额/万…

Redis - 5k star! 一款简洁美观的 Redis 客户端工具~

项目简介 Tiny RDM 是一款现代化、轻量级的跨平台 Redis 桌面客户端,可在 Mac、Windows 和 Linux 系统上运行。初次打开 Tiny RDM,你会被它舒适的风格和配色所吸引,界面简约而不简单,功能齐全。 Tiny RDM 有着如下的功能特性 项…

男生t恤什么牌子好?男士T恤品牌推荐?

很多男士朋友最近都打算准备一套春夏季穿的短袖,但奈何当前的市场上充斥着大量低劣质的衣裤。这些产品的质量普遍不耐穿、耐洗,并且版型不好等情况。为此我特意为大家整理五个质量好且价格不贵的五个男装品牌。希望能够帮助到大家挑选到合适的短袖。 因为…

保研线性代数机器学习基础复习1

1.什么是代数(algebra)? 为了形式化一个概念,构建出有关这个概念的符号以及操作符号的公式。 2.什么是线性代数(linear algebra)? 一项关于向量以及操作向量的公式的研究。 3.举一些向量的例子&#x…

【opencv】教程代码 —ImgProc (7)使用维纳滤波器来恢复失焦的图像

7. out_of_focus_deblur_filter.cpp使用维纳滤波器来恢复失焦的图像 代码的主要功能是通过使用维纳滤波器来恢复失焦的图像,它读取一个灰度图像文件,对其进行滤波操作,并将结果保存为新文件。这个过程包括计算点扩散函数(PSF),执行…

机器学习模型——KNN

KNN的基本概念: KNN(K-Nearest Neighbor)就是k个最近的邻居的意思,即每个样本都可以用它最接近的k个邻居来代表。KNN常用来处理分类问题,但也可以用来处理回归问题。 核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某…