伸缩性不仅仅是指图形设置方面,还涉及到选择目标平台及选择适合该平台的美术效果、游戏可玩性、音效、人工智能及任何其他子系统。对于主机平台来说,因为平台是固定的,所以这更简单一些。但是,对于由多个不同设备构成的PC平台来说,仅针对一种单独的硬件规格进行制作是不可能的。
这就是伸缩性(Scalability)选项发挥作用的地方,但即便在个体开发人员需要调整这些选项之前,他们还是可以做很多事情,来确保他们所制作的应用程序可以在他们选择的最低配置硬件上运行。
综述
不同的机器可以具有不同的 性能、内存和质量特性,比如:
- 硬盘大小、延迟时间和带宽。
- 主内存大小、延迟时间和带宽。运行 32 位程序而不是 64 位可以进一步限制该项要求。
- CPU (一个或多个主处理器、超线程、SSE 功能、分支预测)。
- GPU (内存、多个 GPU、带宽、功能、共享内存)。
- 分辨率(现在的笔记本具有高分辨率显示器,但却仅具有较慢的 GPU)。
图形是最容易调整的,不需太多地影响游戏性。玩家可以通过你的应用程序选项菜单调整伸缩性。它们可以让他们做出很多主观的、折中的选择:
- 帧数
- 分辨率
- 图像质量
- 运动模糊
- 贴图细节
- 闪烁(抗锯齿)
- 电池寿命
美术师和设计师
性能和内存要求直接和内容数量及质量相关。这是个非常复杂的问题:
- 内容通常是在没有目标硬件的情况下创建的。
- 复杂的矩阵式硬件属性(内存低,但 GPU 快,而 CPU 又慢)。
- 引擎代码仍然正在研发中,仍在根据内容需要进行优化。
- 新的硬件和驱动程序改变了这种对等关系。
- 开发时间限制了优化处理。
为了更好地控制这个问题,最好应用一些好的实践方法:
- 规划并确认预算(三角形/对象/材质/光源的数量,材质/网格体/音效内存,等等)。
- 给和游戏性无关的内容添加伸缩性选项,并针对较低和较高的设置进行测试。
- 比如,在低规格设备上隐藏杂乱的对象,使用更简单的材质着色和对象细节层次。
- 限制玩家的能力。
- 比如,可以阻挡视线的障碍物,不能构建成任意复杂形状,限制可破坏的程度。
- 理解性能特性
- 比如,具有很多点光源的动态对象,网格物体粒子和平面粒子进行对比。
- 以类似的比率混合不同的组件 (某些硬件可能仅在某些功能上较慢),
- 比如,避免使用大量拥有简单材质的对象,但是几个具有多个光源的对象却具有复杂的材质。
- 了解引擎优化工具。
QA
大量的伸缩性选项会消耗 QA 人员更多的时间。以下几个好的做法可能有所帮助:
- 在文档中写出最低、推荐和高端配置说明。
- 大量进行矩阵组合测试(低端/中端/高端GPU、 低端/高端CPU、低端/高端内存)。
- 在可再现的情景上定义性能级别。
- 不断地记录及交流修改变化。
- 禁用一些东西是隔离性能问题的最强大方法(比如,显示控制台命令)。
- 如果你在最低质量设置级别上运行程序,而看到的效果比预期好很多,那么可能意味着缺失了一个伸缩性设置(修复这个问题,可能意味着更多的玩家可以享受到同样的游戏体验)。
- 测试伸缩性功能的可用性: 如果你发现它是令人迷惑的、错误的,那么请创建一个 TTP。
- 任何时候,用户界面都应该是可读的、有用的。请测试最低分辨率和最低质量设置,看下是否有不可读的字体及超出屏幕边界的元素。
- 如果某种瑕疵仅在某些特定的伸缩级别(比如仅在 "低级")出现,那么你可以进一步分离该问题(比如,阴影可能受到 "阴影质量" 的影响),深入到实际的游戏机平台变量设置文档(查看
Scalability.ini文件)。 - 知道如何量化性能(统计FPS、统计单位,等)。毫秒这个统计单位比FPS更有用("程序快帧频率快了 10FPS"几乎没有任何意义,但是快了5毫秒就很有意义了)。
- 某些笔记本有多个GPU。默认情况下,你想在更快的 GPU 上运行程序,但最好在两个 GPU上 都运行程序进行测试(使用驱动程序设置来进行修改)。当在使用电池供电的电脑上运行时,可以选择较慢的GPU,或者甚至可以在运行时进行切换。
程序员
当一个玩家更早地看到另一个玩家的阴影或者由于帧率较高而获得更快的响应时间时,该玩家可能有一种优势。尽管使用提供的伸缩性设置不是作弊,但是某些伸缩性设置却可能被滥用于作弊行为。一个控制台变量提供的值可能比某个伸缩性设置所需的范围更广,或者某些控制台变量设置的组合都可能会导致问题。某些多人游戏,通过让服务器管理员来重载有问题的设置来为所有玩家来提供平等的机会,来解决这些问题。
例如,隐藏在深深的草丛中可能是很好的游戏策略。但是,如果视图距离较远就不渲染这些草丛了,那么对于那些尝试隐藏的玩家这可能是非常不公平的。
理想情况下,伸缩性设置将不会影响游戏性。
主管、制作人及经理
开发一款需要针对大范围的硬件进行伸缩的游戏是比较难的,这将消耗更多的时间,并耗费 QA 更多的精力。以下几个好的做法可能有所帮助:
- 在项目开发早期就定义一个最低硬件规格和一个推荐的硬件规格。
- 预设合理的默认设置,因为大部分玩家从来不使用这些选项菜单。要想正确地设定默认设置,你需要进行大量地迭代和测试。
- 相比允许大范围的伸缩(比如支持从高端PC到低端移动设备的多种硬件),伸缩性的范围越小,开发越容易。
- 准备一台次低端配置设备在各个方面(编码、设计及美术)都是有帮助的。当平衡任务时,通常最好是先进行优化,而不是创建更多的伸缩性。
- 性能是伸缩性的一部分,但同时也影响着伸缩性。比如,如果你在一台低端配置的机器上内存不足了,那么最好禁用它的高分辨率贴图选项。
- 对于低端配置机器上,伸缩性意味着更多的玩家可以玩该游戏。对于高端设备,伸缩性意味着游戏可以看上去更好,尤其是在屏幕截图及测试中。