【GAMES101】Lecture 15 全局光照

本节继承上一节的难度并继续加深,讲这个BRDF,然后理解反射方程和渲染方程,最终实现全局光照,以下内容很抽象……如果想要深入理解建议到隔壁基于物理着色:BRDF - 知乎 (zhihu.com)或者多看几遍视频,我也是回头看了第二次才透彻,比较重要的是上一节的物理概念要搞明白

目录

双向反射分布函数 (BRDF)

反射方程

渲染方程

理解渲染方程

解渲染方程


双向反射分布函数 (BRDF)

我们用这个双向反射分布函数 BRDF(Bidirectional Reflectance Distribution Function)来表示这个指定方向入射光和反射光的关系,也就是光线如何和物体发生作用的,这个BRDF实际上就规定了不同材质的反射光的性质,发射多少光以及往哪个方向反射

对于物体上一个单位面积上收到的光通量,那它大小就是irradiance,也就是dE,这个dE可以表示成radiance在单位立体角上的积分,也就是dE(wi) = L(wi) cos θi dwi,同时物体单位面积接收到光能量后会发射,也就是有一个出射的radiance

BRDF就是用来描述这个接受到的光通量和如何发射的这个关系的,接受到的能量有多少需要发射出去,往哪个方向方向,BRDF就是这个radiance和irradiance和比例

反射方程

对于BRDF我们说是对于给定方向的入射的光通量然后规定这个出射的radiance的方向和大小,那实际上这个物体上的单位面积它可能不止接收到来着一个方向的这个入射的radiance,那实际上如果我要去描述这个物体出射的radiance应该对所有方向来的radiance做一个积分,这个就是所谓的反射方程

实际上这个物体接受到的入射radiance它可能不止来着一个光源,它可能来自于其他物体的出射的radiance,所以这里实际上会有一个递归的定义

渲染方程

对于这个反射方程其实没有考虑到一个地方,什么呢,就是这个物体本身可能会放光,物体本身可能是个光源,那这个反射方程需要修改一下,这就需要加上物体本身的出射radiance,形成这个所谓的渲染方程

理解渲染方程

之前我们都是从这个物理数学推导出来的这个渲染方程,现在我忘记这个推导的过程,我从这个渲染方程本身去理解这个全局光照是怎么实现的

对于只有一个点光源的情况,那就是我这个物体发射的radiance就等于我本身会发射的radiance加上反射点光源发射的radiance,具体怎么反射的,这个是物体本身的材质决定的,那就是由BRDF所描述的事情

那对于多个点光源的情况,我就全都加起来,让接收的radiance是所有点光源的累加效果就行了

那如果不是点光源,是这个面光源怎么办呢,是不是就把这个面的radiance对它所覆盖的立体角做一个积分就行了

那实际上接收到的光还有可能来着其他物体反射的光,这个怎么处理呢,那我就直接统一把接收的radiance当作是其他物体这个出射的radiance就行了

解渲染方程

那怎么解这个渲染方程呢,从我们最后给出的方程可以看出,未知的只有物体本身的出射radiance和接收到的来着其他物体的出射radiance,而这两个radiance实际上是一个东西是不是,这里其实可以解释为什么后面可以写成两个相同的L了,这里先简化一下BRDF写成核函数的形式

然后从线性代数的角度,定义这个算子操作,这个K就是发射算子,这个L实际上是全局radiance,像机器学习里面从某个属性值上升到属性本身一样,从单个元素上升到矩阵操作

然后通过解这个线性方程可以算出L

怎么理解这个L呢,实际上如果L=E那就是只有点光源的光可以看到,L=E+KE,此时光是直接光照,有了一次反射光,而L=E+KE+K²E则是增加了一次间接光照,称为一次弹射光照,如果继续计算下去就会得到全局光照

 其中能在光栅化做到的只有L=E+KE,后面的光栅化就很难实现了

这个就是光栅化能够实现的L=E+KE

L=E+KE+K²E

继续下去全局光照的效果会更好,但是最终会收敛到某个程度,其中图片中上方其实是个玻璃,但是光线需要经过多次弹射才能从里面出来

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

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

相关文章

VScode+PlatformIO 物联网Iot开发平台环境搭建

1.vscode (1)安装platformIO插件 (2)新建项目或导入已有的arduino项目 Name:需要填写你项目的名称; Board:点开是一个下拉框,但是可以输入你想要的开发板,这里选择&quo…

华为配置OSPF与BFD联动示例

配置OSPF与BFD联动示例 组网图形 图1 配置OSPF与BFD联动组网图 OSPF与BFD联动简介配置注意事项组网需求配置思路操作步骤配置文件 OSPF与BFD联动简介 双向转发检测BFD(Bidirectional Forwarding Detection)是一种用于检测转发引擎之间通信故障的检测…

什么是前端工程化,请举例说明

前端工程化 前端工程化的定义为什么需要前端工程化前端工程化的核心概念 模块化开发:组件化开发:规范化开发:自动化开发:持续集成 前端工程化的主要工具前端工程化的应用总结: 前端工程化 前端工程化的定义 前端工程…

本地缓存Ehcache的应用实践 | 京东云技术团队

java本地缓存包含多个框架,其中常用的包括:Caffeine、Guava Cache和Ehcache, 其中Caffeine号称本地缓存之王,也是近年来被众多程序员推崇的缓存框架,同时也是SpringBoot内置的本地缓存实现。但是除了Caffeine之外&…

MySQL操作问题汇总

MySQL操作问题汇总 1.无法远程连接Ubuntu的MySQL2.ubuntu忘记mysql的root密码时的操作 1.无法远程连接Ubuntu的MySQL (1) 需要检查防火墙状态 > sudo ufw status #如果防火墙开启的情况,添加规则:允许3306端口开启 > sudo ufw allow 3306 (2) 需要…

3D DRAM引领存储变革,重塑智能时代计算格局

3D DRAM作为一种应对DRAM技术挑战的解决方案,正逐渐被视为未来内存市场的关键发展方向。与3D NAND类似,3D DRAM采用了立体堆叠技术来突破传统二维平面架构的局限。 在传统DRAM中,存储单元由一个晶体管和一个电容器组成,晶体管负责…

XCTF:3-1[WriteUP]

从题目中获取文件 使用file命令查看文件类型 修改后缀为.rar后进行解压缩 再次使用file命令查询该文件的类型 再次修改后缀为.pcap或者.pcapng 使用wireshark打开,直接搜索flag字样 在多个数据包里发现了flag.rar、flag.txt等文件 尝试使用http导出文件 有一个fl…

《Python 网络爬虫简易速速上手小册》第2章:网络爬虫准备工作(2024 最新版)

文章目录 2.1 选择合适的爬虫工具和库2.1.1 重点基础知识讲解2.1.2 重点案例:使用 Scrapy 抓取电商网站2.1.3 拓展案例 1:使用 Requests 和 BeautifulSoup 抓取博客文章2.1.4 拓展案例 2:使用 Selenium 抓取动态内容 2.2 设置开发环境2.2.1 重…

C语言小游戏:贪吃蛇(游戏开发的环境和功能介绍)

❀❀❀ 文章由不准备秃的大伟原创 ❀❀❀ ♪♪♪ 若有转载,请联系博主哦~ ♪♪♪ ❤❤❤ 致力学好编程的宝藏博主,代码兴国!❤❤❤ 生命不停,学习不止。铁汁们,我是大伟,欢迎来到大伟的游戏时间&#xff0c…

Allegro中设置让Route Keepout(禁止布线区)允许布线或打过孔的方法

Allegro中设置让Route Keepout(禁止布线区)允许布线或打过孔的方法 Chapter1 Allegro中设置让Route Keepout(禁止布线区)允许布线或打过孔的方法一、前言二、设置方法 Chapter2 Cadence Allegro PCB设计88问解析(二十三) 之 Alleg…

JavaScript(一)内部外部行内三种书写方式

注释很详细&#xff0c;直接上代码 新增内容&#xff1a; 1.j内部写法 2.外部写法 3.行内写法 内部写法 test.html <!DOCTYPE html> <html lang"zh-Hans"> <head><meta charset"UTF-8"><meta name"viewport" conte…

随机森林超参数的网格优化(机器学习的精华--调参)

随机森林超参数的网格优化&#xff08;机器学习的精华–调参&#xff09; 随机森林各个参数对算法的影响 影响力参数⭐⭐⭐⭐⭐几乎总是具有巨大影响力n_estimators&#xff08;整体学习能力&#xff09;max_depth&#xff08;粗剪枝&#xff09;max_features&#xff08;随机…