Version HD de Halo 2 : un projet de remasterisation qui repousse les limites de la Xbox originale
(icode4.coffee)Halo 2 HD qui repousse les limites de la Xbox originale
Cet article de blog couvre tout le travail réalisé pour ajouter la prise en charge de la résolution HD à la version Xbox originale de Halo 2. Des patchs du jeu aux modifications matérielles de la console Xbox, en passant par l’écriture d’outils personnalisés pour mesurer les performances, l’objectif de ce projet était de dépasser les limites des deux et de voir jusqu’où il était possible d’aller.
- Mon ami « doom » a passé ces dernières années à faire de la rétro-ingénierie et à étudier le matériel et le logiciel de la Xbox originale
- Grâce à sa carte interposeur CPU personnalisée, il a pu remplacer le CPU Pentium 3 d’origine par une variante de Pentium 3 à 1,4 Ghz et l’overclocker jusqu’à ~2 Ghz
- Il a également écrit des patchs personnalisés pour le noyau Xbox afin de corriger en temps réel les calculs de timing du jeu pour le CPU plus rapide
- Combiné à d’autres améliorations matérielles comme la RAM et un SSD, il a commencé à l’appeler la « god box »
- doom voulait quelqu’un pour créer de vrais patchs de résolution HD pour des jeux populaires en 720p, et il m’a demandé de m’en charger
- J’ai accepté à condition d’obtenir un overclock du GPU, ce qu’il a fait avant de me fournir la console « GENESIS-3 »
Rendu en HD
- Il fallait modifier la taille des tampons avant/arrière D3D
- Il fallait modifier les fonctions
_rasterizer_detect_video_mode,_rasterizer_init_screen_bounds,rasterizer_device_initialize - Quand le 720p est activé, il faut définir
g_progressive_scan_enabledet configurer les variablesscreen_boundsetframe_boundsen fonction du mode vidéo - Des flags supplémentaires doivent être définis dans les paramètres de présentation D3D selon que le mode vidéo est progressif ou entrelacé
Utiliser efficacement la mémoire D3D
- La Xbox utilise une architecture mémoire unifiée dans laquelle le CPU et le GPU partagent la même RAM
- Halo 2 crée les render targets manuellement, et non via les fonctions fournies par D3D
- Halo 2 utilise environ 25 render targets différents, mais n’alloue que 4 à 5 buffers uniques pour économiser la mémoire
- La fonction
rasterizer_primary_targets_initializecrée des render targets supplémentaires et des vues de texture en utilisant des dimensions codées en dur en 640x480 - Il fallait donc hooker cette fonction après le redimensionnement des tampons avant/arrière/profondeur et corriger les dimensions
Redimensionnement des cibles du rasterizer
- Le render target de l’accumulateur de textures (
texaccum) devait correspondre à la résolution du back buffer - La fonction
rasterizer_targets_initializecode en dur les dimensions de l’accumulateur de textures - La fonction
_rasterizer_alloc_and_create_render_targeta été hookée pour modifier les dimensions afin qu’elles correspondent à la taille du back buffer
L’avis de GN⁺
- Ce projet a représenté un défi technique extrêmement difficile, mais il a été rendu possible grâce à la compréhension approfondie de Ryan du moteur de Halo 2 et à l’expertise de doom sur le matériel Xbox
- Hot-patcher le noyau Xbox pour les patchs HD et d’overclock est une solution vraiment impressionnante et créative. C’est une excellente manière de dépasser les limites physiques du matériel
- Le résultat final est excellent, mais il reste encore une marge d’amélioration, notamment pour réduire le pop-in des textures et améliorer les temps de chargement
- Le fait d’avoir confirmé que le rendu est limité par le GPU est un constat important. Une mémoire RAM supplémentaire pourrait atténuer le goulot d’étranglement en permettant un cache de textures plus grand
- Il existe d’autres moyens d’optimiser le moteur de rendu, comme ajuster l’angle du FOV de la caméra, optimiser le système de LOD ou utiliser une compression plus efficace des modèles et des textures
- Réaliser un tel niveau de rétro-ingénierie pour un jeu sur une ancienne console est extrêmement impressionnant. C’est un accomplissement remarquable pour la scène du retrogaming
Aucun commentaire pour le moment.