ゲームはどのようにして異なるプラットフォーム用に作成されますか?


9

ゲームはどのようにして異なるプラットフォーム用に作成されますか?

たとえば、Call of Duty:Modern Warfare 3は、PS3、Xbox 360、Wii、およびPCで利用できます。

それらは一般的なコードなしで完全に再プログラミングされていますか?中間コードはありますか?


3
通常、これはすべてC ++で行われ、プラットフォーム固有のものはいくつかのクラスに委託されます。
ashes999

回答:


11

ほとんどのプロダクションレベルのゲームエンジンには、ハードウェアアブストラクションレイヤーと呼ばれるものがあります。これは、ゲームエンジンがどのハードウェアであるかを知らなくても、ハードウェアと対話するために使用できる汎用APIです。彼らはSoundManager.PlaySFX(SFX_ID)などを呼び出すだけです。ただし、サウンドマネージャーの下では、実際に動作しているハードウェアを認識し、適切な呼び出しを行ってサウンド効果を再生します。

これにより、その抽象化のレイヤーを使用してエンジンを開発できるため、抽象化に一致するハードウェアにAPIが提供されていれば、どのシステムでも実行できます。編集:Johnathanによって指摘されているように、実行するプラットフォームごとにAPIが必要です。そして、トレバーの要点として、ハイメモリシステムからローメモリに移行するとき(私にとって最悪のことはPS3からPSPでした)、さまざまなハードウェアの制限に取り組む必要があるかもしれません。幸い、私はプラットフォームのためにシステム全体を書き直す必要はありませんでしたが、オブジェクトを調べて最適化し、占有面積を小さくする必要がありました。

物事の反対側は、テクスチャやモデルなどの解像度が異なるアート領域にあります。ゲームのアセットは特定のターゲット向けに構築できるため、PCがPS3がサポートする特定の形式などに変換されている間、PCがサウンド効果用のwavファイルを取得します。

お役に立てれば。


1
さらに、ほとんどの場合、PC / PS3 / Xbox360は1つの共通コードベースを共有し、Wii / PS2 / PSPは別のコードベースを共有します。ゲームボーイは、それ自体が個別のコードベースを持ち、iPhone / Androidは通常、コードベースを共有します。これらは主に、幅広いレベルの処理能力、利用可能なメモリ、およびさまざまなプラットフォームのグラフィック機能が原因です。ゲームをXbox 360からPS2に移植する必要がありました。使用可能なRAMが大量にあると想定しただ​​けで、元のコードのほとんどがプロセスに残っていません。メモリ使用量を減らすために書き直さなければなりませんでした。
Trevor Powell、

+ 1、HALがプラットフォーム間で異なることを明示的に言及しなかった(Psykocyberも回答した理由)-各プラットフォームにHALが必要であることを追加しますか?また、ANSI C / ++を使用することは、クロスコンパイルする必要があるため、おそらく要件です。
ジョナサンディキンソン

トレバー:ゲームボーイ?くそー、私は過去に旅したにちがいない、もっとタイムマシンに戻ろう...

3

他の答えは、理想的な場合に物事を綴ります。ほとんどのコードはゲームに共通であり、ハードウェア/プラットフォームに依存する部分にはクリーンな抽象化レイヤーが使用されます。

ただし、多くのゲームには外部委託会社が移植したポートがあり、コードは大幅に異なります。これは特にコンソールに当てはまりますが、WindowsからOSXまたはLinuxへの一般的なポートにも当てはまります。

コンソールでは、ハードウェアが十分に異なるため、多くの場合、コアレンダリングのチャンク全体(および他のシステムもまれ)を完全に書き換える必要があります。PCでは、OS APIは異なりますが、すべてのPCハードウェアはほぼ同じなので、D3DとOpenGLで抽象化できます。

コンソールスペースでは、GPU機能が非常に異なり、文字通り7%を達成するためにパフォーマンスの最後のパーセンテージをすべて絞り出す必要があるため、非常に効率的な豪華なレンダリングエンジンを別のコンソールに直接移植することはまったく不可能です。現代のゲームを実行するための古いハードウェア。XBoxで最適に機能する照明パスがPS3でひどく遅くなるケースや、XBoxでPS3犬に最適なアプローチを採用しているケースを簡単に見つけることができます。その他のハードウェアとプラットフォームの違い(たとえば、PS3のSPUとXBoxのトライコアCPU)は、プラットフォームに依存する唯一のコードパスとして単純なシンハードウェアアブストラクションレイヤーに依存することを非常に困難にします。

各プラットフォームは、適切に使用するために大量の専門知識を必要とするため、多くのゲームでは、ゲームを追加のプラットフォームに導入するために、専門のアウトソーシングポーティング会社が必要です。PCスペースでは、コンソールスペースにいる間、移植を行う一人の開発者(多くのLinuxゲームポートを実行するRyan "icculus" Gordonなど)が見つかることがあります。大規模なゲームにかなり大規模な移植作業を行うすべてのチームを持つ会社があります。

一部のプラットフォームへの移植には、ほぼ完全な書き直しまたはアセットの再設計が必要です。たとえば、外部委託会社によって行われたCall of DutyのWiiポート、およびすべての-アートアセットを含む-は、Wiiの非常に限られたハードウェアの制約内に収まるようにやり直す必要がありました。たとえば、Wiiにはシェーダーすらありません。そのため、同じエンジンとエフェクト/マテリアルを再利用するだけではまったく不可能でした。また、メモリとCPU / GPUの制限により、必要なテクスチャが小さく、モデルのディテールが少なくなり、ゲームプレイの制限などが発生しました。同様に、モバイルプラットフォームへのポートは通常、通常サードパーティによって完全に書き換えられます。

新しいエンジンを使用すると、プラットフォーム間の移植が容易になりますが、大規模なゲームでは通常、コードのかなりの部分を更新し、多くのアセットをやり直して、より機能的なPCプラットフォームとコンソールからより制限されたプラットフォームに変更する必要があります。


2

Jamesの応答はPCにのみ関係し、特定のプラットフォームでの実装には関係しません。
すべてのエンジンがゲームコードの大部分のプラットフォームを抽象化していますが、一部のパーツはプラットフォームごとに作成する必要があります。これには、ネットワーク、レンダリング、オーディオ、デバイス入力、ビデオ出力など、すべてのI / Oが含まれます。
XboxとPS3で言うUnrealのレンダリングコードを比較します。XboxはXbox DirectXバージョンを使用しますが、PS3はlibgcmを使用します(OpenGlライブラリは遅すぎる)。少し簡単にするために、すべてのプラットフォームでゲームプレイプログラマーは "AudioSystem.PlaySound(SoundName here)のみを参照しますが、プラットフォームごとに内部的に機能して、サウンド出力のためにプラットフォームAPIを呼び出します。
プログラミングの詳細については、Tatradのコメントも参照してください。


1
これはまさにジェームズの発言であり、HALはプラットフォームごとに異なることを無視しただけです。
ジョナサンディキンソン

実際には、HAL APIが提供されているすべてのシステムで動作することを述べましたが、これは明らかに混乱を引き起こしていたため、より明確にしました。また、MacやUnixシステムのようにOSを越えない限り、PCのコードを別のPCに移植しないでください。ほとんどのゲームが実行されるWindows環境では、これを処理するのはハードウェアドライバーであり、ドライバー呼び出しを介してDirectXまたはOpenGLデータバッファーを作成し、ハードウェアはそこから何をすべきかを認識しています。
ジェームズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.