0

我被要求调查将 Wii 游戏和一些(索尼)PSOne 游戏移植到 OpenGL ES(你能猜出是什么平台吗?)。

我以前从未进行过这样的游戏移植(并将聘请某人来做),但我想了解这个过程。

  1. Wii 使用 OpenGL 吗?如果不是,它使用什么以及移植到 OpenGL / OpenGL ES 有多容易?
  2. 是否有任何资源/书籍/博客可以帮助我理解该过程?
  3. 我的公司是否必须成为正式的 Wii 开发者?如果是这样,我从哪里开始这个过程?
4

5 回答 5

3

从 Wii 或 PSOne 移植是一项复杂而复杂的任务,可以分解为多个独立的工程工作,并行工作以生产工作最终产品。在迁移到目标硬件之前,您可以做的最好的事情是划分所有不可移植的代码,同时确保游戏继续按预期运行。当您承诺迁移到新平台时,您的工作将转向重新实现非便携式分隔部件。

因此,要回答您的问题,是的,您需要成为 Sony 和 Nintendo 许可开发人员或与他们合作才能采用这种方法。就索尼而言,我什至不知道他们是否提供了 PSOne 开发程序,这会带来问题。您的索尼客户代表可以帮助澄清。

可能成为移植工作重点的主要子系统是:

  1. 渲染 图形代码包含有关其正在运行的硬件的基本假设,以便以最佳方式执行。API 级别的兼容性是表面上的兼容性,并没有像你希望的那样让你得到那么多。计划找到渲染器的入口点,确定渲染场景所需的数据,并从那里为目标硬件重写所有渲染代码。
  2. 游戏保存游戏状态序列化和存档将需要分开。较早的游戏通常使用带有#pragma 压缩字段的 fwrite() 结构。这仍然对你有用吗?
  3. 网络Wii 游戏写入目标硬件上不可用的高级服务。在底层,套接字仍然是套接字。您的 Wii 游戏依赖哪些网络服务?
  4. 控制从你从哪里来到你要去哪里,如果没有对输入进行全面重新设计或重新构想,就会导致对软件的评价不佳。
  5. 内存管理控制台游戏通常对系统软件从堆中返回内存的速率、它将导致多少碎片以及游戏在这些条件下运行所需的持续时间做出基本假设。这些内存管理假设在新平台上已过时。编写自己的内存管理器来为操作系统提供缓冲是明智的。此外,为发布而编译的控制台游戏被剥夺了大多数错误处理,并且不会优雅地处理内存不足 - 只是提醒一下。
  6. 内容您的瓶颈将是系统内存。你能把必要的资产放入内存吗?使用纹理,您可以在必要时减少 mip,使用图形硬件计时,您可以拉入远裁剪平面。使用驻留在内存中的资产,您可能需要技术美术师来检查并降低模型的面部密度,或者需要动画程序员来实现对尺寸更友好的动画编解码器。这是非常具体的游戏。

您还会遇到一些标准问题,例如位兼容性(尽管 Wii 和 PSOne 都是 32 位)、编译器特性、构建脚本不兼容和专有编译器扩展。

游戏的测试相对具有挑战性。一个好的经验法则是,您希望团队中有足够的测试人员在最多两天内完成游戏,涵盖游戏的所有主要方面。在需要很长时间才能通过的游戏(游戏时间超过 30 小时的 RPG)中,您的测试团队需要相当大才能提供全面覆盖。因为你只是在做一个移植,你可以想出一个测试计划来最大化你的新代码的覆盖率,而不需要让测试团队在你游戏的每一面墙上都打孔以确保它(仍然)有剪裁。游戏发货一次。

成为获得许可的开发人员需要您申请。从经验来看,周转时间并不好。一般而言,优先考虑拥有已发货作品和组织良好的办公室的工作室,这些工作室具有相当好的安全性以及能够购买(相对)昂贵的开发工具包的能力。如果您不符合这些标准,您最好与有执照的开发人员合作。

对于已经有经验的人来说,控制台和游戏开发具有挑战性。没有一本书能涵盖这一切。我的建议是尝试招聘一位在系统或引擎程序员职位上具有交付头衔经验的专家。不过,对于 Stack 来说,游戏中存在哪些类型的程序员和技能组合是一个完全不同的问题。

于 2009-10-24T06:06:41.000 回答
3

I ported a couple of games, when I was a new game programmer, from working with one version of our engine to a newer version (where backwards compatibility was neither ignored nor pursued). Even copying (and possibly renaming) the files and placing them in a home in the new project was a bit of work. Following that, the procedure was:

  • recompile
  • fix many of the hundreds of errors [in many places, with the same error occurring over and over again]

and

  • "wire up" calls from the new game engine to the appropriate calls in the old code
  • "wire up" function calls from the old code into the new game engine
  • deal with other oddities (ex. in the old game engine, the 2d game would "swizzle" textures itself; in the new version, the engine did it (on specific platforms))
  • and, while I don't recall this clearly, it was probably mixed in with a bunch of #ifdeffing out portions of code so the thing would actually compile, and possibly creating function stubs to be filled in later.

As I recall, it was three or four days until I had something that compiled. (But, it did help when we ported other games from the old version to the new one!)

The magnitude of the task will come down to what the code you are getting is like. If it has generic 3D calls that you can intercept -- add a thunking layer to -- then you are in business. It depends on the level of abstraction in the code. If it is well-behaved and has things like "RenderModel" and "RenderWorld" calls, you can replace those functions, and even the structures that they work with. If drawing is occurring all over the place, and calls are more like "Draw Polygon" and "Draw Line" or "Draw using this highly optimised data structure", then you are likely in for a long slog.

You shouldn't need a Wii dev kit. Sometimes it is nice to verify that the code you are given does indeed compile in the original environment (and matches the shipping code!), but sometimes you can just take it on faith and make it work in its new environment.

Lastly, I don't think the Wii uses OpenGL, and I really don't know where to point you for further help.

于 2009-10-21T23:37:51.707 回答
3

游戏机不使用 OpenGL,而是使用它们自己的自定义库。主要原因是它们非常慢并且内存很小。所以你需要挤出你能得到的每一滴性能。这意味着:自定义代码。通常,您会获得一个带有开发工具包的框架,它可以帮助您入门,然后您可以从中构建您的代码。最终,您将开始使用自己的特殊代码替换开发工具包中的部件,以获得所需的所有速度和特殊效果。

尽管开发人员可以访问资源,但 PSOne 游戏在 PS3 上如此丑陋是有原因的:收入并不能证明接触代码是合理的。

这就是游戏开发如此昂贵的原因之一:每款游戏(或多或少)都是全新的产品。有时,游戏公司可以重用上一个版本的一些代码,但更多时候,他们必须重新开发所有内容。他们也很少互相交谈。

近年来,套件变得更加复杂和强大,您可以获得完整的游戏引擎(具有各种效果和3D支持)但每个引擎都是完全不同的野兽,因此您甚至无法从引擎A复制代码给 B。

今天,媒体内容(视频、音频和渲染序列)非常昂贵,以至于实际的游戏引擎通常是一个小细节,所以这不会很快改变。

最终结果:如果您想移植游戏,请为硬件编写一个模拟器(这通常非常简单,并且允许您运行各种游戏)。

[编辑] 要为 Wii 开发软件,请参见此处:http ://www.warioworld.com/

对于 Wii 模拟器,请参阅http://wiiemulator.net/

于 2009-10-13T13:17:38.150 回答
1

你可能想做的是从设计游戏架构开始,为新游戏写出详细的规格。

一旦你有了这个,因为你将重写代码,你可能会发现一些不处理控制台的业务逻辑可以被移植过来。但是,任何涉及 I/O、用户交互或图形/声音的内容都将被重写,因此您不妨从头开始。

规范非常重要,以确保您了解当前游戏的运行方式,以便新移植版能够提供相同的用户体验(如果需要的话)。

您可能希望保留相同的错误,如果这是体验的一部分,例如,如果我知道在 Wii 中我可以跳下并从墙上反弹以安全着陆,那么如果我在新版本中无法做到这一点那么版本可能会很麻烦。

于 2009-10-22T02:08:45.273 回答
1

将 PS1 游戏移植到 iPhone 上将是一项艰巨的任务,他们的工作方式非常不同。我确信它是可行的,但要替换所有定点数学和缺乏基于 Z-Buffer 的渲染到真正的图形芯片将是很多工作。

Wii会轻松很多。Wii API 与 OpenGL 非常相似。然而,Wii 有一些非常好的固定功能特性,这些特性在任何其他基于 GL 的平台上都没有。应该是可行的,虽然...

我不确定我还能说什么。多年来签署了太多的保密协议,无法 100% 确定我能说什么和不能说什么;)

不过,如果您想雇人做一些移植工作并准备提供所需的硬件,那么我可能会免费 ;)

于 2009-10-23T21:17:33.877 回答