【问题标题】:How is it possible to make complex games cross platform?怎么可能让复杂的游戏跨平台?
【发布时间】:2011-11-04 17:12:15
【问题描述】:

我已经使用 OS X 大约 11 个月了,在此之前我同时使用过 Linux 和 Windows,并且我知道使用在所有平台(非 Java)上都能正常运行的 GUI 做一些事情是多么痛苦。

我不明白的是,人们如何让《使命召唤》、《永远的毁灭公爵》或《蝙蝠侠阿卡姆疯人院》等游戏同时在 Windows 和 OS X 上运行。

DirectX 之类的库不是特定于 Windows 并且在 Mac 上完全不可用吗?我猜想像 Photoshop 这样的应用程序将有自己的 GUI,从零开始用 C++ 编写,所以不会像使用 3d 图形引擎那样造成麻烦(我错了吗?)。

我知道在 Linux 上通过 Wine 可以让某些东西工作,但这并不是真正的官方方式。

如何为高性能应用程序实现这种多平台性?

【问题讨论】:

  • 抽象层之上的抽象层。一些 GFX 引擎是多平台的,这使得移植到新的操作系统变得很容易——GFX 引擎处理与底层图形平台的对话,而游戏的编码器只与 GFX 引擎对话。而且 DirectX 不是唯一的游戏,还有 OpenGL,它与平台无关

标签: game-engine multiplatform


【解决方案1】:

尽管平台之间的 3D 图形 API 可能有很大差异(Mac/Linux 上的 OpenGL 与 Windows 上的 Direct3D 11 与 Xbox 360 风格的 DirectX9 与 PS3 上的 LibGCM 等),但底层 3D 硬件实际上非常相似.一般来说,游戏会有一个低级别的兼容性 API 层,它抽象了跨目标平台的 3D API 之间的大部分差异,然后更高级别的渲染将建立在这个较低级别的抽象之上。这种方式移植到新平台只涉及移植相对较小的“驱动程序”以支持低级兼容层,而不是移植所有更高级别的渲染代码。

开发一款在所有目标平台上都实现高性能的跨平台游戏的现实往往比这张理想化的画面更复杂。例如,平台差异可能会泄漏并影响高级渲染决策,因为实现特定效果的最有效方式在不同平台上可能完全不同。当不同平台可能使用不同的着色语言(GLSL、HLSL、Cg)时,以有效的跨平台方式处理着色器也可能非常复杂。

考虑到控制台开发的游戏已经倾向于具有复杂的资产管道,该管道获取由艺术家创作的源资产(纹理、模型、动画、材质定义等)并将它们预处理为最适合的原生格式在控制台上加载和渲染。许多平台差异可以在管道中处理,其中代码只需要在 PC 上运行,并且对性能和内存限制的担忧不那么重要。

这种方法允许内容创建者开发他们的大部分内容,而不必担心特定于平台的细节,并使游戏运行时不必处理格式转换、字节序差异等。目标平台上的图形驱动程序层可以相当精简并且只需要处理原生纹理格式、顶点数据、着色器等。在开发系统(通常是高端 PC)上的管道代码中处理的格式之间转换的大部分复杂性。

开发跨平台游戏是一项相当复杂的挑战,但通过精心设计抽象层和资产管道,可以使大部分游戏运行时代码与平台无关,并将代码的平台特定部分隔离到某些明确定义的部分模块。

现在许多游戏都是使用 Unreal 或 Unity 等第三方引擎开发的,这些引擎已经完成了大量处理平台差异的艰苦工作,让游戏的创作者可以更少关注处理平台差异的细节,而更多地关注开发他们的特定游戏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    相关资源
    最近更新 更多