GAMES202 Real-Time Global Illumination

news2024/11/25 23:48:16

文章目录

  • Lecture 7 Real-time Global Illumination (in 3D)
    • RSM (Reflective Shadow Maps)
  • Lecture 8 Real-time Global Illumination (screen space)
    • LPV (Light Propagation Volumes)
    • VXGI (Voxel Global Illumination)
    • SSAO (Screen Space Ambient Occlusion)
  • Lecture 9 Real-Time Global Illumination (screen space cont.)
    • SSDO (Screen Space Directional Occlusion)
    • SSR (Screen Space Reflection)

Lecture 7 Real-time Global Illumination (in 3D)

实时渲染里面的 GI,其实就是比直接光照多一次 bounce 的间接光照。
在这里插入图片描述
一切被直接光照照射的物体,又可以作为光源照亮其他物体,我们把这些叫做 secondary light source(次级光源)。

我们high level地分为两步:哪些地方可以被光源直接照亮当作次级光源;这些次级光源对点p的贡献怎么求。我们为了简化,假设次级光源都是diffuse的但是p不一定是diffuse的(Any reflector is diffuse,反射物是diffuse的,接受物不一定)。

RSM (Reflective Shadow Maps)

对于第一个问题(哪些地方可以被光源直接照亮当作次级光源),可以用 shadow map 去找,shadow map对应的每一个像素就是一个次级光源。

于是我们知道了,哪些地方是次级光源,且反射出去的能量是多少。
在这里插入图片描述
在这里插入图片描述
但是这里比较难的是,visibility不好算(次级光源q到p的可见性),于是就不算了…

人们还有一些trick,比如每次对shading point,我们不希望完整地跑一遍 shadow map 来算次级光源的影响,我们于是把这个shading point直接投影到shadow map下,然后仅采样它周围的像素认为是临近的像素。

Lecture 8 Real-time Global Illumination (screen space)

LPV (Light Propagation Volumes)

核心问题:可以求出对任意一个 shading point,一个次级光源对他的 radiance 值。

假设:Radiance 在传播的过程中是不变的(像之前的path tracing里面也有这样的假设)。

具体做法:

  1. 用 RSM ,找到所有次级光源(被直接光照照亮的像素)
  2. 注入(Injection):把场景划分为格子(可以用3d纹理),次级光源换算到格子里,描述任意一个格子的radiance值,可以用二阶SH来描述他们的初始值
    在这里插入图片描述
  3. 传播:每个格子传播到周围的六个格子里去,迭代至稳定(差不多迭代四五次就行)
    在这里插入图片描述
  4. 此时知道整个场景任意一个格子的radiance值,于是对任意一个shading point确定它的格子就行,然后拿到radiance值再渲染

问题:
格子精度不够,场景遮挡信息不能很好的体现,就容易漏光(Light leaking,比如照亮自己的背面)

VXGI (Voxel Global Illumination)

和之前不一样的地方:
确定次级光源不再用 RSM 那样的像素,而是变成了体素;
最后求radiance是直接从相机出发,打到对应物体,根据物体的材质做一次 cone tracing。
在这里插入图片描述
具体做法:

  1. 体素化场景,并用加速结构做一个 hierarchy
    在这里插入图片描述
  2. Pass 1 :记录相应体素的光源分布信息和用来反射出光线的那些表面的法线的分布。这样一来,我们有输入的直接光方向、反射的法线的大概范围(Lobe?根据材质算一下)
    在这里插入图片描述
  3. Pass 2:实际渲染
    在这里插入图片描述
    最暴力的方法:判断一下相交的所有体素。 不过由于 cone 传播的时候会越来越大,所以我们可以简化一下,先算出周围的体素,然后在更大的层级上找就行了(毕竟已经建立了 hierarchy)。

如果是 diffuse 的就用大概八个圆锥就可以覆盖了:
在这里插入图片描述

SSAO (Screen Space Ambient Occlusion)

环境光遮蔽就是对全局光照的一种近似。

对任意一个shading point,我们大胆假设它的间接光照是一个常数。但是我们这里要考虑这个shading point的visibility function,即它不见得可以接收到这个间接光。

补充:在一些三维渲染软件里面,即离线里面,也有这种东西。就像拿个模型用全白的环境光去渲染直接光,这种也叫做天光(看起来就和AO一样):
在这里插入图片描述
我们拆分一下渲染方程,单独把visibility项拆出来(下图右边的ρ是diffuse的albedo):
在这里插入图片描述
我们这里在蓝框式子里同时弄了一个cos θ,其实是在一个单位圆上做了一个积分(projected solid angle积分):
在这里插入图片描述
不过 SSAO 其实远远没有那么复杂:
在这里插入图片描述
前面只是便于理解:除以一个归一化的pai,其实相当于从shading point 从四面八方看得到的visibility的平均结果。

那么理论有了,实际上做我们并不是Tracy光线去看是否被遮挡,我们的SSAO做了一个假设,最后我们只需要做采样:
在shading point往周围撒一些采样点,然后往深度缓冲采样,如果撒的点的深度大于深度缓冲的值则是被遮挡住的(当然我们和rendering equation一样,只需要考虑法线所在的半球)
在这里插入图片描述
(有法线的情况叫 HBAO)

Lecture 9 Real-Time Global Illumination (screen space cont.)

SSDO (Screen Space Directional Occlusion)

AO 不能 color bleeding,DO 是更精准得到全局光照的信息的方法。

SSDO 更 path tracing 有点像:
在这里插入图片描述
在这里插入图片描述
如上图,很有趣的是,AO和DO是完全相反的两种假设:AO认为红色圈是有间接光的,黄色圈是被遮挡的没有间接光的;而DO认为红色圈直接打出去了接收到的是直接光而不会有间接光,黄色圈才可能接收到间接光。(当然这两种都不完全正确)

和 HBAO 类似,也是在半球上撒一些点,然后和相机方向的深度去做判断来看是否遮挡(下图最右边的A点就是假设不正确的例子):
在这里插入图片描述

SSR (Screen Space Reflection)

仍然是一种实时渲染中实现全局光照的方式。(闫老师认为应该叫 Screen Space Ray Tracing)

因为Screen Space得到的其实就是场景面向摄像机最外围的一层壳。我们有两个主要任务:

  1. 任意一根光线和这个壳相交的结果
  2. 求到交点了,相交的这个点对shading point的贡献

在这里插入图片描述
这里的步长,因为没有 sdf 信息,我们只能设一个定值每次march,但是这里我们可以动态决定步长是多少:
在这里插入图片描述
如上图,比如我们按照像素划分出这样一格一格来,我们希望可以知道一次走几格。我们先拿场景深度做一个mipmap,但是这里的mipmap比较特别,我上一层像素是下一层四个像素的最小值而不是平均值:
在这里插入图片描述
那么如果一个光线和上层的像素都不能相交,那么下层的像素只可能更深,就更不可能相交了。于是这样我们就可以快速跳过很多格子。(可以用试探步,这次没相交下次步子就更大,相交了就退回来再把步子放小)

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

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

相关文章

零基础如何入门Web性能测试?

1、目前正在研究jmeter,请问初期做性能,应先从几点做起? Jmeter和LR都是目前性能测试的首选工具,如果你有LR的学习背景,那么Jmeter上手会很快,重点理解线程和进程的概念,流程和LR是类似的。如果…

ISO27001信息安全管理体系具体要求 学习笔记

ISO27001制定背景 ISO27000 从诞生到现在只不过 20 年间的事情,但基本上可以看出一个标准 “源于生活,高于生活”的发展特点,也就是说,一个真正普遍适用并能被普遍接受的标准,必然是能体现相关领域最佳惯例并能为最佳…

这篇文章告诉你视频转音频软件哪个好用,有需自取

大家看过线下的演唱会或livehouse吗?有些歌手会在现场准备一些小彩蛋,例如演唱还未发行的歌,或是歌曲的其它版本,这时候许多歌迷都会纷纷录制下来,以便后续的欣赏观看。 但是每次想听的时候,都得反复的打开…

工业外观设计中色彩如何有效运用

我相信业内很多设计师都在考虑如何在工业产品外观设计中有目的地运用色彩。最近看了一篇关于如何在工业产品中使用色彩的论文,简单地说了一下自己的想法。 一、加工技术应考虑产品外观设计 工业设计师不仅要考虑材料,还要考虑其表面处理及其颜色。因此&a…

抖音变现模式?80%的人都不知道的秘密,三类更适合玩私域的产品

这篇内容关于适合玩私域的三类产品,精简一下让大家可以3分钟看完。不玩悬念,直接上千货。 上一篇在我赢助手小禾呈序上给大家讲了三个变现的建议,以及两种我比较推荐的变现方式。带货和支付费。今天再讲一个主流的变现思路,最后还…

Android Material Design之MaterialButtonToggleGroup(九)

效果图 资源引入 implementation androidx.appcompat:appcompat:1.3.0 implementation com.google.android.material:material:1.4.0属性 属性描述android:id控件Idandroid:layout_width控件长度android:layout_height控件高度app:checkedButton默认选中得按钮idapp:selectio…

物联网毕业设计 单片机家庭气象站设计与实现

文章目录1 简介2 主要器件引脚连接3 实现效果4 部分实现代码1 简介 🔥 Hi,大家好,这里是丹成学长的毕设系列文章! 🔥 对毕设有任何疑问都可以问学长哦! 这两年开始,各个学校对毕设的要求越来越高&#x…

揭秘你代理商做不起来货卖不出去的原因,探讨其背后的商业逻辑

现在很多代理商,大都是可以归于“个体户”性质。这些也代表了微小型企业,从前期的蓬勃发展,到现在的经营受限,特别是疫情等影响,很多人的经营都处于举步维艰的状态,如果你们现在是代理商,仓库里…

v-charts,点击页面按钮,不能二次重绘,解决方案

v-charts简介: 是基于 Vue2.0 和 Echarts 封装的图标组件,只需要统一提供一种对前后端都友好的数据格式设置简单的配置项,就可以生成常见的图表。 v-charts官方文档:v-charts echarts官方文档:Documentation - Apach…

8个关于 Promise.then 和 Promise.catch 的面试题,一定要掌握

前面,我们要讨论了 Promise 在异步编程中的执行,错过的朋友可以直接点击《10 个 JavaScript Promise 的面试题》这篇文章进行查看。 在今天的文章中,我们将讨论这些核心 API 用于 Promise 对象的用法。 这里我提供了10个代码片段&#xff0…

SequoiaDB湖仓一体分布式数据库2022.11月刊

本月看点速览 产品能力再获认可,入围多个榜单、报告 ‍精彩亮相2022沙丘大会湖仓一体专场 实力吸睛,获多家权威媒体关注与报道 生态圈不断扩大,与6家合作伙伴完成互认证 青杉计划2023进行中,一起攀登更高的“杉” 产品能力再获…

WPF 3D 摄像机LookDirection属性研究

像前文一样画一个三角形; 摄像机的位置是(-2,2,2); 坐标系是这样的,x、y轴是在屏幕上,X轴正向向右,Y轴正向向上;Z轴是垂直于屏幕,从屏幕出来往人的方向为正向,往屏幕里边去是-Z&…

01-06-Hbase基础定义

Hbase定义: Hbase是一种分布式,可扩展,支持海量数据存储的NoSQL数据库。HBase是一个分布式的、面向列的开源数据库。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。…

[附源码]Python计算机毕业设计SSM垃圾分类网站的设计与实现(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

得一微冲刺科创板上市:拟募资约12亿元,2021年营收同比增长260%

撰稿|汤汤 来源|贝多财经 近日,得一微电子股份有限公司(下称“得一微”)在上海证券交易所科创板递交招股书(申报稿)。本次冲刺科创板上市,得一微拟公开发行不超过2354万股股份,计划募资12.24亿…

两直线垂直,斜率乘积为-1的证明

老早以前在学习初等函数的时候,线性函数中的两直线y m0x b0, y m1x b1如果垂直,则有结论两条直线的斜率乘积为-1即m0*m1 -1,以前也只是拿来用,没有证明过。最近在学图形学的时候,突然想起了这个点,因此…

[附源码]计算机毕业设计springboot社区人员信息管理系统设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

UE5笔记【十一】蓝图变量BluePrint Variables

类似于在材料中将配置参数化,我们这里也可以将配置变量化。最后实现在对象detail细节中设置修改。 在左侧组件中找到【变量】,然后点击那个加号,添加两个变量用来控制楼梯和盒体的升降速度。 分别命名为:BoxSpeed和StairSpeed。然…

Java链接redis集群

1.导入依赖 <dependencies><!-- 1、 Jedis--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency><!-- 2、 Junit测试--><depen…

STM32f767之通用定时器

一&#xff0c;通用定时器基本介绍 二&#xff0c;配置相关项 1&#xff0c;时钟源。 一般我们选择内部时钟&#xff0c;TIM3通过APB1得到。 2&#xff0c;主从模式和触发源。 用到的比较少&#xff0c;暂时不考虑&#xff0c;选disable。 3&#xff0c;输出通道。 如果…