【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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【51单片机】74HC595芯片实现单片机 IO 扩展(串转并)和 LED点阵实验

目录 单片机 IO 扩展(串转并)74HC595 芯片介绍硬件设计软件实验实验现象 LED点阵实验LED 点阵介绍硬件设计软件设计LED点阵(点亮一个点)LED 点阵(显示数字)LED 点阵(显示图像) 橙色 …

发送get请求并且发送请求头(header),java实现

发送get请求时,发送请求头(Header)中的内容 方便第二次调用其他url时传递参数,例如userCode或者租户编码 调用方式 Autowired private HttpServletRequest request;先注入HttpServletRequestpublic xxx xxx(){String url &quo…

后端程序员入门react笔记(一)

相关参考 react 首先,我们先大概了解一下什么是react以及react可以干什么。 React 是 Facebook 开源的一个用于构建用户界面的一款 JavaScript 库,主要用于构建 UI。 react的特点 声明式编程 react使用jsx进行渲染,这是一种类似html的语法…

(5)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—12种聚类算法说明与归纳

目录 一、12种聚类(无监督学习)算法说明和区分比较 聚类算法的类型(一) ​编辑导入函数库 加载数据集 ​编辑 (1)K-Means --Centroid models (2)Mini-Batch K-Means -- Centroid models (3)AffinityPropagation (Hierarchical) -- Connectivity models (4)Mean Shift…

靶机实战bwapp亲测xxe漏洞攻击及自动化XXE注射工具分析利用

靶机实战bwapp亲测xxe漏洞攻击及自动化XXE注射工具分析利用。 1|0介绍 xxe漏洞主要针对webservice危险的引用的外部实体并且未对外部实体进行敏感字符的过滤,从而可以造成命令执行,目录遍历等.首先存在漏洞的web服务一定是存在xml传输数据的,可以在http头的content-type中查…

前后端数据校验

前端校验内容 前端开发中的必要校验,可以保证用户输入的数据的准确性、合法性和安全性。同时,这些校验也有助于提供良好的用户体验和防止不必要的错误提交到后端。 1、必填字段校验: 对于必填的字段,需确保用户输入了有效的数据…

PyTorch 2.2 中文官方教程(二十)

移动设备 在 iOS 上进行图像分割 DeepLabV3 原文:pytorch.org/tutorials/beginner/deeplabv3_on_ios.html 译者:飞龙 协议:CC BY-NC-SA 4.0 作者:Jeff Tang 审阅者:Jeremiah Chung 介绍 语义图像分割是一种计算机视…

InnoDB 锁系统(小白入门)

1995年 ,MySQL 1.0发布,仅供内部使用! 开发多用户、数据库驱动的应用时,最大的一个难点是:一方面要最大程度地利用数据库的并发访问,另一方面还要确保每个用户能以一致性的方式读取和修改数据。 MVCC 并发…

zabbix配置监控脚本

zabbix配置监控脚本 1.修改agent配置文件 [rootchang ~]# vim /etc/zabbix/zabbix_agentd.conf 333行 原# UnsafeUserParameters0 修改成 UnsafeUserParameters12.创建脚本与脚本存放目录 [rootchang ~]# mkdir /etc/zabbix/zabbix_scripts [rootchang zabbix_scripts]# vi…

电路分析2

7 等效电路的思想,简化不是目的,这个电路说明一切!_哔哩哔哩_bilibili 高中知识,翻笔记 8 什么时候用Y型?看到有有相同数字的时候,就可以考虑用 9 10 输入电阻还有没学完的 ok 11

Django的web框架Django Rest_Framework精讲(四)

文章目录 1.DRF认证组件Authentication2.权限Permissions3.限流Throttling4.过滤Filtering5.排序6.分页Pagination7.异常处理 Exceptions8.自动生成接口文档 大家好,我是景天,今天我们继续DRF的最后一讲,Django的web框架Django Rest_Framewor…

SpringBoot异步任务

一、注解实现 EnableAsync注解 创建一个配置类,并在类上添加EnableAsync注解,用来启用异步支持。 Configuration EnableAsync public class AsyncConfig { }或者,在启动类上添加EnableAsync注解,用来启用异步支持。 EnableAsy…

Linux(二)

远程登录 Linux大多应用于服务器,而服务器不可能像PC一样放在办公室,它们是放在IDC机房的,所以我平时登录linux系统都是通过远程登录的。 Linux系统中是通过ssh服务实现的远程登录功能。默认ssh服务开启了22端口,而且当我们安装…

docker elasticsearch8启动失败

docker elasticsearch8.12.0启动后提示这个,并且始终无法访问localhost:9200 received plaintext http traffic on an https channel, closing connection Netty4HttpChannel 解决方案:重新创建 elasticsearch容器,加上 -e xpack.security.…

scikit-learn 1.3.X 版本 bug - F1 分数计算错误

如果您正在使用 scikit-learn 1.3.X 版本,在使用 f1_score() 或 classification_report() 函数时,如果参数设置为 zero_division1.0 或 zero_divisionnp.nan,那么函数的输出结果可能会出错。错误的范围可能高达 100%,具体取决于数…

ArcGIS学习(三)数据可视化

ArcGIS学习(三)数据可视化 1.矢量数据可视化 需要提前说明的是,在ArcGIS中,所有的可视化选项设置都是在“图层属性”对话框里面的“符号系统”中实现的。 对于矢量数据的可视化,主要有四种可视化方式: 按“要素”可视化按“类别”可视化按“数量”可视化按“图表”可视…

Leetcode—38. 外观数列【中等】

2024每日刷题&#xff08;111&#xff09; Leetcode—38. 外观数列 实现代码 class Solution { public:string countAndSay(int n) {string ans "1";while(--n) {string next;for(int i 0; i < ans.size(); i) {int cnt 1;char c ans[i];while(i 1 < an…

PyTorch 2.2 中文官方教程(十七)

&#xff08;Beta&#xff09;使用缩放点积注意力&#xff08;SDPA&#xff09;实现高性能 Transformer 原文&#xff1a;pytorch.org/tutorials/intermediate/scaled_dot_product_attention_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 注意 点击这…

动态颗粒背景,适合VUE、HTML前端显示

动态颗粒背景&#xff0c;适合做背景使用&#xff0c;VUE、HTML前端显示直接看效果 废话不多说直接上代码&#xff1b; 一、html 代码部分 <template><div id"login"><div class"container"><div class"login-form"&g…

QXlsx Qt操作excel(1)

QXlsx 是一个用于处理Excel文件的开源C库。它允许你在你的C应用程序中读取和写入Microsoft Excel文件&#xff08;.xlsx格式&#xff09;。该库支持多种操作&#xff0c;包括创建新的工作簿、读取和写入单元格数据、格式化单元格、以及其他与Excel文件相关的功能。 关于QXlsx的…