研发实战:Open 3D Engine Atom渲染器学习经历
一位实习生的学习经历
(映维网Nweon 2022年07月21日)Open 3D Foundation是Linux Foundation为加速开发商在3D游戏和仿真技术方面的合作而成立的机构,并旨在提升与3D图形、渲染、创作和开发相关能力的开源项目。这个Foundation的成员主要包括Adobe,亚马逊AWS,华为,英特尔和Niantic等等。
对于由Open 3D Foundation管理的第一个开源项目Open 3D Engine Project ,亚马逊旗下的Amazon Web Services(AWS)把游戏引擎Lumberyard的一个更新版本作为Open 3D Engine(O3DE)向社区开放。
日前,亚马逊的一位实习生茱蒂·吴(Judy Ng)撰文介绍了自己与Open 3D Engine,尤其是Atom渲染器的相关学习经历:
大家好,我是茱蒂,目前在亚马逊实习,并致力于O3DE,特别是Atom渲染器。我是2021夏天在亚马逊实习,专注于Atom项目,而今年夏天再次回到亚马逊实习。到目前为止,我已经学习了图形方面的基础知识,并将其应用于编写自定义着色器和制作自己的材质类型。以下是我与图形和Atom的学习细节。
1. 在实践中学习
我以前没多少图形方面的经验,我最初并没有太过重视计算机显示技术。但对于我使用着色器的工作,我对在屏幕显示用于创建图像的数百万像素的复杂性产生了赞赏。通过复杂的3D图形,我深入了解了Atom,并学习了通道、材质和着色器。尽管我以前听说过这些术语,但我不知道它们到底是什么意思。了解它们的最好方式是亲身实践。
我今年夏天实习的第一个项目涉及使用顶点着色器创建一种材质类型:允许植被弯曲。这种材质类型令材质看起来可以随风自然摆动和弯曲。
我首先简单地编辑了StandardPBR材质类型的顶点着色器,以显示偏离原始位置的对象。我只添加了position.x += 5。
我欣喜若狂地看到,在这一行着色器代码的偏移处出现了什么。然而,我感到困惑的是,为什么在原始位置有一个灰色轮廓的材质,而它与预期的纹理偏移。这时我意识到通道的重要性。StandardPBR有多个通道,每个通道渲染材质的不同部分。在我上面的例子中,我是为正向通道编辑顶点着色器,而深度通道依然使用未编辑的顶点着色器。这种连续通道非常必要,因为一个通道的输出可以用作另一个通道的输入。
于是,我开始编写我自己的材质类型。我通过.shader文件中的一个入口点在.azsl文件引用了着色器代码。这让我对Atom如何渲染每个材质有了更广泛的了解,并且教会了我每个着色器资源组的功能、函数和通道等等。尽管一开始文件和连接数量非常吓人,但一旦我熟悉了术语和每个组件的功能,我就开始赞叹Atom的管道组织和代码模块化。
对于图形,我注意到的一个有趣方面是对优化的关注。尽管计算机科学的众多领域都在促进优化,但图形优化显得尤为重要,因为低帧速率显而易见。另外,由于图形在很大程度上依赖于向量数学和物理,因此优化图形代码不一定局限于选择要使用的数据结构或算法,并且不一定局限于选择要部署的数学模型。当我需要使用振荡函数来模拟植被弯曲时,我遇到了一个简单的例子。最明显的函数是正弦波。然而,我了解到正弦是相对缓慢的事实时,所以使用正弦查找表或使用三角波更为理想。
2. 回顾反省
随着我添加了更多的着色器代码和更多的通道,我看到了我的材质不断演变,并最终看起来像一棵现实生活中的树。对我来说,这是使用O3DE和编写着色器代码最有价值的部分之一:几乎即时的视觉反馈。另外,回顾这一过程,我发现了当一切完美结合时的美妙之处。我的材质类型使用多个通道,每个通道都通过我的自定义着色器编辑材质的特定部分。
我非常感谢这次在亚马逊的实习,同时非常感恩能成为O3DE社区的一员,在学习图形的同时为Atom做出贡献。令我产生共鸣的亚马逊原则之一是对用户的关注。Atom的构建方式反映了这一原则。由于Atom是实时3D引擎的一部分,所以使用引擎的用户可能希望创建自己的材质类型或编写自己的自定义着色器。O3DE中包含的材质类型似乎是游戏开发者可能想要的常见功能,例如皮肤。尽管我还不熟悉图形,但使用这些通用材质很有帮助,因为它们是很好的模板。今年夏天我的实习项目重点是创建和编写教程,让用户像我一样学习和创建自定义材质类型。