Dès février 2021, l’équipe de développement de OEngine a progressivement été déployée sur un chantier d’envergure : le portage du moteur sur les nouvelles consoles de Sony et Microsoft sorties quelques mois auparavant.
Réalisé en parallèle du développement du jeu Les Schtroumpfs – Mission Malfeuille, le but initial de ce portage était de permettre une sortie du jeu sur PS5 et Xbox Series. Mais celui-ci profitera également à tous les jeux présents et à venir conçus avec OEngine, qui pourront être publiés sur ces consoles !
Cette tâche gargantuesque m’a permis de mettre les mains dans de nombreuses facettes du développement moteur : configuration et génération de projets Visual Studio, implémentation de TRCs (technical requirements checklist), et même un peu de programmation rendu.
- À l’assaut de la 9e génération
- Programmation rendu
- Implémentation de TRCs et d’API spécifiques plateformes
- Nettoyage de printemps
À l’assaut de la 9e génération
Dès novembre 2020, je me suis amusé (comprenez, personne ne me l’a demandé) à compiler OEngine pour la première fois avec Visual Studio 2019 et son compilateur vc16 : nous utilisions Visual Studio 2015 (vc14) jusqu’alors. Ce changement a permis de réduire drastiquement les temps de compilation, et cela a aussi été l’occasion pour moi de mettre le nez dans notre outil de génération de solution, qu’il a fallu modifier pour qu’il prenne en charge la génération pour le toolset v142.
Un bon exercice, car lorsque l’heure du portage est arrivée courant février 2021, c’est à moi qu’a été confiée la mission initiale de compiler pour la première fois OEngine pour PS5 et Xbox Series, tel un aventurier solitaire défrichant une terre inconnue.
Cette mission peut se résumer en 2 parties thématiques :
- La mise à jour de notre outil de génération de solution, pour qu’il soit capable de générer des solutions Visual Studio pour les plateformes Prospero (PS5) et Scarlett (Xbox Series).
- La compilation progressive du moteur, couche après couche, du kernel jusqu’au code gameplay. Cela comprend, par exemple : l’implémentation du main(), la mise en commun de code entre plateformes (du code PS4 réutilisable sur PS5, …).
Une fois ces étapes préliminaires achevées, les choses sérieuses ont débuté pour l’ensemble de l’équipe. Pour ma part, je me suis notamment occupé des sujets suivants :
Programmation rendu
- Mise en place de la compilation et de la reflection de shader DirectX 12 pour Windows et Xbox Series.
- Mise en place de la reflection de shader AGC pour PS5 et refactorisation de la reflection de shader GNM pour PS4.
- Passage de l’allocateur mémoire GPU PS4 de OEngine en 64 bits pour qu’il soit utilisable sur PS5 sans limitation.
- Un peu d’aide pour intégrer le support de la 4K et de la VSync sur PS5 et Xbox Series.
- Support du sRGB pour les textures PS5.
Implémentation de TRCs et d’API spécifiques plateformes
- Intégration du Microsoft Game Development Kit (GDK), initialement réalisée en coopération avec Alban Guéret de Passtech Games, avec un double objectif : publier Curse of the Dead Gods sur le Microsoft Store, et implémenter les TRCs Xbox Series pour Les Schtroumpfs – Mission Malfeuille.
- Mise en place de la sauvegarde sur PS5 et Xbox Series, et refactorisation du code de sauvegarde sur PC, PS4 et Nintendo Switch.
- Implémentation des trophées et des activités PS5.
- Gestion du « suspend » et « resume » sur Xbox Series.
- Détection des manettes et des inputs sur Xbox Series.
- Détection du modèle de la Xbox Series (X ou S), à des fins de performances.
Nettoyage de printemps
- Époussetage de l’implémentation de FMOD Studio, et intégration sur PS5 et Xbox Series.
- Mise à jour de certains SDK (FBX, …).
- Suppression de librairies inutilisées.
J’ai aussi consacré un peu de temps à mettre en œuvre un portage Xbox One du moteur compilé avec le GDK. Cela nous a permis de partager le même code que celui mis en place pour la Xbox Series (rendu, inputs, TRCs, …), tout en nous débarrassant de l’antique implémentation du moteur basée sur le XDK. Bien que cette tâche fut achevée trop tard pour la sortie de la version Xbox One des Schtroumpfs, cela sera très utile aux prochains projets développés avec OEngine souhaitant être publié sur cette console.