15.07.2014

Unity关于Metal

1

2014年WWDC的一个关键时刻是Metal的宣布,这是一种图形应用编程接口。最近,Unity宣布支持Metal,并解释了它的用途。我们提供了这篇故事的翻译,感谢俄罗斯Unity办公室向App2Top.ru的友好提供。

iOS 8图形的美好时代来临了!

在最近的WWDC上,苹果公司推出了一种名为Metal的新图形API,其显著特点是高效性、低开销以及针对A7芯片的优化。这让开发者能够利用iOS设备的所有硬件优势,带来比以往更高的真实感、细节和互动性。目前,Metal的支持实现过程已启动,而我们想向您介绍一下这种技术,解释它为何如此出色。

光滑的Metal

Metal具备多个关键点,从而减轻CPU负担,评估其在特定条件下的性能并优化所有过程:

  • 创建和检查预绘制组件。着色器可以在离线模式下编译和部分优化。与渲染管线相关的所有内容(着色器、顶点布局、混合模式、渲染目标格式等)在实际渲染开始之前就可以创建和确认。换句话说,无需检查渲染的每个组成部分,这样可以将CPU的处理能力释放用于其他目的。
  • 提供更灵活的多线程处理。资源可以从任何线程创建。现在可以通过多个并行线程准备绘制请求。
  • 所有基于iOS的设备为CPU和GPU提供统一内存。无需考虑CPU的数据必须“复制”到某个显存中。当您创建交换缓冲时,只需指定它包含的数据,这正是GPU将使用的内存。
  • 引擎自动进行同步,决定当前时间应使用CPU还是GPU。
  • 所有iOS设备的GPU使用基于瓷砖的延迟渲染架构。这在Metal API中被利用,尤其是在渲染目标方面。API现在不会试图预测任何事情——帧缓冲的所有操作,如加载和存储瓷砖,以及抗锯齿的实现,都是显式进行的。
  • 上述所有项目都是显著降低CPU负担和更准确预测其性能及负载的必要条件。
  • 新语言基于C/C++11,适用于图形和计算着色器。这意味着iOS将能够处理计算着色器、原子操作、随机写入缓冲等其他酷炫功能,这些现在在GPU上可用。
  • 没有不良遗产,新API非常简单且优化良好。而且,此外它还有一个超级有用的可选“调试层”,它会检查一切并通知您任何错误或误解。现在,让我们更深入地探讨细节吧!

如果您从事游戏开发,特别是手机游戏,您肯定知道大量的绘制请求会给CPU带来巨大压力。每个渲染对象需要一定数量的处理能力,而在移动设备上,您实际上无法同时渲染超过几百个可见对象。

实际情况是,您很可能还希望将CPU资源用于其他需求:游戏逻辑、物理、AI、角色动画等等。

2

《Ori and the Blind Forest》

在Unity中,有一些评估参数可用于最小化绘制请求的数量——静态和动态批处理(或者有趣的俄语术语——“剂量”——译者注)、遮挡剔除(另一个有趣的术语“遮蔽剔除”——译者注)、LOD(细节层次)和基于距离的层剔除;此外,可以将靠近的对象进行合并,并将纹理放入图集以减少材料数量。

这个问题很好:为什么要使用CPU资源来绘制东西?

毕竟,这实际上应该是GPU的任务。一些开销发生在“引擎”一侧——CPU需要管理可见对象,确定当前要渲染哪个着色器,与哪个对象的光源相互作用,当前要应用哪个材质参数等等。这些东西有些被缓存,有些在多个线程中执行;总体而言,这是与平台无关的代码。

在每个Unity版本中,我们努力优化这一部分,而Metal并没有直接影响这一点。然而,在其余部分的CPU开销中,确实可以归咎于“图形API和驱动程序”。根据游戏的不同,这部分的影响可能非常重要。Metal尝试更好地解决这一问题,更加适应现代硬件,并在比OpenGL ES更低的水平上执行更少的猜测。

预先渲染、创建与验证;显式加载与保存渲染目标;API侧无需进行同步的复杂流程——所有这些都有助于降低CPU负担。根据我们的测试,新的API+驱动对CPU的负载仅增加了几个百分点。这是一个显著的减少,尤其考虑到之前这一比例位于CPU整体负载的15-40%!这意味着剩下的开销藏在我们的代码中。我觉得我们需要继续进行优化(微笑)。而且,我们迫不及待想了解Metal在多个线程渲染合并方面的能力;这也为我们的优化打开了非常有趣的可能性。

3

《CounterSpy》

计算能力

得益于Metal,我们将能够在典型场景之外使用GPU进行计算:不仅用于顶点+片段着色器——还可以用于被称为“计算”的着色器。原则上,这使得能够在GPU内部的多个小处理器上运行任何类型的“并行计算”。

计算着色器还使用“局部存储”的概念——一块非常快速的专用GPU内存,用于在并行工作单元之间交换数据。这种内存区域使GPU能够处理那些使用旧的顶点和片段着色器实现起来非常困难的任务。有很多有趣的领域可以使用计算着色器——优化后处理效果、粒子系统、处理采样和光影剪裁,等等。与此同时,Unity目前尚未使用计算着色器,我们都热切期待它们能被用于许多超酷的东西。激动人心的时代即将到来!

常见问题解答

我什么时候能使用它?

我们迫不及待想要开始发布,但目前尚无法给出具体日期。我们已经做了很多工作,但在一切准备就绪之前还有更多工作要做。我们当前的计划是集成Metal的所有部分,从而确保CPU性能的大幅提升。希望这会在Unity 5.0中发生。稍后我们希望能增加对计算着色器的支持(这一点稍微复杂一些,需更多关注)。

系统要求是什么?

Metal将在iOS 8及不低于A7(iPhone 5S、iPad Air、iPad Mini Retina)的设备上运行。

4

《Shattered Planet》

为了利用Metal优化CPU负载,我需要做什么?

总的来说,不需要做任何事。一旦我们在Unity中加入Metal的支持,所有功能将自动生效。您现有的所有项目、所有着色器和图形效果都将正常工作。尽情享受低CPU负载吧!

但对于着色器呢,因为Metal使用不同的语言?

我们会处理这一点。目前,您很可能在使用Cg/HLSL编写着色器,我们将其转换为OpenGL ES的GLSL背后。当针对Metal时,我们将以类似方式转换所有这些内容。

再问一次,CPU负载优化后,我将获得哪些自由资源?

改善物理、AI,或使逻辑和游戏玩法更复杂、更完善。在屏幕上放置和渲染更多对象。或者,只是享受设备电池的节省。这一切都取决于您!

评论
写评论...
Related news