实时全局光照总结

全局光照只考虑一次间接光照,核心问题是怎么找出次级光源以及如何高效的计算全局光照。
RSM
shadow map中存储了次级光源的信息,这些次级光源被当作diffuse材质,可以像四面八方反射光线,简单理解就是把每一个shadow map中的像素当成是一个点光源,每一个渲染点都需要去找能影响它的点光源。关键的问题是次级光源太多,我们需要根据屏幕空间的法线,世界坐标,深度信息对次级光源进行筛选,但是因为次级光源没有遮挡关系,所以RSM无法表达全局光照的阴影。这个算法通常用到手电筒上,因为这样的shadow map分辨率很小。
LPV
LPV在找次级光源的地方和RSM一样,它将场景体素化,每一个体素里面存储次级光源,次级光源沿着周围的6个格子开始传导,经过几次迭代后,每个格子的光源信息存储在球谐函数上,最后每一个渲染点查找它所在的体素中,加上这个体素的间接光照。这个算法要比RSM快,因为一帧只做一次光的传播,然后所有像素都可以分享这个结果,另外使用了球谐函数也就意味着间接光照不支持specular,同样这个算法不支持AO,另外这个方法有漏光的现象,因为体素中的间接光照是无差别对待的,如果过体素划分的比较大,那么有些几何点本不应该被照亮,还是被照亮了。
VXGI
VXGI将场景组织成四叉树,然后将间接光源的radiance和direction信息注入到四叉树中,每一个渲染点都会发射一个锥体,判断有多少个格子在视锥体中,距离像素越近的使用越精选的格子进行判读,越远使用越粗的格子判读,因为有光源的方向信息,所以每一个点光源都可以计算specular,镜面反射好处理,对于漫反射这是发出多条锥体去覆盖半球。
SSAO
上面的算法无法计算全局光照的阴影,SSAO在屏幕空间上计算全局光照的阴影,原理很简单,沿着着色点法线方向的半球随机洒落一些点,在shadow map中比较这些点的深度,然后判断遮挡光系。因为只有屏幕空间的信息,所以会出现错误的遮挡,比如屏幕空间中的两个像素其实在世界空间中距离比较远,本不应该被遮挡,最终还是被遮挡了,如果能够获得点的世界位置的信息就可以避免这个问题,比如HBAO。如果有距离场信息,我们可以在世界空间中发出一些射线进行精确的遮挡判断,因此SDF也可以做AO遮挡。
SSDO
和SSAO差不多只不过判断的是哪些点遮挡了,然后根据这些点做间接光照。这个算法只能做短距离的全局光照,物体的遮挡关系发生变化后间接光照的效果会发生变化。
SSR
其实就是根据屏幕空间做射线然后计算相交,需要不停的试探,可以使用深度金字塔进行试探优化。这里的相交计算是通过深度信息比较而不是真正的射线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值