【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.mzph.cn/news/667735.shtml

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

相关文章

【01】C++入门

文章目录 Ⅰ 命名空间1. 命名空间域的产生2. 命名空间域的定义3. 命名空间域的使用 Ⅱ 缺省参数1. 缺省的概念2. 缺省的分类3. 声明和定义不能同时存在缺省参数 Ⅲ 函数重载1. 函数重载概念2. 编译器如何实现函数重载 Ⅳ 引用1. 引用的概念2. 引用的特性3. 引用的使用场景4. 引…

P8706 [蓝桥杯 2020 省 AB1] 解码--2024蓝桥杯冲刺省一

点击跳转例题 模拟即可 #include <bits/stdc.h> #define int long long //(有超时风险) #define PII pair<int,int> #define endl \n #define LL __int128using namespace std;const int N2e610,M1e310,mod998244353,INF0x3f3f3f3f;int a[N],b[N],c[N],pre[N];sign…

力扣热门100题刷题笔记 - 5.最长回文子串

力扣热门100题 - 5.最长回文子串 题目链接&#xff1a;5. 最长回文子串 题目描述&#xff1a; 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。示例&#xff1a; 输入&#xff1a;s "…

《C++ Primer Plus》《2、开始学习C++》

文章目录 0 前言&#xff1a;1 进入C1.1 main()函数1.2 C注释1.3 预处理器和iostream1.4 头文件名1.5 名称空间1.6 使用cout进行C输出1.7 C源代码的格式化 2 C语句2.1 声明语句和变量2.2 赋值语句2.3 cout语句 3 其他C语句3.1使用cin3.2 使用cout进行拼接3.3 类简介 4 函数4.1 …

SSL证书的验证过程

HTTPS是工作于SSL层之上的HTTP协议&#xff0c;SSL&#xff08;安全套接层&#xff09;工作于TCP层之上&#xff0c;向应用层提供了两个基本安全服务&#xff1a;认证和保密。SSL有三个子协议&#xff1a;握手协议&#xff0c;记录协议和警报协议。其中握手协议实现服务器与客户…

远程桌面时连接不上远程计算机是什么问题

在服务器上搭建网络程序时&#xff0c;我们经常会有需要远程连接上服务器进行相关操作&#xff0c;有些用户在远程桌面的时候&#xff0c;有时会有遇上无法连接到远程计算机的情况。 很多用户都曾遇到在远程桌面时出现“未启用对服务器的远程访问”、“远程计算机已关闭”、“…

HBase相关面试准备问题

为什么选择HBase 1、海量存储 Hbase适合存储PB级别的海量数据&#xff0c;在PB级别的数&#xff0c;能在几十到几百毫秒内返回数据。这与Hbase的极易扩展性息息相关。正是因为Hbase良好的扩展性&#xff0c;才为海量数据的存储提供了便利。 2、列式存储 这里的列式存储其实说的…

面试经典题---76.最小覆盖子串

76.最小覆盖子串 我的解法&#xff1a; 滑动窗口&#xff1a; 使用map1记录子串t中各字符的出现频数&#xff0c;map2记录子串s的滑动窗口[left, right]中各字符的出现频数&#xff1b;当s[right]字符是所需字符时&#xff0c;即t中该字符数量大于等于s的滑动窗口中这一字符的…

技术栈面试综合整理

Git命令详解 设计模式看了又忘&#xff0c;忘了又看 Linux命令 Java集合Map Java基础 JVM面试题 JVM原理最全、清晰、通俗讲解&#xff0c;五天40小时吐血整理_小爷欣欣-CSDN博客_jvm原理 IO 计算机网络 计算机网络2 jsp 多线程 多线程2 大厂 JAVA 高频面试题 Ja…

Mocaverse NFT 概览与数据分析

作者&#xff1a;stellafootprint.network 编译&#xff1a;mingfootprint.network 数据源&#xff1a;Mocaverse NFT Collection Dashboard Mocaverse 是 Animoca Brands 推出的专属 NFT&#xff08;非同质化代币&#xff09;系列&#xff0c;包含 8,888 个独特的 "M…

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

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

2024杭州国际安防展览会:引领数字城市安全与智能未来

随着科技的不断进步&#xff0c;数字城市已经成为未来城市发展的重要趋势。作为数字城市建设的重要组成部分&#xff0c;安防技术的创新与应用对于保障城市安全、提高生活品质具有重要意义。为此&#xff0c;2024杭州国际安防展览会将于4月份在杭州国际博览中心隆重召开&#x…

leetcode 292. Nim 游戏【数学】

原题链接&#xff1a;292. Nim 游戏 题目描述&#xff1a; 你和你的朋友&#xff0c;两个人一起玩 Nim 游戏&#xff1a; 桌子上有一堆石头。你们轮流进行自己的回合&#xff0c; 你作为先手 。每一回合&#xff0c;轮到的人拿掉 1 - 3 块石头。拿掉最后一块石头的人就是获胜…

UE4 中 TMap<>与TArray<>的全遍历,及带条件删除

一、UE4 中&#xff0c;TMap<int32,int32> 正向遍历&#xff0c;带条件删除。 注意点&#xff1a;在调用 Remove(it->Key);之后&#xff0c;it 并不会自​​​​​​​动往后移动&#xff0c;仍然需要调用 it&#xff0c;才会指向下一个值。 // TMap<> 正向遍历…

flink写入es的参数解析

ElasticsearchSink内部使用BulkProcessor一次将一批动作(ActionRequest)发送到ES集群。在发送批量动作前&#xff0c;BulkProcessor先缓存&#xff0c;再刷新。缓存刷新的间隔&#xff0c;支持基于Action数量、基于Action大小、基于时间间隔3种策略。BulkProcessor支持在同一次…

悬而未决:daterangepicker设置默认选择日期时间后点确认无值的BUG

daterangepicker有两个BUG&#xff1a; 1、startDate和endDate对设置默认日期没有问题&#xff0c;但对设置默认时间的支持有BUG&#xff01;比如设为 moment().add( 1, day ).hours(8).minutes(20).seconds(0), //如果现在是9点&#xff0c;则设置的时间8&#xff1a;20因为比…

C:\Users\ShuYixiao>mysql ‘mysql‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

这个错误信息表明 mysql 命令在你的系统中没有被识别。这通常意味着 MySQL 没有安装在你的电脑上&#xff0c;或者它的可执行文件路径没有添加到系统的环境变量中。以下是一些解决这个问题的步骤&#xff1a; 确认 MySQL 是否已安装&#xff1a; 如果你还没有安装 MySQL&#x…

​LeetCode解法汇总292. Nim 游戏

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 你和你的朋…

PostGIS学习教程二十一:最近领域搜索

PostGIS学习教程二十一&#xff1a;最近领域搜索 注意&#xff1a;本节涉及的功能只在PostGIS2.0及更高的版本可用。 文章目录 PostGIS学习教程二十一&#xff1a;最近领域搜索一、什么是最近邻域搜索&#xff1f;二、基于索引的KNN 一、什么是最近邻域搜索&#xff1f; 一个常…

游戏如何选择服务器

游戏如何选择服务器 1、CPU处理器&#xff1a;作为游戏服务器的运算和控制核心&#xff0c;是信息处理、程序运行的最终执行单元。我们可以将它简单的理解为公司的核心部门&#xff0c;一个核心部门的处理效率&#xff0c;就是核心数和线程数&#xff0c;比如16核心32线程&…