计算机图形学理论(5):光能传递

局部照明与全局照明

  • 局部照明

只考虑从物体表面到眼睛的直射光。

  • 全局照明

全局照明考虑了直接照明和间接照明(根据应用配置可以有多次反射)。

全局照明技术

光能传递

光能传递是一种模拟从光源开始的光漫反射传播的方法。这种方法的基础来自于“能量”,它从根本上与观察方向无关。因此,它对于静态场景是可预先计算的。
image.png

光线追踪

光线追踪是遵循从眼睛到光源的所有光线,这非常适合模拟镜面反射和透明度。
从屏幕发射光线

光能传递

光能传递的特点是:

  • 漫反射表面的全局照明
  • 独立于视图
  • 柔和的阴影,Color Bleeding

比如一面墙原来是白色,由于房间里物体的原因,使得墙面反射物体的那一部分变成物体的原色,这种现象叫做Color bleeding

  • 表面面片(patch)之间的能量传输(使用区域光源)

能量传输是指光源所持有的能量如何传输到另一个物体。
右侧图像展示了patch的样子

光能传递算法

  1. 场景中的表面被分为多个patch。
  2. 根据每对patch,计算一个形状因子,描述有多少能量从patch A 到达patch B。
  3. 计算所有直接照射patch的光照。

image.png

  1. 将光线从所有被照射的patch上,反射到所有它们能够照亮的patch上,为具有更高形状因子(form factors)的patch输送更多光线。

image.png

  1. 重复此步骤将使总光线分布在整个场景中。

那么,什么是形状因子(Form factor)?

Form factor(Fij)是“离开表面 j 并到达表面 i 的光能的分数”。
如何计算form factor
然后我们来看一个光能传递方程,对于每一个patch i:
image.png

  • E_i = 来自光源的能量(发射率)。除光源外,每个patch的能量为零。
  • p_i = 反射率系数
  • H_i = patch i 每单位时间内每单位面积的入射能量

当我们假设场景中有 n 个表面patch时:
image.png
image.png
因此,我们可以从上面的两个方程得到最终的方程:
image.png
image.png
我们可以使用线性系统求解这个方程。

但是使用像高斯消元法这样的线性系统在实际应用中使用起来成本太高,因为它需要 O(n3) 运行时间。

相反,我们可以利用像“Gauss-Seidel”方法这样的近似。(矩阵是对角占优的 -> 它总是收敛的)

计算准确的Form factor很困难,我们可以在这里采用相同的近似值。

半球形状因子(Hemi-sphere form factors)

我们考虑从半球上的区域投影到地面上的某个区域。

我们可以将投影面积与半球面积之比视为近似形状因子。
投影面积 / 半球面积

半立方体形状因子(Hemi-cube form factor)

还有一种方法可以使用半立方体代替半球体:
image.png

缺点
  1. 漏光。由于插值,明亮区域的相邻区域可能看起来会比之前更明亮。
  2. 半立方体混叠。
  3. 网格离散化(因为网格是以“面片patch”为单位处理的。为了更好的细节展示,应该添加更多的面片)
  4. 需要额外的镜面反射通道来捕获镜面高光。
网格离散化的解决方案

我们可以使用自适应网格划分来解决这个问题。
(A) 简单面片三角剖分
(B) 自适应patch生成——阴影细节较高的地方会生成更多的patch。
image.png

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

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

相关文章

SElinux工作原理简介并演示chcon、semanage、restorecon的使用方法

目录 一.SElinux工作原理简介 1.system_u 2.object_r 3.httpd_sys_content_t 4.s0 二.SElinux策略的具体使用详情 1.restorecon 2.semanage 3.chcon 一.SElinux工作原理简介 通过mac方式管理进程,管理的目标是进程是否具有读取权限的文件(文件…

创业公司该怎么进行季度绩效考核?

创业公司在绩效考核中面临的问题主要包括目标设定不清晰、时间安排不合理、绩效标准不明确、缺乏反馈和沟通、过分关注短期成果、资源不足以及文化差异等。这些问题可能单独或共同存在,导致绩效考核无法达到预期效果,甚至可能对员工的工作积极性和公司的…

Python-动态柱状图可视化

柱状图 1.基础柱状图1.1通过Bar构建基础柱状图1.2反转x轴,y轴1.3数值标签在右侧1.4总结 2.基础时间柱状图2.1掌握基础的时间线配置动态图表2.2创建时间线2.3自动播放2.4时间线设置主题2.5总结 3.GDP动态柱状图绘制3.1掌握列表的sort方法并配合配合lambda匿名函数完成…

【数据库系统概论】第5章-数据库完整性

文章目录 引言5.1 实体完整性5.2 参照完整性5.3 用户定义的完整性5.4 完整性约束命名子句5.6 触发器 引言 数据库的完整性是指数据的正确性和相容性。 正确性:符合现实语义、反映当前实际情况。性别必须为男或女。 相容性:数据库同一对象在不同关系表中…

MySQL 中的 ibdata1 文件过大如何处理?

ibdata1 是什么文件? ibdata1 是InnoDB的共有表空间,默认情况下会把表空间存放在一个名叫 ibdata1的文件中,日积月累会使该文件越来越大。 ibdata1 文件过大的解决办法 使用独享表空间,将表空间分别单独存放。MySQL开启独享表空…

刷新账号密码过期时间——脚本案例

OS账号默认30天密码过期,执行下面脚本刷新密码过期时间。 脚本先是从密码文件中读取用户和密码,再使用passwd命令行修改密码。然后过滤chage -l的关键信息判断密码是否修改成功。最后使用expect脚本对每个用户进行ssh登录并测试,确保…

Flutter 官方状态管理 Provider基本使用

当App的复杂性发展到一定程度,就会出现一个页面中不同深度的子Widget需要共享访问同一个数据状态,甚至不同页面需要共享同一个状态的情况,这时我们可能会想到InheritedWidget。InheritedWidget是 Flutter 中非常重要的一个功能型组件,它提供了一种在 Widget 树中从上到下共…

115基于matlab的用于铣削动力学建模的稳定性叶瓣图分析(stablity lobe)

基于matlab的用于铣削动力学建模的稳定性叶瓣图分析(stablity lobe),程序已调通,可直接运行。 115matlab铣削动力学 (xiaohongshu.com)

生活常识-如何开社保证明(四川)

下载并打开天府市民云APP 注册后登陆 点击社保服务 点击社保证明 点击【四川省社会保险个人社保证明名(近24个月)】 点击下载 下载后点击【QQ发送给好友,然后发送给自己的电脑设备(我的电脑)】

Pthon Request库源码解读之__init__.py

首先我们需要了解下这个文件的功能: init.py 文件在 Python 中有多种用途,但当我们讨论通过 pip 安装的插件或包时,其主要用途是为了确保: 包的结构完整性: 当你尝试导入一个包(文件夹)时&#…

数据类型-变量-内存四区-指针

1、内存四区 1.1、数据类型的本质 1)数据类型基本概念 类型是对数据的抽象类型相同的数据具有相同的表示形式、存储格式、相关的操作程序中使用的数据必定属于某种数据类型数据类型和内存 有关系C/C 引入数据类型,可以更方便地管理数据 2&#xff09…

laravel5.8中实现验证码组件的安装和验证

本篇文章主要讲解使用laravel5.8自带的验证码库实现验证码验证的效果教程。通过本教程你可以快速接入到自己的项目中开发相应的验证功能。 作者:任聪聪 (rccblogs.com) 日期:2023年12月17日 实际效果 安装步骤 步骤一、输入命令 composer require mews…

beego使用布局文件和模板文件进行页面渲染

在 Beego 框架中的控制器基类 Controller 中自定义一个方法,用于渲染模板文件并设置模板数据。 func (this *IndexController) display(tplname string) {this.Layout this.moduleName "/layout.html"this.TplName tplnamethis.LayoutSections make(…

小程序开发与移动应用开发有哪些区别?

小程序开发与移动应用开发:差异何在? 在数字化浪潮下,小程序和移动应用已成为人们日常生活中不可或缺的一部分。但你是否真正了解小程序开发与移动应用开发之间的区别?这篇文章将为你揭开两者之间的神秘面纱。 一、运行环境不同…

不限带宽是否意味着无限带宽

当今互联网发展迅速的时代,带宽成为了网络连接速度的重要指标之一。而对于许多用户来说,无限带宽似乎是一个理想的选择。不限带宽并不等于无限带宽。我将解释不限带宽的含义,并探讨其与无限带宽之间的区别。 不限带宽是指网络服务提供商&…

夸克 自动脚本 每次挖到自动输代码

一个bash脚本,功能是持续运行一个名为`mint-dft`的Yarn CLI命令,并在出现错误时自动重试。 代码解释: 1. `#!/bin/bash`: 这是shebang行,告诉系统使用/bin/bash来解析和执行这个脚本。 2. `export NODE_OPTIONS=--max_old_space_size=49152`: 这一行设置了环境变…

Navicat 年度报告 (2023) | 不忘初心,砥砺前行

#SUMMARY#年度报告 时光荏苒,转眼时间来到 2023 年与 2024 年交汇处。回顾 2023,数据库行业跌宕起伏,暗流涌动。作为数据库工具提供商 Navicat,我们也面临着诸多挑战与压力。一直以来,我们以用户体验为先、技术为本&a…

代理模式:中间者的故事

代理模式:中间者的故事 介绍需求分析代理模式代码实现代理模式整理和用途第一种用途第二种用途第三种用途第四种用途 总结 介绍 本文引用《大话设计模式》第七章节的内容进行学习分析,仅供学习使用 需求:小明拜托自己好朋友小王给他朋友小美…

Swift函数式编程——函数

目录 Swift函数式编程-函数 高阶函数(Higher order function) 一等函数(First class function) 闭包 函数柯里化(Function Curring) 函数式思维 使用函数解决问题 使用函数组合 总结 Sw…

解决IDEA 不能正确识别系统环境变量的问题

问题描述 本人laptop 上的是设置了GOOGLE_APPLICATION_CREDENTIALS 这个环境变量的, 正常java or python 的程序能基于这个环境变量使用 某个gcp service account 去访问GCP的资源 [gatemanmanjaro-x13 ~]$ env | grep -i google GOOGLE_APPLICATION_CREDENTIALS/…