解构游戏引擎:Unity 3D的例子外文翻译资料

 2022-03-22 09:03

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


解构游戏引擎:Unity 3D的例子

摘要--最近关于电子游戏的发展的趋势推动了修改游戏引擎结构的需要。事实上,游戏玩家更加趋向于移动化,相比于PC机和专业的游戏机,他们更多的使用缺乏CPU资源的智能手机和平板电脑。两个新兴的解决措施,云游戏和计算卸载,可能会代表接下来的关于提高游戏玩家们游戏体验的发展方向。因此,剖析和分析游戏引擎性能将有助于更好地理解如何发展到这些新的方向,迄今为止,这是在文献中缺少的。本文通过分析和评价最流行的游戏引擎之一Unity3D,来填补这一空白。首先,我们剖析了Unity 3D的体系结构和模块。然后,使用一个基准来评估构成Unity 3D的不同模块的CPU和GPU性能,用于五个有代表性的游戏。

I.引言

今天的游戏创作者依靠游戏引擎开发游戏的主要软件。游戏引擎通过为游戏运行的硬件和操作系统提供方便的抽象概念来简化程序员的任务。游戏引擎的目的是充分利用主机的能力,使玩家可以获得最沉浸式的游戏体验。但是今天的游戏引擎必须进化来解决两种趋势:云和移动性。

首先,云游戏的概念受到越来越多的关注,因为在受控数据中心运行游戏带来了大量的机会。然而,尽管在多媒体任务的虚拟化方面取得了进展,但是可以同时在给定机器上运行的游戏的数量仍然很低[ 1 ]。缺乏整合限制了可扩展性,增加了云游戏服务的成本。为了从给定的数据中心服务更多的游戏玩家,游戏引擎必须做到:(1)允许不同游戏实例之间的资源共享,并且(2)被分发,以便可以更好地利用数据中心资源,特别是通过区分需要特殊图形的尖端模块。处理单元(GPU)硬件的简单,可以容纳任何中央处理单元(CPU)配置。不幸的是,最先进的云游戏平台[2],[3]仍然把每个运行的游戏视为一个单独的黑匣子。

其次,玩家在移动设备上玩,例如智能手机、平板电脑和虚拟现实(VR)头盔。这些设备有两个主要限制:低计算能力,特别是GPU,相对于预期,以及由于硬件资源的高利用而导致的电池耗尽。一种解决方案是通过强大的、插入式机器(例如桌面和机顶盒)关闭游戏计算〔4〕。远程图形渲染不是一个新的主题(5),但是现有的解决方案都没有满足对高清晰度、复杂、3D图像的快速渲染的期望。此外,据我们所知,以前的工作没有解决游戏引擎的非图形组件,例如物理模块和对象行为脚本。

虽然对游戏引擎进行重新审视的必要性很高,但是科学主义社区忽略了剖析和评价最新技术的论文,即当前的游戏引擎。与游戏引擎相关的文学主体在游戏产业的意义上是非常小的。尽管有两篇研究游戏引擎架构[6],[7]的论文,但是现代游戏引擎的体系结构和性能从来没有被正式分析过。据我们所知,相关工作的重点是将游戏引擎应用到规范游戏领域,如严肃游戏[8]研究[9]和VR严肃应用[8]、[10]、[11]。

本文通过分析市场上最流行的游戏引擎,即Unity 3D(12),对游戏引擎的理解做了初步的研究。我们对五个具有不同质量水平的代表性游戏进行了性能评价。我们分析了CPU和GPU时间的性能来生成帧。然后根据游戏引擎中各模块的类型和功能,通过模块分析处理消耗。最后,我们提取Unity 3D游戏引擎的不同模块和功能之间的调用,以生成一个帧。

我们的主要发现如下:

生成帧的时间变化很大,即使在给定的游戏中也是如此。这种高度可变性是云整合的一个缺点。此外,对于类似游戏的两个不同质量水平的消费时间也不同,因此资源消耗是难以预测的。

大部分CPU消耗和大部分GPU消耗都与渲染模块有关。这些模块通过一系列调用紧密耦合,这使得删除部分代码的机会在当前游戏引擎中变得不那么吸引人。

我们在第二节中给出了游戏引擎的一些背景信息。然后,我们在第三节中描述了我们建立的实验平台来测量基于Unity 3D的游戏的性能。最后,我们在第五节中讨论了关于下一代游戏引擎的这一步骤的结果和开放的观点。

II.背景:游戏引擎

我们将游戏引擎区分为游戏创建者的框架,以及游戏引擎作为游戏玩家的代码的一部分。

一方面,游戏引擎是一组工具(包括低级库、用户界面编辑器和游戏多媒体管理工具),它们使游戏开发者在创建新游戏过程中的工作更便利。游戏开发者社区认为这样的游戏引擎是一个框架或平台。我们将使用“框架”贯穿全文。该框架提供了游戏内容(多媒体内容和主脚本)和底层硬件之间的抽象层。最流行的框架体系,如Unity 3D,应该是跨平台的,即该游戏引擎可以运行在各种操作系统和各种硬件配置上。

另一方面,游戏引擎是最终在设备上运行以向终端用户提供游戏的软件和数据集。玩家群体认为游戏引擎是一段代码。所有由框架Unity 3D创建的游戏共享它们的一致性,使它们成为统一的3D游戏引擎。本文将重点放在典型的Unity 3D软件上,我们称它为游戏引擎。

A.主要组件

游戏引擎由许多的组件构成。对于一个给定的游戏,它们中的一部分由游戏创作者编写:

人工智能(AI)——非玩家角色(NPC)的管理由一些特定的模块来实现,这些模块将预先计算好的场景和运行中产生的行为动作相结合,以便模拟智力的假象。

物理引擎——这些模块目的是使游戏世界尽可能的真实,而不考虑游戏者(主要角色)和AI模块(NPC)决定的事件。这些模块还根据物理定律来模拟世界上可移动的元素的行为。

脚本——这些模块包括了游戏本身。从捕获的输入(由特定模块给出),游戏开发者在脚本语言中详细描述一系列游戏内容和事件,这是每个框架所特有的。

在给定的框架下创作的游戏,其它的模块大部分是相同的。这些模块代表了抽象层,防止游戏开发者在低级的问题上浪费时间,尤其是:

输入——从游戏终端(如,操纵杆,键盘,和现在的VR设备)获取的指令都集中在这一组模块上。这些模块要求来自游戏开发者的最小再编码。

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

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

B.渲染流水线

现在我们来描述游戏引擎的渲染流水线,以及Unity 3D的最新规范。我们从对低级DirectX库的管线段线性通信模型的简短描述开始,在此之上,Unity 3D构建了Windows操作系统上的图形元素,在MAC和Linux上,Unity使用OpenGL库,在Android和iOS等嵌入式领域和Web上,Unity分别使用OpenGL ES和WebGL。有关这些库的详细信息,请参阅此链接。然后,我们展示了Unity 3D如何实现这个流水线。更多信息可以在[14 ]中找到。

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

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

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

光照步骤是产生真实场景的关键步骤。在世界空间中,光源是简单的对象,是颜色、强度、方向、焦点和位置的组合体。该步骤还包括根据各种参数(例如,平滑度和材料的表面和入射角)重复吸收和重新处理光过程。然后,删除步骤,根据视盘的计算来决定应该从场景中丢弃哪些对象。截锥体内的物体被保持在场景中,而在截锥体的内部和外部之间的物体被删除了部分。

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

Unity 3D使用DirectX作为默认渲染途径,但是引擎使用四个与主渲染器一起出现的附加渲染活动。下面我们简短地描述它们。

前向渲染器将不受光影响的对象的环境通光、不透明物体的光通过以及透明物体的光和颜色组合到其他不透明物体的颜色的透明通道中分离。

延迟阴影渲染器是根据几何缓冲器(15)的智能管理来首先计算几何形状,然后应用于光照。

Pre-Pass渲染器解决了延迟着色中不同材质着色器的限制使用。在光预通过渲染之后,光被存储在新的缓冲器中,从而提高了阴影计算。

最后,顶点点亮渲染是最快的渲染。这个过程是在一个通道中完成的,其中每个对象通过从所有光源的物体顶点计算出照明。然而,该解决方案不支持像素效应,例如阴影、灯光cookies、正常映射和非常详细的镜面高亮。

III.实验平台

为了评估由Unity 3D框架生成的不同游戏引擎的性能表现,我们使用D3D11作为DirectX库来作为渲染器,在使用Windows OS(Win 7专业)的笔记本电脑上运行Unity 3D的5.02版本。笔记本电脑是戴尔精密M4800,它带有英特尔核心i7处理器,时钟频率为2.8 GHz。该笔记本电脑采用NVIDIA Quadro K2100M(带有2 GB和16 GB)的GPU显卡作了改进。

我们从Unity 3D的“资源市场”中选择了不同的游戏,它们具有不同的特性,旨在覆盖市场上最具代表性的游戏。我们总结了表I中每个游戏的主要特征,而类型、维度和游戏玩家给出了游戏类型的概念,其他参数更多地与渲染、物理和统一脚本的CPU消耗有关。有关这些游戏的更多细节,请参阅资源市场。

对每一个游戏,我们生成了两个1000帧以上的主要质量类型:良好的质量和一个合理的游戏速率,这里30帧每秒(FPS),和快速的质量,使游戏速率达到最大。该游戏引擎根据像素光计数、纹理质量、抗混叠、软粒子和实时重新绘制探针、阴影分辨率、阴影距离、阴影投影、阴影阴影级联和其它参数如混合权重,最大LOD水平,V同步计数 ,实现了这两个特性。

这些帧是通过对每一种质量的游戏34次相同位置的不同玩家行为进行测试而产生的。对每一次测试,我们收集了298帧 (由于Unity Profiler,我们不能得到更多的帧),因此我们对每个游戏进行了34X2次测试。

我们采用了Unity的分析器来得到CPU和GPU的消耗统计数据。这个分析器将这些统计数据保存在一个二进制格式的日志文件中。不幸的是,据我们所知,只有Unity引擎可以读取这个文件。由于缺少可以被读取的日志文件,我们写了一个脚本来访问Unity序列化程序,所以这个结果可以直接从中被读取。因此,我们在窗口模式下启动了游戏,它可以自动启动Unity分析器,旨在向日志文件中写入数据。由于我们得到了298帧(在分析器窗口可以看到)以上,我们结束了游戏然后重新在Unity编辑器模式下运行它,旨在向分析器载入日志文件,然后我们的脚本开始运行了,将这些可读的数据写入到一个简单的文本文件中去。

为了得到Unity 3D的内部流程,我们使用Visual Studio 2015 Profiler 7和Dependency Walker.8的组合来卸载内存。

IV.性能分析

我们提供我们对这些实验的分析,如下。我们首先处理了CPU和GPU消耗以及检查了在Unity 3D框架下的主要成员的基础上的消耗。这样的分析对于与云联合相关的研究是尤为有用的。然后,我们更深入地研究了模块之间的调用,这是与应用卸载相关的研究的起点。

A.CPU和GPU消耗

我们在图1中展示了CPU(相对于GPU)为每个游戏生成1帧所消耗的时间。结果在图1a(相对于图1b)中给出。我们使用了BOX图来呈现结果,因为我们想要关注每帧的CPU和GPU消耗的可变性。事实上,当可以预测处理资源的消耗时,数据中心中的资源合并更容易。CPU和GPU消耗越稳定,游戏就可以在集群中同时运行。

我们把游戏分成了三类。有些游戏使用合并是理想的,因为所有的帧都会产生大约相同的CPU和GPU时间。第十和第九十百分位非常接近,几乎重叠。尤其是Survival Shooter的情况。一些其他游戏表现出非常高的可变性,例如Tower Bridge和Into The Space的高质量版本。对于云提供商来说,这是最糟糕的情况,它必须保留资源来适应高峰(Tower Bridge的CPU超过30毫秒),虽然中值帧需要几乎一半的时间(这里是18毫秒),超过四分之一的帧是在10毫秒的CPU利用率之后完成的。这意味着资源浪费。

最后,需要资源最多的游戏的可变性最小,在我们这些游戏中典型的是Stealth和Viking Village。这些游戏由于它们的高资源消耗都是卸载策略的好候选者。

我们还观察到给定的游戏在一个类别下呈现出一种质量水平,在另一个类别下可以呈现另一种质量水平。典型的是Tower Bridge,优质的游戏具有很大的可变性,而低质量的游戏则缺乏可变性。这一观察可以让云供应商的工作更加复杂困难。

为了更好的理解资源消耗,我们研究了这种消耗的源头。游戏引擎的模块被分组为族群,这些族群对应于游戏引擎的上述主要组件。我们显示每个模块族群贡献的总的资源消耗的时间百分比。结果在图2(相对于图3)中给出了CPU(相对于GPU)。

我们观察到最消耗CPU资源的模块是渲染模块。这不一定是直观的,因为GPU将会负责许多渲染的调用。虽然如此,在Viking Village游戏中,渲染模块仍然占有92%的CPU消耗,对于其它游戏来说,通常是50%以上。CPU对渲染模块的需求是

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


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

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

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