ProjectS中的全局光照系统(开发中)
文章已于2024.2.18重写,去掉老旧的传统GI方案,准备全面转向VXGI
前言
一开始还是使用的lightmap+lightprobe的传统GI方案,但其实这套方案在大世界项目中并不适用,主要有以下几个缺陷
- 数据量大,烘焙慢
- 动态物体只能接受漫反射信息,不能影响场景和其他动态物体
其中第二点尤其致命
当前较为流行的大世界GI方案有以下几大类
- 半实时Precomputed Radiance Transfer Global Illumination(PRTGI),半动态GI方案,多为离线烘焙一部分场景光照数据,运行时实时采样进行光照计算
- 动态漫反射全局光照(Dynamic Diffuse Global Illumination)(DDGI),PRTGI的全实时版本,把烘焙放在运行时,类似的还有SurfelGI
- Voxel Global Illumination(VXGI),体素+RayCast流派
其中VXGI是将场景体素化,并在体素存储几何和材质信息,从而实现实时ReLight
我们都知道,对于大世界来说,游戏的寻路和碰撞也是很令人头痛的一件事,尤其是在Unity上
- 分块烘焙,实时拼接NavMesh
- 对于GPU Driven的地形碰撞,需要提前预烘焙数据,并在运行时流式
那么我们可以借助VXGI的体素化流程,先对场景做一遍粗略,专供给Gameplay的体素化,再在此基础上进行正式的VXGI需要的体素化
这样我们就同时解决了Gameplay和GI问题,可谓两全其美,所以权衡之下选择了VXGI作为ProjectS的GI方案
GI知识体系
待续
参考
https://github.com/jose-villegas/VCTRenderer
https://liu.diva-portal.org/smash/get/diva2:1148572/FULLTEXT01.pdf
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 登峰造极者,殊途亦同归。!
评论