BRDF

2023-11-13

前言

现实世界中的表面绝大多数都是凹凸不平的。在这种情况下,可以把表面看成是大量朝向各异的微小光学平面的集合,我们肉眼可见的每个点都包含了很多个这样的微小光学平面。
光线照射到这些微小表面上时,同样一部分在表面发生反射。这些朝向不同的微表面把入射光线反射到不同的方向。另一部分光线发生折射,折射光线何去何从取决于物质的组成成分。
对于金属,折射进表面的光线的能量会立即被金属中的自由电子吸收,转换成电子的能量,不再可见(下图左边)。对于非金属(电介质或绝缘体),它们往往不是由单一成分构成,而可以认为其中包含了很多折射率不同的微粒,光线遇到这些粒子后发生反射折射,在物质内部不断传播,散射到不同方向,其中一部分会再次穿过表面被观察到,这种现象称为次表面散射(Subsurface Scattering,下图右边穿出表面的蓝色光线),也有一部分在传输过程中被吸收。

这里写图片描述

根据物质属性和观察尺度的不同,次表面散射会表现出不同的效果。
如下面的左上图,如果光线在物质中传播距离小于观察尺度(绿色区域,可以认为是一个像素区域),我们看到情况如下面的右上图,入射点、反射点、次表面散射的出射点看起来是同一个点。其中反射部分(图中浅棕色出射光)就是我们常说的高光(Specular Light),常聚集在一个方向周围,向这个方向观察该点会看到明显的高光,从其他方向观察该点时高光则比较微弱;次表面散射部分(图中蓝色出射光)是漫射光(Diffuse Light),光线被散射到各个方向。双向反射分布函数BRDF就是用来模拟这种现象的,这也是本文的重点。
如果光线在物质中的传播距离大于观察尺度,如下面的下图,就需要使用次表面散射算法来建模(基于物理着色(四)- 次表面散射)。

这里写图片描述

光照模型

1. 测量模型

MERL等实验室使用仪器测量了上百种真实材质表面在不同光照角度和观察角度下的反射数据,并记录在MERL BRDF Database等数据库中。这些数据由于采集自真实材质,所以使用它渲染出来的结果很真实,但缺点是没有可供调整效果的参数,无法基于这些数据修改成想要的效果,另外部分极端角度由于仪器限制,无法获取到数据,而且采样点密集,数据量非常庞大,所以并不适合游戏等实时领域,一般可用在电影等离线渲染领域,也可以用来做图形学研究,衡量其他模型的真实程度。

2. 经验模型

经验模型并不是基于物理原理,而是提出经验公式,通过调整参数来模拟光照。
1975年Phong提出Phong反射模型(Phong Reflection Model) :

IPong=kaIa+kd(nl)Id+ks(rv)αIs

下标a表示环境光(Ambient Light);
下标d表示漫射光(Diffuse Light);
下标s表示高光(Specular Light);
k表示反射系数或者材质颜色,I表示光的颜色或者亮度;
α 可以模拟表面粗糙程度,值越小越粗糙,越大越光滑。
反射向量r根据光线入射向量l相对法线n做反射得到: r=2(nl)nl

1977年Blinn对Phong模型做出修改,这就是后来广泛使用的Blinn-Phong反射模型:

IBlinnPhong=kaIa+kd(nl)Id+ks(nh)αIs

向量H(半角 Half-Angle)是光线入射向量L和观察向量V的中间向量: h=l+v||l+v||

Blinn-Phong相比Phong,在观察方向趋向平行于表面时,高光形状会拉长,更接近真实情况。

3.基于物理的分析模型

1967年Torrance-Sparrow在Theory for Off-Specular Reflection From Roughened Surfaces中使用辐射度学和微表面理论推导出粗糙表面的高光反射模型,1981年Cook-Torrance在A Reflectance Model for Computer Graphics中把这个模型引入到计算机图形学领域,现在无论是CG电影,还是3D游戏,基于物理着色都是使用的这个模型。我们将在下文中详细分析它的推导过程。

辐射度学基本量

如表1所示列出了各个辐射度学的物理量

表 1: 辐射度量学中的基本度量,这些度量也成为光照⽅程的基本度量。

名称 符号 表达式 含义
辐射能量(radiant energy) Q hcλ 电磁波的能量
辐射通量(radiant flux)/功率(power) Φ dQdt 单位时间内通过表面或者空间区域的能量的总量
辐射照度(irradiance) E dΦdA 到达表面的通量密度
辐射出度(Radiant Existance) M dΦdA 离开表面的通量密度
辐射强度(radiant intensity) I dΦdω 通过单位立体角的辐射通量
辐射亮度(radiance)/辐射率 L dΦdωdA 每单位面积每单位立体角的辐射通量密度


点光源向四周辐射能量,假想以点光源为中心不同半径的球包围着点光源,穿过这些球的辐射通量是相同的,均为 Φ ,而球的表面积为 4πr2 ,可得通量密度 E=Φ4πr2 ,也就是说通量密度与距离的平方成反比,离光源越远,通量密度越低,这也是为什么光的衰减与距离的平方成正比。
这里写图片描述


立体角是度量三维角度的量,用符号 ω 表示,单位为立体弧度(也叫球面度,Steradian,简写为sr),等于立体角在单位球上对应的区域的面积(实际上也就是在任意半径的球上的面积除以半径的平方 ω=sr2 ),单位球的表面积是 4π ,所以整个球面的立体角也是 4π

BRDF

双向反射分布函数BRDF(Bidirectional Reflectance Distribution Function)就是描述表面入射光和反射光关系的。
对于一个方向的入射光,表面会将光反射到表面上半球的各个方向,不同方向反射的比例是不同的,我们用BRDF来表示指定方向的反射光和入射光的比例关系,BRDF定义为:

f(l,v)=dLo(v)dE(l)

其中f就是BRDF,l是入射光方向,v是观察方向,也即反射光方向。
dLo(v) 是表面反射到v方向的反射光的微分辐射率。
Lo(v) 为表面反射到v方向的反射光的辐射率,
Lo(v) 来自于表面上半球所有方向的入射光线的贡献,而微分辐射率 dLo(v) 特指方向l的入射光贡献的反射辐射率。
dE(l) 是表面上来自入射光方向l的微分辐照度。
E 为表面接收到的辐照度,
E

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BRDF 的相关文章

随机推荐

  • 【2023】java打印PDF(不需要调用浏览器直接静默打印)

    java打印PDF 不需要调用浏览器直接静默打印 一 简 需求 实现步骤 二 代码实现 0 打印模板 1 服务器部分 端口 8090 1 1 maven依赖 1 2 实体 1 2 1 接口返回类 1 2 2 标签纸页面参数类 1 2 3 P
  • C++ Primer阅读笔记--语句的使用

    空语句 最简单的语句是空语句 其只含有一个单独的分号 switch语句 case 关键字和它对应的值一起被称为 case 标签 case 标签必须是整型常量表达式 char ch getVal int iVal 42 switch ch c
  • java接口的多实现可能遇到的问题与解决方法

    目录 接口中的多实现 代码演示 作用 问题总结 1 多实现接口中多个接口的抽象方法名重复 2 多实现接口中默认方法名重复 3 多实现类中默认方法与抽象方法重名 原理 1 默认方法与接口方法重名 2 默认方法重名 3 抽象类方法重名 接口中的
  • 如何进行PHP中的算术运算和字符串操作?

    PHP中需要进行算术运算和字符串操作的时候 我们可以使用相应的运算符和函数 不过 从新手的角度来说 可能会感到一些困扰 不用紧张 我来给你讲解一下 首先 让我们来谈谈算术运算 在PHP中 可以使用 运算符来进行加法运算 使用 运算符来进行减
  • 以太网PHY芯片MDIO寄存器读写-verilog

    MDIO实现还是比较简单的 应用xilinx FPGA内的VIO核就可以直接读写查看 如果板子有串口 做个简单的处理就可以直接通过电脑读写 时序如下图所示 将下面时序实现就可以实现读写 在实际应用时基本不需要配置 有特殊需求可以做一些应用
  • STM32——TIM输入捕获

    文章目录 一 TIM输入捕获 输入捕获简介 频率测量 二 通用定时器的输入捕获通道 通用定时器框图 通道的输出部分 三 主从触发模式 主模式 从模式 四 输入捕获基本结构 五 PWMI基本结构 六 输入捕获模式测频率 电路设计 关键代码 七
  • 微信二次分享不显示摘要和图片的解决方法

    微信二次分享不显示摘要和图片的解决方法 解决不显示摘要和图片的问题 需要调用微信公众号的js sdk的api 需要前端和后台的配合 后台需要返回 appid 公众号的appid timestamp 生成签名的时间戳 nonceStr 签名的
  • 【狂神Java学习笔记】Java基础

    狂神Java学习笔记 Java基础 参考网址 https www bilibili com video BV12J41137hu 一 注释 单行注释 多行注释 文档注释 用于生产说明文档 二 标识符和关键字 1 标识符概念 在java程序中
  • 只有某个网站无法访问的问题

    某个网站登录不上的问题 楼主遇到了只有百度登录不上 而其他网站及软件都能正常使用的问题 经过多次尝试终于解决 有以下几种解决方案 修改DNS地址 可能是由于DNS设置不正确的问题导致 可以打开网络和internet选项 更改适配器设置点击I
  • Linux学习之系统编程篇:读写锁(pthread_ rwlock _init / rdlock / wrlock / unlock / destroy)

    一 读写锁的认识 1 读写锁是1把锁 2 读写锁的类型 pthread rwlock t lock 又分 读锁 不让读内存 和 写锁 不让写内存 3 读写锁的特性 1 读共享 例如 线程 A 加读锁成功 有来个 3 个线程 作读操作 也可加
  • EOS开发者资源的大清单

    EOS开发者资源的大清单 自主网推出仅3个多月后 EOS正迅速发展其用户和开发者社区 在撰写本文时 EOS已经达到了超过20 000 000个不可逆块 并且具有大约3996个每秒交易 TPS 的一致吞吐量 更令人印象深刻的是不断增长的活跃用
  • 远程访问VM虚拟机方式记录

    网络环境 因个人办公网络相关限制 所使用的虚拟机网络环境为NAT模式 操作步骤 1 获取物理机的IP地址 2 获取虚拟机IP地址 确保要连接的虚拟机开启了相关的远程服务 3 VMware相关设置 先使用点击更改设置获取NAT设置的操作权限
  • TiDB学习

    TiDB 简介 SQL 基本操作 分类 查看 创建和删除数据库 创建 查看和删除表 创建 查看和删除索引 记录的增删改 记录的查询 创建 授权和删除用户 部署集群 数据迁移 运维操作 监控和告警 故障诊断 性能调优 教程 生态工具 参考指南
  • 打开Unity项目,加载进度条一直显示busy不消失

    打开Unity项目 加载进度条一直显示busy不消失 解决办法 我的项目路径存在中文 改成全英文路径再打开一下就好了
  • 红黑树并没有我们想象的那么难(上)

    lt 红黑树并没有我们想象的那么难 gt 上 下两篇已经完成 希望能帮助到大家 红黑树并没有我们想象的那么难 上 红黑树并没有我们想象的那么难 下 红黑树并没有想象的那么难 初学者觉得晦涩难读可能是因为情况太多 红黑树的情况可以通过归结 通
  • cad快速选择命令快捷键_CAD快捷键,命令大全

    一 常用CTRL ALT快捷键 ALT TK 如快速选择 ALT NL 线性标注 ALT VV4 快速创建四个窗口 ALT MUP 提取轮廓 Ctrl B 栅格捕捉模式控制 F9 Ctrl C 将选择的对象复制到剪切板上 Ctrl F 控制
  • 机器学习-对范数的理解

    1 范数的概念 参考 https blog csdn net a6333230 article details 87860875 范数 norm 主要是对矩阵和向量的一种描述 矩阵范数 描述矩阵引起变化的大小 AX B 矩阵X变化了A个量级
  • 解决docker中启动Spring Boot微服务注册在Eureka后无法访问的问题

    现象 在docker中启动的Spring Boot实例在Eureka上查看实例时 主机名和ip为docker的容器名称和容器环境内的ip 导致从Eureka上点击服务后 无法打开对应服务 同时导致未在docker环境内的服务也无法使用服务名
  • matlab中增大迭代次数,贝叶斯优化matlab

    当我们遇到的一个最优化问题 但是目标函数不知道 或者说目标函数是类似于黑盒子 很难用数学公式 程序写出来时 此时想要求得目标函数的极值 可以使用贝叶斯优化 其主要的适用的情景是维数不超过20维 目标是一个具体的数值时 这样的情景有很多 比如
  • BRDF

    前言 现实世界中的表面绝大多数都是凹凸不平的 在这种情况下 可以把表面看成是大量朝向各异的微小光学平面的集合 我们肉眼可见的每个点都包含了很多个这样的微小光学平面 光线照射到这些微小表面上时 同样一部分在表面发生反射 这些朝向不同的微表面把