Défis Techniques de la Réalité Virtuelle sur Apple Vision Pro
Les plongées approfondies des développeurs de jeux sont une série continue visant à éclairer des aspects spécifiques du design, de l’art ou des caractéristiques techniques d’un jeu vidéo, afin de démontrer que des décisions de conception apparemment simples ne le sont pas tant que ça.
Les éditions précédentes ont abordé des sujets variés, tels que la manière dont GOG a perfectionné l’imparfait avec la réédition d’Alpha Protocol, la création d’une nouvelle race de nains par Ishtar Games dans The Last Spell, et comment Krillbite Studio a élaboré une expérience de préparation alimentaire dans Fruitbus.
Dans cette édition, l’équipe d’Owlchemy Labs partage en détail les défis techniques rencontrés lors du portage de leurs titres VR sur l’Apple Vision Pro. Le lancement de ce dernier en février a marqué un tournant dans la communauté VR, étant le premier casque à six degrés de liberté à être commercialisé sans contrôleurs.
Portage de Job Simulator et Vacation Simulator
Phillip Johnson, ingénieur senior de la plateforme, explique comment ils ont adapté Job Simulator et Vacation Simulator pour l’Apple Vision Pro. L’équipe a utilisé diverses techniques pour mettre en œuvre le suivi des mains et a surmonté des défis liés aux systèmes de shaders et audio. En partageant leur expérience, ils espèrent encourager le développement de titres immersifs sur la plateforme visionOS.
Suivi des Mains à 30 Hz dans un Jeu à 90 Hz
Un des principaux défis rencontrés lors de la production de ce portage a été de compenser le suivi des mains qui se met à jour à 30 Hz. Job Simulator et Vacation Simulator sont des expériences hautement interactives. Le fait de mettre à jour les poses des mains une fois tous les trois cadres a eu plusieurs conséquences. Attraper et lancer des objets devenait presque impossible, et la vitesse des mains était exagérée, entraînant la destruction d’objets comme des assiettes. De plus, le suivi était souvent perdu lorsque l’on détournait le regard des mains, rendant les titres injouables.
Greg Tamargo, ingénieur gameplay senior, évoque l’utilisation de l’extrapolation pour améliorer le suivi des mains. Étant donné que le suivi des mains se met à jour à 30 Hz alors que le reste du jeu fonctionne à 90 Hz, chaque cadre contenant des données de pose de main était suivi d’au moins deux cadres sans mise à jour. Pour remédier à cela, l’équipe a modifié le package Unity XR VisionOS pour déterminer si les données étaient « fraîches » ou « périmées » et a compensé en conséquence.
Ils ont découvert que masquer les cadres « périmés » en mélangeant les poses de mains les plus récentes était trop lent et peu réactif. Ils ont donc choisi d’utiliser l’extrapolation pour prédire la position des mains avant la réception de la prochaine pose « fraîche ». En gardant une trace d’au moins deux poses récentes, ils ont pu calculer la vitesse et la vitesse angulaire, permettant ainsi d’inférer la pose probable en fonction du temps écoulé depuis le dernier cadre de données fraîches. Cette mise en œuvre a considérablement amélioré la fonctionnalité et la sensation du jeu.
Amélioration des Poses des Mains
Marc Huet, ingénieur système et spécialiste du suivi des mains, partage des informations sur les décisions prises concernant les poses. Pour éviter des poses non naturelles, l’équipe a cherché à travailler avec des données de pose réelles plutôt que de générer les leurs. Pour pallier la faible fréquence des mises à jour, ils ont introduit un délai pour interpoler les rotations des articulations entre les deux poses les plus récentes, tout en s’assurant que cela n’affecte pas négativement le gameplay.
Lorsqu’une articulation perd le suivi, ils ont adopté une approche conservatrice en copiant les relations parent-enfant de la pose précédente, tout en maintenant intactes les relations en chaîne. Ces techniques ont été facilitées par le stockage et le traitement des orientations des articulations par rapport à l’articulation parent plutôt qu’à la poignet ou à l’origine du monde.
les défis techniques rencontrés lors du portage de ces titres VR sur l’Apple Vision Pro ont été nombreux, mais grâce à des solutions innovantes, l’équipe d’Owlchemy Labs a réussi à offrir une expérience immersive et engageante pour les utilisateurs.
Apple a récemment annoncé qu’il prendra en charge les mains à 90 Hz dans la mise à jour VisionOS 2.0, et nous mettrons à jour notre contenu dès que cette mise à jour sera disponible.
Création de shaders et d’humour
Lors de la première utilisation, Unity compile et met en cache les shaders. Ce processus de compilation peut entraîner de brèves interruptions de la fréquence d’images, ce qui est inacceptable sur des plateformes spatiales, car cela peut provoquer des nausées. En raison de la nature spatiale de VisionOS, certaines restrictions nous obligent à repenser la manière et le moment de construire les shaders. VisionOS exige que ses applications dessinent une image toutes les deux secondes, sinon l’application sera arrêtée. Cela est logique dans un environnement spatial où les utilisateurs peuvent avoir plusieurs applications ouvertes, mais dans un jeu, il est courant de masquer la construction des shaders pendant les séquences de chargement. Avec cette restriction de deux secondes, nous n’avons pas pu utiliser la procédure standard de construction des shaders, ce qui nous a contraints à développer une nouvelle méthode.
Notre ingénieur graphique principal, Ben Hopkins, a dirigé la recherche de solutions. Pour construire correctement les shaders, nous devions avoir chaque disposition de vertex unique et chaque variante de shader qui seraient ensuite rendues une à la fois, hors écran, pendant la séquence de démarrage. Pour ce faire, nous avons créé un outil simple qui collectait et enregistrait les dispositions de vertex de chaque maillage dans le jeu. Ces enregistrements étaient intégrés dans notre système de préchauffage, où les joueurs rencontraient un grand préchauffage de shaders lors de leur première exécution de Vacation Simulator. La séquence créait dynamiquement un quad pour chaque disposition de vertex et faisait passer nos variantes de shader à travers chacune d’elles. Bien que cela prenne trois à quatre minutes, nous avons essayé d’adoucir l’expérience avec les meilleures blagues que l’équipe de portage pouvait écrire en une heure pour divertir le joueur. Une fois les shaders construits, le jeu se lançait instantanément.
Spatialisation
Daniel Perry, directeur audio chez Owlchemy Labs, explique comment nous avons résolu les problèmes audio pour nos ports sur VisionOS.
Le principal défi audio était que le mode entièrement immersif n’avait pas accès au Spatializer d’Apple dans Unity, et l’audio spatial est essentiel pour nos expériences afin de mettre en valeur l’environnement et de créer un champ sonore vivant et réactif. Nous devions trouver une solution compatible avec l’architecture de Job Simulator et Vacation Simulator. Apple dispose de PHASE (Physical Audio Spatialization Engine) qui fonctionne avec Unity, mais son utilisation nécessiterait des modifications importantes de notre flux audio, y compris le routage, le traitement et le chargement des fichiers.
Actuellement, le marché manque encore de solutions de spatialisation pour Unity, et la plupart des solutions existantes ne prennent pas en charge VisionOS. Le spatialiseur Resonance Audio est open source et multi-plateforme, mais il a été peu maintenu pendant un certain temps et n’avait pas été compilé pour VisionOS. Heureusement, comme le code source est disponible, nous avons pu le modifier pour qu’il puisse être construit pour VisionOS.
En raison de l’approche de routage limitée de Resonance, nous avons dû créer une solution personnalisée pour la réverbération. Pour des raisons de performance sur les plateformes mobiles, nous avons toujours utilisé un nombre minimal d’algorithmes de réverbération simples avec des préréglages pour les différentes pièces et environnements, ainsi que différents groupes de mélange audio pour additionner les effets dans le jeu. Bien que nous n’ayons pas pu reproduire tous les effets dans la chaîne des groupes de mélange audio, il était crucial de maintenir l’atmosphère générale et la sensation du monde. Nous avons donc créé notre propre système d’envoi/réception pré-spatialisé qui envoie l’audio de toutes les sources audio vers des sources audio en streaming additionnées, qui sont ensuite envoyées à un AudioMixer de réverbération non spatialisé.
Bien que ce ne soit pas l’ordre de traitement idéal, cela nous a permis d’utiliser Resonance tout en conservant certaines capacités similaires pour le post-traitement des groupes, et de maintenir une certaine similitude avec notre jeu sur d’autres plateformes, tout en optimisant les performances de traitement audio. Resonance s’est finalement avéré être plus compatible avec la structure de notre système audio.
Conclusion
Lorsque nous avons commencé à porter nos jeux sur l’Apple Vision Pro, nous ne savions pas si les problèmes qui nous empêchaient de lancer seraient résolus en un mois ou en un an, mais nous savions que nous voulions être présents le plus tôt possible. Apple partage notre passion pour les expériences uniquement basées sur le suivi des mains, car nous pensons qu’elles sont plus accessibles pour un public large. Grâce à notre capacité à créer nos propres outils pour résoudre certains de nos problèmes, nos titres ont pu être lancés sur Apple Vision Pro plusieurs mois avant la mise à jour VisionOS 2.0. Nous sommes fiers du travail accompli pour amener Job Simulator et Vacation Simulator sur VisionOS et sommes impatients que de nouveaux joueurs découvrent nos titres primés.