Halo 2 HD版: オリジナルXboxの限界に挑むリマスタープロジェクト
(icode4.coffee)オリジナルXboxの限界を突破する Halo 2 HD
このブログポストでは、オリジナルXbox版のHalo 2にHD解像度対応を追加するために行った作業のすべてを扱っています。ゲームパッチからXbox本体のハードウェア改造、性能ベンチマーク用のカスタムツール作成に至るまで、このプロジェクトの目標は両方の限界を乗り越え、どこまで到達できるかを確かめることでした。
- 友人の「doom」はここ数年、オリジナルXboxのハードウェアとソフトウェアをリバースエンジニアリングして研究していた
- 彼のカスタムCPUインターポーザーボードを使い、純正のPentium 3 CPUを1.4Ghzの改造Pentium 3 CPUに交換し、約2Ghzまでオーバークロックできた
- さらに、高速なCPU向けにゲームのタイミング計算をリアルタイムでパッチするため、Xboxカーネル用のカスタムパッチも作成した
- RAMやSSDといったほかのハードウェアアップグレードと組み合わせ、「god box」と呼ぶようになった
- doomは人気ゲーム向けに720p対応の適切なHD解像度パッチを作ってくれる人を探しており、私に依頼してきた
- 私はGPUオーバークロックを条件に提案を受け入れ、彼はそれを実行して「GENESIS-3」コンソールを提供した
HDでレンダリングする
- D3Dのフロント/バックバッファのサイズを変更する必要がある
_rasterizer_detect_video_mode、_rasterizer_init_screen_bounds、rasterizer_device_initialize関数を修正する必要がある- 720pが有効になったら
g_progressive_scan_enabledを設定し、ビデオモードに応じてscreen_boundsとframe_bounds変数を設定する必要がある - ビデオモードがプログレッシブかインターレースかに応じて、D3Dプレゼンテーションパラメータに追加フラグを設定する
D3Dメモリを効率的に使う
- XboxはCPUとGPUが同じRAMを共有する統合メモリアーキテクチャを採用している
- Halo 2はD3Dが提供する関数ではなく、手動でレンダーターゲットを作成している
- Halo 2は約25種類の異なるレンダーターゲットを使うが、メモリ節約のために4〜5個の固有バッファしか割り当てていない
rasterizer_primary_targets_initialize関数は、640x480にハードコードされた寸法を使って追加のレンダーターゲットとテクスチャビューを生成する- そのため、バック/フロント/深度バッファのサイズを調整した後でこの関数をフックし、寸法を修正する必要がある
ラスタライザーターゲットのサイズ調整
- テクスチャアキュムレータ(texaccum)レンダーターゲットはバックバッファ解像度と一致している必要がある
rasterizer_targets_initialize関数がテクスチャアキュムレータの寸法をハードコードしている_rasterizer_alloc_and_create_render_target関数をフックし、バックバッファサイズに一致するよう寸法を変更した
GN⁺の見解
- このプロジェクトは非常に難しい技術的挑戦だったが、Halo 2エンジンに対するRyanの深い理解と、Xboxハードウェアに関するdoomの専門知識があったからこそ実現できた
- HD化とオーバークロックパッチのためにXboxカーネルをホットパッチするのは、本当に印象的で創造的な解決策だった。これはハードウェアの物理的限界を乗り越える優れた方法だ
- 最終結果は素晴らしいが、特にテクスチャポップインの低減やロード時間の改善には、なお改良の余地がある
- レンダリングがGPUボトルネックであることを確認できたのは重要な洞察だった。追加RAMでより大きなテクスチャキャッシュを使えば、ボトルネックを緩和できる
- カメラのFOV角度調整、LODシステムの最適化、より効率的なモデル/テクスチャ圧縮の活用など、レンダリングエンジンをさらに最適化する方法がある
- 旧世代コンソールゲームのためにこのレベルのリバースエンジニアリング作業を行うのは非常に印象的だ。これはレトロゲームシーンにとって大きな成果である
まだコメントはありません。