1 ポイント 投稿者 GN⁺ 2024-04-19 | まだコメントはありません。 | WhatsAppで共有

オリジナル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_boundsrasterizer_device_initialize 関数を修正する必要がある
  • 720pが有効になったら g_progressive_scan_enabled を設定し、ビデオモードに応じて screen_boundsframe_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システムの最適化、より効率的なモデル/テクスチャ圧縮の活用など、レンダリングエンジンをさらに最適化する方法がある
  • 旧世代コンソールゲームのためにこのレベルのリバースエンジニアリング作業を行うのは非常に印象的だ。これはレトロゲームシーンにとって大きな成果である

まだコメントはありません。

まだコメントはありません。