光线追踪可以说是近些年游戏行业最热门的技术之一,对比传统的3D渲染,它为我们带来了更为逼真的阴影与反射效果,让游戏画面呈现更为真实的视觉体验。但目前光追的普遍应用仍是在PC端,对于广大的移动端玩家来说,所需要的并不只是硬件的升级,还需要更多软件的支持。
针对这一痛点,在由腾讯游戏学堂举办的TGDC2022腾讯游戏开发者大会上,来自Imagination Technologies公司的图形技术美工专家Alekos Caporali就以从业者的角度,为我们分享了手游光线追踪的技术实现原理、工作流程与优点。
以下是演讲实录:
我是Alekos Caporali,我是Imagination Technologies公司演示团队的图形技术美工专家。
首先请允许我简单介绍一下我所在的公司——Imagination Technologies。在过去的30年时间里,我们一直致力于设计GPU并且在在移动设备有很强大的表现大,同时,我们也为台式、汽车和许多其他应用市场提供IP技术在一些最早的主机游戏中就有我们的技术,例如世嘉公司的Dreamcast。正是有了这些经验,我们有机会从2007年起开创硬件光线追踪研究的先河。如今,我们已成为移动GPU领域和移动硬件光线追踪领域的引领者。
并非所有的光线追踪硬件都一样,因此,在评估不同解决方案的性能时我们需要考虑几个要点。为了帮助识别现代硬件中不同等级的光线追踪能力,我们设计了一张图表。每上升一个等级,对效率的关注就会提高,市场并非总是基于效率而变化。
比如说最近发布了带有光线追踪功能的第二代台式电脑硬件,仅提供更多的光线追踪处理便提高了性能,这自然需要更大面积的硅片和更多的功耗,但这种粗暴的方法并非是可行的解决方案,因为有些移动设备等需要在功耗预算内运行。
今天我不会详细介绍这里显示的所有等级,但大家需要明白,0级和1级是以前的解决方案,如今已经很少见了,它们是开启光线追踪的初级解决方案;2级和3级最流行,也就是当今常用的基于软件的光线追踪;最后是我们今天要集中讨论的两个等级。
4级在层次型包围盒上增加了相干性排序的硬件,也是目前移动硬件光线追踪的最佳实现方式,这是我们公司GPU中的硬件光线追踪技术。
然后是5级,也是由我们公司开发的更先进的系统,并在2016年首次展示于PowerVR GR6500测试板,BVH处理也是通过专门的硬件解决方案来分类,这也更有效。
我们公司研究出了基于以下方式提高效率的系统——一个表面上反弹角度一致的光线会被排在一起,因此称为相干性排序,这种技术以智能的方式优化整个光线分选过程,减少硬件运行的压力,这使得其成为非常适合的移动解决方案。
让我们进入正题,本次演讲我会分为两个部分。
第一部分,我会给大家演示如何实现全光线追踪,解释其背后的一些功能,并就如何创建针对游戏中光线追踪的资源提供建议。
第二部分,我会给大家展示我们最新的光线追踪,它完全建立在O3DE的游戏引擎上,该引擎可以轻松实现实时光线追踪的全局光照。我会指导大家完成不同步骤,以便让大家能够首先了解RTGI的功能,使其在游戏引擎中起作用。
我们在之前的演示中是如何实现光线追踪的呢?
我要播放的一个我们公司开发的产品的演示,以便展示我们如何实现完全光线追踪。在明显的移动端游戏环境中,有针对移动性能预算的优化功能。这个演示视频在我们内部引擎上运行。
以防大家还不了解,我先介绍一下光线追踪的概念。光线追踪其实是改变游戏规则的3D图形技术,它模仿了光线在现实世界中的行动方式,而我们将要看到的仅仅展示了其部分能力。我们一起来看这段演示视频。这是我们在2020-2021年开发的,它在移动预算中实现了光线追踪的大部分功能。
大家可以在这张图片上看到概要情况。
首先,不同材质表面形成了逼真的反射(红框中),硬边的光栅化阴影替换成了光线追踪软阴影(绿框中),这极大地增强了场景的真实性,最后还有实时全局光照(黄框中)。
如何助力环境光以实现与现实生活中一样更好更真实的效果?现在我们了解了光线追踪能够提供的主要功能,但这对我们技术美工和开发人员来说意味着什么?
对我们这些想实现这些功能的人来说意味着什么?我们在资源创建工作流程中需要改变哪些部分以使资源在开启光线追踪的引擎中正确地可视化?最重要的一点是:这是否很难做到?
好消息是这一流程与大家所习惯的流程几乎别无二致!
只是更注重了一些细节——防止光线追踪时可能出现恼人的伪影,稍后我会深入讲解。
现在我先谈模型优化。
光线追踪的性能显然也取决于场景的复杂性和模型的复杂性,所以在建模时需要注意——
首先要保持低多边形数量,管理拓扑结构使其干净平衡(这取决于你真正需要的网格细节数量);然后使用平滑组让低多边形的边缘有正确的法线投影;最后,合理分割纹理资源,防止颜色渗出。在需要的情形下,可以通过多纹理叠加来降低纹理尺寸。有了以上要点,再适当使用精细模型,就可以制作出高质量的资源,渲染出完美的画质。
第二组主题是继续深入研究功能技术实现,比如说动画,特别是摄像机动画,这些动画在光线追踪环境中缓慢移动时效果更好,这是因为光线追踪阴影和光线追踪反射的去噪器有时需要聚合。
最后我想谈谈在为(PBR)物理材质生成纹理时需要采取的方法,也是在光线使用方面强度较低的一种。大家可以先看看这个演示视频。正如大家所看到的一样,它大大地改进了移动视频游戏的总体外观。
展示了该功能的外观后,我最后会更为详细地介绍RTGI如何工作,还会向大家展示如何轻松地在现代游戏引擎中实现这一功能。我将在O3DE中实现,这个引擎也用来做演示。
在了解如何设置和激活该功能之前,我们需要先了解什么是真正的光线追踪全局光照,以及它在现实生活和引擎中如何运行。
我首先要说的是全局光照在游戏引擎中并非全新系统,我们经常看到全局光照作为单一的烘焙实例来实现,但是新的游戏引擎的真正创新之处在于:只有通过光线追踪才能做到这一点,那就是实时计算全局光照系统。
有了RTGI 这个系统完全动态化,对光的几何形状作出反应,在场景中材质实时发生变化。大家在这段视频中可以看到全局光照在实时适应引擎视窗内的材质变化。
值得一提的是,RTGI旨在再现现实生活中的物理现象,从一个物体上反弹的光线会很自然地动态扩散到附近其他物体上。通过简单的演示,我可以很容易地向大家展示它在现实世界中如何工作。
如果我打开手机的手电筒,将手电筒直接对准一个蓝色物体,从该物体扩散出来的光被蓝色色调所覆盖;要是我对准一个红色物体,扩散的光线便是红色色调。我们可以再看一下并注意以下区别:第一个物体和第二个物体所散射的光线之间存在差异。
那游戏引擎又是如何在软件中使用光线追踪技术来实现同样的结果的呢?那便是使用“扩散式探针”。场景中基本上布满了探针的光栅,光线追踪在每个探针周围投下数百条光线,扩散式探针检测光线与附近几何体的相交位置,并根据这些信息产生辐照度纹理,然后把这些信息投射到几何体上,传播光线的强度和颜色。这发生在实时激活探针和取消激活的整个场景中,根据活动几何体的位置达到优化目的。
我们现在来看看这个系统如何帮助增强环境光的真实性。
RTGI有几个好处:
第一,O3DE中的动态全局光照可以在同一场景中同时考虑到多个光源,对于提供光线追踪的大家来说,它可以实时计算;第二,它也可像普通全局光照一样烘焙;第三,它在活动光线方面非常省钱,不需要很高的预算便能正常工作;第四,还有一个好处是非常容易实现。
那我们如何做到这一点?
在开放3D中需要进入关卡添加新的组件,这就是漫反射全局光照。你可以直接设置系统质量,我选择中等。然后可以创建新的实体或对象作为全局光照的容器,我将其重命名为全局光照。随后,你需要在这个实体中添加新的组件。也就是漫反射探针光栅,它将决定环境中探针的光栅。但如果不定义边界就无法工作,所以我将新的立方体作为一个定义,设置立方体的尺寸和立方体在三维空间中的位置,而这实际上已足以开启可视化全局光照了。
现在可以激活探针可视化了。也许我们可以开始在环境中更好地分配探针,我将采用1.5米x 1.5米的间距。最后可以设置偏置,可以设置每个探针的光线数量,我选择144条光线来优化这一功能。这基本上是在O3DE等游戏引擎中激活全局光照所需要做的一切。大家现在已经能够理解RTGI的基本功能了,并最终知道如何在新的游戏引擎中实现。
最后,我想提一下光线追踪系统的前景,即我们的下一步探索方向是什么?
目前,我们公司的开发者和技术美工都还在充分探索这种支持光线追踪的系统。但幸运的是,我们能更容易地接受这种技术和相关的知识,我们公司正努力让光线追踪技术尽快在移动设备中被大家使用。相信在不久的将来,游戏玩家、技术美工、开发者和工程师能使用和享受这种技术。
我们看到移动游戏行业有着光明的未来,或许也可以说是光线追踪有着光明的未来,这让我们满怀期待!
END