全局光照只考虑一次间接光照,核心问题是怎么找出次级光源以及如何高效的计算全局光照。
RSM
shadow map中存储了次级光源的信息,这些次级光源被当作diffuse材质,可以像四面八方反射光线,简单理解就是把每一个shadow map中的像素当成是一个点光源,每一个渲染点都需要去找能影响它的点光源。关键的问题是次级光源太多,我们需要根据屏幕空间的法线,世界坐标,深度信息对次级光源进行筛选,但是因为次级光源没有遮挡关系,所以RSM无法表达全局光照的阴影。这个算法通常用到手电筒上,因为这样的shadow map分辨率很小。
LPV
LPV在找次级光源的地方和RSM一样,它将场景体素化,每一个体素里面存储次级光源,次级光源沿着周围的6个格子开始传导,经过几次迭代后,每个格子的光源信息存储在球谐函数上,最后每一个渲染点查找它所在的体素中,加上这个体素的间接光照。这个算法要比RSM快,因为一帧只做一次光的传播,然后所有像素都可以分享这个结果,另外使用了球谐函数也就意味着间接光照不支持specular,同样这个算法不支持AO,另外这个方法有漏光的现象,因为体素中的间接光照是无差别对待的,如果过体素划分的比较大,那么有些几何点本不应该被照亮,还是被照亮了。
VXGI
VXGI将场景组织成四叉树,然后将间接光源的radiance和direction信息注入到四叉树中,每一个渲染点都会发射一个锥体,判断有多少个格子在视锥体中,距离像素越近的使用越精选的格子进行判读,越远使用越粗的格子判读,因为有光源的方向信息,所以每一个点光源都可以计算
实时全局光照总结
最新推荐文章于 2024-04-14 16:27:26 发布