Lecture8 | LPV VXGI SSAO SSDO
Review: Lecture 7 | Lecture 8
LPV (Light Propagation Volumes)
Light Propagation Volumes(LPV)-孤岛惊魂CryEngine引进的技术
LPV做GI快|好
大体步骤:
Step1.Generation of Radiance Point Set Scene Representation 生成辐射点集的场景表示:辐射点集是一组离散的点(Point Set),每个点都存储了光照信息
Step2.Inject Light into LPV
Step3.Volumetric radiance progagation
Step4.Scene lighting with final light propagation volume
详细说明
step1:
find direct lit, apply RSM, use shadow map,有多少primary light就要用多少次(待查)
点云状(Sparse Point Set)
- 辐射点集通常看起来像一个稀疏的点云,它们分布在场景的表面或空间中。
- 这些点不一定均匀排列,而是根据场景几何结构或光照强度分布来布置。
- 每个点存储的信息包括:
- 位置(Position)
- 颜色(Color)
- 辐射度(Radiance)
- 法线(Normal)
- 可能还有视角方向(Viewing Direction)
示意图(近似概念):
---------------
| . . . | (点状分布)
| . . . |
| . . . |
---------------
step2:
pre-subdivide the scene into a 3d grid
找到包含光源的voxel(朝向各不相同)
用SH压缩(用2阶,4个数)
Step 3:
Propagation: 穿过上表面的radiance都会被上一个格子收到,右表面被右边的格子收到。(穿过斜对角就看作直行,如右上角,看作往右再往上)(每一个格子存储的相当于light transport)

Step4:Rendering
-For any shading point, find the grid cell it is located in
-Grab the incident radiance in the grid cell (from all directions)
-Shade
问题:
1.传播过程中,不考虑一个格子能不能看到下一个格子,和RSM一样不考虑visibility
2.光照“泄漏”(Light Leakage) (格子大了出现Light Leaking问题)
- 因为 LPV 体素是一个离散网格,如果墙壁或物体的采样不足,光可能会“穿透”墙壁,导致错误的间接光。
- 解决方案:
- 使用 屏幕空间遮挡(Screen Space Occlusion) 来补充 LPV 的光遮挡信息。
- 增加 体素分辨率,提高几何精度。
例1:格子太大了,p会照亮自己的背面
例2:(左边屋檐下面发亮)
3.格子划分地太细,3d空间存储吃不消,propagate计算很慢。格子数量至少比像素数量要少一个数量级
Cascade LPV(分级 LPV) 注:不是八叉树,是类似于层级分割的 MipMap 结构
- 现代游戏引擎(如 UE4)使用 Cascade LPV,即多个 LPV 体素网格叠加,类似 Cascade Shadow Map:
- 小 LPV(32³):用于近处的高精度间接光照。
- 大 LPV(16³):用于远处的大范围光照。
Cascade(级联) 这个词在计算机图形学中指的是 “多层级逐步处理”,通常用于优化计算成本,同时保证一定的视觉质量。它的核心思想是 “远处用低精度,近处用高精度”,减少不必要的计算量。
在realtime rendering叫cascade级联,在离线渲染叫做multi scale或者level of details(待查),就是有层次结构的加速
🌊 Cascade
- "cascade" 最原始的意思是 瀑布(多个台阶状的水流)。
- 在 计算机图形学 里,它引申为 “逐级传播” 或 “层级优化”。
UE4 的 Cascade 粒子编辑器(现在被 Niagara 取代)用的是 模块化、层级式的控制方式,这和 “Cascade” 的“级联”概念” 很像:
- 可以 逐层(级联式) 组合不同粒子效果,比如 发射(Spawn) → 速度(Velocity) → 颜色(Color) → 大小(Size)。
- 效果是 一层一层叠加的,就像 级联阴影(Cascade Shadow Maps) 那样,所有影响因素逐步传播下去。
所以它的名字其实强调的是 “级联控制”,而不是专门指 瀑布 🌊。
🆕 UE5 里的 Niagara
- Niagara(尼亚加拉)粒子系统 真的取名自 Niagara Falls,但它也不只是做瀑布。
4.LPV是实时的,不是预计算,任意一帧都要进行计算。
适用于动态场景(如昼夜交替、物体移动等),相比静态 GI(如 Lightmass)不需要预计算烘焙。
LPV与其他GI技术的对比
总结:Light Propagation Volumes 是一种快速、近似的全局光照方案,适用于动态环境,但其精度较低,容易出现光照泄漏。对于次世代游戏,SSGI 和 RTGI 更具优势,但 LPV 仍然在一些开放世界、低端设备或快速迭代的场景中有一定价值。(待查)
以上写于2.6日
VXGI (Voxel Global Illumination)
LPV 通常为 4 pass,RSM和VXGI是2 pass
RSM里面是lit patch
VXGI是类似lego 格子
弹幕:这里找对应层级累加并不会重复计算,注意看右图,找的不同层级位于场景中的不同位置,只要控制合适的步长,查询的每个grid并不会有多大的重叠
VXGI 通过 体素化 + 锥体追踪 提供了一种高效的动态全局光照解决方案,尤其适用于需要高质量实时间接光照的场景(如 3A 游戏)
结论:
- RSM(Reflective Shadow Maps) 是 2025 年最落伍、几乎没有发展潜力的 GI 技术,而 UE5 主要采用 Lumen 作为全局光照方案,它本质上是 Screen Space GI(SSGI)+ Voxel GI + SDF GI 的混合体。
- LPV 仍可用于大规模户外场景,但不如 Lumen 先进。
- VXGI 仍然是高精度 GI 方案,但计算量大,通常只用于 RTX 硬件支持的游戏。
SSAO
AO 计算的是一个比例值(0-1),它只是一个遮挡因子。
What
SSAO(屏幕空间环境光遮蔽)是一种基于屏幕空间计算环境光遮蔽(AO,Ambient Occlusion)的技术,用于模拟物体之间的光照遮挡效果,让场景更具层次感和真实感。它只考虑当前屏幕可见的像素,不会计算屏幕外的物体对 AO 的影响。
Why
在现实世界中,环境光会被凹陷处、缝隙、角落等地方部分遮挡,使这些区域相对更暗。而实时渲染中,全局光照计算成本极高,SSAO 提供了一种低成本的近似方法,让物体与环境的交互更真实,同时增强画面对比度和细节表现。
How
- 获取深度缓冲 & 法线缓冲:
- 从 G-Buffer 读取每个像素的深度值和法线信息。
- 采样周围像素:
- 通过随机采样当前像素周围的小范围深度值,检查这些点是否比当前像素更远(意味着有遮挡)。
- 计算遮蔽系数:
- 根据遮挡程度计算光照衰减,生成 AO(通常是 0~1 的灰度值)。
- 模糊 & 合并:
- 对 AO 结果进行模糊滤波(如 Gaussian Blur),并将其乘到最终光照结果上,使遮挡区域变暗。
SSAO的 key idea 1
-
我们不知道入射的间接光照(indirect lighting):
- 在实时渲染中,环境光(ambient light)通常是间接光的主要来源,但其计算非常复杂,尤其是在动态场景中。
-
假设它是常量(constant):
- 为了降低计算成本,SSAO 假设环境光是均匀的,即所有着色点(shading points)接收到的环境光强度相同,不管方向如何。
- 这种假设可以让计算更简单,只需要基于深度缓冲(depth buffer)和法线缓冲(normal buffer)来近似环境光遮蔽(Ambient Occlusion)。
-
这听起来熟悉吗?(Sounds familiar to you?)
- 暗示了传统光照模型(如 Blinn Phong Reflectance Model)通常直接使用一个全局环境光值,而 SSAO 只是对其进行了一些改进,使环境光更具方向性和细节感。
key idea2: 不同点的环境光可见性不同
key idea3: 假设是diffuse物体
visibility拆出去,visibility自己的积分除以一个空的积分,橙色框diffuse物体随便指定一个常数
总得来说AO就是(the weight-averaged visibility V̄ from all directions) * (constant)
平均可见性*某常数
弹幕:光照和BRDF都是常数,本来就可以拆出来。这里只是拼凑了一个按照cos加权求和的形式方便后续操作
任何一个shading point,往周围某半径的球里面随机撒点。
screen space从camera角度至少有一个深度图。据此划分绿|红。
周围红点少于一半的直接忽略。红点过半的情况下才开始考虑AO问题
红色虚线那边的红点会有误差,但是可接受
错误的认为石凳对地板有贡献。
falsh occlusion:在 SSAO 中,算法通过从每个像素发射射线并计算深度值来估算周围物体的遮蔽情况。对于每条射线,计算是基于屏幕空间的深度信息,然而,这个深度信息的精度会受到深度缓冲区精度的限制。
使用更精细的 SSAO 技术,如 HBAO(基于地平线的环境遮蔽,多存一张normal map)或 SSDO(屏幕空间方向光遮蔽),这些算法能够更精确地捕捉几何细节,减少不真实的遮蔽效果。


2025.2.6-2.8
相关文章:

Lecture8 | LPV VXGI SSAO SSDO
Review: Lecture 7 | Lecture 8 LPV (Light Propagation Volumes) Light Propagation Volumes(LPV)-孤岛惊魂CryEngine引进的技术 LPV做GI快|好 大体步骤: Step1.Generation of Radiance Point Set Scene Representation 生成辐射点集的场景表示:辐射…...

Java中实现定时锁屏的功能(可以指定时间执行)
Java中实现定时锁屏的功能(可以指定时间执行) 要在Java中实现定时锁屏的功能,可以使用java.util.Timer或java.util.concurrent.ScheduledExecutorService来调度任务,并通过调用操作系统的命令来执行锁屏。下面我将给出一个基本的…...

Java集合List详解(带脑图)
允许重复元素,有序。常见的实现类有 ArrayList、LinkedList、Vector。 ArrayList ArrayList 是在 Java 编程中常用的集合类之一,它提供了便捷的数组操作,并在动态性、灵活性和性能方面取得了平衡。如果需要频繁在中间插入和删除元素…...

[实验日志] VS Code 连接服务器上的 Python 解释器进行远程调试
目录 0. 前言 1. 环境 2. 准备工作 2.1 安装VS Code 2.2 安装插件 2.3 配置远程服务器 2.4 修改设置 2.5 打开远程调试窗口 3. 调试代码 3.1 输密码 3.2 打开服务器文件夹 3.3 配置Python环境 3.4 调试Python代码 补充:使用调试控制台,查看…...

(14)gdb 笔记(7):以日志记录的方式来调试多进程多线程程序,linux 命令 tail -f 实时跟踪日志
(44)以日志记录的方式来调试多进程多线程程序 : 这是老师的日志文件,可以用来模仿的模板: (45)实时追踪日志的 tail -f 命令: (46) 多种调试方法结合起来用 …...

Sentinel的安装和做限流的使用
一、安装 Release v1.8.3 alibaba/Sentinel GitHubA powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件) - Release v1.8.3 alibaba/Sentinelhttps://github.com/alibaba/Senti…...

四柱预测学
图表 后天八卦 十二地支不仅代表了时间,还代表了方位。具体来说: 子:代表正北方丑寅:合起来代表东北方卯:代表正东方辰巳:合起来代表东南方午:代表正南方未申:合起来代表西南方酉:代表正西方戌亥:合起来代表西北方四季-五行-六神…...

【个人开发】macbook m1 Lora微调qwen大模型
本项目参考网上各类教程整理而成,为个人学习记录。 项目github源码地址:Lora微调大模型 项目中微调模型为:qwen/Qwen1.5-4B-Chat。 去年新发布的Qwen/Qwen2.5-3B-Instruct同样也适用。 微调步骤 step0: 环境准备 conda create --name fin…...

sqli-labs靶场实录(二): Advanced Injections
sqli-labs靶场实录: Advanced Injections Less21Less22Less23探测注入点 Less24Less25联合注入使用符号替代 Less25aLess26逻辑符号绕过and/or过滤双写and/or绕过 Less26aLess27Less27aLess28Less28aLess29Less30Less31Less32(宽字节注入)Less33Less34Le…...

Linux系统 环境变量
环境变量 写在前面概念查看环境变量main函数的参数argc & argvenv bash环境变量 写在前面 对于环境变量,本篇主要介绍基本概念及三四个环境变量 —— PATH、HOME、PWD。其中 PATH 作为 “ 敲门砖 ”,我们会更详细讲解;理解环境变量的全局…...

机器学习-线性回归(最大似然估计)
机器学习任务可以分为两类: 一类是样本的特征向量 𝒙 和标签 𝑦 之间存在未知的函数关系𝑦 h(𝒙),另一类是条件概率𝑝(𝑦|𝒙)服从某个未知分布。最小二乘法是属于第一类,…...

【信息系统项目管理师-案例真题】2017上半年案例分析答案和详解
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题一【问题1】8 分【问题2】4 分【问题3】8 分【问题4】5 分试题二【问题1】10 分【问题2】8 分【问题3】6 分【问题4】5 分试题三【问题1】5 分【问题2】7 分【问题3】6 分【问题4】3 分试题一 阅读下列说明…...

CSP晋级组比赛生成文件夹与文件通用代码Python
快速生成文件夹与文件的脚本 import sys import osmyfiles sys.argv[1::] for f in myfiles:os.mkdir(f)os.system(f"touch {f}/{f}.in")os.system(f"touch {f}/{f}.out")os.system(f"touch {f}/{f}.cpp")with open("template.cpp",…...

正则表达式进阶(二)——零宽断言详解:\b \B \K \z \A
在正则表达式中,零宽断言是一种非常强大的工具,能够在不消费字符的情况下对匹配位置进行约束。除了环视(lookahead 和 lookbehind)以外,还有一些常用的零宽断言,它们用于处理边界、字符串的开头和结尾等特殊…...

Android 中实现 PDF 预览三种方式
目录 1. 使用第三方库 PdfRenderer(适用于 Android 5.0 及以上) 步骤:2. 使用第三方库 MuPDF步骤:3. 使用第三方库 PdfiumAndroid步骤: 1. 使用第三方库 PdfRenderer(适用于 Android 5.0 及以上)…...

尚硅谷课程【笔记】——大数据之Zookeeper【二】
课程视频:【尚硅谷Zookeeper教程】 四、Zookeeper实战 4.1分布式安装部署 1. 集群规划 在Hadoop102、Hadoop103和Hadoop104三个节点上部署Zookeeper 2. 解压安装 1)解压Zookeeper.tar.gz到指定目录 tar -zxvf zookeeper-3.7.2.tar.gz -C /opt/mod…...

CodeGPT + IDEA + DeepSeek,在IDEA中引入DeepSeek实现AI智能开发
CodeGPT IDEA DeepSeek,在IDEA中引入DeepSeek 版本说明 建议和我使用相同版本,实测2022版IDEA无法获取到CodeGPT最新版插件。(在IDEA自带插件市场中搜不到,可以去官网搜索最新版本) ToolsVersionIntelliJ IDEA202…...

postgresql 游标(cursor)的使用
概述 PostgreSQL游标可以封装查询并对其中每一行记录进行单独处理。当我们想对大量结果集进行分批处理时可以使用游标,因为一次性处理可能造成内存溢出。 另外我们可以定义函数返回游标类型变量,这是函数返回大数据集的有效方式,函数调用者…...

计算机组成原理——指令系统(六)
在时间的长河中,我们都是追梦人,脚下的每一步都在刻画未来的模样。无论世界如何变幻,心中的那团火焰都不应熄灭。它是你突破黑暗、迎接黎明的力量源泉。每一个不曾起舞的日子,都是对生命的辜负;每一次跌倒后的站起&…...

Python设计模式 - 原型模式
定义 原型模式是一种创建型设计模式,它可以通过复制现有对象来创建新对象,而不是直接实例化新的对象。 结构 抽象原型(Prototype):声明 clone() 方法,以便派生类实现克隆自身的能力。具体原型(…...

金和OA C6 DownLoadBgImage任意文件读取漏洞
金和OA C6 DownLoadBgImage任意文件读取漏洞 漏洞描述 金和C6数据库是一款针对企业信息化管理而设计的高级数据库管理系统,主要应用于企业资源规划(ERP)、客户关系管理(CRM)以及办公自动化(OA)…...

【stm32学习】STM32F103实操primary(FlyMCU)
github插入图片实在是太难用了,暂时懒得学就先用CSDN吧hh 一、在设备管理器下,找到单片机,并检查与FlyMCU-搜索端口 显示的是否一致 二、在搜索串口右面的栏里选中该Port,波特率选中115200 三、选择文件夹中的.hex文件࿰…...

如何将Excel的表格存为图片?
emmm,不知道题主具体的应用场景是什么,就分享几个我一般会用到的场景下奖excel表格保存为图片的技巧吧! 先来个总结: 方法 适用场景 画质 操作难度 截图(WinShiftS) 快速保存表格,方便粘贴…...

51单片机之使用Keil uVision5创建工程以及使用stc-isp进行程序烧录步骤
一、Keil uVision5创建工程步骤 1.点击项目,新建 2.新建目录 3.选择目标机器,直接搜索at89c52选择,然后点击OK 4.是否添加起吊文件,一般选择否 5.再新建的项目工程中添加文件 6.选择C文件 7.在C文件中右键,添加…...

AUTOSAR面试题集锦(1)
最基础概念 什么是AUTOSAR?AUTOSAR到底做了什么? AUTOSAR,即汽车开放系统架构,是一套专门用于汽车的开放性的框架和行业标准,旨在标准化汽车开发的流程。 AUTOSAR 通过标准化软件接口、交换格式和方法论等内容,主要实现以下几个目标: 1. 使软件和硬件彼此独立,让应…...

【Uniapp-Vue3】从uniCloud中获取数据
需要先获取数据库对象: let db uniCloud.database(); 获取数据库中数据的方法: db.collection("数据表名称").get(); 所以就可以得到下面的这个模板: let 函数名 async () > { let res await db.collection("数据表名称…...

AIOS: 一个大模型驱动的Multi-Agent操作系统设计与Code分析
AIOS: 一个大模型驱动的Multi-Agent操作系统设计与Code分析 随着人工智能技术的快速发展,传统操作系统逐渐暴露出难以适应AI时代多样化需求的局限性。特别是在支持多个智能体协同工作方面存在显著不足。为此,我们提出了一种名为AIOS(Artifici…...

Python----Python高级(网络编程:网络基础:发展历程,IP地址,MAC地址,域名,端口,子网掩码,网关,URL,DHCP,交换机)
一、网络 早期的计算机程序都是在本机上运行的,数据存储和处理都在同一台机器上完成。随着技术的发展,人 们开始有了让计算机之间相互通信的需求。例如安装在个人计算机上的计算器或记事本应用,其运行环 境仅限于个人计算机内部。这种设置虽然…...

收集的面试资料
转载自:NLP_基于酒店评论的情感分析-CSDN博客 机器学习的一般过程 如何介绍项目: 项目背景:项目输入,输出,后续应用点 项目数据:数据来源 数据处理方法:是否有脏数据,如何处理脏数据…...

pytest-xdist 进行多进程并发测试!
在软件开发过程中,测试是确保代码质量和可靠性的关键步骤。随着项目规模的扩大和复杂性的增加,测试用例的执行效率变得尤为重要。为了加速测试过程,特别是对于一些可以并行执行的测试用 例,pytest-xdist 提供了一种强大的工具&…...