Global IIIumination(GI)全局光照原理(一)3D空间全局光照

文章目录

  • 一、Global IIIumination(GI)全局光照基本概念
  • 二、主流的全局光照方法:
  • 三、Reflective shadow maps(RSM)反射阴影贴图 全局光照
  • 四、Light Propagation Volumes (LPV)光线传播体积 全局光照
      • 1.第一步,RSM找到次级光源,如图小太阳:
      • 2.注入,即将次级光源注入到每个Volume格子:
            • 球谐光照:
      • 3.传播,每个volume格子向它相邻的6个面传播到其他6个格子里,整体迭代四五次后趋于稳定。
      • 4.最后一步 渲染,对于任意一个shading point 找到它所在的Volume格子,取格子内的SH光照进行光照着色。
  • 五、Voxel Global Illumination(VXGI)体素全局光照
      • 1.VXGI第一趟Pass:
      • 1.VXGI第二趟Pass:

一、Global IIIumination(GI)全局光照基本概念

在这里插入图片描述
渲染方程告诉我们,全局光照=自发光+直接光+间接光。前两者很好求得,解全局光照就变成了先求解间接光。

在这里插入图片描述
理论上光可以在空间内无数次反弹,但在实时渲染中通常我们所说的间接光照只计算一次反弹。
在这里插入图片描述
如上图,我们可以把一切被直接光源照射到的物体当成新的光源(次级光源),从相机出发射线到P,P所接受的间接光照就是Q点反弹的光。
在这里插入图片描述
如上图只有直接光照,物体没被照射的地方就是黑的如P点。这些被照射的地方(小太阳)我们可以把它当成次级光源。
在这里插入图片描述
那么P点受到的光照就是从所有次级光源反弹给它的光照。

二、主流的全局光照方法:

3D空间方法:
在这里插入图片描述
屏幕空间方法:
在这里插入图片描述

三、Reflective shadow maps(RSM)反射阴影贴图 全局光照

如何确定次级光源?
在这里插入图片描述
这里我们用reflective shadow maps(RSM)反射阴影贴图来确定哪些物体被直接光源照亮,也就是确定次级光源。
为了计算辐射量,我们有个基本假设:
任何次级光源都是漫反射,因此向外的辐射都是均匀的。

辐射度量学:
在这里插入图片描述
Radiant Intensity辐射强度:从光源发出的光
Irradiance辐照度:落在A表面的光
Radiance辐射率:光沿着射线传播 的辐射功率。
在这里插入图片描述
反射阴影贴图比起阴影贴图不仅只存了Depth深度,还存了world coordinate世界坐标, normal法线, flux通量等。
在这里插入图片描述
RSM效果,通常手电筒的全局光照喜欢用RSM。
RSM优点就是好实现,缺点等同于shadow map:有多少直接光源就需要多少个reflective shadow maps;不去算间接光照可见性检查会有很多失真;假设任何次级光源都是漫反射也是不符合物理的。

四、Light Propagation Volumes (LPV)光线传播体积 全局光照

LPV由CryEngine在《孤岛危机》中首次引入,其原理就是将场景划分成Volume格子,计算次级光源反射出的光(红色箭头)有多少进入到格子P(黄色)?
在这里插入图片描述

1.第一步,RSM找到次级光源,如图小太阳:

在这里插入图片描述

2.注入,即将次级光源注入到每个Volume格子:

a.引擎上一般用3维纹理划分格子
b.找到每个格子包围的虚拟光源(次级光源发出的)
c.虚拟光源加起来得出每个格子的定向辐射量
d.SH球谐函数做压缩 SH来描述此格子里的光照信息

球谐光照:

球谐光照的实质是通过球谐函数的特性将预先计算好的球谐系数还原为光照信息:
通过球谐函数将场景的环境光Cubemap,例如天空球贴图、Volume格子、计算出球谐系数
需要光照信息的时候,再通过球谐函数和系数,还原出光照信息
通过设定球谐函数的级数,可以获得更高的还原度
通常游戏引擎渲染中,只需要三阶,即9个系数,也称SH9
在这里插入图片描述

3.传播,每个volume格子向它相邻的6个面传播到其他6个格子里,整体迭代四五次后趋于稳定。

在这里插入图片描述

4.最后一步 渲染,对于任意一个shading point 找到它所在的Volume格子,取格子内的SH光照进行光照着色。

在这里插入图片描述
但这样有个问题:如图P点是次级光源,无论如何都照亮不了对背面的q点,但因为我们把空间划分成Volume格子,而格子内的光辐射是同样的,那么q点经过错误计算也会被照亮,如图:
在这里插入图片描述
LPV这种缺陷叫做:光泄漏 。是由于格子比物体大照成的,可以通过动态自适应格子大小来解决。

五、Voxel Global Illumination(VXGI)体素全局光照

在这里插入图片描述
VXGI体素全局光照和RSM一样也是一个两趟Pass算法,LPV算4趟算法。VXGI和RSM有主要以下区别:

  • RSM的次级光源是像素(物体微小表面),而VXGI的次级光源被划分成了一个一个格子,而是有层级结构的格子(八叉树实现),我们称为体素。
  • RSM采样的是3D场景中的次级光源,VXGI则是由摄像机发射出射线打到shading point反射到哪些体素来确认间接光照。
    在这里插入图片描述

1.VXGI第一趟Pass:

被主光源直接照射的同样也是次级光源,区别于RSM的像素(物体微小表面)次级光源,VXGI是由八叉树分隔的立方体格子,每个格子记录次级光源的分布和格子内的表面的法线分布。
在这里插入图片描述

1.VXGI第二趟Pass:

如果shading point是光滑的表面,那么反射就是一个圆锥体
根据(不断增长的)圆锥体大小查询格子层次结构(体素)的光照信息
在这里插入图片描述
如果shading point是漫反射表面,那就反射多个圆锥体,找到对应范围内的格子体素进行相加:
在这里插入图片描述

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

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

相关文章

Linux中的网络时间服务器

本章主要介绍网络时间的服务器 使用chrony配置时间服务器配置chrony客户端服务器同步时间 1.1 时间同步的重要性 一些服务对时间要求非常严格,例如如图所示的由三台服务器搭建的ceph集群 这三台服务器的时间必须保持一致,如果不一致,就会显…

C语言之动态内存管理(malloc calloc realloc)

C语言之动态内存管理 文章目录 C语言之动态内存管理1. 为什么要有动态内存管理2. malloc 和 free2.1 malloc2.2 free2.3 例子 3. calloc 和 realloc3.1 calloc3.2 realloc 4. 常见的动态内存错误4.1 对NULL指针的解引⽤操作4.2 对动态开辟空间的越界访问4.3 对⾮动态开辟内存使…

Themis: Fast, Strong Order-Fairness in Byzantine Consensus

目录 笔记后续的研究方向摘要引言秩序井然 Themis: Fast, Strong Order-Fairness in Byzantine Consensus CCS 2023 笔记 后续的研究方向 摘要 我们介绍了Themis,这是一种将交易的公平排序引入(许可的)拜占庭共识协议的方案,最…

【洛谷】更换头像

错误展示 今天换头像的时候发现一直换不了,即使显示修改成功,然后我等了半个多小时也还没换好 解决办法 上传成功头像后,按ctrl F5 结果 更新成功!

文本润色工具有哪些,高质量的文本润色软件

在当今信息过载的时代,文本的重要性愈发凸显。即便是最精心构思的文章,若未经过仔细的润色,也难以达到最佳的表达效果。本文将专心分享文本润色工具的种类。 文本润色工具的种类 文本润色工具根据其功能和应用范围可以分为多个种类&#xff…

菜鸟学习日记(python)——推导式

python中的推导式是一种独特的数据处理方式,可以从一个数据序列去构建另一个新的数据序列的结构体。 它包括以下推导式: 列表(list)推导式字典(dict)推导式集合(set)推导式元组&am…

Kettle 安装配置

文章目录 Kettle 安装配置Kettle 安装Kettle 配置连接 Hive Kettle 安装配置 Kettle 安装 在安装Kettle之前,需要确定已经安装Java运行环境。Kettle需要Java的支持才能运行,JDK的版本最好是8.x的太新的也会出现bug。Kettle的7.1版本的太旧了&#xff0…

排序-插入排序与希尔排序

文章目录 一、插入排序二、希尔排序 一、插入排序 思路: 当插入第i(i>1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将…

Apollo新版本Beta自动驾驶技术沙龙参会体验有感—百度自动驾驶开源框架

在繁忙的都市生活中,我们时常对未来的科技发展充满了好奇和期待。而近日,我有幸参加了一场引领科技潮流的线下技术沙龙,主题便是探索自动驾驶的魅力——一个让我们身临其境感受创新、了解技术巨擘的机会。 在12月2日我有幸参加了Apollo新版本…

PaddleClas学习3——使用PPLCNet模型对车辆朝向进行识别(c++)

使用PPLCNet模型对车辆朝向进行识别 1 准备环境2 准备模型2.1 模型导出2.2 修改配置文件3 编译3.1 使用CMake生成项目文件3.2 编译3.3 执行3.4 添加后处理程序3.4.1 postprocess.h3.4.2 postprocess.cpp3.4.3 在cls.h中添加函数声明3.4.4 在cls.cpp中添加函数定义3.4.5 在main.…

亚马逊、OZON、速卖通、美客多店铺怎么增加页面访问量?

店铺怎么增加页面访问量?页面访问量是衡量你的亚马逊店铺或产品在互联网上的可见性和曝光度的重要指标。如果你的店铺没有足够的访问量,意味着很少有人能看到你的内容或产品,这将限制你的潜在受众和销售机会。 没有流量就没有店铺&#xff0c…

京东运营数据分析:10月京东奶粉行业销售数据分析

近年来,随着出生人口红利逐渐消逝,婴幼儿奶粉竞争进入红海时代,产品逐渐过剩。在这种情况下,我国奶粉市场进入调整阶段,企业开始将目光投向奶粉的品类细分领域,如有机奶粉、羊奶粉、特殊配方奶粉、成人奶粉…

物联网+AI智慧工地云平台源码(SaaS模式)

智慧工地云平台充分运用数字化技术,聚焦施工现场岗位一线,依托物联网、互联网、AI等技术,围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三大体系为基础应用,实现全面高效的工程管…

达梦 DM 数据库

达梦数据库 varchar varchar2的区别 DATE DATETIME TIMESTAMP 类型

空中“千里眼” 复亚环保监测无人机助力生态保护

生态环境保护是全球共同关注的重要议题,为了持续改善环境、加强执法效能,复亚智能环保监测无人机在环保领域大显身手。该智能系统为环境执法人员提供了全新的工具,使其能够在无人机的“千里眼”下,及时发现和制止环境违法行为&…

ssm校园论坛管理系统项目分享

校园论坛管理系统是基于java编程语言,mysql数据库,ssm框架和idea工具开发,本系统主要分为学生用户,管理员两个角色,其中用户可以注册登陆系统,在线发帖,查看栏目帖子,回复帖子&#…

智能外呼核心功能是什么? 智能外呼有什么功能?

智能外呼是现今市场营销领域中的一种新型的技术手段。与传统的市场营销不同,智能外呼不仅仅是单纯的电话营销,其功能更加丰富多样,而且能够节省很多人力、财力资源。 智能外呼的核心功能是什么呢? 智能外呼的核心功能是AI智能外呼…

泰裤辣!这个网站制作电子产品册很轻松

电子产品册的制作对于许多企业来说是一项重要的任务,它不仅能够帮助企业展示自己的产品,还能够提高企业的品牌形象和市场竞争力。 这个网站能够轻松制作电子产品册,这无疑是一个非常有用的工具,可以帮助许多企业节省时间和精力&am…

​LeetCode解法汇总1466. 重新规划路线

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: n 座城市&…

pytest +uiautomator2+weditor app自动化从零开始

目录结构1.0 把设备连接单独移出去了 模块操作代码,有一些流程操作和断言方法 from devices import dv from time import sleep import random from tool.jt import capture_screenshotdef initialization(func):def wrapper():sleep(1)dv.app_stop(com.visteon.…
最新文章