Le rendu passe d'un affichage 2D à une scène immersive à six degrés de liberté, dans le casque, à 1280×960 par œil.
VR · Quest 3 · OpenGL ES · 03/11
Time Crisis · VR
Namco System 22 · Meta Quest 3
Time Crisis, le gun arcade de Namco, en stéréoscopie 6DoF dans un Quest 3 — Area 1 jouable de bout en bout, à 59.90 fps soutenus, 0 underrun sur 12 945 callbacks.
Comment ça est né
Time Crisis, c'est le gun arcade de Namco sur System 22 — l'un des jeux les plus joués du monde, et le genre de machine que tout le monde a tenté d'émuler mais peu de gens ont rendu vraiment jouable dans un casque VR. L'objectif : pas Time Crisis dans un mur virtuel, mais Time Crisis en stéréoscopie 6DoF, avec la visée au casque et les bras qui suivent le pointeur.
Le point de départ, c'est MAME — le meilleur émulateur d'arcade, mais pensé pour un écran 2D. J'ai forké la version qui contient déjà le code System 22 (le fork c211168), et j'ai ajouté par-dessus une couche OpenXR native pour Meta Quest 3. C'est cette couche — et tout le travail de rendu et d'audio — qui fait le projet.
Le contexte
Le projet est un fork de MAME (c211168) sur lequel j'ai ajouté un moteur OpenXR natif pour Meta Quest 3. Le rendu est en OpenGL ES (pas Vulkan, par choix — plus stable sur la stack Quest pour du raster arcade), l'audio en AAudio, et le visuel est en stéréoscopie 6DoF à 1280×960 par œil.
Le but, c'est que Area 1 de Time Crisis soit jouable de bout en bout dans le casque, avec la visée 6DoF au pointeur et les bras qui suivent le modèle. J'ai défini une « golden playable area » (Area 1) comme zone de référence : c'est elle qui est validée sur le hardware physique, et c'est elle qui sert de base pour étendre aux autres zones.
Le port inclut aussi le moteur Sega Model 2 (Rally) comme second système arcade dans le même sélecteur — ce qui veut dire que le projet gère deux familles de GPU arcade distinctes, avec leurs propres shaders, leur propre pipeline de blending, et leur propre politique d'audio.
Ce qui distingue ce projet d'un simple « émulateur dans un casque », c'est la profondeur du travail de rendu : shaders SPIR-V / OpenGL ES optimisés, segmentation du blending avec Early-Z, politique d'audio profilée pour éliminer les underruns, et une cadence soutenue mesurée, pas juste annoncée.
Le point dur
Le System 22 de Namco est un GPU arcade qui mélange polygones, textures, shading et blending d'une manière qui n'a jamais été pensée pour un casque VR à 60-90 Hz. Sur Quest 3, la marge de latence est minuscule : si tu perds un frame, tu perds la cadence, et le joueur le ressent. J'ai dû segmenter le blending avec l'Early-Z pour séparer ce qui peut être masqué (le GPU passe de 5,4 ms à 2,6-2,8 ms par œil sur le Model 2), et j'ai profilé l'audio pour que les underruns n'entraînent pas de drops de frame.
Le deuxième point dur, c'est la chauffe : un Quest 3 en VR soutenue monte vite. J'ai mesuré un pic à 70 °C en début de session, et j'ai travaillé le profiling pour ramener le régime à 51 °C en régime établi — c'est ce qui permet de tenir 59.90 fps sans throttling. Le tout est « baked » en C++ autonome, découplé de l'émulateur, pour viser la cadence maximale.
Fonctionnalités
La zone de référence Time Crisis est jouable de bout en bout sur le hardware physique Quest 3, visée 6DoF au pointeur.
Le même sélecteur gère aussi le moteur Model 2 (Rally) — deux familles de GPU arcade dans un seul port.
Segmentation du blending avec Early-Z : on sépare le travail masquable pour faire respirer le GPU.
Une politique audio Sega/Namco profilée qui élimine les underruns mesurés sur la session de référence.
La cadence n'est pas annoncée, elle est mesurée sur le hardware, avec un régime de chauffe stabilisé.
Arbitrages techniques
Stack technique
En chiffres
Parcours du projet
-
Fork & boot
Fork MAME c211168, moteur OpenXR natif Quest 3, Time Crisis démarre dans le casque.
-
Stéréoscopie 6DoF
Rendu 1280×960/œil, visée au pointeur, bras qui suivent le modèle.
-
Golden playable area
Area 1 validée de bout en bout sur le hardware physique Quest 3.
-
Optimisation GPU & audio
Segmentation du blending (Early-Z), politique AAudio profilée, 0 underrun / 12945 callbacks.
-
Régime établi
59.90 fps soutenus, chauffe 70 → 51 °C, sélecteur System 22 / Model 2 (Rally).
Ce que ça a rendu
-
01
Time Crisis jouable en VR
Area 1 jouable de bout en bout sur Quest 3, visée 6DoF au pointeur — une première pour ce titre.
-
02
Deux moteurs arcade
System 22 et Model 2 dans le même port, avec un sélecteur de titres.
-
03
Cadence tenue
59.90 fps soutenus, 0 underrun sur la session de référence, régime de chauffe stabilisé à 51 °C.