ゲームはどのようにして異なるプラットフォーム用に作成されますか?
たとえば、Call of Duty:Modern Warfare 3は、PS3、Xbox 360、Wii、およびPCで利用できます。
それらは一般的なコードなしで完全に再プログラミングされていますか?中間コードはありますか?
ゲームはどのようにして異なるプラットフォーム用に作成されますか?
たとえば、Call of Duty:Modern Warfare 3は、PS3、Xbox 360、Wii、およびPCで利用できます。
それらは一般的なコードなしで完全に再プログラミングされていますか?中間コードはありますか?
回答:
ほとんどのプロダクションレベルのゲームエンジンには、ハードウェアアブストラクションレイヤーと呼ばれるものがあります。これは、ゲームエンジンがどのハードウェアであるかを知らなくても、ハードウェアと対話するために使用できる汎用APIです。彼らはSoundManager.PlaySFX(SFX_ID)などを呼び出すだけです。ただし、サウンドマネージャーの下では、実際に動作しているハードウェアを認識し、適切な呼び出しを行ってサウンド効果を再生します。
これにより、その抽象化のレイヤーを使用してエンジンを開発できるため、抽象化に一致するハードウェアにAPIが提供されていれば、どのシステムでも実行できます。編集:Johnathanによって指摘されているように、実行するプラットフォームごとにAPIが必要です。そして、トレバーの要点として、ハイメモリシステムからローメモリに移行するとき(私にとって最悪のことはPS3からPSPでした)、さまざまなハードウェアの制限に取り組む必要があるかもしれません。幸い、私はプラットフォームのためにシステム全体を書き直す必要はありませんでしたが、オブジェクトを調べて最適化し、占有面積を小さくする必要がありました。
物事の反対側は、テクスチャやモデルなどの解像度が異なるアート領域にあります。ゲームのアセットは特定のターゲット向けに構築できるため、PCがPS3がサポートする特定の形式などに変換されている間、PCがサウンド効果用のwavファイルを取得します。
お役に立てれば。
他の答えは、理想的な場合に物事を綴ります。ほとんどのコードはゲームに共通であり、ハードウェア/プラットフォームに依存する部分にはクリーンな抽象化レイヤーが使用されます。
ただし、多くのゲームには外部委託会社が移植したポートがあり、コードは大幅に異なります。これは特にコンソールに当てはまりますが、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プラットフォームとコンソールからより制限されたプラットフォームに変更する必要があります。
Jamesの応答はPCにのみ関係し、特定のプラットフォームでの実装には関係しません。
すべてのエンジンがゲームコードの大部分のプラットフォームを抽象化していますが、一部のパーツはプラットフォームごとに作成する必要があります。これには、ネットワーク、レンダリング、オーディオ、デバイス入力、ビデオ出力など、すべてのI / Oが含まれます。
XboxとPS3で言うUnrealのレンダリングコードを比較します。XboxはXbox DirectXバージョンを使用しますが、PS3はlibgcmを使用します(OpenGlライブラリは遅すぎる)。少し簡単にするために、すべてのプラットフォームでゲームプレイプログラマーは "AudioSystem.PlaySound(SoundName here)のみを参照しますが、プラットフォームごとに内部的に機能して、サウンド出力のためにプラットフォームAPIを呼び出します。
プログラミングの詳細については、Tatradのコメントも参照してください。