
Lo sviluppatore Falco Girgis, noto per il suo lavoro nel retro-gaming e per le sue competenze tecniche nel porting su hardware legacy, ha condiviso i dettagli di questa impresa titanica,portare Grand Theft Auto 3 su Dreamcast. Girgis ha affrontato il problema partendo dalle basi, ottimizzando le operazioni matematiche di basso livello sia nel motore di gioco che nel layer del driver RenderWare, per poi risalire gradualmente verso l’alto, ottimizzando gli algoritmi a livello applicativo sfruttando le nuove routine matematiche.
Le ottimizzazioni a basso livello
Innanzitutto, Girgis ha sostituito le routine matematiche in virgola mobile di base, come le operazioni trigonometriche, l’inverso della radice quadrata, floor()
, ceiling()
e clamp()
, con pattern ottimali trovati (grazie a Compiler Explorer) per GCC 14.2.0, targettizzando l’architettura SH4. In alcuni casi, ha preferito utilizzare built-in del C, mentre in altri ha optato per assembly inline SH4.
Accelerazione delle operazioni matriciali
A un livello superiore, Girgis ha ottimizzato le routine di algebra lineare e le operazioni matriciali utilizzando le istruzioni vettoriali del Dreamcast, scrivendo codice in assembly SH4 inline. Qui ha introdotto alcune soluzioni intelligenti, come:
- Inserire metadati delle matrici in bit non significativi degli elementi.
- Combinare il caricamento di due matrici con la loro moltiplicazione.
- Implementare trasposizioni veloci e moltiplicazioni di quaternioni utilizzando 4 prodotti scalari.
Queste ottimizzazioni hanno permesso di velocizzare automaticamente alcune parti del codice RenderWare, come i calcoli per l’illuminazione, l’aggiornamento dei volumi di delimitazione e la derivazione delle coordinate UV per le mappe ambientali speculari sulle auto.
I guadagni principali
I miglioramenti più significativi, tuttavia, sono arrivati riscrivendo una parte consistente del codice per l’intersezione delle collisioni e la risoluzione dei contatti. Girgis ha introdotto operatori sovraccaricati in stile C++ per moltiplicare singoli vettori 4D per una matrice 4×4, passando poi a elaborare batch di vettori 4D con la stessa matrice.
Questo ha ridotto drasticamente il numero di volte in cui la matrice 4×4 di supporto doveva essere ricaricata, permettendogli di mantenerla residente nei registri durante l’uso da parte degli algoritmi di intersezione.
Risultato finale
Grazie a queste ottimizzazioni, il gioco ora gestisce carichi di lavoro elevati senza trasformarsi in una slideshow, mantenendo un frame rate stabile anche durante situazioni complesse come gli inseguimenti ad alta velocità con illuminazione dinamica e fisica avanzata.
FINALLY finishing up a MASSIVE PR from hell for the Sega Dreamcast port of Grand Theft Auto 3! This is an actual hardware capture now of the DC version under a high load, which would’ve previously been a slideshow, between the dynamic lighting from the sirens, the amount of rigid… pic.twitter.com/YmpMONWLj7
— Falco Girgis (@falco_girgis) March 11, 2025
Falco Girgis ha commentato:
“È stato un viaggio lungo e intenso, ma vedere il Dreamcast gestire GTA 3 in modo fluido, anche in situazioni estreme, è incredibilmente gratificante. Questo progetto dimostra quanto potenziale ci sia ancora nell’hardware legacy quando si applicano le giuste ottimizzazioni e un po’ di creatività.”
Per ulteriori dettagli, potete consultare il thread su X: https://x.com/falco_girgis/status/1899597373656952862
Un traguardo importante per la scena del retro-gaming e per tutti i fan del Dreamcast!
Falco Girgis continua a distinguersi come uno degli sviluppatori più talentuosi e dedicati nel campo del porting su hardware legacy, portando avanti progetti che sembravano impossibili e mantenendo viva la magia delle console retro.