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

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

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

相关文章

0012—数组

存取一组数据,使用数组。 数组是一组相同类型元素的集合。 要存储1-10的数字,怎么存储? C语言中给了数组的定义:一组相同类型元素的集合。 创建一个空间创建一组数: 一、数组的定义 int arr[10] {1,2,3,4,5,6,7,8,…

AI绘画社区:解锁艺术共创的无限可能(9/10)

AI 绘画:不只是技术,更是社交新潮流 在科技飞速发展的今天,AI 绘画早已不再仅仅是一项孤立的技术,它正以惊人的速度融入我们的社交生活,成为艺术爱好者们交流互动的全新方式,构建起一个充满活力与创意的社…

让office集成deepseek,支持office和WPS办公软件!(体验感受)

导读 AIGC:AIGC是一种新的人工智能技术,它的全称是Artificial Intelligence Generative Content,即人工智能生成内容。 它是一种基于机器学习和自然语言处理的技术,能够自动产生文本、图像、音频等多种类型的内容。这些内容可以是新闻文章、…

c++ template-3

第 7 章 按值传递还是按引用传递 从一开始,C就提供了按值传递(call-by-value)和按引用传递(call-by-reference)两种参数传递方式,但是具体该怎么选择,有时并不容易确定:通常对复杂类…

使用springAI实现图片相识度搜索

类似的功能:淘宝拍照识别商品。图片相识度匹配 实现方式:其实很简单,用springai 将图片转换为向量数据,然后搜索就是先把需要搜索的图片转位向量再用向量数据去向量数据库搜索 但是springai现在不支持多模态嵌入数据库。做了一些…

私有化部署DeepSeek并SpringBoot集成使用(附UI界面使用教程-支持语音、图片)

私有化部署DeepSeek并SpringBoot集成使用(附UI界面使用教程-支持语音、图片) windows部署ollama Ollama 是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计 下载ollama 下载地址(…

半导体制造工艺讲解

目录 一、半导体制造工艺的概述 二、单晶硅片的制造 1.单晶硅的制造 2.晶棒的切割、研磨 3.晶棒的切片、倒角和打磨 4.晶圆的检测和清洗 三、晶圆制造 1.氧化与涂胶 2.光刻与显影 3.刻蚀与脱胶 4.掺杂与退火 5.薄膜沉积、金属化和晶圆减薄 6.MOSFET在晶圆表面的形…

正则表达式的简单介绍 + regex_match使用

正则表达式 正则表达式(Regular Expression,简称 regex)是一种用于匹配字符串的模式。它由一系列字符和特殊符号组成,用于描述、匹配一系列符合某个句法规则的字符串。正则表达式广泛应用于文本搜索、替换、验证等场景。 它的主…

AnythingLLM开发者接口API测试

《Win10OllamaAnythingLLMDeepSeek构建本地多人访问知识库》见上一篇文章,本文在上篇基础上进行。 1.生成本地API 密钥 2.打开API测试页面(http://localhost:3001/api/docs/) 就可以在页面测试API了 2.测试获取用户接口(/v1/admin/users) 3…

TypeScript 中的类:面向对象编程的基础

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

二级C语言题解:矩阵主、反对角线元素之和,二分法求方程根,处理字符串中 * 号

目录 一、程序填空📝 --- 矩阵主、反对角线元素之和 题目📃 分析🧐 二、程序修改🛠️ --- 二分法求方程根 题目📃 分析🧐 三、程序设计💻 --- 处理字符串中 * 号 题目&#x1f…

Qt 支持的动画格式对比,Lottie/APNG/GIF/WEBP

Qt版本:6.7.2 , QML 一,Lottie 在qml中使用LottieAnimation即可,但有三个问题: 1.动画加载中报错: 如果图片(.json)本身存在不支持的effect 或shape type等,效果并不好&#xff1a…

SpringCloud - Nacos注册/配置中心

前言 该博客为Nacos学习笔记,主要目的是为了帮助后期快速复习使用 学习视频:7小快速通关SpringCloud 辅助文档:SpringCloud快速通关 一、简介 Nacos官网:https://nacos.io/docs/next/quickstart/quick-start/ Nacos /nɑ:kəʊ…

老游戏回顾:TL2

TL2是一部ARPG游戏,是TL的续作游戏,由位于美国西雅图的Runic Games开发,游戏于2012年9月20日上市,简体中文版于2013年4月10日在国内上市。 2有非常独特的艺术风格,这些在1中就已经形成,经过升级将使这款游…

DeepSeek-R1 云环境搭建部署流程

DeepSeek横空出世,在国际AI圈备受关注,作为个人开发者,AI的应用可以有效地提高个人开发效率。除此之外,DeepSeek的思考过程、思考能力是开放的,这对我们对结果调优有很好的帮助效果。 DeepSeek是一个基于人工智能技术…

利用ETL工具进行数据挖掘

ETL的基本概念 数据抽取(Extraction):从不同源头系统中获取所需数据的步骤。比如从mysql中拿取数据就是一种简单的抽取动作,从API接口拿取数据也是。 数据转换(Transformation):清洗、整合和转…

k8s网络插件及基础命令

一、k8s的cni网络插件 1.k8s的内部网络模式 pod内的容器与容器之间的通信。一个节点上的pod之间的通信,docker0网桥直接通信。不同节点上的pod之间的通信:通过物理网卡的ip地址和其他节点上的物理网卡的设备进行通信,然后把流量转发到指定的…

保姆级教程Docker部署KRaft模式的Kafka官方镜像

目录 一、安装Docker及可视化工具 二、单节点部署 1、创建挂载目录 2、运行Kafka容器 3、Compose运行Kafka容器 4、查看Kafka运行状态 三、集群部署 四、部署可视化工具 1、创建挂载目录 2、运行Kafka-ui容器 3、Compose运行Kafka-ui容器 4、查看Kafka-ui运行状态 …

【C语言】传值调用与传址调用详解

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯传值调用1. 什么是传值调用?2. 示例代码:传值调用失败的情况执行结果: 3. 为什么传值调用无法修改外部变量? &#x1f4…

HarmonyOS 5.0应用开发——ContentSlot的使用

【高心星出品】 文章目录 ContentSlot的使用使用方法案例运行结果 完整代码 ContentSlot的使用 用于渲染并管理Native层使用C-API创建的组件同时也支持ArkTS创建的NodeContent对象。 支持混合模式开发,当容器是ArkTS组件,子组件在Native侧创建时&#…