pv,svogi,vxgi,各自的优缺点在哪,ue4还有可能把svogi加进去吗

来源:互联网 发布:诚龙网络克隆教程 编辑:程序博客网 时间:2024/05/29 18:26

文刀秋二,NVIDIA图形工程师

李林根、tcq、张志勇 等人赞同
这几个算法都是基于Prefilter场景中的信息存到一个Spatial的数据结构中,然后利用这个数据结构来再做渲染的。

Light Propagation Volume最早被Crytek发明(不过发明人现在在NVIDIA),它的做法简单总结是先生成一些虚拟的点光源来近似间接光照。每个点光源都要渲染一个reflective shadow map,然后将shadow map的光照信息注入到一个专门用球谐系数形式保存光照的volume 3D纹理里面,然后在纹理内部将最初的光照传递分散开来,渲染的时候直接从这个volume texture里读取要着色的点位置的颜色作为间接光照。这个方法可以达到不错的间接漫反射。缺点第一是volume texture太费显存,第二是基于体素化之后的光照信息也会有“格子”样的artifact,而且也是非常耗费计算的一个技术,因为每一个虚拟点光源都要渲染一个reflective shadow map。

Sparse Voxel Octree GI(又叫Voxel Cone Tracing)和VXGI都是NVIDIA的技术,VXGI就是SVOGI最终产品化后的名字,我个人其实更喜欢之前GiWorks的叫法- -。他们的做法是首先需要把整个场景体素化,然后把体素化的场景保存在一个三维的数据结构里。接着把直接光照通过用Reflective Shadow Map或者直接注入的方式把光照信息写到这个三维的数据结构里去,注入的时候需要。在渲染时得到像素的位置和法线信息之后就类似像光线追踪一样追踪一些Cone,追踪的时候要从体素化后并且又直接光照信息的数据结构里读取光照信息,然后得到光照作用在当前像素上。SVO和VXGI唯一的区别就是数据结构的不同。SVO是用的是Sparse Voxel Octree,遍历这种数据结构很麻烦也很慢。所以VXGI使用了Clip Map. Clip Map就是类似mip map的一种存储方式,只不过在最低LOD的几个level只保存了中心的信息,在算法里Map的中心当然是你的相机视点,也就是说离视点越远的地方场景的体素信息越粗糙。VXGI因为可以调整追踪的Cone的角度的大小,可以通过追踪非常细的Cone来近似Glossy的反射。VXGI的问题当然第一是在于每一帧都要做场景体素化(当然可以只体素化动态的部分)比较费时间,而且3d的文理会费比较多的显存,而且和LPV一样基于场景体素化的精度决定了光照的精度,所以也会有漏光等artifact存在。贴一个VXGI的文档:on-demand.gputechconf.com
这个网页有一些简单的介绍和demo视频: developer.nvidia.com/vx 不过需要翻墙可能。
不过值得一提的是NVIDIA的Maxwell GPU的架构的一些feature可以非常好的支持和加速VXGI的体素化等步骤。

总的来说这些算法都是将场景和光照信息通过某种prefilter的方式保存然后渲染的时候reconstruct回来的尝试。中间具体如何filter和reconstruct我认为现在都不能说是最佳的和精确的,还有探索的空间。同时它们也都是很expensive的技术,所以暂时并不普及。我这里的介绍也比较high level, 许多细节感兴趣还得自己看paper和code。

贴一些去年我参与的VXGI Demo的图片,在SIGGRAPH 2014上展示过:


UE4中早就实现了LPV,可以在Console中打开:docs.unrealengine.com/l
我们组也已经把VXGI以库的形式整合到UE4中,并且还有在继续维护和开发VXGI:github.com/NvPhysX/Unre


补充一下引擎在默认的情况下是不实用他们做GI的。一般来说对于静态场景,烘培的光照贴图就能有非常好的效果了,不值得去付出这么大的额外计算时刻维护一个庞大的数据结构。如果你有非常多的动态物体,又有很多破碎等效果,VXGI在性能和效果上都是优于LPV的选择。
编辑于 2015-06-23 10 条评论 感谢 
分享
 收藏  没有帮助  
举报
  作者保留权利

叛逆者,KlayGE创始人

没有人、fanye、Wu Fan 等人赞同
ue4原本是有svogi的,并且比原作者的实现快了8-20倍。但即便如此,性能和内存需求仍然不能满足console,睡觉PS4/Xbox one的机能都那么差呢。当时Tim Sweeney是拍着桌子抱怨的,说这TM至少得高5倍的GFlops才行,老子不玩了,删掉svo,爱咋咋地。

LPV基本已经没有存在的必要了。性能和效果都不如后者。
发布于 2015-06-29 3 条评论 感谢 
分享
 收藏  没有帮助  
举报
  作者保留权利

逍遥剑客,鹅厂里的猿类

离线计算总是需要的,你不能逼玩家升级硬件不是
发布于 2015-06-22 添加评论 感谢 
分享
 收藏  没有帮助  
举报
  作者保留权利

陶仁贤,引擎布道者

Nvidia做的UE4的 VXGI效率已经不错了,可以试试看
发布于 2015-07-19 添加评论 感谢 
分享
 收藏  没有帮助  
举报
  作者保留权利

侯烁

lpv的想法是快速生成点云然后用点云做间接光照,缺点是生成点云太费和物理上的不自然
vxgl=svogi,物理上合理,就是体素化动态物体太费+对传统管线改造太大希望nvidia专卖出套api做这个
发布于 2015-07-05 添加评论 感谢 
分享
 收藏  没有帮助  
举报
  作者保留权利
0 0