【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. 引…

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

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

SSL证书的验证过程

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

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

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

HBase相关面试准备问题

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

Mocaverse NFT 概览与数据分析

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

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

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

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

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

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

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

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

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

在java中获取excel的cell值的时候报错

在获取cell的时候,通常会有报错类型不匹配的问题,这是因为你的cell中存储的数据类型和使用的方法不匹配的原因,假如说cell中存储了一个数字,但是使用的cell.getStringCellValue()获取值,就会有如下错误 java.lang.Ill…

微信小程序checkbox多选

效果图 <view class"block"><view class"header"><view class"header-left"><text class"pu-title">数据</text><text class"pu-tip">至少选择一个指标</text></view>&l…

go-redis hash slot 之旅

搭建redis 集群 创建一个网桥 docker network create -d bridge --subnet192.168.148.0/24 --gateway192.168.148.1 -o parenteno1 redis-net通过docker 文件创建redis 集群&#xff0c; 这里注意要不要使用redis 7以上的版本&#xff0c;不然会出问题 version: "3&quo…

Tomcat组件架构与数据流

一、背景与简介 Tomcat我们都知道是一个开源的、实现了大部分Java EE、Servlet、JSP规范的Servlet容器, 允许我们将实现了Serlvet接口的Web程序war包进行部署运行。 但是你有对Tomcat做过细致的学习么? 我相信大部分同学和我一样&#xff0c;之前也是只会进行简单使用&#x…

django线上教育学习平台大数据分析系统python

随着互联网技术不断地发展&#xff0c;网络与大数据成为了人们生活的一部分&#xff0c;而线上教育平台大数据分析作为网上应用的一个全新的体现&#xff0c;由于其特有的便捷性&#xff0c;已经被人们所接受。目前主流的线上教育平台大数据分析服务不仅不明确并且管理盈利较低…

专业课130+总分420+南京大学851信号与系统考研经验南大电子信息与通信系统

经过一年的复习&#xff0c;顺利上岸&#xff0c;被南京大学录取&#xff0c;今年专业课130&#xff0c;总分420&#xff0c;回忆这一年的复习还是有很多经验分享&#xff0c;希望对大家复习有帮助。 专业课&#xff1a; 南京大学851信号与系统难度这几年无论是范围还是难度都…

【MySQL】学习并使用DQL实现排序查询和分页查询

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-SP91zTA41FlGU0Ce {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

计算机服务器中了DevicData勒索病毒如何解密,DevicData勒索病毒解密流程

网络数据安全一直是企业关心的主要话题&#xff0c;近期&#xff0c;云天数据恢复中心接到很多企业的求助&#xff0c;企业的计算机服务器遭到了DevicData勒索病毒攻击&#xff0c;导致企业计算机服务器瘫痪无法正常工作&#xff0c;严重影响了工作业务开展。经过云天数据恢复中…

【已解决】c++ qt选中该行为什么该列部分变色

笔者开启了QTableView中交替行改变颜色&#xff0c;发现笔者自定义绘制的水平滚动条&#xff0c;在选中后不发生颜色改变&#xff0c;这让笔者很疑惑。笔者查阅资料后发现&#xff0c;自定义绘制的控件&#xff0c;要自身设置颜色。当笔者解决了这个问题时&#xff0c;顺手就将…

【SAR成像】基于RD、CS和ωk算法的合成孔径雷达成像算法原理与实现

基于RD、CS和ωk算法的合成孔径雷达成像算法实现 前言SAR基本概念雷达获取数据的几何关系低斜视角下的回波信号模型 RADARSAT-1主要参数数据预处理数据读取与再封装数据补零 成像算法坐标轴的产生RD算法距离压缩距离徙动矫正方位压缩 CS算法第一次相位相乘 变标后的信号第二次相…