超逼真渲染!虚幻引擎技术大牛解读全局光照系统Lumen
发布时间:2022-08-26 11:21:37 所属栏目:大数据 来源:互联网
导读:实时全局光照(Real-time GI)一直是计算机图形学的圣杯。 多年来,业界也提出多种方法来解决这个问题。 常用的方法包通过利用某些假设来约束问题域,比如静态几何,粗糙的场景表示或者追踪粗糙探针,以及在两者之间插值照明。 在虚幻引擎中,全局光照和反射
实时全局光照(Real-time GI)一直是计算机图形学的圣杯。 多年来,业界也提出多种方法来解决这个问题。 常用的方法包通过利用某些假设来约束问题域,比如静态几何,粗糙的场景表示或者追踪粗糙探针,以及在两者之间插值照明。 在虚幻引擎中,全局光照和反射系统Lumen这一技术便是由Krzysztof Narkowicz和Daniel Wright一起创立的。 目标是构建一个与前人不同的方案,能够实现统一照明,以及类似烘烤一样的照明质量。 近期,在SIGGRAPH 2022上,Krzysztof Narkowicz和团队讲述了他们构建Lumen技术之旅。 软件光线追踪——高度场 当前的硬件光线追踪缺少强大的GPU算力支持。我们不知道硬件光线追踪速度有多快,甚至不知道新一代控制台是否支持它。 因此,软件光线追踪方法运用而出。事实证明,它确实是一个非常好用的工具,可以用于缩放或支持有大量重叠实例的场景。 软件光线追踪提供了一种可能性,那便是可以使用各种各样的追踪结构,比如三角形、距离场(distance fields)、面元(surfels),或者高度场(heightfields)。 在此,Krzysztof Narkowicz放弃了研究三角形,简要研究了面元,但是对于那些需要相当高密度才能表示的几何图形,对其进行更新或追踪面元是相当昂贵的。 经过初步探索,高度场是最合适的,因其能够很好地映射到硬件中,并提供表面表示和简单的连续 LOD。 因为我们可以使用所有的POM算法,比如最小-最大四叉树,因此它的追踪速度是非常快的。 此外,多个高度场可以表示复杂几何,类似于栅格化边界卷层次结构。 若将其视为面元的加速结构也非常有趣,一个单独的texel就是一个受限于常规网格的面元。 除了高度场,Lumen还有其他属性,如反照率或照明,这样就能够计算出每次的照明。 在Lumen中,开发者将这张带有表面数据的完整贴花式投影命名为卡(Cards),即捕获位置。 栅格化的三角形 Raymarched cards光线步进卡(高度场) 对于场景中的每一张卡来说,进行光线步进太慢。因此需要一种卡的加速结构,开发者选择了一个4节点的BVH。它是为一个完整的场景构建的,每一帧都在 CPU 上,并上传到 GPU。 然后在追踪着色器中,我们将进行基于堆栈的遍历,并对节点进行动态排序,以便首先遍历最接近的节点。 BVH 调试视图 捕获位置 这里最棘手的部分是如何放置高度场,以便捕捉整个网格。Krzysztof Narkowicz称,「其中一个想法是基于GPU的全局距离场。每一帧我们都会追踪一小组主射线来寻找没有被卡覆盖的射线。 接下来,对于每一个未发现的射线,我们将使用表面梯度遍历全局距离场,以确定一个最佳的卡方向和范围,从而产生一个新的卡。 全局距离场的捕获位置 一方面,它被证实可以为整个合并场景生成卡,而不必为每个网格去生成卡。另一方面,事实证明它在实践中相当挑剔,因为每次相机移动时都会产生不同的结果。 另一个想法就是把每个网格的卡作为一个网格导入步骤。通过构建几何学的 BVH 来做到这一点,其中每个节点将被转换为 N 张卡。 如下: 栅格化的三角形 光线步进卡(高场) 卡位置视图 这一方法在在寻找一个好的位置时遇到了问题,因为BVH节点并不是放置卡的好代理。 那么,研究人员又提出了另一个想法:遵循紫外线展开技术,并尝试聚类表面元素。 因为要处理数百万个由Nanite提供的多边形,因此他们将三角形换成面元。 同时,他们还切换到了一个较少的约束自由导向卡,以尝试与表面匹配更好。 (编辑:钦州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |