65.9K
CodeProject 正在变化。 阅读更多。
Home

无损游戏,随时随地

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2014年11月6日

CPOL

16分钟阅读

viewsIcon

16422

本文讲述了 Codemasters 团队如何为平板电脑优化 GRID Autosport 的故事。

移动游戏是一个巨大的市场。据估计,到 2016 年,移动游戏将保持高个位数的增长。然而,对于省电的平板电脑和 Ultrabook™ 设备来说,典型的手机游戏不像同时代的 PC 游戏那么宏大。总部位于英国的游戏开发商 Codemasters 希望通过 GRID Autosport* 来改变这一现状。他们希望为平板电脑带来主机级别的图形,并配以直观的触摸控制。

Codemasters 和 Intel 的合作使 GRID Autosport 能够充分利用整个 第四代英特尔®酷睿™处理器产品线,包括 4 瓦的 英特尔®凌动™处理器驱动的平板电脑。“迎合整个市场对我们来说非常重要,”Codemasters 驻英格兰南安普敦总部的资深程序员 Richard Kettlewell 表示。“我们确保游戏拥有一套全面的图形选项,可以扩展到高端,但即使您使用的是平板电脑,它看起来依然很棒。”

本文讲述了 Codemasters 团队如何为平板电脑优化 GRID Autosport 的故事。他们的创新如何让 GRID Autosport 在配备 4 瓦英特尔凌动处理器的平板电脑上看起来很棒,提供了几年前在优质 PC 上也毫不逊色的视觉体验。同时,正如一篇之前的文章所详述的,为配备 Iris Pro™ 图形的 Ultrabook 或 PC 等高端硬件提供了许多额外功能:领跑者:Codemasters 通过 GRID Autosport 在 PC 到平板电脑优化方面处于领先地位。挑战在于为密集的 UI 前端添加触摸控件,同时保持平板电脑、Ultrabook 和 PC 之间无缝的体验。

平板电脑优化

GRID Autosport* 的图形引擎是 GRID 2 引擎的演进。它经过了大量优化,以适应通常用于 Ultrabook 的第四代英特尔酷睿处理器。GRID 2* 被设计成能在第四代英特尔酷睿处理器中的英特尔®图形上以中等设置运行,其性能可与 PlayStation* 3 和 Xbox 360* 相媲美。在 15 瓦 Ultrabook 上,1366x768 分辨率下的游戏性能稳定在 30 FPS。除了为高端游戏 PC 提供更高质量的设置外,GRID 2 还提供了一些较低质量的设置。这确保了与旧硬件的最大兼容性。为了使 GRID 2 能够在大范围的旧的和低功耗 GPU 上运行,Codemasters 降低了现有效果的质量设置,例如阴影分辨率。一些后期处理功能也被禁用,包括人群、驾驶员模型,甚至那些不被认为对 GRID 2 体验至关重要的粒子效果(图 1)。

图 1:在 GRID 2 的较低质量设置下,人群、驾驶员模型和粒子效果等功能已被禁用。

为了将 GRID Autosport 移植到配备超低电压英特尔凌动处理器的平板电脑上,将这些较低质量的设置作为起点。初步测试并不理想。使用 GRID Autosport 内置的基准测试和原始的超低设置,并禁用人群、驾驶员和粒子,游戏的运行速度低于 20 FPS。一个典型的帧渲染需要 53 毫秒,远大于目标 30 毫秒。更详细地查看一帧显示了渲染耗时最长的部分(图 2)。

图 2:左侧是 GRID Autosport* 在超低质量设置下的帧。右侧显示了优化前按功能划分的渲染时间(毫秒)。

显然,传统方法行不通。仅仅调整模型纹理、创建更积极的 LOD(细节级别)和移除几何体并没有达到所需的 30 FPS。移除一些效果,例如最终后期处理中的复杂景深和动态模糊,意味着许多像素着色器进行了冗余计算。移除这些计算工作后,也无需进行速度/深度预通道。移除速度/深度预通道尤为重要,因为它占了每帧总绘制调用数的大约 30%,以及总渲染工作量的大约 25%。该工作室希望避免为游戏中的每个对象编写新的着色器版本,因此他们着手快速原型化一个用于平板电脑的更简单的渲染通道。

幸运的是,着色器的简单版本用于动态车辆环境立方体贴图通道。这个立方体贴图通道在超低设置下甚至没有被使用,因为动态反射已被禁用。Codemasters 选择将这些着色器用于新的平板电脑模式。由于此通道是为立方体贴图设计的,因此它不读取任何屏幕空间映射。因此,平板电脑版本丢失了车底阴影、SSAO(屏幕空间环境光遮蔽)、动态阴影、夜间车灯以及其他一些图形功能。虽然有些需要替换,但许多功能本来就不期望在平板电脑上运行。图 3 展示了使用基本立方体贴图着色器的非常早期的游戏图像。

图 3:使用基本立方体贴图着色器的早期游戏图像

虽然在某些地方有些过于简化,但它使每帧的速度提高了 20 毫秒以上,几乎达到了性能目标。为了修复少数仍然需要屏幕空间映射的着色器,例如车底阴影和夜间赛道上的车灯,增加了一个新的渲染通道。新的渲染通道用作环境贴图通道的覆盖。它允许为仅选定的项目(如车辆轨迹)创建所需的信息,例如速度/深度通道,从而显著减少绘制调用数和相关的渲染工作。

除了巨大的性能提升,新的着色器显然成为一个有价值的调试工具。能够详细分析环境贴图着色器,而不是仅仅在车身反射中看到它们,暴露了许多细微的视觉错误和低效率。其中一些着色器读取了无效的屏幕空间映射,从而执行了昂贵且不必要的反射计算。光照也出现了问题,但这个问题被着色器掩盖了。修复这些问题为平板电脑带来了令人印象深刻的渲染解决方案。它还提高了使用这些着色器进行反射的高端系统的质量和性能。

另一个好处是渲染场景的总内存带宽需求大大降低。还发现了一些其他较小的更改。广告牌系统最初在像素着色器中对透明项不使用 discard,而是依赖于与 alpha 值为 0 的场景混合。通过在仅更新深度缓冲区而不是与 0 alpha 混合时禁用颜色渲染目标,可以节省额外的带宽。

选择性地使用高频细节,例如高光贴图,是平板电脑着色器视觉质量得到改善的另一个领域。在较大的桌面屏幕系统上,细微的每像素效果,例如法线贴图和高反射材料,可以极大地改善视觉质量。在小得多的屏幕尺寸上,这些高频细节的影响要小得多。为了节省内存带宽,平板电脑设置使用的大多数着色器倾向于影响大片屏幕区域的效果,而不是高频细节。然而,也有一些例外,例如为车轮添加高光,以及为汽车本身添加特殊的“金属高光”(图 4)。

图 4:车轮高光和汽车特殊“金属高光”示例

Codemasters 的关键学习是针对那些具有最佳视觉效果的处理器能力区域。沿着这些思路,Codemasters 回顾了雾的计算。最初,它们是在每顶点级别进行的,包括 1 个 pow、1 个 exp、多个 lerp、2 个 normalize 和一个 sqrt 函数。移除它们并简化数学运算节省了带宽和时间,这些时间和带宽被用于游戏的其它部分。

完成平板电脑优化后,GRID Autosport 的性能超过了最初的 30 FPS 目标。这些节省让 Codemasters 能够添加以前在较低质量设置下未渲染的功能。例如,人群被重新添加回来,但使用了简单的广告牌系统而不是完整的 3D 模型。车内驾驶员和粒子系统也被重新添加。最终结果可以在图 5 中看到。

图 5:顶部显示驾驶员模型回归平板电脑版本。底部可以看到优化后的性能节省。

放大问题

许多游戏会渲染一些具有大量过绘的系统,例如粒子效果,到一个较低分辨率的表面,然后再放大以适应场景的其余部分。Autosport 也不例外;在 PC 和主机上,粒子效果都会使用一个低分辨率的表面。在主流 PC、PlayStation 3 和 Xbox 360 上,为了创建用于粒子系统的缩小版深度缓冲区,然后将生成的粒子效果放大到全分辨率并与主场景合成,其成本微不足道。人们期望平板电脑能延续这种性能提升的趋势。然而,在平板电脑上,Codemasters 发现创建缩小版深度缓冲区和放大的固定成本为 3.5 毫秒,在绘制任何粒子之前有效地将帧率降低了 10%。游戏仅在车辆驶离赛道时才会生成大量低分辨率粒子。Codemasters 认为,与其每帧都要支付高昂的成本,不如通过减少粒子数量来获得最佳的整体效果。

图 6:赛道上很少使用粒子效果。

另一项实验涉及一种常用于提高主机游戏性能的技术。3D 场景以较低的分辨率渲染,然后放大到全分辨率,然后再添加 HUD。初步测试看起来很有希望,但场景渲染的优化越多,从放大中获得的益处就越少。到所有优化完成后,以典型的后备缓冲区分辨率渲染游戏比应用放大的固定成本更快。

优化结果

图 7 是芝加哥起跑线的对比,该起跑线在 GRID2 和 GRID Autosport 中都很常见,使用专为平板电脑设计的超低设置拍摄。游戏之间的城市设计略有不同,因此无法进行精确比较。但可以从中看到一些权衡和由此带来的新增功能。新增功能包括粒子和人群,这些在 Autosport 中清晰可见。

图 7:左帧来自 GRID Autosport* 的超低设置。右帧来自 GRID 2。两者都是相同的芝加哥起跑线。

GRID Autosport 使用 820 个绘制调用渲染,分布在 18 个渲染目标上。GRID 2 需要 1617 个绘制调用,分布在 49 个渲染目标上。GPU 内存读取量从每帧 122MB 降至 53MB。即使添加了人群和粒子系统,顶点和像素着色器调用数也从 736K 和 9.48M 分别降至 336K 和 4.17M。最终结果是渲染图像的速度大约提高了一倍,只有细微的差异,并且渲染了更多原始内容。

添加触摸

能够在平板电脑上运行的性能只是故事的一部分。GRID Autosport 来自一系列 PC 和主机游戏。它围绕使用游戏手柄、键盘/鼠标和驾驶外设而设计。这些选项都不适合平板电脑用户。幸运的是,Codemasters 拥有平板电脑游戏经验,曾为 iOS* 创建了 F1 Race Stars*。因此,对于 GRID Autosport,添加了一个触摸叠加层,带有用于加速和转向的模拟区域(图 8)。

图 8:GRID Autosport* 中的触摸叠加层支持转向和加速。

此外,还添加了用于暂停、相机和重播模式的触摸控件。所有触摸控件在手指接触屏幕时显示,为用户提供重要的视觉反馈。为了进一步帮助驾驶中的用户,有许多驾驶辅助功能,这些功能在触摸模式下默认启用(图 9)。

图 9:使用触摸控件时可用的驾驶员辅助模式

前端带来了更大的挑战。它被设计成一个大型状态机,这意味着游戏随时都知道当前选择了哪个控件以及用户下一步可以移到哪些控件。屏幕也塞满了大量信息,尤其是车辆和比赛设置屏幕(图 10)。

图 10:如此密集的菜单系统设计在平板电脑上行不通。

很早就决定,不可能让这些屏幕上的各种元素都兼容触摸。即使技术上可行,在小平板设备上,元素的尺寸也会非常接近。如果不做任何改动,这些元素将比建议的最小尺寸 7 毫米近得多,每个控件元素之间至少有 2 毫米的间距。Codemasters 不想改变游戏的风格或简化屏幕以至于用户失去自定义选项。取而代之的是采用了添加虚拟游戏手柄到前端屏幕的替代设计(图 11)。

图 11:在前端添加了虚拟游戏手柄,以便玩家可以轻松导航密集的菜单系统。

现在,一个为距离电视 10 英尺或在 PC 显示器上使用而设计的前端仍然可以在 7 英寸平板电脑上正常工作。此外,用于通过游戏手柄快捷方式访问功能的工具提示被转换为屏幕底部的触摸控件(图 12)。

图 12:在前端添加了快捷方式以方便导航。

在触摸模式下,为先前没有工具提示的菜单添加了一些额外的工具提示,以改善用户对最常用游戏模式的访问。

集成 2 合 1 设备上的体验

前端 UI 的显示方式取决于您是在使用键盘、游戏手柄还是触摸屏,每种控制方法都有独特的工具提示(图 13)。

图 13:左侧显示键盘操作时的界面。右侧是带有虚拟游戏手柄的触摸界面。

Codemasters 面临的下一个问题是,如果用户运行的是 2 合 1 设备或像 ASUS T100* 这样的可拆卸系统,会发生什么?如果用户开始游戏时使用的是键盘,但在游戏中的某个时刻键盘无法访问,用户将如何仍然能够与游戏交互?解决方案需要进行多项更改:首先,游戏集成了 Windows* API 调用,该调用会在设备从一种模式更改为另一种模式时通知游戏。当 Windows 检测到平板模式发生变化时,它会广播一个 `WM_SETTINGCHANGE` 消息,`lParam` 中包含字符串“ConvertibleSlateMode”。在对接模式更改的情况下,它会广播同一消息,字符串为“SystemDockMode”。用于查询当前状态的 API 是 `GetSystemMetrics`(图 14)。

	case WM_CHANGESETTING:
	if (wcscmp(TEXT(“ConvertibleStateMode”), (TCHAR*) lParam)==0)
		NotifySlateChangeMode();
	break;
图 14:代码版权所有(c) 2014,英特尔公司。根据英特尔示例源代码许可协议分发。

这种方法在系统运行新的 Windows 8 UI 模式时有效:BOOL bSlateMode = (GetSystemMetrics(SM_CONVERTIBLESLATEMODE) == 0)。

这个解决方案效果很好,但有两个潜在的缺点。并非所有设备都支持该 API,这意味着游戏可能不会收到 WM_CHANGESETTING 消息,并且 `GetSystemMetrics` 的调用可能会返回一个任意值,而与设备的实际状态无关。其次,用户可能正在使用翻盖式 Ultrabook,并且希望在不实际更改模式的情况下从键盘切换到触摸。

这两个问题的解决方案竟然出奇地简单:游戏会记住当前使用的控制器。这对于正确显示各种工具提示和触摸叠加层至关重要。在 Windows 消息循环中,游戏在收到 `WM_TOUCH` 或 `WM_KEYDOWN` 消息时,只需检查当前设备类型,如果正在使用不同的设备,则触发模式更改。GRID Autosport 可以根据用户首选的输入设备切换控件,并且仅在收到 WM_CHANGESETTING 消息时调用 `GetSystemMetrics`,可以保证 API 已正确实现。

Codemasters 在为 GRID Autosport 添加触摸叠加层时遇到了最后一个问题。游戏中包含多个过场动画,用户无法与游戏互动。如果触摸叠加层仍然显示,会给用户一种可以与之交互的预期。为了避免混淆并减轻用户的挫败感,在过场动画期间移除了触摸叠加层。

无需妥协的畅玩体验

Codemasters 在为平板电脑优化 GRID Autosport 时面临许多挑战。解决问题的传统方法行不通。需要更具创造性的解决方案,这些方案最终取得了成功。GRID Autosport 在配备 4 瓦英特尔凌动处理器的平板电脑上的画面效果和运行效果与在高端 Iris Pro 图形驱动的 Ultrabook 或 PC 上几乎一样好。创新的触摸控件使得为电视和大显示器设计的相同前端可以在 8 英寸的小平板屏幕上运行。

可以说,移动游戏市场的规模比传统的 PC 和主机市场还要大,而且还在不断增长。那么,为什么平板电脑和低功耗 Ultrabook 用户就必须在质量和便携性之间做出妥协呢?Codemasters 的答案是他们不必如此;玩家可以在旅途中获得顶级品质的游戏体验。尤其是得益于第四代英特尔酷睿处理器产品线的通用性,包括配备 4 瓦英特尔凌动处理器的平板电脑。

参考文献和相关链接

相关英特尔链接

企业品牌识别 http://intelbrandcenter.tagworldwide.com/frames.cfm

英特尔产品名称 http://www.intel.com/products/processor_number/

关于作者

Michael Coppock 专注于 PC 游戏性能和图形,自 1994 年起在英特尔工作。他帮助游戏公司充分利用英特尔 GPU 和 CPU。他专注于硬件和软件,曾参与许多英特尔产品的工作,一直追溯到 486DX4 Overdrive 处理器。

Leigh Davies 在英特尔工作了 10 年,专注于游戏和图形领域,并有幸与欧洲许多领先的 PC 开发商合作。加入英特尔之前,他曾担任一家英国游戏公司的资深图形程序员,开发 PC 和主机游戏。

Intel® Developer Zone 提供跨平台应用程序开发工具和操作指南、平台和技术信息、代码示例以及同行专业知识,以帮助开发人员创新并取得成功。加入我们的物联网Android*Intel® RealSense™ 技术Windows* 社区,下载工具、获取开发套件、与志同道合的开发人员交流想法,并参加黑客马拉松、竞赛、路演和本地活动。

无需妥协的畅玩体验 - CodeProject - 代码之家
© . All rights reserved.