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)
![](https://i-blog.csdnimg.cn/direct/3419adff43ef475f809467b921347fdf.png)
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(屏幕空间方向光遮蔽),这些算法能够更精确地捕捉几何细节,减少不真实的遮蔽效果。
![](https://i-blog.csdnimg.cn/direct/b69361cadbca4470879b813ebc7073c7.png)
![](https://i-blog.csdnimg.cn/direct/bd6e8621dead488f9bad82a7b753eb27.png)
2025.2.6-2.8