剖析游戏引擎:Unity3D为例外文翻译资料

 2022-05-18 08:05

英语原文共 6 页,剩余内容已隐藏,支付完成后下载完整资料


剖析游戏引擎:Unity3D为例

法鲁克·梅萨奥迪

IRT Blt;gt;Com

farouk.messaoudi@b-com.com

格温达尔·西蒙

Telecom Bretagne gwendal.simon@telecom-bretagne.eu

艾德兰·克森提尼

University Rennes 1 – IRISA adlen.ksentini@irisa.fr

摘要 - 近期有关视频游戏如何发挥作用的风潮推动了对修改游戏引擎架构的需求。事实上,移动平台的游戏玩家更多,他们使用的智能手机和平板电脑与PC和游戏主机相比缺乏CPU资源。有两个新兴的解决方案,云游戏和计算卸载,它们能改善游戏玩家的体验。因此,剖析和分析游戏引擎的表现将有助于更好地理解如何把握这些新的研究方向,这在其他文献中至今尚未见到过。在本文中,我们通过分析和评估最流行的游戏引擎Unity3D来填补这一空白。首先,我们剖析了Unity3D架构和模块,然后使用基准评估构成Unity3D的不同模块,在五个有代表性的游戏中的CPU和GPU性能。

  1. 介绍

目前的游戏创作者主要依靠游戏引擎作为他们开发游戏的主要软件。游戏引擎通过为游戏运行的硬件和操作系统提供方便的抽象来简化程序员的任务。游戏引擎的目的还在于充分利用主机的功能,以便玩家可以获得最逼真的游戏体验。但是目前的游戏引擎必须要发展以适应两个趋势:云和移动性。

首先,云游戏的概念受到越来越多的关注,因为在受控数据中心运行游戏带来了很多机会。然而,尽管多媒体任务虚拟化的进展很快,但同时在一台机器上运行的游戏数量仍然很低[1]。缺乏整合限制了可扩展性并增加了云游戏服务的成本。为了从给定的数据中心为更多的玩家提供服务,游戏引擎必须(i)允许不同游戏实例之间的资源共享,以及(ii)分布式,以便更好地利用数据中心资源,特别是通过区分切割对齐模块需要特定的图形处理单元(GPU)硬件,以适应任何中央处理单元(CPU)配置的较简单的硬件。不幸的是,最先进的云游戏平台[2],[3]仍然将每个正在运行的游戏视为单个黑盒子。

其次,玩家可以使用移动设备,例如智能手机,平板电脑和虚拟现实设备(VR)。这些设备有两个主要的局限性:关于预期的计算能力低,特别是GPU,以及由于硬件资源的高利用率而导致的电池消耗。解决方案是把游戏中的运算放在附近的功能强大的机器上(例如桌面和机顶盒)[4]。

远程图形渲染不是一个新的话题[5],但现有的解决方案都不符合高分辨率,复杂3D图像快速渲染的预期。此外,就我们所知,以前的工作没有涉及卸载游戏引擎的非图形组件,例如物理模块和对象行为脚本。

尽管重新审视游戏引擎的需求很高,但科学界忽略了剖析和评估最新技术的论文,即当前的游戏引擎。与游戏引擎有关的文献主体在游戏行业的重要性方面小得惊人。 尽管有两篇论文是研究游戏引擎架构[6],[7],但现代游戏引擎的架构和性能从未被正式分析过。据我们所知,相关工作的重点是将游戏引擎应用于特定领域,如严肃游戏[8],研究[9]和VR深度应用[8],[10],[11]。

在本文中,我们通过分析市场上最受欢迎的游戏引擎Unity3D [12],向了解游戏引擎迈出了第一步。我们对五种具有不同质量水平的代表性游戏的表现进行评估,并以生成帧分析CPU和GPU时间的性能。然后,我们根据游戏引擎中模块的类型和功能分析模块的处理消耗。最后,我们以生成一个帧分析Unity3D游戏引擎的不同模块和功能之间的调用。

我们的主要研究结果总结如下:

  • 即使在给定的游戏中,生成帧的时间也有很大差异。 这种高度可变性是云合并的一个缺点。而且,同样的游戏的两个不同质量级别的消费时间也不同,所以资源消耗很难预测。
  • 大部分CPU消耗和大部分GPU消耗与渲染模块有关。 这些模块通过一系列调用紧密耦合,这使得在当前游戏引擎中卸载部分代码变得不那么有意义。

我们首先在第二节给出关于游戏引擎的一些背景信息。 然后,我们在第三部分描述我们为测量Unity3D游戏性能而设立的实验平台。然后,我们在第四部分介绍我们的绩效评估。最后,我们将在第五部分中讨论有关如何向下一代游戏引擎迈出的第一步的开放观点。

  1. 背景:游戏引擎

我们将游戏引擎看作游戏开发者的框架,看作为游戏玩家的一段代码。一方面,游戏引擎是一组工具(包括低级库,用户界面编辑器和游戏多媒体管理工具),这些工具有助于游戏开发者在创建新游戏过程中的工作。 游戏开发者社区因此认为游戏引擎是框架或平台。 我们将在整篇论文中使用“框架”。 该框架提供了游戏内容(多媒体内容和主脚本)与底层硬件之间的抽象层。 Unity3D等最流行的框架是跨平台的,即给定的游戏引擎可以运行在各种配置的各种操作系统上。

另一方面,游戏引擎是最终在设备上运行以将游戏提供给最终用户的一组软件和数据。游戏社区将游戏引擎视为一段代码。所有由Unity3D框架创建的游戏都有着相似之处,使Unity3D游戏引擎一致。我们将重点放在典型的Unity3D软件上,我们称之为游戏引擎。

  1. 主要模块

游戏引擎由各种模块组成。对于给定的游戏,其中一些主要由游戏创作者编写:

人工智能(AI) - 非玩家角色(NPC)的管理是通过一些特定的模块实现的,这些模块将预先计算的场景与动态生成的行为混合在一起,以提供智能显示效果。

物理引擎 - 这些模块旨在使游戏世界尽可能逼真,无论玩家(主角)和AI模块(NPC)决定的事件如何。 这些模块还根据物理规律模拟世界中可移动元素的行为。

脚本这些模块包含游戏本身。 从捕获的玩家输入(由特定模块提供)中,游戏开发人员以脚本语言详细描述了一系列游戏内容和事件,特定于每个框架。

在给定框架创建的每个游戏之间,其他的一些模块通常很常见。 这些模块代表抽象层,尤其是防止游戏创作者花费时间在低级别问题上。

输入 - 从游戏者(例如操纵杆,键盘, VR传感器)获取命令都集中在一组模块上。 这些模块需要游戏创建者的最小重新编码。

多媒体渲染 - 这些模块负责生成游戏的图形和音频元素。关于图形,渲染模块必须每x毫秒(ms)生成一个新帧,其中x通常在10到30之间。还要注意,这些模块的输出通常是原始视频,需要为之后的显示输出进行编码[13]。

网络 - 这些模块为多人游戏和基于服务器的游戏实现通信程序和协议。并且对于游戏玩家的要求,网络模块应该是快速的和防欺骗的。

  1. 渲染管道

我们下面描述游戏引擎的渲染管道,尤其是Unity3D。 我们首先简要介绍低级DirectX库的管道,Unity3D在其上面构建Windows操作系统上的图形元素,而对Mac和Linux,Unity使用OpenGL库,嵌入式领域如Android、iOS和Web,Unity分别使用OPenGl、ES和WebGL。有关这些库的更多详细信息,请参阅此链接 1。下面,我们演示Unity 3D如何实现这个管道。更多信息可以在[14]中找到。

渲染管道是基于3D场景的给定几何描述和定向虚拟相机生成2D图像所需的多个阶段或步骤的组合。这个DirectX流水线是一系列的动作,它们按照下面的连续步骤发生。

首先,输入汇编程序从内存中读取3D对象的数据(顶点和索引),并用三角网格近似。三角形越多,逼近越好,但需要的处理能力越强。然后将每个对象放入具有其自己的方向和大小的局部坐标系中。最后,通过应用几何变换将所有对象放在全局坐标系中。

第二步与相机有关。视图空间是一个坐标系统,其中虚拟摄像机被转换为世界空间的原点。然后可以区分物体的正面和背面。由于相机看不到背面,因此所有背面多边形都会被剔除。

照明步骤是产生逼真场景的关键步骤。光源是在世界空间中定义的简单物体,它们是颜色,强度,方向,焦点和位置的组合。该步骤还包括取决于各种参数(例如,表面的光滑度和材料以及入射角)而重复吸收和反射光过程。 然后执行剔除步骤以根据视锥的计算来确定应从场景中丢弃哪些对象。物体内部和外部的物体被保持在场景中,而物体内部和外部之间的物体被部分地剔除。

最后,基于3D顶点透视投影到物体内的2D投影窗口上渲染场景。顶点坐标被转换以将2D场景放置在屏幕上的矩形窗口中,通过缩放和平移将其称为视口。这个阶段的输出是像素。光栅化将这些像素转换成屏幕坐标,形成进行检查和着色后的三角形列表。

1https://www.khronos.org/opengl/

Unity3D将DirectX作为默认渲染管道,但引擎使用与主管道一起进行的四个额外渲染活动。我们在下文中简要描述它们。

前向渲染管道将环境通道分隔为不受光线影响的对象、不透明对象的光传递和透明通道,其中透明对象的灯光和颜色与其他不透明对象的颜色相结合。

延迟着色管道基于对几何缓冲区的智能管理[15],首先计算几何图形,然后应用照明。

预呈现管道解决了延迟着色中不同材质着色器的受限使用。在光经过预渲染后,光存储在一个新的缓冲区中,从而改善了阴影计算。

最后,顶点点亮渲染是最快的。这个过程在一次处理中完成,其中每个对象都用来自所有光源的对象的顶点上计算的照明来渲染。但是,此解决方案不支持每像素效果,如阴影,光信息,法线贴图和高度详细的镜面高光。

  1. 实验平台

为了评估由Unity3D框架生成的不同游戏引擎的性能,我们在运行Windows操作系统的笔记本电脑上运行Unity3D 5.02版(win 7专业版),并将d3d11作为DirectX库用于渲染管道。 该笔记本电脑是戴尔Precision M4800,主频为2.8Ghz,采用英特尔酷睿i7处理器。 该笔记本电脑采用了Nvidia Quadro K2100M(2 GB和16 GB)GPU卡进行了升级。

我们从Unity3D的“资源商店”中选择了五款不同的游戏,它们具有不同的特点,旨在覆盖市场上最具代表性的游戏。 我们总结了表1中每个游戏的主要特点。尽管类型,维度和玩家对游戏类型有了一个概念,但参数更多地与渲染,物理和统一脚本的CPU消耗相关。有关这些游戏的更多详细信息,请参阅资源商店。

对于每场比赛,我们为两种质量类型生成了超过10,000帧,这具有合理比赛节奏的优秀质量,并且此处为每秒30帧(fps),并且为了高质量,游戏节奏为最快。 引擎根据像素计数,纹理质量,反锯齿,软颗粒和实时反射探测器等几个参数实现这两个质量,用于渲染,阴影分辨率,阴影距离,阴影投影,阴影-阴影层叠以及其他参数,如混合重量,最大LOD等级,V同步计数。

2https://www.assetstore.unity3d.com/en/#!/content/29140 3https://www.assetstore.unity3d.com/en/#!/content/11228 4https://www.assetstore.unity3d.com/en/#!/content/7677 5https://www.assetstore.unity3d.com/en/#!/content/40756 6https://www.assetstore.unity3d.com/en/#!/content/20749

这些框架是通过测试产生的,对于每种质量,在不同位置使用不同玩家行为的相同场景测试34次。从每次测试中,我们获得了298帧(由于Unity Profiler我们无法获得更多)。因此,我们做了34*2次测试每场比赛。

我们使用Unity的分析器来获取CPU和GPU消耗统计数据。 分析器将这些统计信息保存在二进制格式的日志文件中。 不幸的是就我们所知,只有统一引擎才能读取文件。由于日志文件的不可读性,我们开发了一个访问统一串行器的脚本,因此可以直接从中读取结果。 因此,我们以窗口模式启动了游戏,该模式自动启动统一性分析器,旨在将数据写入日志文件。 由于我们获得了至少298帧(在Profiler窗口中看到),我们停止了游戏并在统一编辑器模式下重新启动它,以便将日志文件加载到序列化程序,然后我们的脚本启动,将这些可读数据写入一个简单的文本文件。

为了获得Unity3D运行的

全文共10895字,剩余内容已隐藏,支付完成后下载完整资料


资料编号:[12134],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。