Retour sur la GDC et le blitz plateforme mobile
Un vrai moteur qui exécute du vrai code bat n'importe quelle présentation. RakuAI en a apporté un à la GDC, a livré deux plateformes mobiles la même semaine, et a prouvé qu'ajouter une nouvelle surface est une forme connue — pas une réécriture.
La GDC, c’était il y a un mois. Le vol retour était plein de notes. Les conversations démarrées dans les couloirs et les réunions annexes résonnent encore dans la boîte de réception. Aujourd’hui est le bon samedi pour consigner ce qui a été livré dans les préparatifs du voyage, ce qui a failli ne pas l’être, et ce qui en est ressorti.
La GDC est l’endroit où l’on découvre, en trois jours de conversation dense, lesquelles de vos hypothèses tiennent et lesquelles étaient une supposition que vous traitiez comme un fait. Je suis rentré avec les deux types de réponses et une liste de personnes à recontacter plus longue que prévu.
Le tag de version raconte l’histoire
La version qui tournait sur le portable que j’avais emporté est v1.3.8.26.10.09. Le commit qui l’a incrémentée avait un message d’une ligne : « GDC 2026 Eve Release ». C’était le 25 mars. J’étais dans un avion le lendemain matin.
Le commit de veille de GDC est celui dont je veux parler, parce que c’est celui qui a failli ne pas passer.
Quarante-huit heures avant mon départ
Le build sur lequel tout le monde s’était accordé pour dire que c’était « le build de démo » a échoué de quatre façons différentes la semaine avant la GDC. Le commit de correction est b70a48dc du 7 mars, regroupé dans une seule PR intitulée « fix(demos): fix black screens, crashes, and expand API test coverage ». Les quatre façons :
Écrans noirs. La vitrine d’animation, le test de comportement IA, le test booléen CSG, et le test du framework de gameplay s’affichaient tous en noir. La cause était un appel manquant à raku_editor_init() dont les démos avaient besoin pour enregistrer les ressources de dessin de débogage. Les cibles de liaison CMake avaient été refactorisées un sprint plus tôt et la bibliothèque d’éditeur avait été élaguée des binaires de démo parce que personne n’avait remarqué qu’ils en dépendaient. Correctif : rajouter le lien, restaurer l’appel d’init.
Un plantage null. La démo de dialogue SLM plantait au démarrage avec un pointeur QA nul. Le chargeur de modèle de dialogue retournait tôt sur un chemin de configuration-introuvable sans signaler l’erreur. Correctif : faire remonter l’erreur, et livrer une configuration fonctionnelle.
Une démo réseau qui se déconnectait immédiatement. La démo d’écho réseau ouvrait un socket, obtenait la poignée de main, puis se fermait. La détection de déconnexion se déclenchait à la première image d’inactivité au lieu d’attendre un vrai délai d’expiration. Correctif : un vrai délai d’expiration au lieu de « première inactivité ».
Un test XR qui sortait avec le code 1 en l’absence de runtime OpenXR. Sortir avec un code non nul en l’absence de runtime est le mauvais comportement par défaut pour une machine de démo qui peut ne pas avoir de runtime XR installé. Correctif : sortir avec le code 0 avec grâce, journaliser l’absence.
Aucun de ces cas n’est subtil. Tous sont le genre de chose qui paraît correcte sur la machine du développeur et cassée sur la machine d’un inconnu. Quarante-huit heures avant un voyage comme celui-ci, c’est exactement le moment où ces défaillances remontent à la surface, parce que la démo est enfin exécutée sur le portable où elle vivra réellement la semaine suivante, devant des gens qui se feront une opinion en quinze secondes.
Les commits de finition dont j’avais besoin qu’ils fonctionnent à temps
Deux autres commits du 26 mars, la veille de mon départ.
Spécularité du plan de sol. La démo de modèle du monde avait un plan de sol vert et quelques formes flottantes. Avec un matériau spéculaire global appliqué, le sol vert virait au blanc délavé sous l’éclairage de la démo. Le correctif tenait en dix lignes : matériau mat sur le plan de sol, spéculaire uniquement sur les objets dynamiques. La démo a soudain eu l’air d’une direction artistique délibérée plutôt que d’un moteur en plein débogage.
GPU dédié NVIDIA forcé sur le portable de conférence. Les portables hybrides avec à la fois un Intel UHD et une carte NVIDIA dédiée basculent par défaut sur la puce Intel sauf indication explicite contraire. L’indication passe par deux symboles exportés : NvOptimusEnablement pour NVIDIA Optimus, AmdPowerXpressRequestHighPerformance pour l’équivalent AMD. Les ajouter au binaire de démo a forcé le GPU dédié. Le HUD affiche désormais aussi le nom du GPU dans la barre de titre, pour que je puisse voir d’un coup d’œil sur quoi la démo tourne réellement. Résultat : elle a tourné sur la Quadro T2000 au lieu de l’UHD intégrée. Le temps d’image a chuté de plus de moitié.
Aucun de ces deux commits ne dépasse cinquante lignes. Tous deux font la différence entre « la démo tourne à trente images par seconde » et « la démo tourne à quatre-vingt-dix et a l’air intentionnelle ».
Le repli navigateur devenu la meilleure démonstration
L’autre chose arrivée pendant la semaine de la GDC est une démo navigateur autonome à web/seed-explorer/. Un seul fichier HTML, zéro dépendance, un portage JavaScript du générateur de terrain à bruit Simplex que le runtime utilise côté natif. Il rend trois vues d’un monde généré sur un canevas 512x512 via putImageData : carte des biomes, carte d’altitude, carte de température. Un schéma d’URL raku://seed/ est intégré pour qu’une graine soit partageable.
C’était censé être une solution de secours au cas où le portable flancherait ou que le wifi du lieu serait un chaos. C’est devenu la chose que j’ouvrais en réalité le plus souvent dans les conversations annexes. Le portable de quelqu’un d’autre sur une table de café ne peut pas installer notre SDK sur-le-champ, mais il peut charger une URL. La conversation passe de « envoyez-moi les binaires » à « ouvrez ce lien ». C’est un autre genre de conversation. La démo navigateur reste dans la rotation.
Le blitz plateforme mobile
L’autre moitié de mars, c’était iOS et Android, livrés tous deux la même semaine.
Android. Douze commits dans la série F1 (F1.2 à F1.15), en commençant par l’échafaudage NativeActivity et le pont JNI et en finissant par le profileur de performance Android. Entre les deux : entrée tactile câblée via JNI, workflow GitHub Actions pour les builds AAB, intégration Firebase Crashlytics, et Oboe activé comme backend audio. Oboe est le bon choix pour l’audio à faible latence sur Android. L’enveloppe API C autour de lui permet aux mêmes callbacks audio de fonctionner de façon multiplateforme.
iOS. Sept commits dans la série F2 (F2.1 à F2.7) sur deux jours. Démarré avec le projet Xcode et la coque d’application Swift. Ajout d’une chaîne d’outils de compilation croisée arm64. Câblage de Metal comme moteur de rendu (le message du commit F2.2 dit « iOS Metal renderer integration, glue layer, CMake toolchain, 51 tests » et le nombre de tests est la partie dont je suis le plus fier). Ajout de l’entrée gestuelle via UIGestureRecognizer. Construction du backend audio spatial par-dessus AVAudioEngine. Câblage du téléchargement et de la mise en cache des paquets d’assets via URLSession.
Les deux plateformes ont reçu la même forme : une fine couche native qui expose le tactile, l’audio, le GPU, et la livraison d’assets à la même API C que celle utilisée par le runtime bureau. C’est le contrat. Le code spécifique à la plateforme est l’implémentation. Ajouter une nouvelle plateforme à partir de là est une forme connue, pas un problème d’architecture ouvert.
L’audio spatial est la victoire sous-estimée
La pièce de travail sur laquelle je reçois le plus de questions est l’audio spatial. L’en-tête se trouve dans include/raku/raku_spatial_audio.h. L’implémentation est répartie entre les plateformes : traitement HRTF pour la localisation spatiale, groupes de mixage pour le contrôle par canal, effets (réverbération, délai), et zones de réverbération pour l’acoustique des pièces. Sur Android, le chemin audio est Oboe. Sur iOS, c’est AVAudioEngine. Le commit d’audio spatial est e0aef6c6 du 6 mars.
La raison pour laquelle cela compte pour un moteur AR est que l’audio est la moitié de la présence. L’AR visuelle avec un audio stéréo (ou pire, mono) casse l’immersion dès que l’utilisateur tourne la tête. Un audio spatial qui se met à jour au fur et à mesure que l’utilisateur se déplace donne l’impression que le contenu virtuel est vraiment dans la pièce. Le coût est réel : le traitement HRTF n’est pas gratuit. Le bénéfice est réel aussi : personne n’est jamais revenu d’une bonne démo d’audio spatial en voulant qu’on la désactive.
Ce que la GDC a réellement fait bouger
Trois choses qui valent la peine d’être consignées.
Les conversations partenaires. Les conversations de couloir et les réunions annexes sont celles qui atterrissent maintenant sur le calendrier. Les conférences elles-mêmes étaient excellentes. Les conversations entre les conférences sont la raison pour laquelle le voyage s’est remboursé. Quand j’écrirai spécifiquement sur les orientations partenaires un samedi futur, ces fils de discussion en seront la substance.
Une lecture plus claire d’où en est le domaine. Il y a eu des sessions sur les modèles du monde, sur les pipelines de contenu pilotés par l’IA, sur l’écart entre démos de recherche et runtimes livrables, sur la feuille de route matérielle AR spatiale de plusieurs fournisseurs différents. Certaines de mes hypothèses sur le paysage concurrentiel étaient correctes. Quelques éléments dont je m’inquiétais discrètement se sont révélés une menace moindre que je le pensais. Quelques éléments dont je ne m’inquiétais pas se sont révélés mériter plus d’attention. Ce recalibrage à lui seul valait le vol.
La permission de continuer. La GDC était un moteur de forçage. La démo que je transportais n’était pas parfaite. Elle était précise, c’était un vrai moteur exécutant du vrai code, et elle répondait à une catégorie de question différente de celle d’une présentation. Le nombre de réponses « envoyez-moi un e-mail de suivi » était assez élevé pour confirmer que la direction est la bonne. C’est la métrique.
Les plateformes mobiles sont livrées. Les démos que j’ai montrées fonctionnaient. Le repli navigateur est devenu une fonctionnalité. Samedi bien employé.
Le runtime construit pour l'appareil sur votre visage
Une API C, de l'audio spatial partout, et un runtime conscient des contraintes thermiques conçu pour les lunettes connectées — pas un moteur PC réduit pour tenir. Découvrez où votre IA vit dans le monde réel.