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

实现移动游戏的完美性能

$
0
0

下载文档

Codemasters GRID Autosport* 平板电脑优化和触摸部署

作者:Michael Coppock 和 Leigh Davies

 

移动游戏是一个巨大的市场。 预计显示,2016 年移动游戏将会急剧增长。 但是在低功耗的平板电脑和超极本™ 设备上,典型的移动游戏的发展远不及同一领域的 PC 游戏。 总部位于英国的游戏开发商 Codemasters 计划通过 GRID Autosport* 改变这一现状。 他们计划在带有直观的触摸控制的平板电脑中引进控制台级的显卡。

Codemasters 和英特尔的合作支持 GRID Autosport 充分利用整个第四代英特尔® 酷睿™ 处理器产品线,包括基于功率为 4 瓦的英特尔® 凌动™处理器的平板电脑。 位于英格兰 Southam Codemasters 总部的高级编程师 Richard Kettlewell 表示:“我们应该迎合整个市场。 我们确保了游戏拥有全面的显卡选项,从而能够扩展到高端产品,但是如果您使用的是平板电脑,它也能够很好地运行。”

本文介绍了 Codemasters 团队如何针对平板电脑对 GRID Autosport 进行优化, 如何利用他们的聪明才智让 GRID Autosport 在基于 4 瓦的英特尔凌动处理器上完美显示并提供几年前在出色的 PC 上无法实现的视觉体验, 并同时在高端硬件(如基于锐炬™ 显卡的超极本或 PC)上提供大量增强特性,具体见上一篇文章: 占据有利地位: Codemasters 借助 GRID Autosport* 在电脑向平板电脑的优化中占据领先地位。 难以实现的地方在于在密集的前端 UI 中添加触摸控制的同时确保在平板电脑、超极本和 PC 上实现无缝体验。

针对平板电脑进行优化

GRID Autosport* 中的显卡引擎是从 GRID 2 引擎演进而来。 它面向第四代英特尔酷睿处理器密集优化(通常在超极本中)。 GRID 2* 旨在以中等设置在第四代英特尔酷睿处理器的英特尔® 显卡上运行,其性能堪与 Playstation* 3 和 Xbox 360* 比肩。 在 15 瓦的超极本上,分辨率为 1366x768 的游戏性能稳定在 30FPS。 除了面向高端游戏 PC 的高质量设置之外,GRID 2 还可提供多种质量较低的设置。 这可以确保最大限度地在旧版硬件上兼容。 为了确保 GRID 2 与多种版本和功耗较低的 GPU 兼容,Codemasters 降低了现有效果的质量设置,如阴影分辨率。 此外,还禁用了一些后处理特性,包括人群、车手模型以及 GRID 2 体验中不必要的粒子效果(图 1)。


图 1:在 GRID 2 的低质量设置中禁用了人群、车手模型和粒子效果等特性。

为了使 GRID Autosport 与采用超低压英特尔凌动处理器的平板电脑兼容,我们将这些低质量的设置作为起点。 最初的测试并不理想。 使用 GRID Autosport 的内置基准测试以及最初禁用了人群、车手和粒子的超低设置,游戏的运行速度低于 20FPS。 一个典型的帧需要 53ms 进行渲染,远远超出预期的 30ms。 具体观察帧将可了解哪一项渲染的耗时最长(图 2)。


图 2: 左侧是超低质量设置下 GRID Autosport* 中的一帧。
右侧展示了预优化的渲染时间(按特性划分,单位:ms)。

很明显,传统的方法没有效果。 仅通过扩展模型纹理、创建过多的 LOD 和删除几何无法实现要求的 30FPS。 删除一些效果(如后处理中的复杂景深和运动模糊)意味着许多做重复工作的像素着色器可以删除。 删除后,同时还取消了其随附的速度/深度预计算 (pre-pass) 要求。 删除速度/深度预计算 (pre-pass) 尤其重要,因为它能够减少 ~30% 的每帧绘制调用数,并减少 ~25% 的渲染工作负载。 工作室希望避免为游戏中的每个对象写入新的着色器版本,因此他们想要为平板电脑快速创建一个更简单的渲染通道模型。

幸运的是,动态汽车环境立方图通道中使用了简单的着色器版本。 该立方图通道甚至没有在超低设置中使用,因为禁用了动态反射。 Codemasters 选择在新的平板电脑模式中使用这些着色器。 由于该通道是针对立方图而设计,所以它无法读取屏幕空间映射。 因此,平板电脑版本将没有车下的阴影、SSAO、动态阴影、夜晚的汽车车头灯以及其他一些图形特性。 虽然需要对其中一些进行更换,但是多数还是能够在平板电脑上运行。 图 3 展示了最早使用基本立方图着色器的游戏的图片。


图 3:早期使用基本立方图着色器的图片

虽然某些位置过于简单,但是它将每帧速度提升了 20ms 以上,几乎达到性能目标。 为了修复仍然需要屏幕空间映射的着色器,如车下阴影和夜晚轨道上汽车车头灯,我们添加了新的渲染器通道。 新的渲染通道用作环境贴图通道的覆盖层。 它支持仅针对特定项(如车道、显著减少绘制调用数量和相关渲染)创建所需信息(如速度/深度通道)。

除了显著提升性能以外,很显然,新的渲染器是一个有价值的调试工具。 能够具体分析环境贴图着色器而非仅在汽车反射中使用它们,将会显示出许多较小的视觉缺陷和低效现象。 一些着色器读取无效的屏幕空间映射,因而执行的计算昂贵且对反射无效。 此外,光线出现不连贯的现象,但是该问题被着色器所遮盖。 修复这些问题会为平板电脑带来出色的渲染解决方案。 它还改进了为反射使用这些着色器的高端系统的质量和性能。

此外,还带来额外的改进 — 渲染场景的内存带宽需求显著降低。 另外,还有一些其他较小的改进。 billboard 系统最初没有在透明项目上使用像素着色器中的 discard,而依赖于将 alpha 值设置为 0 在场景中混合。 仅当更新深度缓冲器时禁用颜色渲染目标,而非使用 0 alpha 混合,将可节省更多带宽。

平板电脑着色器视觉质量改进的另一个方面是选择性地使用高频率细节,如镜面贴图。 在屏幕较大的台式机系统上,精细的每像素效果(如法线图和高反射材料)的视觉质量将会有很大差别。 在屏幕尺寸较小的设备上,这些高频率细节的影响较小。 为了节省内存带宽,多数用于平板电脑设置的着色器应使用能够影响大面积屏幕,而非高频率细节的效果。 但是有一些例外,如向车轮添加镜面高光,为车体添加特殊的“金属镜面”(图 4)。


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

Codemasters 的主要目标是实现处理功耗和最佳视觉效果的完美平衡。 鉴于此,Codemasters 评估了烟雾计算。 最初,它们以顶点为单位来实现,其中包括 1 个pow、1 个exp、多个 lerps、 2 个 normalize 和 1 个 sqrt函数。 删除它们并简化运算可以节省带宽和时间,这适用于游戏的其他位置。

平板电脑优化完成后,GRID Autosport 的性能超过最初的 30FPS 的目标。 节省的性能允许 Codemasters 添加之前在低质量设置中没有进行渲染的特性。 例如,将人群重新添加回去,但是使用的是简单的 billboard 系统而非完整的 3D 模型。 此外,还放回车内司机和粒子系统。 最终结果可在图 5 中查看。


图 5:在上方的图片中,将司机模型放回平板电脑版本。
在下方的图片中,您可以看到优化后的性能提升。

升级问题

许多游戏在进行升级以适应其他场景部分之前会在低分辨率平面中进行大量重绘(如粒子效果)来渲染系统。 Autosport 也不例外,它为电脑和控制台的粒子效果使用低分辨率平面。 在主流 PC、PlayStation 3 和 Xbox 360 上,创建尺寸较小的深度缓冲器用于粒子系统,然后将生成的粒子效果升级回全尺寸并与主场景相组合的成本可以忽略不计。 平板电脑有望继续保持该性能优势。 但是在平板电脑上,Codemasters 发现创建尺寸较小的深度缓冲器和升级的固定成本是 3.5ms,将绘制粒子前的帧速率降低 10%。 当汽车偏离轨道时,该游戏只能生成大量低分辨率粒子。 Codemasters 决定不支出该高昂成本, 而减少离子的数量,从而获得最佳的总体效果。


图 6:轨道较少使用粒子效果。

另一项实验是使用控制台标题上常用的技术来改进性能。 3D 场景以低分辨率渲染,然后在添加 HUD 之前升级至全分辨率。 初次测试非常成功,但是随着优化的场景渲染越多,通过升级而实现的优势便越少。 所有优化完成后,以标准的后台缓冲区分辨率渲染游戏将比运用升级固定成本快。

优化结果

图 7 是以芝加哥为背景的起始线,该场景在 GRID2 和 GRID Autosport 中非常常见,图为面向平板电脑使用的超低设置。 不同的游戏中城市设计稍有不同,因此无法进行确切地比较。 但是能够看到他们的一些权衡和添加的特性。 添加的特性包括粒子和人群,这在 Autosport 中很明显。


图 7: 左帧是取自超低设置下的 GRID Autosport*。 右帧取自 GRID 2。
两帧都是以芝加哥为背景的起始线。

GRID Autosport 分别在 18 个渲染目标上使用 820 个绘制调用进行渲染。 GRID 2 需要分别在 49 个渲染目标上使用 1617 个绘制调用。 GPU 内存读取从每帧 122Mb 下降到 53Mb。 定点和像素渲染器调用分别从 736K 和 9.48M 下降到 336K 和 4.17M — 即使添加了人群和粒子系统。 最终结果是渲染图像的速度提高近 2 倍(仅有微小差别),且能够渲染更多原始内容。

添加触控功能

拥有在平板电脑上运行的性能只是其中的一部分。 GRID Autosport 来自 PC 和控制台。 它主要围绕使用游戏控制器、键盘/鼠标和驾驶外设而设计。 这些选项均不适用于平板电脑。 幸运的是,Codemasters 拥有开发平板电脑游戏的经验,它曾创建过基于 iOS* 的 F1 Race Stars*。 因此对于 GRID Autosport,Codemasters 添加了一个带有用于驾驶和控制的模拟区域的触控层(图 8)。


图 8: GRID Autosport* 中的触控层支持驾驶和加速操作。

此外,还添加了面向暂停、摄像头和重赛模式的触摸控制。 当手指接触屏幕时,将会显示所有触摸控制,这可为用户提供重要的视觉反馈。 为了在用户驾驶时提供一进步帮助,还提供了许多驾驶协助,这些协助在触摸模式中将会默认启用(图 9)。


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

前端的挑战更大。 它是一个大型的状态设备,也就是说游戏能够随时知道目前选中了哪个控制以及用户可以将哪些控制移至下一步。 此外,屏幕上的信息也非常密集,尤其是汽车和比赛设置界面(图 10)。


图 10:
设计中密集的菜单系统无法在平板电脑上使用。

开发人员很早就清楚,不可能使这些界面上的所有元素都支持触控。 即使技术上可行,在小尺寸的平板电脑设备上,这些元素的距离将会过于紧凑。 不可改变的是,控制元素之间的建议距离是 7mm,但是实际上至少是 2mm,这些项目距离太近。 Codemasters 不希望更改游戏的外观和感受,或将界面简化为不包含定制选项。 因此,他们使用了另一种设计 — 在前端界面上添加虚拟游戏控制器。


图 11:
添加了虚拟游戏控制器,以便玩家轻松导航密集的菜单系统。

现在,针对 TV 或 PC 的 10ft 显示器而设计的前端也可在 7in 的平板电脑上使用。 此外,使用游戏控制器快捷键访问特性的工具提示转换为界面底部的触摸控制(图 12)。


图 12:
向前端添加快捷键以便更轻松地导航。

在触摸模式下,添加了一些之前没有的工具提示,以便用户访问最常用的游戏模式。

在 2 合 1 设备上集成该体验

前端 UI 的显示有所不同,具体取决于是否运行键盘、游戏控制器或触摸功能,每种控制方法有不同的工具提示(图 13)。


图 13:
左侧展示了在键盘上玩游戏的界面。
右侧是使用虚拟游戏控制器的触摸界面。

接下来,Codemasters 面临的问题是,如果用户在 2 合 1 设备或可拆卸系统(如 ASUS T100*)上运行时应该如何处理。 如果用户一开始使用了键盘,但是在游戏期间键盘无法使用,用户如何与游戏继续交互? 解决方案需要做出几处变更:首先,当设备从一种模式更改为另一种模式时,集成了 Windows* API 调用的游戏将可通知系统。 当 Windows 检测到 lParam 中带有 “ConvertibleSlateMode” 字符串的更改平板模式时,将会发送 WM_SETTINGCHANGE消息。 在发生扩展坞模式变化的情况下,它会使用“SystemDockMode”字符串广播相同的讯息。 用于查询当前状态的 API 是 GetSystemMetrics(图 14)。


	case WM_CHANGESETTING:
	if (wcscmp(TEXT(“ConvertibleStateMode”), (TCHAR*) lParam)==0)
		NotifySlateChangeMode();
	break;


图 14: 代码版权所有 © 2014 英特尔公司。 根据英特尔示例源代码许可的要求进行分发。

 

当系统运行在全新的 Windows 8 UI 模式下,该方法可奏效。 BOOL bSlateMode = (GetSystemMetrics(SM_CONVERTIBLESLATEMODE) == 0).

该解决方案可行,但是可能会出现两个弊端。 并非所有的设备都支持 API,即游戏可能会收不到 WM_CHANGESETTING 消息,而且调用 GetSystemMetrics 可能会不考虑设备的实际状态而返回一个任意值。 其次,用户可能在蛤壳式超极本上运行,并希望从键盘转换为触摸,而不实际更改模式。

两个问题的解决方案非常简单:游戏能够记忆当前正在使用的控制器。 如要正确显示各种工具提示和触摸层,这是有必要的。 在 Windows 消息循环中,如果收到 WM_TOUCH 或 WM_KEYDOWN 消息,游戏仅检查设备的当前类型;如果使用了不同的设备,将会触发模式更改。 GRID Autosport 可以根据用户首选的输入设备来转换控制,而且仅在收到 WM_CHANGESETTING 消息时调用 GetSystemMetrics 可以确保 API 正确部署。

Codemasters 向 GRID Autosport 添加触摸层还有最后一个问题。 游戏中有几处用户无法交互的过场动画。 在显示着触摸层时,它会让用户感觉能够与其进行交互。 为了避免产生混乱,不带来挫败感,在过场动画中删除了触摸层。

完美游戏体验

Codemasters 在面向平板电脑优化 GRID Autosport 时面临许多挑战。 传统的办法无法解决问题, 因而需要更有创造性的解决方案。 GRID Autosport 在基于 4 瓦的英特尔凌动处理器的平板电脑和基于高端锐炬显卡的超极本或 PC 上都能够提供完美体验。 创新的触摸控制支持针对 TV 和大型显示器设计的前端在较小的 8 英寸的平板电脑屏幕上运行。

移动游戏市场可能比传统 PC 和控制台市场更大,而且它还在不断增长。 平板电脑和低功耗超极本用户为何还需要为便携性而降低质量? Codemasters 的回答是他们不需要;玩家可以获得高质量的移动游戏体验 — 尤其是多功能的第四代英特尔酷睿处理器产品,包括基于 4 瓦英特尔凌动处理器的平板电脑。

参考资料和相关链接

相关英特尔链接:

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

英特尔产品名称 http://www.intel.cn/content/www/cn/zh/processors/processor-numbers.html

作者介绍

Michael Coppock致力于 PC 游戏性能和显卡领域,自 1994 年以来一直任职于英特尔。 他负责帮助游戏公司充分发掘英特尔 GPU 和 CPU。 他主要关注硬件和软件,曾负责过许多英特尔产品,最早可追溯到 486DX4 Overdrive 处理器。

Leigh Davies已在英特尔工作了十年,主要致力于游戏和显卡领域,并与许多领先的欧洲 PC 开发人员有着密切合作。 在加入英特尔之前,他曾在以及总部位于英国的公司担任高级图形程序员,负责开发 PC 和控制台标题。


Viewing all articles
Browse latest Browse all 154

Trending Articles



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