Quand le HUD s'est soudain retrouvé la tête en bas dans le navigateur 🙃
7 novembre 2026
Avec la version 2026.10.10, nous avons fait deux grands pas sous le capot : le jeu tourne désormais sur Unity 6.6, et la version navigateur démarre sur WebGPU partout où le navigateur le propose, par exemple dans Chrome et Edge récents. Sinon, elle tourne sur WebGL 2 comme avant. Ce sont deux façons pour un site web de parler à la carte graphique. WebGL existe depuis de nombreuses années, WebGPU est son successeur et se rapproche davantage du fonctionnement des cartes graphiques d'aujourd'hui. Peu après, mon HUD s'est retrouvé la tête en bas. 🙃
Vu une fois, puis plus jamais. J'avais ouvert le jeu dans Chrome sur mon portable, et le HUD était à l'envers. Nous avons essayé de le reproduire, sans succès. Moi non plus, je ne l'ai plus revu. Nous avons donc provisoirement classé l'affaire.
Puis il est revenu, avec des preuves en images. Le 19 octobre, c'est reparti, dans un monde tout neuf. Cette fois, j'ai envoyé tout de suite un rapport de bug avec une capture d'écran. Sauf que la capture elle-même était cassée : trois copies côte à côte, pleines de rayures. L'enquête qui s'ensuit : une image est faite de pixels, et chaque pixel a normalement trois valeurs pour le rouge, le vert et le bleu. Le jeu attendait trois valeurs par pixel, mais WebGPU en livrait quatre, avec une valeur en plus pour la transparence. Si l'on lit les mêmes données avec quatre valeurs par pixel, l'image redevient lisible. Le monde est à l'endroit, mais tout le HUD est inversé : la barre d'objets est collée en haut, et la question de VEGA « Veux-tu que je te montre les bases ? » est à l'envers. En chemin, il s'est avéré que chaque capture d'écran du navigateur était cassée depuis le passage à WebGPU. Personne ne l'avait remarqué, car jusque-là aucun rapport venant du navigateur n'avait été accompagné d'une capture. 🔍
Pourquoi seulement le HUD ? À partir du niveau graphique « Moyen », avec l'effet de visière activé, une caméra à part peint le HUD dans sa propre image en mémoire graphique. Les spécialistes appellent cela une texture de rendu. Le jeu superpose ensuite cette image au monde avec l'effet de visière et sa lueur. Le piège : les systèmes graphiques ne sont pas d'accord sur l'endroit où se trouve le « haut » dans une telle image. Certains comptent les lignes depuis le haut, d'autres depuis le bas. Normalement, le moteur de jeu arrange cela. Dans le navigateur sous WebGPU, ça tournait parfois mal pour l'image du HUD. Pourquoi seulement parfois, nous ne le savons toujours pas vraiment.
La reproduire ? Pas de chance. Pour trouver nous-mêmes les bugs du navigateur, nous avons construit une petite piste d'essai. Nous téléchargeons le paquet de jeu fini d'une version et le lançons sur notre propre ordinateur. Puis un navigateur piloté à distance avec WebGPU clique à travers le menu, démarre un monde et prend des captures d'écran que regarde notre IA. Nous avons essayé trois fois ainsi, avec exactement mon lien et sur la même puce graphique, et trois fois le HUD était à l'endroit. Seul mon vrai Chrome avait le bug.
Si l'on ne peut pas provoquer le bug, il faut le détecter. La caméra du HUD peint donc maintenant un minuscule point magenta, de quatre pixels, dans le coin supérieur gauche de son image. Avant de superposer le HUD au monde, le shader de visière regarde dans les deux coins gauches où le point a atterri. (Un shader est un petit programme qui s'exécute directement sur la carte graphique.) Si le point est en bas, le shader retourne le HUD. Il masque les coins au passage, donc on ne voit jamais le point. Mais tant que le bug se cache, une réparation de ce genre est difficile à tester. C'est pourquoi il existe un interrupteur de test qui place volontairement le point dans le mauvais coin. Alors le HUD doit se retrouver la tête en bas, et c'est exactement ce qu'il a fait, pile comme sur ma capture. Cela a prouvé que la détection fonctionne. ✅
La solution évidente aurait été un bug. « Alors on n'a qu'à toujours le retourner sous WebGPU ! » Nous l'avons essayé sur la piste d'essai avant de l'intégrer. Cela aurait cassé le HUD pour tout le monde, car la plupart du temps il était à l'endroit.
Trois pièges en chemin. WebGPU nous a encore joué quelques tours. Premièrement, une simple étape de copie peut inverser une image toute seule sous WebGPU. Reproduire le bug avec une copie inversée n'a donc pas marché. Deuxièmement, un nouvel interrupteur que nous voulions transmettre au shader n'est tout simplement jamais arrivé dans le navigateur. Troisièmement, nous avons relu des pixels pour vérifier l'ordre des lignes et obtenu des réponses contradictoires. Le shader écrit donc maintenant son verdict dans un seul pixel, et c'est celui-là que nous lisons. Un pixel unique n'a ni haut ni bas. 😄
Ce que vous y gagnez. Depuis la version 2026.10.24, le HUD est à l'endroit dans le navigateur, et les captures d'écran du navigateur sont de vraies images à nouveau. Les rapports de bug contiennent aussi désormais une section graphique qui indique, entre autres, dans quel sens était le HUD. La prochaine fois, nous le saurons donc même sans image. Dans le même paquet, nous avons aussi corrigé un bug venant des rapports de Lyxette : un animal ne flotte plus au-dessus d'un fossé que vous avez creusé. 🐾
Si jamais vous revoyez le HUD à l'envers : dans le navigateur, F2 ouvre le rapport de bug. Nous y jetterons un œil. 🙏
Commentaires