谈谈虚幻引擎4的Global Illumination

1649 篇文章 11 订阅
1623 篇文章 22 订阅

本届GDC 2013,Epic再次展示了UE4的最新demo,效果惊艳毋庸置疑,,不过今天我们只谈UE4的光照利器--SVOGI。

SVOGI全称Sparse Voxel Octree Global Illumination,由Epic的Andrew Scheidecker发明,和CE3的LPV(Light Propagation Volumes)同属实时全局光照,但SVOGI精度更高,这个也是虚幻引擎迄今为止首次引入实时全局光照,同时SVOGI允许在全景模式下实现间接镜面反射和光照反射。UE4保持了octree(八叉树)的数据结构,SVOGI的算法为voxel cone tracing,此算法的好处是可以使cone-tracing通过GPU运行的更快,在实时模式下,每个像素可以达到运行一次甚至更多。

接下来介绍下voxel cone tracing的核心(转载自CSDN,作者ccanan),简而言之就是voxel和cone tracing:

voxel:
谈谈虚幻引擎4的Global <wbr>Illumination(转) 

voxel于3d mesh正如pixel于2D的图片:规则的离散化的表示信息,pixel是将2D的图片切分成一个个小正方形,voxel是将3D空间切分成一个个立方体。voxel比较高效的组织方式是sparse voxel octree,简称svo,以八叉树的hierarchy方式,表示空间中有东西的部分:
谈谈虚幻引擎4的Global <wbr>Illumination(转) 

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:
如图所示:
谈谈虚幻引擎4的Global <wbr>Illumination(转) 

  • 从lightview渲染场景,把光照信息填入svo

谈谈虚幻引擎4的Global <wbr>Illumination(转) 

  • 对svo中的光照信息进行filter
  • 开始存进去的光照信息在最底层的level,要将这些信息也通过filter放入父节点,那么在cone tracing的时候,就可以直接读父节点来获得足够的光照信息
  • 过程类似构建mipmap
  • 保存的信息根据光照的方向分布
谈谈虚幻引擎4的Global <wbr>Illumination(转) 

  • cone tracing,在我们看到的每一个像素这里,使用一组可以覆盖这个点的半球的cone来遍历svo,进而获得这个点上的光照信息
  • 获得的方式有使用较大的cone,来获得indirect diffuse lighting
  • 较小的cone,获得indirect specular lighting
谈谈虚幻引擎4的Global <wbr>Illumination(转) 

实际计算的时候,基于DX和底层硬件的优化手段也很重要。

在UE4里,不再有预先计算好的光照贴图(lightmaps),取而代之的是,间接或直接光照都是由每帧实时计算得出,对比之前存储于2D纹理贴图里的光照贴图,UE4里全部存储在voxels(voxel就是在三维空间里,一个点的图像信息),voxel由树形结构管理,用来标记一个点的图像信息坐标,当一个像素被渲染的时候,它会向voxel tree询问“哪些voxel对我可见”,基于这些信息,决定了它所会接收到的反射光数量。这些voxel tree会每帧进行信息更新,进而所有像素根据该tree获得相应的光照信息。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值