当前位置: 首页 > news >正文

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

  1. 获取深度缓冲 & 法线缓冲
    • 从 G-Buffer 读取每个像素的深度值和法线信息。
  2. 采样周围像素
    • 通过随机采样当前像素周围的小范围深度值,检查这些点是否比当前像素更远(意味着有遮挡)。
  3. 计算遮蔽系数
    • 根据遮挡程度计算光照衰减,生成 AO(通常是 0~1 的灰度值)。
  4. 模糊 & 合并
    • 对 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(屏幕空间方向光遮蔽),这些算法能够更精确地捕捉几何细节,减少不真实的遮蔽效果。

 

SSAO错误遮挡
消除错误

 

 


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 编程中常用的集合类之一,它提供了便捷的数组操作,并在动态性、灵活性和性能方面取得了平衡。如果需要频繁在中间插入和删除元素&#xf…...

[实验日志] 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(𝒙),另一类是条件概率𝑝(𝑦|𝒙)服从某个未知分布。最小二乘法是属于第一类&#xff0c…...

【信息系统项目管理师-案例真题】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 及以上&#xff09…...

尚硅谷课程【笔记】——大数据之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() 方法,以便派生类实现克隆自身的能力。具体原型&#xff08…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...