Sparse Voxel Octree Voxel的表达也有它的弱点,主要是存储和访问的不方便。如果把整个场景不管是否有voxel占用的地方都密集存储,那么所需要的空间是惊人的。比如一个512x512x512分辨率的场景,一共有128M个voxel,如果每个voxel只有32字节的属性,场景也轻松突破4GB。直接存在显存里是不现实的。所以这里需要引入sparse voxel octree。通过把voxlization后的结果存放在octree的节点上,可以略过很多场景中的空区域,空间消耗可以减少到200MB-1GB。同时,因为有了层次结构,访问起来只需要遍历某个分支,速度也能提高。 通过在GPU上实现了全套octree维护的操作,octree可以不需要CPU的帮助,完全在GPU上添删节点。用这种方法,初次建立一个场景的octree需要70ms,之后每次更新只需要4-5ms。
Cone tracing 在准备好了octree之后,渲染场景就需要用到cone tracing。ray tracing是对每一个像素发射一个ray,达到表面后根据BRDF反射和折射出新的ray。cone tracing与此类似,只是把ray换成了圆锥。因为有了SVO的数据结构,可以把irradiance先cache在octree里,view pass只要gather就可以了。
能解决的问题 有了SVO + cone tracing之后,很多长期以来一直很困难的实时渲染问题可以直接得到解决。如soft shadow、area light、multiple lights、multiple bounces global illumination、glossy reflection、refraction、AO等效果,就不再需要用各种不同的方法进行hack,只要进行一次tracing就全部搞定。
评论区
共 1 条评论热门最新