光传播体积Light Propagation Volumes(LPV)¶
最早出现在CryEngine 3¶
快且好
关键问题¶
查询从任何点中从任意方向来的光线
关键思想¶
光线直线传播不改变
关键解决方案¶
使用==3D网格==将光线从==直接光照表面==传播光线到任意位置
LPV步骤¶
- 生成场景光照辐射点集
- 将虚拟光源的点集注入到辐射体积中
-
体积辐射传播
-
通过最终的光传播体积进行场景照明
1.生成¶
这是为了能找到直接光照的表面 - 只需要简单的应用RSM - 可以使用一组减少的漫反射surface pathces(又称虚拟光源)
2.注入¶
- 将场景换分为3D格子
- 对于每个格子,我们可以找到之前封闭的那些虚拟光源
- 对他们的定向辐射分布进行求和
- 将他们压入球谐函数的前两阶(总共4)
- ![[Pasted image 20250304121629.png]]
3. 传播¶
- 对于每个网格,收集他从他本身格子之外的==六个邻近格子==传来的辐射
- 求和,并再次使用SH去表达
- 重复==这个传播多次,直到体积变得==稳定
4. 渲染¶
- 对于任何着色点,找到它所在的格子
- 抓取他在格子中从个方向获得的辐射
- 着色
LPV问题¶
- 漏光,按理来说,光照本不应该穿墙。但是LPV会让较薄的在体积中的物体获得一样的的照明 ![[Pasted image 20250304124040.png]]
解决方案¶
- 将格子划分的更细,但是又带来了性能上的问题(更多的计算、存储)
- 增加模型墙体厚度 ![[Pasted image 20250304124226.png]]
(Voxel Global Illumination)VXGI¶
VXGI介绍¶
- 依旧是tow-pass算法
- 和Rsm的两个区别
- 直接照射像素->变为->直接照射体素
- 在RSM中采样->变为->在3D中跟踪反射锥
场景处理¶
- 体素化整个场景
- 构建层次结构
![[Pasted image 20250304130245.png]]
Pass 1¶
- 每个体素存储incident光线分布,normal法线分布等信息
- 在层次结构上更新