GAMES101笔记:BRDF和渲染方程

news2024/10/7 20:30:14

BRDF : 双向反射分布函数(Bidirectional Reflectance Distribution Function)

描述从某个方向入射的能量反射到不同的方向上的能量的分布。

理解反射

在这里插入图片描述
从能量的角度理解反射。上图中, ω i \omega_i ωi方向入射的光线具有的Radiance,累积在微小面积 d A dA dA上,累积为Irradiance。然后E向各个 ω o \omega_o ωo方向发射出去,计算反射光线的Radiance。

即上图中下面的两个公式:
1)入射的微分irradiance: d E ω i dE\omega_i dEωi是入射的Radiance L ( ω i ) L(\omega_i) L(ωi)乘以微分立体角 d ω i d\omega_i dωi c o s θ i cos\theta_i cosθi
2) 反射的微分Radiance: 是 d L r ( ω r ) dL_r(\omega_r) dLr(ωr)

而BRDF就是各方向反射的Radiance和入射的总的Irradiance的比例。即,在给定的入射方向上,各个反射方向的Radiance分别占总的入射产生的Irradiance的比例。因此是双向反射分布

BRDF定义

在这里插入图片描述
BRDF描述的是如何把一个方向入射的能量反射到各个方向去。
再看一下上面的BRDF公式:

  • 分子部分是某个反射方向 ω r \omega_r ωr的Radiance的微分
  • 分母部分是某个入射方向 ω i \omega_i ωi的Irradiance的微分。由于Irradiance是各个方向的Radiance累积起来的。因此这儿通过考察一个微小的微分立体角 d ω i d\omega_i dωi,这个Irradiance的微分就是入射的Radiance和微分立体角的乘积,以及为了投影受光表面还乘了 c o s θ i cos\theta_i cosθi
    另外Radiance和Irradiance都是针对单位投影面积的。

BRDF定义了不同的材质

BRDF描述了光线和物体是如何作用的。

反射方程 The Reflection Equation

在这里插入图片描述
反射方程计算的是对于某个着色点P的任意一个反射方向 ω r \omega_r ωr的Radiance。方法是将这个着色点接受到的Irradiance的微分,即:
在这里插入图片描述
乘上BRDF,即:
在这里插入图片描述
然后在半球上,针对入射方向 ω i \omega_i ωi进行积分。

BRDF本身就是反射radiance和入射Irradiance的比例,所以这个方程很自然。
如果直接把BRDF的定义式代入到反射方程中,BRDF的分母部分就会和方程内的入射Irradiance微分消掉,得到的就是反射的Irradiance。

我觉得核心是BRDF可以在某个着色模型下去定义好计算好,然后应用到反射方程中计算反射。

挑战:反射方程是递归的

在这里插入图片描述

  • 入射的Radiance不仅仅来自于光源,也可以来自于反射后的光线
  • 入射radiance依赖于其他地方反射过来的radiance

渲染方程 The Rendering Equation

在这里插入图片描述

  • 反射方程只考虑了反射的光,没考虑物体自己会发光
  • 反射方程加上物体自发光的 Radiance 就是渲染方程
  • 方程中所有的方向都是从着色点向外
  • 积分域为半球,写作 Ω + \Omega+ Ω+ H 2 H^2 H2。因为下半球过来的光打在背面不能照亮表面。
  • c o s cos cos项使用点积表示
  • 通过一个方程表示所有的光线传输
  • 所有限制在物体表面上的光线传输都是满足渲染方程

理解渲染方程

一个点光源时

在这里插入图片描述

有很多点光源时

在这里插入图片描述

  • 将入射光加起来

如果是面光源

在这里插入图片描述

  • 面光源是一堆点光源的集合,将面光源上各个点的贡献积分起来
  • 使用积分代替求和

如果是其他物体上反射过来的Radiance

在这里插入图片描述

  • 将反射面当成光源
  • 将反射到 − ω i -\omega_i ωi的Radiance当成入射的Radiance

将渲染方程看做递归的方程

在这里插入图片描述
图中第二个公式是对渲染方程的简写

  • u, v表示两个不同的着色点位置
  • l(u)表示位置u处反射出的光
  • e(u)表示位置u的自发光
  • l(v)表示位置v处反射出的光
  • K(u,v)dv表示从各个不同的位置v有多少光反射到位置u

使用算子进一步简写

在这里插入图片描述

  • L表示反射出的能量,要算的
  • E表示光源发出的能量
  • K是一个反射操作符
  • 这么写可以离散化为简单的矩阵方程
    在这里插入图片描述
  • 这个矩阵的形式可以推导出L
  • 将(I-K)的逆矩阵展开
    在这里插入图片描述
    以上推导难以理解是因为简化了很多中间过程

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

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

相关文章

沉浸式 3D 场景下的多视点视频 增强算法研究

沉浸式 3D 场景下的多视点视频 增强算法研究研究内容图像质量增强为什么进行图像质量增强图像有损压缩技术多视点视频中的深度图像特点视点数目增强虚拟视点合成技术视点外推为什么进行视点数目增强主要贡献基于自适应残差网络的多视点压缩深度图像增强算法基于多约束编解码网络…

SautinSoft PDF Focus .Net 8.6.1 Crack

PDF Focus .Net 完整的 API 可在 .NET 平台上转换任何 PDF 文档, .Net 程序集提供 API 以将 PDF 转换为所有格式:DOCX、RTF、HTML、XML、文本、Excel、.Net 和 C# 中的图像。 介绍 PDF Focus .Net 旨在帮助您开发需要转换任何 PDF 文档的应用程序。看看PDF Focus .N…

2023年“华数杯”国际大学生数学建模A题完整思路

2023华数杯如期开赛,本次比赛作为美赛的模拟赛,赛题和比赛时间都和美赛高度相似,因此大家 完全可以当作一次美赛之前的练习赛进行。美赛的发题时间与华数杯一致,都是早晨六点,现已经将机器翻译的初步翻译 结果进行了分…

C#里最简单向文件追加文本的方法AppendAllText

C#里最简单向文件追加文本的方法AppendAllText 在开发的过程中,经常会碰到这样的问题,就是当一个文件没有创建时,就需要创建。但是文件已经创建了,就直接追加数据。 比如我们开发一个记录每天温度的软件, 每天都在固定的时间去记录一下这个温度,那么就需要在这个文件后面…

【第一章】SQL基础知识

目录 ​编辑 1. 认识SQL 1.1 SQL的标准 1.2 SQL的种类 1.3 SQL的功能 2. 常量 2.1 数字常量 2.2 字符串常量 2.3 日期和时间常量 2.4 符号常量 3. 变量 3.1 局部变量 3.2 全局变量 4. 运算符 4.1 算术运算符 4.2 比较运算符 4.3 逻辑运算符 4.4 按位运算符 …

Redis沙盒逃逸漏洞(CVE-2022-0543)复现以及流量特征分析

Redis简介 Redis Labs Redis是美国Redis Labs公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。 漏洞介绍 Redis 存在代码注入漏洞,攻击者可利用该漏…

Android MVVM之CreationExtras创建ViewModel的详解与使用

一、介绍 CreationExtras是Android api在Androidx-Lifecycle 在近期迈入到了 2.5.0 版本中。很多人第一眼看到,不知道这是个什么,看到会觉得云里雾里,无从下手,也不知道到底该怎么做。这个和现有的ViewModel搭配使用。他不能单独使…

公链年度数据报告:2022年发生了什么,行业将走向何方?

Date:2023 年 1 月Data Source: Footprint Analytics - Chain overview这份年度链报告审视了过去一年 Footprint Analytics 上的数据,以分析各公链的关键趋势。在 2022 年,大多数加密货币头条新闻并不涉及链本身。虽然,像三箭、Bl…

SQLSERVER 的四个事务隔离级别到底怎么理解?

一:背景 1. 讲故事 在有关SQLSERVER的各种参考资料中,经常会看到如下四种事务隔离级别。 READ UNCOMMITTEDREAD COMMITTEDSERIALIZABLEREPEATABLE READ 随之而来的是大量的文字解释,还会附带各种 脏读, 幻读, 不可重复读 常常会把初学者弄…

【微信小程序学习第3天——网络数据请求

一、小程序网络请求限制 1、必须https类型的接口 2、必须将接口的域名添加到信任列表中 二、配置request合法域名 配置步骤:登录微信小程序管理后台 -> 开发 -> 开发设置 -> 服务器域名 -> 修改 request 合法域名 点击修改request合法域名&#xf…

全流程搞清楚 Kubernetes API 的使用,可进行业务二次开发对接 k8s 调用,详细图文说明以及常见问题整理

全流程搞清楚 Kubernetes API 的使用,可进行业务二次开发对接 k8s 调用,详细图文说明以及常见问题整理。 使用CLI(如curl)或GUI(如postman)HTTP客户端调用Kubernetes API有很多理由。例如,你可…

windows11改老版右键显示

右键显示效果:点击右键像windows10一样。方式一使用window的命令行操作:reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve1方式二使用注册表手动操作:win r:…

对话面试官:MySQL自增主键id快用完了怎么办?

前几天有个朋友出去面试,被面试官问到MySQL自增主键id用完了怎么办?由于对这块了解不多,所以回答得不太理想。 本篇文章为大家分享一下,MySQL自增主键达到上限以后会发生什么情况?该如何解决这种情况? 我们…

Python|每日一练|幂函数算法|位运算|>>右移|分析神器pysnooper|日志输出:Pow(x, n)

Pow(x, n) 实现 pow(x, n)(https://www.cplusplus.com/reference/valarray/pow/) ,即计算 x 的 n 次幂函数(即,xn)。 示例 1: 输入:x 2.00000, n 10输出:1024.00000 示例 2: …

漫画 | 程序员这次被逼上了绝路!

经过不懈努力,张大胖终于在一个小公司升任经理。张大胖回去翻阅资料,思考了一番,召开会议宣布了一项重要决定。会议室中一阵窃窃私语三天以后,张大胖进行检查,看看自己的第一把火成效如何。张大胖表示很满意&#xff0…

Elasticsearch:轻松处理 CSV 数据

我们知道 CSV 是一种非常流行的数据格式。在 Elastic Stack 中,我们有很多的方式来摄入 CSV 格式的数据。我们可以先看看一个常用的数据摄入数据流: 如上所示,我们可以采取不同的方法来对数据进行摄入。我们可以在不同的地方对数据进行处理。…

【My Electronic Notes系列——逻辑门电路】

目录 序言: 🏆🏆人生在世,成功并非易事,他需要破茧而出的决心,他需要永不放弃的信念,他需要水滴石穿的坚持,他需要自强不息的勇气,他需要无畏无惧的凛然。要想成功&…

Java打印流(PrintStream/PrintWriter)

概念 打印流是输出信息最方便的类,注意包含字节打印流PrintStream和字符打印流PrintWriter。打印流提供了非常方便的打印功能,可以打印任何类型的数据信息,例如:小数,整数,字符串。而且永远不会抛出IOExce…

DPDK开发之KNI模块代码实现

DPDK开发之KNI模块代码实现背景KNI实现原理 -- ifreq代码实现总结背景 在DPDK开发的时候,如果有些协议不想处理,只处理关注的协议,可以把其他协议写回内核,让内核处理。此时的DPDK就起到分发的作用,类似一个过滤器。 …

二叉树遍历的C语言实现

1、二叉树 树是n个节点的有限集 每个节点事多有两颗子树的树称为 二叉树 该实验目标实现以下二叉树: 2、二叉树的遍历方案 设: D -- 访问根节点,输出根节点; L -- 递归遍历左二叉树; R -- 递归遍历右二叉树; 二叉树遍历方案…