虚幻引擎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。




评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值