虚幻引擎4中的实时GI技术

Posted 安柏霖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚幻引擎4中的实时GI技术相关的知识,希望对你有一定的参考价值。


video:

http://v.youku.com/v_show/id_XNDEwMDEwNTg4.html

UE4中的realtime GI是基于这个researcher:

http://blog.icare3d.org/

主要的paper:

http://perso.telecom-paristech.fr/~eisemann/publications/Crassin2011VoxelGlobalPG/VoxelGI_EG-pg2011-sub.pdf

http://maverick.inria.fr/Publications/2011/CNSGE11a/GIVoxels_Siggraph_Talk.pdf

算法的名字是:voxel cone tracing,很简洁的概括了算法的两个核心点:voxel&cone tracing。


voxel


谈算法先谈数据结构,voxel于3d mesh正如pixel于2d的图片:规则的离散化的表示信息,pixel是将2d的图片切分成一个个小正方形,voxel是将3d空间切分成一个个立方体。

最先听说这个是carmack和jon olick在08年的时候放出的一些前瞻性的想法,当时看起来就是把mega texture扩展到3d空间,jon olick也在youtube上面放出了一些视频。

在对变革性realtime rendering的期望与将信将疑中,今年迎来了UE4的demo,也把这项技术推到公众眼前。


voxel比较高效的组织方式是sparse voxel octree,简称svo。

是以八叉树的hierarchy方式,表示空间中有东西的部分:


svo是这个算法的关键,在于:

  • svo在以一定粒度对场景进行离散化表示之后,GI光照计算量基本保持稳定,而不是和场景中vertex数量以及复杂度成正比
    • 这一点上我们可以把这个当作是一个3d的gbuffer,里面以一定粒度存储场景信息
  • octree的层级结构,可以让我们在计算的时候很自然的引入LOD,在较远的地方使用低lod(在octree中是高层的节点),使得计算指数降低
  • 便于遍历,octree相比于三角形组成的mesh遍历速度快太多了,这在cone tracing部分和filter部分会体现出绝对优势
voxel cone tracing算法的svo的一些特点和做法:
  • 将static mesh的voxel和dynamic mesh的voxel进行分离,对于dynamic mesh的voxelmz 每帧更新。
  • 使用gpu的rasterizer pipeline进行voxel构建--非常的高效
    • 禁掉depth test,从3个方向去渲染一个mesh,渲染的精度由定的voxel精度决定
    • 那么走到pixel shader的时候,每一个triangle的信息就都被离散成pixel,而且没有depth test,就真的是每一个triangle raster出来的每一个pixel都有了,然后在pixel shader里面将voxel信息更新到svo中去
    • 更新的信息包括normal, color, material property:和gbuffer如出一辙

voxel cone tracing的算法 一个图搞定就是:
  • 从lightview渲染场景,把光照信息填入svo

  • 对svo中的光照信息进行filter,
    • 开始存进去的光照信息实在最底层的level,那么要将这些信息也通过filter放入父节点,那么在cone tracing的时候,就可以直接读父节点(if possible&necessary)来获得足够的光照信息
    • 这个过程颇像构建mipmap
    • 存的信息是光照的方向分布

  • cone tracing,在我们看到的每一个像素这里,使用一组可以覆盖这个点的半球的cone来遍历svo,进而获得这个点上的光照信息
    • 获得的方式有使用较大的cone,来获得indirect diffuse lighting
    • 较小的cone,获得indirect specular lighting

实际计算的时候,使用了基于dx和底层硬件的很多优化手段,也很重要。
AO 可以做GI,那么再有足够的voxel信息的情况下,做AO简直就是顺理成章的事情,而且这个真3d的高品质ao,不是会受限的ssao。



以上是关于虚幻引擎4中的实时GI技术的主要内容,如果未能解决你的问题,请参考以下文章

为虚幻引擎4设置Visual Studio

虚幻4如何实时显示人物当前坐标

虚幻引擎(Unreal Engine)4.13 版正式发布

ue4 虚幻四引擎项目无法打包,求帮助!

虚幻4引擎怎么安装和启动

虚幻5引擎来了 虚拟现实傻傻分不清?