【路径追踪】前置知识1--辐射度测量学 Radiometry

2023-10-24 00:20

本文主要是介绍【路径追踪】前置知识1--辐射度测量学 Radiometry,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Intro

什么是辐射度测量学? 为什么需要辐射度测量学?
辐射度测量学为我们提供了用于描述光线传播和反射的相关概念以及数学工具.
图形学早期, 在各种条件的制约下, 我们一般通过诸如 Lambert 漫反射模型、Blinn-Phong 高光模型等计算表面光照. 这些经验模型能在一定程度上满足了人们对效率和效果的需求, 但是与产生令人信服的真实感渲染结果依旧存在较大的差距.
辐射度测量学就是用来解决这一问题的工具. 辐射度测量学通过精准表达光学的物理信息, 让我们得以在物理正确的基础上进行与光照相关的计算, 从而得到物理正确的结果.


光线追踪系统中对辐射度测量学的基本假设

虽然辐射度测量学是物理正确的, 但对于图形学来说, 我们只在集合光学领域进行计算. 在相关的讨论中都隐含着如下假设:

  1. 线性 Linearity: 光学系统中两个输入的合成效果通常等价于各自输入之和. 这一特性十分重要, 线性可加性极大的简化了我们对光线传输的分析与计算
  2. 能量守恒 Energy conservation
  3. 忽略偏振现象 No polarization
  4. 忽略荧光或磷光现象 No fluorescence or Phosphorescence
  5. 稳态 Steady state: 假设光线在环境中已经达到了稳定的状态, 所以 radiance 的分布不会随着时间的变化而变化. (在现实中光线的稳态往往在瞬间完成, 所以这一假设并不是系统产生的限制条件)

PS: 在这些条件下, 依旧难以有效表示的现象是光线的干涉和衍射现象. 产生这些现象的时候, 两片区域的全部 FLux 并不等于各自区域 Flux 的和.


辐射度测量学中的关键物理量

1. Radiant Energy
2. Flux(Power)
3. Intensity
4. Irradiance
5. Radiance

Radiant Energy

能量是辐射度测量学的起点, 单位是焦耳. 由于能量会随着时间不断累积, 所以在图形学领域很少使用能量进行研究, 但是我们需要使用的物理量都是由能量开始不断计算得出的.
Energy

Flux(Power)

Flux表示单位时间内辐射出的能量, Flux也被称为功率(Power).
Power
在渲染时, 我们一般用 Flux 来表示光源的总发射量. 以点光源为例, 我们通过设置包围点光源的球壳来分析 Flux. 需要注意的是, 虽然大球壳上通过任何一个微面元的能量都小于小球壳上的, 但是由于大球壳同时拥有更大的表面积, 所以大小两个球壳上的总 Flux 是相等的.

Point Light

衡量光源信息的重要物理量

Radiance

  • Intensity : 定义光源辐射出多少能量
  • Irradiance : 定义物体表面可以接收到多少能量
  • Radiance : 定义光线在传播时的能量

Intensity

Intensity 表示单位立体角(Solid Angle)上光源辐射的 power.
Intensity

那么什么是立体角? 我们知道平面上的一个角等于其对应的弧长除以半径. 立体角也采用非常类似的定义方式, 我们从球心发射一个类锥体会在球面上截取出一个面积, 立体角就等于这个面积除以半径的平方(注意! 我们所说的面积是在球面上的投影面积).
角和立体角下图展示了微分立体角, 计算非常直观不再赘述.

微分立体角

Irradiance

Irradiance 表示物体表面上单位面积上接收到的 power.

Irradiance

如下图所示, Irradiance 的定义同时也解释了 Lambert Cosine Law 的含义.
(Lambert Cosine Law : 到达物体表面的光能与光线方向和表面法线夹角的余弦成正比)

Lambert Cosine Law
与之类似, 我们同样可以直接利用 Irradiance 的定义来解释为什么点光源会以距离平方的形式不断衰减. 同时这里我们可以进一步明确一点, 我们所说的衰减, 是 Irradiance 在衰减, Intensity 并不会衰减.

点光衰减

Radiance

Irradiance 告诉了我们表面上单位面积内接收到的 power 是多少. 这其中有一个关键的问题是 Irradiance 并没有体现出 power 在不同方向上的分布, 而光线追踪的过程明显是与方向相关的, 所以我们定义了 Radiance 来表达这一属性.
Radiance 是指辐射源在某一方向, 每单位投影面积, 每单位立体角内的 power.
Radiance接下来我们尝试使用"传输理论"来解释 Radiance 定义中的余弦项从何而来.
传输理论涉及物理量(如能量, 电荷, 质量)的传输或流动. 假设我们已知 x 处的光粒子密度为 p(x), 那么在一个很小的体积 dV 内光粒子的个数就是 p(x)dV. 下面再考虑这些粒子在时间 dt 内穿过一些不同的表面 dA. 假设光粒子的速度为 c, 那么这段时间内流过表面的体积就是 cdtdAcosθ, 那么穿过表面的粒子数量就是 p(x)cdtdAcosθ. 这很直观的说明了我们为什么要使用投影面积以及 radiance 中余弦项的来源.

传输理论


参考资料

  • 全局光照算法技术(第2版) (Advanced Global Illumination, 2nd Edition) Philip Dutre等著, 黄刚译
  • Physically Based Rendering: From Theory To Implementation
  • GAMES101-现代计算机图形学入门-闫令琪 Lecture 14 Ray Tracing 2
  • PBRT-E5.4-辐射学(Radiometry) 知乎: 玉米

这篇关于【路径追踪】前置知识1--辐射度测量学 Radiometry的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/271404

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-