如何实现跨平台复杂游戏?

3

我现在已经使用OS X 11个月了,在此之前我使用过Linux和Windows,我知道在所有平台上(没有Java)使用GUI完成某些任务是多么痛苦。

但是我不明白的是,人们如何能够制作像《使命召唤》、《杜克·尼凯姆:永恒》或《蝙蝠侠:阿卡姆疯人院》这样的游戏,让它们在Windows和OS X上都能运行。

DirectX这样的库难道不是专门针对Windows的吗?在Mac上完全无法使用吧?我猜像Photoshop这样的应用程序将会使用C++从零开始编写自己的GUI,所以这不会像使用3D图形引擎那样麻烦(我错了吗?)。

我知道可以通过Linux上的Wine来让一些东西工作,但那不是一个真正的“官方”方式。

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


2
在抽象层之上的抽象层。一些图形引擎是多平台的,这使得将其移植到新的操作系统变得容易 - 图形引擎负责与底层图形平台进行通信,游戏开发者只需与图形引擎进行交互。而DirectX并不是唯一的选择,还有OpenGL,它是跨平台的。 - Marc B
1个回答

7
尽管3D图形API在不同平台上可能会有很大差别(例如Mac / Linux上的OpenGL与Windows上的Direct3D 11,Xbox 360版DirectX9和PS3上的LibGCM等),但底层3D硬件实际上非常相似。通常游戏会有一个低级兼容性API层,它抽象了目标平台上3D API之间的大部分差异,然后更高级别的渲染将建立在这个较低级别的抽象之上。这样,移植到新平台只涉及移植相对较小的“驱动程序”以支持低级别兼容性层,而不是移植所有更高级别的渲染代码。
开发跨平台游戏实现所有目标平台上的高性能实际上比这种理想化的情况要复杂一些。例如,平台差异可能会泄漏并影响高级别渲染决策,因为在不同平台上实现特定效果的最有效方式可能会非常不同。在不同平台可能使用不同着色语言(GLSL、HLSL、Cg)时以高效的跨平台方式处理着色器也可能非常复杂。
以控制台为目标开发的游戏已经倾向于具有复杂的资产流程,该流程将艺术家创作的源资产(纹理、模型、动画、材质定义等)预处理为本机格式,以便在控制台上加载和渲染时达到最佳效果。许多平台差异可以在流程管道中处理,在这里代码只需要在PC上运行,并且对性能和内存限制的关注较少。
这种方法允许内容创建者开发大部分内容而不必担心特定于平台的细节,并且使游戏运行时不必处理格式转换、字节序差异等问题。目标平台上的图形驱动程序层可以相当简洁,只需要处理本机纹理格式、顶点数据、着色器等等,大部分在开发系统(通常是高端PC)上处理格式转换的复杂性。
开发跨平台游戏是一个相当复杂的挑战,但通过精心设计抽象层和资产管道,可以使大部分游戏运行时代码与平台无关,并将代码的特定于平台的部分隔离到某些明确定义的模块中。
现在许多游戏都使用第三方引擎,例如虚幻引擎或Unity,这些引擎已经完成了处理平台差异的大部分繁重工作,允许游戏创作者更少地关注处理平台差异的细节,而更多地专注于开发他们特定的游戏。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接