Quantcast
Channel: 英特尔开发人员专区文章
Viewing all articles
Browse latest Browse all 583

Gameloft和英特尔:共同致力于为x86安卓* 平台带来高质量画面

$
0
0

下载文档

作者:Steve Hughes

简介

包括游戏玩家在内的很多人习惯性将计算设备分为台式机和移动设备,并认为台式机能够呈现令人震撼的游戏体验,而移动设备在这方面则较为平庸。他们通常都接受这些设备之间的巨大性能差距,并无怨言。然而,去年底在测试第四代英特尔® 凌动™ 处理器 (代号为 Bay Trail)时,我发现它具有出色的硬件性能。事实上,我发现可以将台式机才能呈现的一些画面效果添加至合适的移动游戏中,于是我稍花时间创建了一款展示应用,以展示该处理器的卓越功能。在经过快速考察后,我决定与 Gameloft 就其赛车游戏 GT Racing 2 (GTR2) 展开合作。我早已知道 Gameloft 团队,一直以来他们都在加倍努力,以优化性能并使自己的游戏脱颖而出。

在本文中,我将描述 Gameloft 在 GTR2 中实施的效果,并重点介绍我们如何成功将这些效果与我们设定的 30 FPS 帧速进行了完美结合。2013 年年底,我们想在 2014 年旧金山游戏开发者大会上展示我们所取得的成果,因此时间非常紧迫。

效果

用在该游戏中的逼真效果由 Gameloft 精心选出,因为 Gameloft 知道自己最想要怎样的效果。我们进行了公平合作,他们了解他们的引擎,而我们需要快速取得成效,以便有时间进行优化。图 1 和图 2 所示为处理前后的图像,清晰显示了我们通过延长 x86 设备上的 CPU 和 GPU 时间提升了图像质量。


图 1。现有 ARM* 设备上 GTR2 的一般画面效果。 模式出色,但正常灯光情况下的画面效果不尽如人意。


图 2。在基于英特尔® 凌动™ 处理器的平板电脑上,GTR2 从亮光 (bloom) 和光轴 (light shaft) 效果方面增强了视觉效果。

 

光轴

为了实现光轴效果,我们将太阳光渲染到第二个渲染目标和与太阳光位置方向相反的径向模糊通道 (radial blur pass)。在几个通道中,对低分辨率渲染目标实施该操作可得到如下类似结果:


图 3。在低分辨率渲染目标上对太阳光进行的初次渲染。 此处的太阳光被不透明的场景物体挡住,从而形成此处的形状。


图 4。其次,采用一组径向模糊通道得到右侧图像。 从最初被部分遮挡的太阳光中,我们得到了光晕,它代表了与直射阳光发生碰撞的空中粒子。

 


图 5。然后,模糊图像被添加回原帧中,所得最终效果便如此处所见。 该赛车游戏中实时应用了该效果。

亮光

亮光虽是一种相当常见的效果,但很容易出错。亮光的目的在于,模拟场景中突然出现强光的效果,即图像会达到饱和状态,并使周围的环境变亮。

分三步完成亮光:

1:过滤原始场景,以除去场景中的任何暗色像素,只留下明亮像素。该图像被写入另一个渲染目标(图 6)。


图 6。从原始图像中提取浅色像素。

2:然后,包含浅色像素的新渲染目标便会模糊起来。这样可以模拟渗入周围暗色像素的明亮像素(图 7)。


图 7。然后,浅色像素图像便会模糊起来。

3:最后,将变模糊的浅色像素渲染目标加入到原始场景中,从而产生亮光效果(图 8)。


图 8。将变模糊的浅色像素图像加入到一定缩放比例的原始场景中,从而得到最终的亮光图像。

景深

为了实现景深,我们从游戏场景开始,应用水平和垂直方向的高斯模糊通道。


图 9.原始游戏场景

在完成这两个步骤后,我们便可看到现在整幅图像都变得模糊了(图 10)。此时,我们便得到了模糊图像和原始的清晰图像,以及来自原始渲染通道的深度缓冲器。下一步是选择深度值,该值将作为我们的焦点,如汽车中心点。针对屏幕上的每个像素,我们基于当前像素深度和焦点深度值之间的差值对模糊图像和清晰图像进行了融合。深度值与焦点相差较大的像素将更加受益于模糊图像,而深度值接近焦点的像素将更加受益于清晰图像。


图 10。模糊化游戏场景的焦点副本


图 11。Bay Trail 上的景深介绍 我们在菜单和其它非游戏屏幕中保留此效果,因为在比赛时精确的远距离视觉很重要。

最终结果(图 11)非常接近您由摄像头获得的图像景深。

热霾


图 12。在起跑线上保留热霾,以便在比赛开始前为赛车提供一种逼真热感。

热霾效果用于模拟受阳光照射物体在空气中发出的微光(图 12)。通过将动画失真效果应用于原始颜色缓冲器而产生热霾效果。为将该效果限制在赛车周围区域,我们使用阿尔法通道图像屏蔽了该效果。


图 13。由摄像头视角产生的热霾屏蔽。

将该效果限制在起跑线,因为精准的远距离视觉对于赢取比赛至关重要。

开始优化

开发人员常认为游戏优化是一种收益递减的工作。他们的意思是,将游戏优化至平均帧时为 33 毫秒、帧速为 30FPS 是通行做法,但将游戏优化至 30FPS 以上就毫无意义,因为 30FPS 是游戏的预期运行帧速。然而,对于移动设备来说却并非如此。我们总共能够添加约 12 毫秒的效果,这会将帧时增加到 45 毫秒(接近 22FPS)。这意味着,我们必须对已经过优化的游戏减去 12 毫秒以达到启用所有效果所需的最终目标帧速。

开始实施任何优化流程时需了解游戏为 GPU 密集型还是 CPU 密集型。即决定需要优化 GPU 还是 CPU 代码以增加帧时。我们使用图形性能分析器 (GPA) —— 即系统分析器 —— 捕捉了下图的数据:


图 14。对于该款赛车游戏的大部分运行阶段,GPU 利用率约为 90-100%,而 CPU 利用率平均约为 25%。 很明显,该应用为 GPU 密集型,这对于赛车游戏比较合理。

制作此图非常容易。您只需将想要的指标添加到系统分析器中,然后点击“CSV”按钮,将该指标转存到一个 csv 文件中。这时您就可以将它们加载到 Excel* 或其它绘图软件中。

很多开发人员并不知道 GPA 在 x86 移动设备上运行良好。它是一套很出色的工具,值得您考虑使用。

详细了解帧

在添加这些效果之前,我们先使用系统分析器从该游戏中捕获了许多帧,然后再用帧分析器打开它们以了解我们可轻松实现哪些目标。图 15 显示了在添加我早期使用较多的效果之前,该游戏的一帧:


图 15。把帧分成两半。 一些大 GPU 事件发生于后一半。

首先且最明显的是,在该帧的第二半中对 glClear() 的两个调用 —— 在帧图中用紫色进行了突出显示。我在引擎中常常遇到的问题是,渲染目标往往会先被清除,即使它们稍后会被完全写满。去除这些目标是一种很容易的解决方法,只需大概 5 毫秒就可让我们继续工作。

两个 glClear() 调用间的大蓝条表示一个很有趣的事件。我们一直在对 Gameloft 收到的早期开发套件支持的屏幕尺寸进行实验。非常大的屏幕(2560x1900)能够更高效地渲染到较低分辨率的后台缓冲器,然后再上采样到全尺寸屏幕。所述事件就是从后台缓冲器到屏幕的上采样。这是一个大事件,需要进行仔细审查。我发现,GPU 上执行单元 (EU) 的 大部分延迟时间都由等待 erg 上的纹理取样器造成。这实际上是有道理的,因为片段着色器非常简单,而正被复制的纹理尺寸较大(超过 8Mb),所以着色器自然就会花大量时间等待它所需要的数据以完成工作。这让我认为,我们有可能渲染至全尺寸渲染目标并摆脱上采样。最终我们并未获得真正的性能提升,因为我们所节省的时间被渲染至更大目标所抵消。我们实现了一定的视效提升。

该帧中需要注意的最后一点是,贴有 A、B、C、D 标签的 4 个大 erg。您可能已发现,我的方法是设法删除所有或部分大 erg。最好的方法是首先使用图形性能分析器。在这种具有 4 个 erg 的情况下,我们可以做的非常少。该帧中有 4 辆赛车可见。这一款赛车游戏,所以我们唯有花费一定时间对赛车进行渲染。

平台分析器调查

我们了解性能信息的一个方式是使用平台分析器,它是 GPA 中较新的一款工具。借助平台分析器,您可从整体上了解 CPU / GPU,并可了解 GPU 上的队列管理情况(图 16)。当发现驱动程序存在一个严重问题时,我很震惊:


图 16。来自平台分析器。 水平标度是时间,顶部的堆叠图表示 GPU 上的队列深度。

最初,GPU 队列看上去总是满的,一切似乎都很完美。然而,仔细观察标记点,我们便可发现大约每隔 10 帧便会发生一个事件,这阻碍了整个流程并排空了队列,致使运行几乎停止,直至重新启动。我们需要花时间查找具有一定依赖性的周期性描绘调用,但很难知道要找哪些调用。

结果,问题来自英特尔显卡驱动程序。就如预发布硬件常常发生的情况一样,驱动程序仍在被使用。这是一种拖延问题,它在几个星期之前已得到修复,但我们还没有更新驱动程序,因为我们对已有驱动程序的其他方面很满意。我们不确定是否真正提升了帧速,但是我们的确通过对驱动程序的修复获得了更加流畅的帧速。

深入分析效果

此时,我们已获得了约 5 毫秒的帧时并提升了视觉质量。我们还需大约 7 毫秒,所以我们决定分析效果。我们不会忽视视觉质量,但我们认为这些全新效果可能会带来性能提升。


图 17。帧分析器使用增加的亮光和光轴效果进行捕获。 因注意到 glClears() 的消失,所以不出所料,该帧的第二半需花费更多时间,针对效果的所有后处理在第二半中进行。

观察该帧(图 17)时,我们的注意力被吸引到贴有 B 和 C 标签的 erg,它们是针对亮光效果的模糊和明亮通道。它们各自耗时 3-4 毫秒,我们认为有些偏高。调查后,Gameloft 对效果做出了一些重要更改,从而极大地提升了性能。

首先,他们发现模糊步骤在全屏纹理上实施。缩小到四分之一的屏幕尺寸会使得几乎所有的模糊效果从帧分析器的显示中消失。

其次,明亮通道渲染目标为全高清。Gameloft 发现缩减到大约二分之一的屏幕尺寸是安全的,不但不会造成视觉变化,还会进一步大幅提升性能。

优化了亮光渲染目标并达到一定的性能提升后,我们开始更加仔细地观察亮光效果。因为大家普遍认为亮光效果看上去有些减退(图 18),所以在验证了模糊和明亮通道纹理正常后,我们还需再检查下着色器。

与下列片段中所示的典型亮光着色器相比,该款亮光着色器中的运算看起来有些复杂:

[java]

lowp vec4 bloom = texture2D(blur, vCoord0) * 1.5 - threshold; gl_FragColor = bloom * bloomFactor;

[java]

我使用了 GPA 帧分析器中一个鲜为人知的特性进行实验。通过该特性,您可以修改所捕获帧中的着色器并对它们进行重新编译,以了解它们在外观、性能等方面的差异。发明一款可在该帧范围内产生简单亮光效果的着色器花费不了多长时间(您可以更改源,但不能同时更改 GPA 中的输入或常数)。

该着色器的运行速度相比原始着色器稍快一些,但更改着色器可极大地提升视觉质量。如此,一款用于亮光通道的新着色器便创建完成,它可大幅提升亮光效果。比较图 18 和 图 19,找出不同之处。


图 18。亮光效果展示了阴影的“褪色感”和左侧的岩石。


图 19。相比旧亮光,新亮光看上去几乎达到了高动态范围 (HDR)。

结论

该项目旨在进一步优化帧速已优化到 30FPS 的游戏,以为每帧节省更多时间(毫秒),以便留出时间来添加约 12 毫秒的效果。我们成功在游戏中节省了约 7 毫秒的时间,再从效果中节省出 5 毫秒的时间,这还得归功于驱动程序的修复。我们成功证明了,Bay Trail 架构设备等现代移动设备能够实施过去只有控制台和台式机 GPU 才能提供的效果。若没有 GPA 以及与 Gameloft 的良好合作关系,我们所做的一切都不能实现。

关于 Gameloft

作为世界领先的数字和社交游戏发行商,Gameloft® 自 2000 年以来已成为游戏领域的顶级创新者之一。Gameloft 为包括功能手机、智能手机、平板电脑、机顶盒和互联电视在内的所有数字平台创建游戏。Gameloft 针对旗下多款知名游戏建立了特许经营网络,如《狂野飙车 (Asphalt®)》、《世界足球 (Real Football®)》、《现代战争 (Modern Combat)》和《秩序与混沌(Order & Chaos®)》,此外,Gameloft 还与 Marvel®、Hasbro®、FOX®、Mattel® 以及 Disney® 等主要版权持有者建立了合作伙伴关系。Gameloft 目前在全球 120 多个国家和地区销售游戏产品,拥有 5,200 多名游戏开发人员。

如欲了解更多信息,请登录 http://www.gameloft.com

关于作者

Steve 担任英特尔的高级应用工程师,负责为游戏开发人员提供 PC 和移动设备 3D 图形支持和多线程解决方案方面的技术支持。Steve 在游戏行业拥有 14 年的程序设计师从业经验,参与了 11 款游戏的开发工作,经历过 2 次破产事件,但总体而言发展比较顺利。Steve 是一位游戏发烧友,喜欢创作和演奏音乐,不过不是作曲家!


Viewing all articles
Browse latest Browse all 583

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>