Imagination 基于 O3DE 引擎的光线追踪 Demo 详解

作者:Alekos Caporali


今年,Imagination 技术团队参加了在旧金山举办的游戏开发者大会(GDC),期间展示了与亚马逊网络服务(AWS)合作创建的光线追踪demo。

在本文中,我们将重点介绍开创性的移动光线追踪的实现,这是与亚马逊网络服务(AWS)合作完成。亚马逊网络服务(AWS)是开源实时3D引擎(O3DE)的主要创建者,该引擎可支持使用光线追踪实现实时动态计算全局照明。


光线追踪的强大功能

光线追踪是一项强大的技术,允许开发人员通过计算光线在 3D 引擎渲染器内的反弹情况来增强游戏动画,或任何实时计算生成的图像。挑战在于它是计算密集型的,这就是为什么 Imagination 的IMG CXT GPU IP中的 PowerVR Photon 架构在帮助实现使此类实时计算所需的功率和带宽效率方面如此关键。IMG CXT 代表了五级光线追踪级别系统的第一个 4 级解决方案。

光线追踪级别系统

光线追踪模拟了光线在现实世界中的工作方式,光子从光源发出并在场景中反弹,直到到达观察者的眼睛。光线追踪可以在 3D 渲染中以多种方式使用,以生成灯光和阴影,使 3D 场景看起来更逼真。虽然游戏中的光线追踪通常用于创建逼真的反射,但如果它用于全局照明 (GI),它可以真正模拟 3D 场景在现实世界中的表现。

基于另一种(基于探针的)计算和使用场景内的二次光反弹方法,全局照明告诉渲染器场景环境的哪些部分更暗、更亮,以及灯光如何在附近对象之间扩散(强度和颜色)。为了更好地了解反射和 GI 的视觉影响,请查看我们为启动 IMG CXT GPU 而创建的光线追踪演示,它们带来的差异非常明显。它演示了 GI 如何比仅使用反射更有效地创建真实感。

我们于 2021 年 7 月开始着手 O3DE演示,在 O3DECon大会(开源3D基金会的官方大会)展示结束后,我们与开发人员取得了联系。O3DE 是 Amazon Lumberyard 的演进,捐赠给 了Linux 基金会,并由合作伙伴委员会和公众组成的委员会开发和维护。我们花了第一个月的时间从长远角度评估引擎的性能,找出它可以为我们的演示团队提供哪些可能性。

我们发现该引擎可以使用光线追踪来实时动态计算 GI,因此我们决定将其用作即将到来的演示的主要功能。从那里开始,与 AWS 开发人员的展开了紧密合作,我们互相帮助;我们测试了引擎,并向开发人员提供了持续的反馈,基于这些反馈,他们实现了一些缺失的功能。

结果是我们称之为“Buon(GI)orno”的图形演示。

GI 如何对实时变化做出反应的演示

由于引擎处于早期阶段,该项目确实给我们的艺术家和图形工程师带来了一些挑战。然而,通过时间和耐心(以及远见),我们设法同步,然后将我们的努力集中到现在非常易于使用的 AAA 引擎中。

事不宜迟,这里是“BuonGIorno”图形演示。这是一个意大利式小村庄的风格化表示,并展示了使用光线追踪后全局照明如何实时工作。


第 0 节 – Buongiorno!

该视频是我们在 GDC 上展示的演示的更新版本,下面我们将解释屏幕上发生的事情(可参照以下时间节点查看):
– 0:00 到 0:15 :简介。
– 0:16 到 0:28 :基本功能描述。
– 0:29 到 0:51 :颜色扩散和光遮挡。
– 0:52 到 1 : 05:RTGI 对整个场景的影响(开/关)。
– 1:06 到 1 :28 :当场景中的材质和光照条件发生变化时,由于光线追踪,引擎实时动态处理RTGI 效果。
– 1:29 至 2:00 :场景展示,由 Imagination 的 PowerVR Photon 架构 + 混合渲染提供支持,使用 O3DE。


关于 O3DE 引擎

我们将首先简要介绍负责开发 O3DE 的团队。他们是艺术家和工程师的集合,他们的角色是通过图形演示展示创新技术和功能。他们从使用新软件中受益,因为这有助于他们增强作品的视觉效果,而公司则从性能数据收集中受益,这些数据代表了在发售设备中实施时,它们将如何在硬件上运行。


如果您对 O3DE 感兴趣,那么入门很简单。您可以从O3DE 的网站下载引擎,在稳定版本或每日构建版本(其中包含最新更新)之间进行选择。与任何新事物一样,第一步可能令人生畏,但不要担心,坚持下去,您会在短时间内就适应它。

开发人员正在努力根据社区反馈(尤其是我们的反馈:作为引擎的早期采用者,我们与主要的 O3DE 合作伙伴之一 AWS 密切合作)发布修改和更新,并提供有关如何使用这些功能的文档。那么,经过测试,O3DE 带来了什么?嗯,O3DE 具有其他游戏引擎的所有典型特征,例如多线程渲染器、数据驱动的动画系统、实时物理引擎等等。

正如我们上面提到的,O3DE 的突出之处在于,与其他游戏引擎不同,它可以使用光线追踪实时动态地重新计算 GI,使其成为展示我们IMG CXT的硬件光线追踪功能的完美合作伙伴。

除了 GI,我现在将介绍其他几个主题,以展示熟悉引擎是多么容易,并根据我们在制作 BuonGIorno 演示过程中学到的知识,为您提供一些提示。


创意工作流程

对于开发人员来说,从项目的第一天开始就有清晰的想法是多么重要,我怎么强调都不过分。制作演示或视频游戏是一个艰巨的过程,因此您必须从一开始就拥有具体的愿景才能获得好的结果。这意味着了解项目的目的。例如,我们演示的主要目的是展示如何通过使用光线追踪 GI,从物体扩散的鲜艳色彩可以实时动态地影响周围环境照明和附近的实体。这就是我们如何想出创建一个意大利风格的小村庄并创建有彩色房屋的想法。

通过光线追踪 GI 影响二次光反弹的材质开关

我们首先收集参考资料,并制作由白框组成的场景(或布局)的初稿,然后我们迭代相同的想法,实现简单的动画和基本的技术功能。通过这种方式,您可以立即了解您的概念是否有效,以及它的可行性。完成并获得批准后,我们开始制作构成场景所需的资源。

第一阶段是对资源进行建模。您甚至可以使用照片扫描或其他技术,但请注意,游戏引擎通常需要您生成经过优化的资源,因此您需要注意一些事项。

  • 密切关注多边形数量。
  • 注意模型的拓扑。
  • 根据您的 UV 接缝指定平滑组。
  • 调节 UV 岛的分布和间距,以避免颜色溢出。

达到这种优化水平意味着您将能够制作干净的高多边形到低多边形“烘焙”(这意味着通过某些贴图通道将细节从高多边形造型投影到同一模型的低多边形版本,例如凹凸、法线或高度)。这对于认为资源已准备好接收动画和纹理至关重要。

说到这里,让我们进入资源制作流程的下一部分,即创建纹理贴图和材质。

目前,基于物理渲染 (PBR) 的 O3DE 工作流程要求您为每个材质通道设置独立的纹理贴图。然而,在未来的更新中,开发人员正在努力提供使用称为“纹理打包”的技术的可能性。除此之外,要导出的纹理贴图的数量和类型取决于您对着色器的要求。事实上,并不是每个着色器都针对相同的用途进行了优化或需要相同类型的纹理。

例如,在创建新的 PBR 材质时,O3DE 允许您在不同的着色器之间进行选择,每个着色器都支持不同的功能和纹理贴图。这样您就可以决定哪一个更适合您的需求。我希望您注意到,在 O3DE 中这些不同版本的 PBR 材质之间,有一点是它们都支持 “辐照度”。

O3DE 中不同 PBR 材质预设中的辐照度

如果您可以在所有三个PBR实现技术中找到它,这一定很重要,对吧?

正确的!这是因为 O3DE 中的辐照度是一个通道,当使用带有“乘”值的 GI 来管理颜色扩散的强度时,它决定了从该特定材料扩散出什么颜色。在实施 GI 时,您需要注意这一点。

让我们进入下一部分,这将是关于 O3DE 中的资源和功能实现的。

O3DE 中的资源和功能实现

如何使用资源填充关卡是开始可视化演示或视频游戏的第一件事。您只需从场景内的资源浏览器中拖动 FBX 或 GLTF 文件(3D 文件的行业标准文件格式),就会自动创建具有网格组件的“实体”。从那里,您可以根据每个资源在场景中的用途开始添加“组件”。例如,让您的关卡感觉生动是在演示或视频游戏中实现的最重要的事情之一,因此您需要知道如何在某个点为某些对象或角色实现动画。

O3DE 有两种不同的动画方法,一种最适合蒙皮(变形)对象,另一种最适合非蒙皮对象。第一种方法涉及将 Actor 组件与 Simple Motion 组件或在 O3DE“动画编辑器”中创建的运动系统一起使用。如果您不需要为实体蒙皮,您可以使用“轨迹视图”编辑器并创建序列,在其中将动画“关键帧”直接放入编辑器。选择取决于您的需要,但请注意,O3DE 中仍然不支持蒙皮对象主动影响 GI。对于开发人员来说,此功能仍在开发中,他们希望尽快实现它。

非蒙皮对象会影响光线追踪 GI 探测器的实时激活,而蒙皮对象则不会。

预制件

预制件是一种特殊类型的组件,它允许将配置完全的游戏对象(O3DE 中的“实体”)保存在项目中以供重复使用。然后,可以在场景甚至其他项目之间共享这些资源,而无需再次配置。这对于将被多次使用的对象非常有用;因此,它们至关重要,尤其是在关卡创建的模块化或程序化方法上。O3DE 以预制件为中心,甚至您的关卡也会自动设置为预制件。

使用 Prefab 实例化游戏对象(实体)的强大功能

预制件在 O3DE 中很容易创建:您可以通过右键单击实体来完成 - 然后您必须决定将其存储在项目中的哪个位置。然后,您只需从“资源浏览器”访问它们,复制并通过双击它们从视口或大纲中进行编辑。您现在只需单击几下即可将您的更改从一个预制件反映到所有实例化副本!

我们现在已经知道如何在编辑器中实现资源了——但是如果您看不到演示或视频游戏,那它又是什么?因此,下一个主题是照明。我不会专注于基本的照明特性,但我想让你知道如何应用 GI。

O3DE 中的 GI 功能强大。首先,如果需要,它可以一次使用多个光源,包括定向灯、点光源、聚光灯和区域灯。接下来,它可以计算二次光反弹,既可以为您使用硬件光线追踪核心来进行动态计算,也可以作为探针与光源的单一交互进行烘焙。第三,也是最重要的,GI 也很容易设置。

您需要执行以下操作:
1. 首先,转到您的“LevelName.prefab”并添加一个名为“Diffuse Global Illumination”的组件。
2. 选择您希望在场景中具有的 GI 质量级别。
3. 创建一个新实体,并向其中添加一个“Diffuse Probe Grid”组件(O3DE 将要求您创建一个“长方体组件”以确定将包含和分布探针的体积边界)。
4. 通过设置 GI 体积的尺寸并将其移动到场景内需要的位置来定义 GI 体积的边界(它必须完全包含您希望受 GI 影响的实体)。
5. 开始调整 GI 参数,例如 Probe Spacing、“Number of Rays per probe”、“Ambient Multiplier”(应保持为 1)和偏差。您可以通过激活探针的可视化,来帮助自己在这些参数之间达到正确的平衡(“show active/inactive probes”,这是 O3DE 中最近添加的功能)。
6. 确保 GI 实体处于活动状态,模式设置为“实时(光线追踪)”,并开始在体积影响内播放实体、灯光、材质和动画。您会注意到 GI 会实时适应您的更改,从而提供更好的整体环境照明。这就是光线追踪 GI 的强大之处。
7. 任何这些步骤和设置都可以随时查看和修改。

最后,我想谈谈如何完成和导出您的项目。

完成项目时需要注意的是后期处理。设置后处理 FXS 很简单:它需要将“PostFX 层”组件添加到实体,然后您可以开始将所有其他单个效果组件添加到同一实体。目前, FX 功能有很多后处理特性可选,例如屏幕空间环境光遮蔽、自动或手动曝光控制、HDR 颜色分级、色差、光晕等。

其他功能,例如光线追踪屏幕空间反射,是 O3DE 开发人员正在开发的东西,希望很快就会实现。

一些可用的后处理效果在 O3DE 中作为实体内部的“组件”实现。

测试和导出您的工作

O3DE 编辑器可以随时播放和测试您的关卡,跟踪顶点计数、图元计数、绘制项目,并监控FPS 速率。除了播放按钮外,还有一个物理模拟按钮,供想要尝试该功能的人使用。

要导出您的作品(特别是我们演示的视频),您可以从轨迹视图中设置“camera director”,并创建最终的可播放序列。从那里,您可以直接在引擎中录制视频。

结论

您现在了解了我们在创建 BuonGIorno 演示时了解的有关 O3DE 的所有内容。从本质上讲,我们想要展示的是 ,O3DE 是多么容易实现既熟悉又惊人的新功能,以增强您在演示和视频游戏中的视觉效果。通过关注全局照明而不仅仅是反射,我们了解了光线追踪如何帮助当前和下一代开发人员制作更好、更逼真的环境照明。

虽然目前还没有在 O3DE 中同时实时运行光线追踪反射和光线追踪 GI 的选项,正如我多次提到的,开发人员正在开发它!感谢他们的努力,并且感谢 Imagination移动和桌面 PowerVR Photon 架构,这些功能将很快成为视频游戏和实时 CGI 世界的标准,让每个人都能享受更好的视觉效果。


原文链接:https://developer.imaginationtech.com/blog/the-making-of-the-imagination...
声明:本文为原创文章,转载需注明作者、出处及原文链接。

最新文章