1 Punkte von GN⁺ 2024-04-19 | Noch keine Kommentare. | Auf WhatsApp teilen

Halo 2 HD jenseits der Grenzen der originalen Xbox

Dieser Blogpost behandelt die gesamte Arbeit, die geleistet wurde, um der Original-Xbox-Version von Halo 2 Unterstützung für HD-Auflösungen hinzuzufügen. Von Spiel-Patches über Hardware-Modifikationen an der Xbox-Konsole bis hin zum Schreiben benutzerdefinierter Tools für Performance-Benchmarks war das Ziel dieses Projekts, die Grenzen beider zu überwinden und zu sehen, wie weit man gehen kann.

  • Mein Freund "doom" hat in den vergangenen Jahren die Hardware und Software der originalen Xbox per Reverse Engineering untersucht und erforscht
  • Mit seinem benutzerdefinierten CPU-Interposer-Board konnten wir die serienmäßige Pentium-3-CPU durch eine modifizierte Pentium-3-CPU mit 1,4 GHz ersetzen und sie auf etwa 2 GHz übertakten
  • Er schrieb außerdem benutzerdefinierte Patches für den Xbox-Kernel, um die Timing-Berechnungen des Spiels in Echtzeit an die schnellere CPU anzupassen
  • In Kombination mit anderen Hardware-Upgrades wie RAM und SSD nannten wir das System schließlich die "god box"
  • doom wollte jemanden, der ordentliche Patches für beliebte Spiele mit echter HD-Auflösung in 720p erstellt, und fragte mich
  • Ich nahm das Angebot unter der Bedingung an, dass die GPU übertaktet wird, und er setzte das um und stellte die Konsole "GENESIS-3" bereit

Rendering in HD

  • Die Größe der D3D-Front-/Back-Buffer muss geändert werden
  • Die Funktionen _rasterizer_detect_video_mode, _rasterizer_init_screen_bounds, rasterizer_device_initialize müssen angepasst werden
  • Wenn 720p aktiviert ist, muss g_progressive_scan_enabled gesetzt und die Variablen screen_bounds und frame_bounds entsprechend dem Videomodus festgelegt werden
  • Je nachdem, ob der Videomodus Progressive oder Interlaced ist, müssen zusätzliche Flags in den D3D-Präsentationsparametern gesetzt werden

D3D-Speicher effizient nutzen

  • Die Xbox verwendet eine Unified-Memory-Architektur, bei der CPU und GPU denselben RAM gemeinsam nutzen
  • Halo 2 erstellt Render Targets manuell und nicht mit von D3D bereitgestellten Funktionen
  • Halo 2 verwendet rund 25 verschiedene Render Targets, weist aber nur 4–5 einzigartige Buffer zu, um Speicher zu sparen
  • Die Funktion rasterizer_primary_targets_initialize erstellt zusätzliche Render Targets und Texture Views mit fest auf 640x480 kodierten Abmessungen
  • Daher muss diese Funktion nach dem Anpassen der Größe von Back-/Front-/Depth-Buffer gehookt und die Abmessungen korrigiert werden

Größe der Rasterizer-Targets anpassen

  • Das Render Target des Texture Accumulators (texaccum) muss zur Auflösung des Back Buffers passen
  • Die Funktion rasterizer_targets_initialize hat die Abmessungen des Texture Accumulators fest einkodiert
  • Die Funktion _rasterizer_alloc_and_create_render_target wird gehookt, um die Abmessungen so zu ändern, dass sie zur Größe des Back Buffers passen

Meinung von GN⁺

  • Dieses Projekt war eine extrem schwierige technische Herausforderung, aber es wurde durch Ryans tiefes Verständnis der Halo-2-Engine und dooms Fachwissen zur Xbox-Hardware möglich
  • Den Xbox-Kernel für HD- und Overclocking-Patches hotzupatchen, war eine wirklich beeindruckende und kreative Lösung. Das ist ein guter Weg, die physischen Grenzen der Hardware zu überwinden
  • Das Endergebnis ist großartig, aber vor allem bei weniger Texture Pop-in und besseren Ladezeiten gibt es noch Verbesserungspotenzial
  • Die Bestätigung, dass das Rendering GPU-bound ist, war eine wichtige Erkenntnis. Mit zusätzlichem RAM und einem größeren Texture Cache ließe sich der Engpass abmildern
  • Es gibt weitere Möglichkeiten, die Rendering-Engine zu optimieren, etwa durch Anpassung des Kamera-FOV-Winkels, Optimierung des LOD-Systems oder effizientere Modell-/Textur-Kompression
  • Reverse Engineering auf diesem Niveau für ein altes Konsolenspiel zu betreiben, ist äußerst beeindruckend. Das ist eine großartige Leistung für die Retro-Gaming-Szene

Noch keine Kommentare.

Noch keine Kommentare.