Halo 2 HD-Version: Ein Remaster-Projekt, das die Grenzen der originalen Xbox herausfordert
(icode4.coffee)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_initializemüssen angepasst werden - Wenn 720p aktiviert ist, muss
g_progressive_scan_enabledgesetzt und die Variablenscreen_boundsundframe_boundsentsprechend 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_initializeerstellt 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_initializehat die Abmessungen des Texture Accumulators fest einkodiert - Die Funktion
_rasterizer_alloc_and_create_render_targetwird 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.