{"id":338,"date":"2026-10-30T16:52:08","date_gmt":"2026-10-30T15:52:08","guid":{"rendered":"https:\/\/www.olivierdoucet.info\/blog\/?p=338"},"modified":"2026-10-31T09:57:15","modified_gmt":"2026-10-31T08:57:15","slug":"une-ia-peut-elle-faire-une-demo-vr-toute-seule","status":"publish","type":"post","link":"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/","title":{"rendered":"Une IA peut-elle faire une d\u00e9mo VR toute seule\u00a0?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Six jours, Claude Code, Unreal Engine et un casque Quest 3. J&rsquo;ai demand\u00e9 \u00e0 une IA de construire une balade en r\u00e9alit\u00e9 virtuelle, de la premi\u00e8re ligne de code \u00e0 l&rsquo;application install\u00e9e dans mon casque. Ce qu&rsquo;elle a su faire seule, et ce que j&rsquo;ai appris d&rsquo;Unreal en la regardant travailler.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-01-heros.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-01-heros-1024x576.jpg\" alt=\"\" class=\"wp-image-280\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-01-heros-1024x576.jpg 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-01-heros-300x169.jpg 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-01-heros-768x432.jpg 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-01-heros-1536x864.jpg 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-01-heros.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Le lac, \u00e0 3&nbsp;min&nbsp;52&nbsp;: le h\u00e9ron vient de se poser sur la barque. Image de la version finale, rendue sur PC.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ces derniers mois, les IA ont fait un bond, et les MCP se sont multipli\u00e9s. Un MCP, c&rsquo;est un connecteur qui laisse une IA piloter un logiciel&nbsp;: Unreal Engine a maintenant le sien, Blender aussi, et on en trouve pour ComfyUI, l&rsquo;outil de g\u00e9n\u00e9ration d&rsquo;images que j&rsquo;utilise. Sur le papier, une IA peut donc faire tourner seule les outils d&rsquo;un studio de jeu vid\u00e9o. J&rsquo;ai voulu voir ce que \u00e7a donne en vrai.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le terrain d&rsquo;essai est volontairement modeste&nbsp;: une d\u00e9mo VR de quatre minutes, sans interaction, qui tourne sur mon Quest 3. On est assis dans une barque qui d\u00e9rive sur une rivi\u00e8re en for\u00eat, du cr\u00e9puscule \u00e0 la nuit, dans le style des dessins anim\u00e9s japonais des ann\u00e9es 80 et 90. La r\u00e8gle du jeu&nbsp;: pousser l&rsquo;autonomie de l&rsquo;IA au maximum. Elle \u00e9crit le code, g\u00e9n\u00e8re les images et la 3D, choisit les sons, construit la sc\u00e8ne dans Unreal, compile l&rsquo;application, l&rsquo;installe dans le casque et mesure sa fluidit\u00e9. Moi, je fournis quelques images de r\u00e9f\u00e9rence et la musique, je mets le casque et je dis ce qui ne va pas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;IA, ici, c&rsquo;est Claude Code, l&rsquo;agent de programmation d&rsquo;Anthropic, avec le mod\u00e8le Claude Opus 5.5. Je l&rsquo;appellerai simplement l&rsquo;agent. Il a travaill\u00e9 du samedi 17 octobre, 14&nbsp;heures, au vendredi 23, midi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Au bout de ces six jours, la balade tournait \u00e0 72&nbsp;images par seconde dans le casque, et j&rsquo;avais mes r\u00e9ponses aux trois questions de d\u00e9part. Jusqu&rsquo;o\u00f9 une IA peut-elle aller seule sur un projet comme celui-l\u00e0&nbsp;? Audio IA, assets IA&nbsp;: qu&rsquo;est-ce qu&rsquo;on sait faire en octobre 2026&nbsp;? Et qu&rsquo;est-ce que j&rsquo;allais apprendre d&rsquo;Unreal Engine, que je ne connaissais que c\u00f4t\u00e9 joueur&nbsp;?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tout ce qui illustre cet article sort du d\u00e9p\u00f4t du projet&nbsp;: captures du casque, vid\u00e9os de contr\u00f4le, mesures, journaux. L&rsquo;agent a tout gard\u00e9.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-02-bande-annonce.mp4\"><\/video><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>La bande-annonce&nbsp;: huit plans de la version finale, rendue sur PC en 4K. Dans le casque, l&rsquo;image est moins fine.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le terrain d&rsquo;essai<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">La balade<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La rivi\u00e8re fait 239&nbsp;m\u00e8tres. La barque la descend \u00e0 un m\u00e8tre par seconde, sans jamais acc\u00e9l\u00e9rer, et la cam\u00e9ra ne penche jamais sur le c\u00f4t\u00e9&nbsp;: ce sont les deux r\u00e8gles de base pour ne rendre personne malade en VR assise. Les yeux sont \u00e0 1,10&nbsp;m au-dessus de l&rsquo;eau, et le parcours ne tourne jamais de plus de 1,15 degr\u00e9 par seconde.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sept moments ponctuent les quatre minutes&nbsp;: le noir et le clapotis du d\u00e9part, le ponton dans la brume, une b\u00eate lumineuse qui passe sous l&rsquo;eau tout pr\u00e8s de la barque, un troupeau qui traverse un gu\u00e9, le passage sous un pont de statues, une cr\u00e9ature g\u00e9ante devant la lune, puis le lac du final, o\u00f9 un h\u00e9ron vient se poser sur la barque.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-04-balade.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"740\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-04-balade-1024x740.jpg\" alt=\"\" class=\"wp-image-284\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-04-balade-1024x740.jpg 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-04-balade-300x217.jpg 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-04-balade-768x555.jpg 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-04-balade-1536x1111.jpg 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-04-balade.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>La balade vue de dessus, une image par moment (rendu PC de la version finale), et la musique sur laquelle tout est cal\u00e9.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La musique commande tout. \u00ab&nbsp;Luminous Wonder&nbsp;\u00bb est un morceau que j&rsquo;ai g\u00e9n\u00e9r\u00e9 sur Suno. L&rsquo;agent en a analys\u00e9 la structure et rep\u00e9r\u00e9 les fronti\u00e8res&nbsp;: la plus forte, une modulation, tombe \u00e0 2&nbsp;min&nbsp;38 dans la d\u00e9mo et ouvre la sc\u00e8ne de la lune. Apr\u00e8s le noir du d\u00e9but, chaque moment d\u00e9marre sur une de ces fronti\u00e8res. Le s\u00e9quencier suit la musique, jamais l&rsquo;inverse.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">L&rsquo;atelier<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">C\u00f4t\u00e9 mat\u00e9riel, rien d&rsquo;exotique&nbsp;: un PC sous Windows avec WSL2, une RTX 3090 de 24&nbsp;Go et le Quest 3 branch\u00e9 en USB. La carte graphique est partag\u00e9e entre Unreal, ComfyUI et Blender, et l&rsquo;agent ne lance jamais deux calculs lourds \u00e0 la fois&nbsp;: un fichier verrou fait office de feu rouge.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;agent tourne dans WSL2 et pilote tout le reste&nbsp;: Unreal Engine 5.8 avec son serveur MCP, ComfyUI en local avec ses mod\u00e8les d&rsquo;image et de 3D (Z-Image Turbo, Qwen-Image-Edit, TRELLIS.2, Pixal3D, BiRefNet), Blender sans interface, Freesound pour des sons du domaine public, GitHub pour le code. Le casque se pilote par adb, l&rsquo;outil de d\u00e9bogage d&rsquo;Android&nbsp;: installer l&rsquo;application, la lancer, capturer la vue du casque, lire la fr\u00e9quence d&rsquo;images. De mon c\u00f4t\u00e9, deux abonnements, Midjourney pour les images de r\u00e9f\u00e9rence et Suno pour la musique. L&rsquo;agent n&rsquo;a utilis\u00e9 aucun service payant en dehors de Claude lui-m\u00eame.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-03-atelier.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-03-atelier-1024x576.png\" alt=\"\" class=\"wp-image-283\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-03-atelier-1024x576.png 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-03-atelier-300x169.png 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-03-atelier-768x432.png 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-03-atelier-1536x864.png 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-03-atelier.png 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>L&rsquo;atelier. Mes demandes et mes retours passent par la conversation, et la m\u00e9moire du projet tient dans quelques fichiers. Chaque outil a son canal&nbsp;; l&rsquo;agent et moi rejoignons le casque par deux chemins diff\u00e9rents.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Les r\u00e8gles<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le projet tient dans un fichier de consignes, CLAUDE.md, que l&rsquo;agent relit au d\u00e9but de chaque session. On y trouve la vision, le s\u00e9quencier, les contraintes du Quest, et surtout une m\u00e9thode. Cinq r\u00e8gles font l&rsquo;essentiel du travail&nbsp;:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>La sc\u00e8ne est du code. Tout ce qui la construit est un script Python versionn\u00e9 et rejouable, et une seule commande,&nbsp;<code>python pipeline\/build.py<\/code>, reconstruit le projet depuis z\u00e9ro.<\/li>\n\n\n\n<li>Le MCP sert \u00e0 explorer. Toute modification retenue passe dans un script avant le commit.<\/li>\n\n\n\n<li>Tester petit avant de produire en s\u00e9rie&nbsp;: deux ou trois essais courts, v\u00e9rifi\u00e9s, avant tout lot.<\/li>\n\n\n\n<li>Une d\u00e9cision attendue re\u00e7oit un d\u00e9faut r\u00e9versible. L&rsquo;agent l&rsquo;applique, la note avec ce qui changerait si je tranchais autrement, et continue.<\/li>\n\n\n\n<li>Pas de service payant, d&rsquo;installation de logiciel ni d&rsquo;envoi de donn\u00e9es vers un service impr\u00e9vu sans mon accord \u00e9crit.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Deux fichiers tenus par l&rsquo;agent compl\u00e8tent le dispositif. SUIVI.md donne l&rsquo;\u00e9tat du projet&nbsp;: blocages, d\u00e9cisions en attente, points \u00e0 v\u00e9rifier au casque. HISTORY.md est le journal, une entr\u00e9e par it\u00e9ration, et chaque it\u00e9ration donne un commit. Quand je reviens apr\u00e8s une nuit, c&rsquo;est le suivi que je lis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mon r\u00f4le tient en une ligne du fichier&nbsp;: directeur artistique et relecteur. Je ne touche ni au code ni \u00e0 la sc\u00e8ne.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Six jours en acc\u00e9l\u00e9r\u00e9<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-05-commits.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"614\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-05-commits-1024x614.png\" alt=\"\" class=\"wp-image-285\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-05-commits-1024x614.png 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-05-commits-300x180.png 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-05-commits-768x461.png 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-05-commits-1536x922.png 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-05-commits.png 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>134 commits en six jours, heure par heure. La nuit est gris\u00e9e.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;agent a fait 134 commits&nbsp;: 16 le premier apr\u00e8s-midi et le premier soir, puis 31, 38 et 30 les trois jours suivants, et encore 19 sur la fin, de part et d&rsquo;autre d&rsquo;une pause de 37&nbsp;heures. Le graphique montre aussi ses nuits. Je lui ai laiss\u00e9 les cl\u00e9s trois fois pour longtemps&nbsp;: huit heures le 18 au soir \u00ab&nbsp;pour repenser la sc\u00e8ne compl\u00e8te&nbsp;\u00bb, six heures sans casque le 19 apr\u00e8s-midi, puis vingt heures d&rsquo;un coup&nbsp;: \u00ab&nbsp;je te rends la 3D, le casque et tout, tu as 20&nbsp;h devant toi&nbsp;\u00bb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le premier jour a donn\u00e9 le ton. \u00c0 14&nbsp;h&nbsp;30, trente musiques g\u00e9n\u00e9r\u00e9es en local, aucune \u00e9cout\u00e9e, et ma r\u00e9ponse&nbsp;: \u00ab&nbsp;C&rsquo;est long et c&rsquo;est moche.&nbsp;\u00bb Unreal \u00e9tait install\u00e9 \u00e0 19&nbsp;h, la premi\u00e8re application pour le Quest compil\u00e9e \u00e0 20&nbsp;h&nbsp;49. Peu apr\u00e8s minuit, je pouvais m&rsquo;asseoir dans le casque, au milieu d&rsquo;un premier d\u00e9cor de formes grises.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le deuxi\u00e8me jour, j&rsquo;ai appris qu&rsquo;un casque autonome ne sait pas appliquer de filtre \u00ab&nbsp;dessin anim\u00e9&nbsp;\u00bb, et l&rsquo;agent a pass\u00e9 l&rsquo;apr\u00e8s-midi \u00e0 gagner des millisecondes. Le soir, une phrase a tout chang\u00e9&nbsp;: \u00ab&nbsp;le truc le plus moche ce sont les arbres&nbsp;\u00bb. Dans la nuit, la for\u00eat enti\u00e8re \u00e9tait refaite en images peintes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La suite tient en 69 it\u00e9rations de revue au total, et en quelques chantiers qui reviennent&nbsp;: les statues, l&rsquo;eau, le tangage, une b\u00eate sous l&rsquo;eau, un h\u00e9ron. Le 23 octobre \u00e0 11&nbsp;h&nbsp;45, l&rsquo;agent a install\u00e9 une version finale dans le casque, \u00e0 c\u00f4t\u00e9 de la version de travail.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Toutes les vid\u00e9os de contr\u00f4le rendues pendant ces six jours suivent exactement la m\u00eame trajectoire de cam\u00e9ra. Un m\u00eame instant de la balade se retrouve donc, au m\u00eame cadrage, d&rsquo;une version \u00e0 l&rsquo;autre. Dans le montage qui suit, la barque avance sans coupure et le d\u00e9cor change de version toutes les six secondes.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-06-pont-versions.mp4\"><\/video><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Le passage du pont, de 1&nbsp;min&nbsp;38 \u00e0 2&nbsp;min&nbsp;20, en sept versions du 19 au 23\/10 (rendus PC). La date et le changement sont incrust\u00e9s.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les captures du casque racontent la m\u00eame histoire avec l&rsquo;image du Quest lui-m\u00eame&nbsp;: celle qu&rsquo;affiche le casque, captur\u00e9e par l&rsquo;agent.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1080\" style=\"aspect-ratio: 1080 \/ 1080;\" width=\"1080\" controls src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-07-casque-timelapse.mp4\"><\/video><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Trois instants de la balade (0&nbsp;min&nbsp;30, 1&nbsp;min&nbsp;52, 3&nbsp;min&nbsp;52), vus dans le casque du 18 au 23\/10.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jusqu&rsquo;o\u00f9 l&rsquo;agent est all\u00e9 seul<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Ce qui le fait avancer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La premi\u00e8re le\u00e7on date du premier apr\u00e8s-midi, et elle vaut autant pour moi que pour lui. Ma toute premi\u00e8re demande&nbsp;: une cha\u00eene de production musicale sur ACE-Step, un mod\u00e8le qui tourne en local, en explorant trente graines en brouillon avant de rendre la meilleure en qualit\u00e9. L&rsquo;agent l&rsquo;a fait \u00e0 la lettre, sans pouvoir \u00e9couter une seule note. Une demi-heure plus tard, je lui \u00e9crivais&nbsp;: \u00ab&nbsp;Y&rsquo;a pas vraiment de m\u00e9lodie et apr\u00e8s 15&nbsp;s on dirait des loops qui se r\u00e9p\u00e8tent [\u2026] je vois pas pourquoi t&rsquo;en g\u00e9n\u00e8res 30. C&rsquo;est long et c&rsquo;est moche.&nbsp;\u00bb La r\u00e8gle \u00ab&nbsp;tester petit&nbsp;\u00bb est n\u00e9e l\u00e0. Le fichier de consignes le dit maintenant en une phrase&nbsp;: \u00ab&nbsp;Un fichier techniquement valide ne dit rien de sa qualit\u00e9.&nbsp;\u00bb<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La deuxi\u00e8me r\u00e8gle, c&rsquo;est le d\u00e9faut r\u00e9versible. Le premier soir, avant m\u00eame qu&rsquo;Unreal soit install\u00e9, l&rsquo;agent avait neuf d\u00e9cisions en attente&nbsp;: quelle image sert de r\u00e9f\u00e9rence de style, o\u00f9 couper entre deux moments, \u00e0 quelle \u00e9chelle faire les cr\u00e9atures, quelle forme donner \u00e0 la coque. Plut\u00f4t que de m&rsquo;attendre, il applique un d\u00e9faut, le note dans le suivi, et continue. Il y en a eu vingt sur le projet. J&rsquo;en ai tranch\u00e9 certaines au casque. D&rsquo;autres jamais&nbsp;: le d\u00e9faut tenait.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-08-iteration.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-08-iteration-1024x576.png\" alt=\"\" class=\"wp-image-290\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-08-iteration-1024x576.png 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-08-iteration-300x169.png 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-08-iteration-768x432.png 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-08-iteration-1536x864.png 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-08-iteration.png 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Une it\u00e9ration. L&rsquo;agent boucle seul&nbsp;; mes retours entrent dans la boucle quand j&rsquo;ai le temps.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Troisi\u00e8me r\u00e8gle, la sc\u00e8ne comme du code&nbsp;: 58 scripts Python, un peu plus de 10&nbsp;000 lignes, et une commande qui reconstruit tout. J&rsquo;en ai vu l&rsquo;int\u00e9r\u00eat d\u00e8s le premier jour&nbsp;: \u00ab&nbsp;comme on automatise tout en Python je peux reprendre un \u00e9l\u00e9ment sans tout refaire&nbsp;\u00bb. Une meilleure image, une autre musique&nbsp;: on d\u00e9pose le fichier, on relance le script concern\u00e9. Il y a un revers. Chaque reconstruction r\u00e9\u00e9crivait des fichiers binaires et faisait gonfler le d\u00e9p\u00f4t, jusqu&rsquo;\u00e0 ce que l&rsquo;agent ne r\u00e9\u00e9crive plus que ce qui a chang\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le soir du deuxi\u00e8me jour, je lui ai envoy\u00e9 une liste de d\u00e9fauts vus au casque, avec une consigne&nbsp;: enqu\u00eater sans toucher au casque. Il a consign\u00e9 cinq sympt\u00f4mes et cinq causes avant de corriger quoi que ce soit. Le plancher dont la texture d\u00e9filait&nbsp;: une texture projet\u00e9e en coordonn\u00e9es du monde, sur un objet qui avance. La voix entendue \u00e0 l&rsquo;entr\u00e9e du lac&nbsp;: de la parole anglaise dans un enregistrement de Freesound, d\u00e9tect\u00e9e par Whisper. Le brouillard \u00ab&nbsp;peu visible&nbsp;\u00bb&nbsp;: \u00e0 154&nbsp;m\u00e8tres, il ne voilait encore que la moiti\u00e9 de l&rsquo;image.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ce qu&rsquo;il a fait pendant que je n&rsquo;\u00e9tais pas l\u00e0<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La nuit du 18 au 19 en donne la mesure. Vers 23&nbsp;h&nbsp;30, je valide l&rsquo;id\u00e9e des arbres peints et je lui laisse huit heures \u00ab&nbsp;pour repenser la sc\u00e8ne compl\u00e8te et ajouter plus de vie et de volumes&nbsp;\u00bb. \u00c0 0&nbsp;h&nbsp;38, il commite une for\u00eat enti\u00e8rement repeupl\u00e9e&nbsp;: un catalogue de familles d&rsquo;images, leur g\u00e9n\u00e9ration en local, leur placement, un seul mat\u00e9riau pour toutes. Suivent des plantes qui luisent la nuit, une lanterne qui tangue, un arbre colossal repeint, et une reconstruction compl\u00e8te du projet v\u00e9rifi\u00e9e vers 1&nbsp;h&nbsp;45. Seul accroc&nbsp;: \u00e0 1&nbsp;h&nbsp;30, l&rsquo;interface du Quest s&rsquo;est mise \u00e0 planter en boucle, et le casque a disparu du c\u00e2ble USB.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pendant les vingt heures du 19 au 20, il a appris \u00e0 piloter Blender sans interface (deux secondes par lancement), retir\u00e9 deux bancs qui flottaient dans la barque, r\u00e9g\u00e9n\u00e9r\u00e9 et r\u00e9import\u00e9 tous les mod\u00e8les 3D, compris pourquoi l&rsquo;eau faisait \u00ab&nbsp;pas fini&nbsp;\u00bb, puis anim\u00e9 le h\u00e9ron du final et lui a donn\u00e9 un cri.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le casque aussi, il le pilote \u00e0 distance. Il installe l&rsquo;application, la lance, capture la vue et mesure la fluidit\u00e9, tout par adb. Le 19 au matin, le Quest pos\u00e9 sur le bureau perdait son suivi de position et affichait une bo\u00eete de dialogue syst\u00e8me qui bloquait l&rsquo;application. Je l&rsquo;ai autoris\u00e9 \u00e0 cliquer \u00ab&nbsp;Continuer sans le suivi&nbsp;\u00bb. L&rsquo;arbre d&rsquo;interface d&rsquo;Android ne permettait pas d&rsquo;atteindre le bouton&nbsp;; il est pass\u00e9 par le clavier, fl\u00e8che bas puis validation, en v\u00e9rifiant chaque pas par une capture. Verdict&nbsp;: sans suivi de position, le Quest refuse d&rsquo;ouvrir une application VR. Le casque a besoin de lumi\u00e8re pour se rep\u00e9rer. Le lendemain, dans la p\u00e9nombre, l&rsquo;agent relan\u00e7ait sa mesure toutes les trente minutes et ne gardait que celles o\u00f9 la carte graphique calculait bien la sc\u00e8ne.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Les MCP, en vrai<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;\u00e9tais parti avec l&rsquo;id\u00e9e que les MCP feraient le gros du travail. Celui d&rsquo;Unreal n&rsquo;exposait d&rsquo;abord que la gestion de ses \u00ab&nbsp;skills&nbsp;\u00bb&nbsp;; il a fallu activer ses jeux d&rsquo;outils (\u00e9diteur, PCG, Niagara, configuration) pour qu&rsquo;il serve \u00e0 quelque chose. Ensuite, il a servi \u00e0 regarder&nbsp;: inspecter la sc\u00e8ne, interroger des objets, capturer la vue de l&rsquo;\u00e9diteur.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour construire, l&rsquo;agent est pass\u00e9 par des scripts Python, ex\u00e9cut\u00e9s dans l&rsquo;\u00e9diteur ouvert ou par Unreal en ligne de commande. ComfyUI, il le pilote par son API, avec des workflows enregistr\u00e9s et des graines fix\u00e9es. Blender, par un script, sans fen\u00eatre. La raison tient dans la deuxi\u00e8me r\u00e8gle&nbsp;: un geste fait par MCP ne se rejoue pas, un script si. Quand tout le projet se reconstruit d&rsquo;une commande, on peut tout casser sans crainte.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mon point de d\u00e9part \u00e9tait donc \u00e0 moiti\u00e9 juste. Les MCP donnent \u00e0 l&rsquo;IA des yeux dans les outils, mais sur six jours, ce sont les scripts qui ont tenu le projet debout.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Le casque, l&rsquo;angle mort de l&rsquo;agent<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;agent voit des images&nbsp;: les captures de revue, les vid\u00e9os rendues sur PC, la vue du casque captur\u00e9e par adb. Il lit des mesures. Ce qui lui \u00e9chappe, c&rsquo;est tout ce qui passe par le corps&nbsp;: le relief que donnent deux yeux, l&rsquo;\u00e9chelle, le mouvement de la t\u00eate, le confort, le son.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-09-sens.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"441\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-09-sens-1024x441.png\" alt=\"\" class=\"wp-image-291\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-09-sens-1024x441.png 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-09-sens-300x129.png 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-09-sens-768x331.png 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-09-sens-1536x662.png 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-09-sens.png 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Ce que l&rsquo;agent pouvait juger seul, et ce qui me revenait.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;\u00e9pisode le plus parlant date du deuxi\u00e8me soir. L&rsquo;agent m&rsquo;annonce 72&nbsp;images par seconde. Le chiffre \u00e9tait juste, mais le casque, pos\u00e9 sur le bureau, regardait le ciel. Droit devant, au niveau de la rivi\u00e8re, on \u00e9tait \u00e0 62. Depuis, il capture la vue du casque avant toute mesure, pour savoir ce qu&rsquo;il mesure.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-10-casque-pose.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-10-casque-pose-1024x1024.jpg\" alt=\"\" class=\"wp-image-292\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-10-casque-pose-1024x1024.jpg 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-10-casque-pose-300x300.jpg 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-10-casque-pose-150x150.jpg 150w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-10-casque-pose-768x768.jpg 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-10-casque-pose.jpg 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Ce que voit le casque pos\u00e9 sur le bureau&nbsp;: l&rsquo;int\u00e9rieur de la barque, de travers. Une mesure de fluidit\u00e9 prise dans ces conditions ne vaut rien.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce que l&rsquo;\u00e9cran cache, le casque le montre tout de suite&nbsp;: des arbres peints qui pivotent avec la t\u00eate, des bandes verticales qui scintillent parce que des plans se croisent diff\u00e9remment pour chaque \u0153il, ou encore le masque qui emp\u00eache l&rsquo;eau d&rsquo;entrer dans la barque, rest\u00e9 \u00e0 la forme de l&rsquo;ancienne coque, une ellipse, alors que la nouvelle est pointue. Aucun de ces d\u00e9fauts ne se voyait sur les captures.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le troupeau, lui, m&rsquo;a g\u00ean\u00e9 pendant deux jours avant que je trouve les mots&nbsp;: \u00ab&nbsp;J&rsquo;ai enfin compris ce qui me choquait&nbsp;: leurs animations sont synchronis\u00e9es.&nbsp;\u00bb Chaque b\u00eate avait bien son propre d\u00e9calage de pas, mais r\u00e9gl\u00e9 par une fonction qui n&rsquo;\u00e9tait pas sauvegard\u00e9e avec le niveau. Au lancement, toutes repartaient de z\u00e9ro, ensemble.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le dernier matin, je n&rsquo;arrivais toujours pas \u00e0 montrer un d\u00e9faut&nbsp;: \u00ab&nbsp;j&rsquo;ai essay\u00e9 de faire des screenshots mais pas tr\u00e8s pratique&nbsp;\u00bb. J&rsquo;ai demand\u00e9 un raccourci sur le bouton A de la manette. L&rsquo;agent a d\u00fb apprendre deux choses en route&nbsp;: la commande de capture du moteur n&rsquo;avait jamais \u00e9t\u00e9 essay\u00e9e sur un Quest (elle marche, et donne l&rsquo;image de l&rsquo;\u0153il gauche en pleine d\u00e9finition), et OpenXR ne remonte une touche que si elle est li\u00e9e \u00e0 une action d\u00e9clar\u00e9e dans la configuration. Chaque capture est dat\u00e9e par l&rsquo;instant de la balade, lu dans le journal de l&rsquo;application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le premier usage a \u00e9t\u00e9 le bon. Mes trois captures pointaient un \u00ab&nbsp;bug de texture&nbsp;\u00bb sur la droite, avant le gu\u00e9. C&rsquo;\u00e9tait une bande de for\u00eat peinte, un plan de 160&nbsp;m\u00e8tres de large vu par la tranche, dont l&rsquo;agent n&rsquo;avait v\u00e9rifi\u00e9 que le centre. Le d\u00e9faut avait d\u00e9j\u00e0 \u00e9t\u00e9 signal\u00e9 et \u00ab&nbsp;corrig\u00e9&nbsp;\u00bb la veille, mais sur un seul des deux anneaux de bandes qui ferment l&rsquo;horizon. Tant qu&rsquo;il raisonnait sur l&rsquo;aspect, l&rsquo;agent a cherch\u00e9 du c\u00f4t\u00e9 du troupeau, du bois mort, d&rsquo;une statue, des feuillages. Il l&rsquo;a trouv\u00e9 en rendant l&rsquo;\u00e9diteur au m\u00eame instant que ma capture et en masquant les objets par moiti\u00e9s&nbsp;: sept rendus. La le\u00e7on est dans son journal&nbsp;: un objet plat se v\u00e9rifie sur toute son \u00e9tendue, et une capture dat\u00e9e vaut mieux qu&rsquo;une description.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-11-bouton-a.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"977\" height=\"1024\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-11-bouton-a-977x1024.jpg\" alt=\"\" class=\"wp-image-293\" style=\"aspect-ratio:10.471841704718416\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-11-bouton-a-977x1024.jpg 977w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-11-bouton-a-286x300.jpg 286w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-11-bouton-a-768x805.jpg 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-11-bouton-a.jpg 1400w\" sizes=\"auto, (max-width: 977px) 100vw, 977px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Une de mes captures au bouton A, \u00e0 1&nbsp;min&nbsp;58&nbsp;: les aplats verts sont une bande de for\u00eat peinte vue par la tranche.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ce qui reste \u00e0 l&rsquo;humain<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le go\u00fbt, d&rsquo;abord. Les deux phrases qui ont le plus chang\u00e9 la d\u00e9mo sont des jugements&nbsp;: \u00ab&nbsp;le truc le plus moche ce sont les arbres&nbsp;\u00bb, et le lendemain soir, \u00ab&nbsp;l&rsquo;eau, c&rsquo;est clairement ce qui fait pas fini&nbsp;\u00bb. Dans les deux cas, l&rsquo;agent a trouv\u00e9 la solution. Il n&rsquo;avait pas d\u00e9sign\u00e9 le probl\u00e8me.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les id\u00e9es de mise en sc\u00e8ne, ensuite. Le pont de statues vient d&rsquo;un souvenir de cin\u00e9ma, la descente en barque du Seigneur des Anneaux entre deux statues g\u00e9antes. Le h\u00e9ron du final vient d&rsquo;une fin que je trouvais \u00ab&nbsp;un peu morne&nbsp;\u00bb, le tangage d&rsquo;une barque \u00ab&nbsp;vraiment trop fixe&nbsp;\u00bb. L&rsquo;agent les a mises en \u0153uvre&nbsp;; aucune de ces trois id\u00e9es ne venait de lui.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Restent le p\u00e9rim\u00e8tre (\u00ab&nbsp;ne fais rien de plus&nbsp;\u00bb, \u00ab&nbsp;tout noter sans corriger&nbsp;\u00bb), les accords pour installer Blender ou t\u00e9l\u00e9charger un mod\u00e8le 3D, et le corps&nbsp;: red\u00e9marrer le casque, red\u00e9marrer l&rsquo;\u00e9diteur pour activer un plugin, poser le Quest \u00e0 la lumi\u00e8re, le mettre sur la t\u00eate.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-12-roles.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"563\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-12-roles-1024x563.png\" alt=\"\" class=\"wp-image-294\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-12-roles-1024x563.png 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-12-roles-300x165.png 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-12-roles-768x422.png 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-12-roles-1536x845.png 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-12-roles.png 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Qui a fait quoi, t\u00e2che par t\u00e2che, d&rsquo;apr\u00e8s le journal et le manifeste des assets.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Images, 3D, son&nbsp;: ce qui marche en octobre 2026<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Les images peintes ont sauv\u00e9 la for\u00eat<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le soir du deuxi\u00e8me jour, apr\u00e8s une journ\u00e9e pass\u00e9e \u00e0 gagner des millisecondes, la for\u00eat restait le point faible&nbsp;: des arbres en 3D aux feuillages en boules textur\u00e9es, qui faisaient jeu des ann\u00e9es 90. L&rsquo;agent a propos\u00e9 trois pistes&nbsp;: des plans peints, des touffes festonn\u00e9es, un autre d\u00e9cor. J&rsquo;ai voulu les voir toutes&nbsp;: \u00ab&nbsp;Tu peux proposer les diff\u00e9rentes id\u00e9es sur les arbres dans le m\u00eame APK&nbsp;?&nbsp;\u00bb Vingt-quatre minutes plus tard, j&rsquo;avais une application o\u00f9 la for\u00eat changeait toutes les douze secondes, avec une lettre \u00e0 la proue&nbsp;: A pour les arbres 3D, B pour des arbres peints, C pour des touffes ombr\u00e9es. M\u00eames positions, m\u00eame fluidit\u00e9.<\/p>\n\n\n\n<div class=\"alignnormal\"><div id=\"metaslider-id-334\" style=\"width: 100%;\" class=\"ml-slider-3-114-0 metaslider metaslider-flex metaslider-334 ml-slider has-dots-nav ms-theme-default-base\" role=\"region\" aria-label=\"Barque13\" data-height=\"300\" data-width=\"700\">\n    <div id=\"metaslider_container_334\">\n        <div id=\"metaslider_334\">\n            <ul aria-live='off' class='slides'>\n                <li style=\"display: block; width: 100%;\" class=\"slide-337 ms-image \" aria-roledescription=\"slide\" data-date=\"2026-10-30 15:04:08\" data-filename=\"barque-13-arbres-abc-1-700x300.jpg\" data-slide-type=\"image\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-13-arbres-abc-1-700x300.jpg\" height=\"300\" width=\"700\" alt=\"\" class=\"slider-334 slide-337 msDefaultImage\" title=\"barque-13-arbres-abc-1\" \/><\/li>\n                <li style=\"display: none; width: 100%;\" class=\"slide-335 ms-image \" aria-roledescription=\"slide\" data-date=\"2026-10-30 15:04:08\" data-filename=\"barque-13-arbres-abc-2-700x300.jpg\" data-slide-type=\"image\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-13-arbres-abc-2-700x300.jpg\" height=\"300\" width=\"700\" alt=\"\" class=\"slider-334 slide-335 msDefaultImage\" title=\"barque-13-arbres-abc-2\" \/><\/li>\n                <li style=\"display: none; width: 100%;\" class=\"slide-336 ms-image \" aria-roledescription=\"slide\" data-date=\"2026-10-30 15:04:08\" data-filename=\"barque-13-arbres-abc-3-700x300.jpg\" data-slide-type=\"image\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-13-arbres-abc-3-700x300.jpg\" height=\"300\" width=\"700\" alt=\"\" class=\"slider-334 slide-336 msDefaultImage\" title=\"barque-13-arbres-abc-3\" \/><\/li>\n            <\/ul>\n        <\/div>\n        \n    <\/div>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><em>L&rsquo;application de comparaison vue au casque&nbsp;: la m\u00eame for\u00eat en arbres 3D (A), en arbres peints (B) et en touffes ombr\u00e9es (C).<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le verdict est tomb\u00e9 \u00e0 23&nbsp;h&nbsp;30&nbsp;: \u00ab&nbsp;les arbres peints \u00e7a rend vachement bien&nbsp;! [\u2026] \u00e7a prend tellement moins de polygones qu&rsquo;il faut creuser en ce sens&nbsp;\u00bb. Un arbre peint, c&rsquo;est une image pos\u00e9e sur un plan de deux triangles&nbsp;; l&rsquo;arbre 3D qu&rsquo;il rempla\u00e7ait en comptait 2&nbsp;700, pour un r\u00e9sultat bien pire. Les d\u00e9cors de dessin anim\u00e9 sont faits comme \u00e7a, et le jeu vid\u00e9o a un nom pour ce proc\u00e9d\u00e9&nbsp;: le billboard, ou imposteur.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cette nuit-l\u00e0, l&rsquo;agent a construit un syst\u00e8me complet&nbsp;: un catalogue de familles d&rsquo;images, leur g\u00e9n\u00e9ration et leur d\u00e9tourage en local, leur placement par script, un mat\u00e9riau unique. La d\u00e9mo compte aujourd&rsquo;hui 114&nbsp;images peintes. Elles sont pos\u00e9es 7&nbsp;837 fois dans le d\u00e9cor, et 749 fois en mouvement&nbsp;: oiseaux, papillons, libellules, feuilles et p\u00e9tales qui tombent. La for\u00eat 3D a disparu, et c&rsquo;est ce qui paie le reste&nbsp;: sur une sc\u00e8ne bien plus dense, la d\u00e9mo tenait toujours 72&nbsp;images par seconde.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-14-images-peintes.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"348\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-14-images-peintes-1024x348.jpg\" alt=\"\" class=\"wp-image-295\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-14-images-peintes-1024x348.jpg 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-14-images-peintes-300x102.jpg 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-14-images-peintes-768x261.jpg 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-14-images-peintes-1536x522.jpg 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-14-images-peintes.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Seize des 114&nbsp;images peintes, g\u00e9n\u00e9r\u00e9es en local et d\u00e9tour\u00e9es.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La cha\u00eene tient en quatre \u00e9tapes. Z-Image Turbo, un mod\u00e8le d&rsquo;image qui tourne sur la carte graphique du PC, peint un sujet seul, sur fond gris uni, \u00e9clair\u00e9 par la gauche. BiRefNet le d\u00e9toure. Un script nettoie le r\u00e9sultat, puis l&rsquo;agent pose l&rsquo;image dans la sc\u00e8ne. Les rat\u00e9s ont \u00e9t\u00e9 nombreux&nbsp;: des restes de fond autour des feuillages, des nuages qui s&rsquo;invitaient dans les images, une plaque d&rsquo;herbe peinte sous chaque tronc, des textures import\u00e9es en 32 pixels par Unreal, une for\u00eat o\u00f9 le m\u00eame arbre revenait sans cesse (\u00ab&nbsp;la texture des arbres sur la gauche se r\u00e9p\u00e9tait beaucoup trop souvent&nbsp;\u00bb), et la moiti\u00e9 des arbres \u00e9clair\u00e9s du mauvais c\u00f4t\u00e9 le jour o\u00f9 l&rsquo;agent en a retourn\u00e9 une sur deux pour casser la r\u00e9p\u00e9tition.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-15-chaine-images.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"366\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-15-chaine-images-1024x366.jpg\" alt=\"\" class=\"wp-image-296\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-15-chaine-images-1024x366.jpg 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-15-chaine-images-300x107.jpg 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-15-chaine-images-768x274.jpg 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-15-chaine-images-1536x549.jpg 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-15-chaine-images.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>D&rsquo;une image g\u00e9n\u00e9r\u00e9e \u00e0 la for\u00eat du casque&nbsp;: l&rsquo;image brute, le masque, l&rsquo;image nettoy\u00e9e, puis la sc\u00e8ne.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ce que j&rsquo;apporte encore<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Les images de r\u00e9f\u00e9rence viennent de moi, sur Midjourney&nbsp;: des ambiances pour plusieurs moments, la barque, le ponton, la lanterne, les cr\u00e9atures, des textures, deux ciels. L&rsquo;agent \u00e9crit les prompts dans un fichier d\u00e9di\u00e9, avec une consigne&nbsp;: jamais de nom de studio ni d&rsquo;artiste. Ma texture de mousse a servi de mod\u00e8le pour repeindre les autres textures en local, avec Qwen-Image-Edit. Elles restent moins belles que l&rsquo;originale.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-16-reference-resultat.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"691\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-16-reference-resultat-1024x691.jpg\" alt=\"\" class=\"wp-image-297\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-16-reference-resultat-1024x691.jpg 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-16-reference-resultat-300x202.jpg 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-16-reference-resultat-768x518.jpg 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-16-reference-resultat-1536x1036.jpg 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-16-reference-resultat.jpg 1672w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Mes images de r\u00e9f\u00e9rence, \u00e0 gauche, et les m\u00eames lieux dans la d\u00e9mo, \u00e0 droite (rendu PC).<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un mot sur le style. Le projet le d\u00e9crit comme \u00ab&nbsp;inspir\u00e9 de l&rsquo;animation japonaise des ann\u00e9es 80-90&nbsp;\u00bb, sans plus. Aucun prompt ne nomme de studio ni d&rsquo;artiste, et les cr\u00e9atures sont des designs originaux. Le premier soir, l&rsquo;agent a quand m\u00eame consign\u00e9 une alerte&nbsp;: un concept provisoire montrait des cr\u00e9atures trop proches de celles d&rsquo;un film d&rsquo;animation connu. Il n&rsquo;a servi qu&rsquo;\u00e0 extraire une palette de couleurs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">De l&rsquo;image \u00e0 la 3D<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pour les objets principaux, l&rsquo;agent reconstruit un mod\u00e8le 3D \u00e0 partir d&rsquo;une seule image, en local. Le premier jour, il a compar\u00e9 deux mod\u00e8les, TRELLIS.2 et Pixal3D, sur sept de mes images. Chacun gagne sur des objets diff\u00e9rents&nbsp;: TRELLIS.2 sur la lanterne, le ponton, le troupeau et la cr\u00e9ature volante, Pixal3D sur la b\u00eate des abysses. On a gard\u00e9 les deux. Les silhouettes sont justes&nbsp;; le d\u00e9tail est liss\u00e9, et l&rsquo;arri\u00e8re de l&rsquo;objet, que l&rsquo;image ne montre pas, est devin\u00e9.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-17-barque-3d.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"365\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-17-barque-3d-1024x365.jpg\" alt=\"\" class=\"wp-image-298\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-17-barque-3d-1024x365.jpg 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-17-barque-3d-300x107.jpg 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-17-barque-3d-768x274.jpg 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-17-barque-3d.jpg 1536w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>La barque&nbsp;: mon image de d\u00e9part, puis deux reconstructions 3D faites en local, Pixal3D et TRELLIS.2, chacune sous quatre angles.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le pont est l&rsquo;histoire la plus compl\u00e8te du projet. Le deuxi\u00e8me soir, je lance une id\u00e9e en passant&nbsp;: \u00ab&nbsp;la fameuse descente en barque du Seigneur des Anneaux quand ils passent entre les deux statues g\u00e9antes, mais \u00e7a ferait changer beaucoup d&rsquo;ambiance, \u00e0 d\u00e9battre ensemble&nbsp;\u00bb. Le lendemain, l&rsquo;agent revient avec trois concepts aux designs originaux, g\u00e9n\u00e9r\u00e9s en local&nbsp;: deux gardiens moussus, une t\u00eate couch\u00e9e dans la rivi\u00e8re, une arche faite de deux figures agenouill\u00e9es. J&rsquo;ai ador\u00e9 le pont. La t\u00eate \u00e9tait \u00ab&nbsp;trop belle&nbsp;\u00bb pour ne pas finir sur une berge.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-18-statues.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"250\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-18-statues-1024x250.jpg\" alt=\"\" class=\"wp-image-299\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-18-statues-1024x250.jpg 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-18-statues-300x73.jpg 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-18-statues-768x187.jpg 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-18-statues-1536x375.jpg 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-18-statues.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Les trois concepts propos\u00e9s par l&rsquo;agent \u00e0 partir de mon id\u00e9e.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;ai fait l&rsquo;image du pont sur Midjourney, en pierre nue&nbsp;: pass\u00e9e en 3D, la mousse se transforme en blocs. L&rsquo;id\u00e9e \u00e9tait d&rsquo;obtenir un objet sans v\u00e9g\u00e9tation, \u00e0 habiller ensuite. L&rsquo;agent l&rsquo;a reconstruit avec TRELLIS.2, a calcul\u00e9 la mousse dans le mat\u00e9riau, sur les faces tourn\u00e9es vers le haut, et l&rsquo;a pos\u00e9 sur la rivi\u00e8re. Au casque, le soir m\u00eame&nbsp;: \u00ab&nbsp;waouh&nbsp;\u00bb.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-19-chaine-3d.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"193\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-19-chaine-3d-1024x193.jpg\" alt=\"\" class=\"wp-image-300\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-19-chaine-3d-1024x193.jpg 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-19-chaine-3d-300x56.jpg 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-19-chaine-3d-768x144.jpg 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-19-chaine-3d-1536x289.jpg 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-19-chaine-3d.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Le pont, de mon image Midjourney au casque.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Deux questions m&rsquo;ont occup\u00e9 entre-temps&nbsp;: \u00ab&nbsp;Quel \u00e9l\u00e9ment de la cha\u00eene fixe le nombre de polygones&nbsp;?&nbsp;\u00bb, puis \u00ab&nbsp;est-ce le Quest qui impose la limite, ou nous qui nous mettons des limites absurdes&nbsp;?&nbsp;\u00bb. R\u00e9ponse&nbsp;: un peu des deux. Meta recommande de rester sous 1,5 million de triangles par image sur le Quest 3, et nos 500&nbsp;000 \u00e9taient prudents. Mais le d\u00e9tail se perdait avant le casque&nbsp;: le workflow d&rsquo;exemple de ComfyUI remaillait la forme sortie de TRELLIS \u00e0 une r\u00e9solution de 768, avec vingt passes de lissage. \u00c0 1&nbsp;536 et cinq passes, le pont gagne nettement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Puis une de mes remarques a d\u00e9busqu\u00e9 deux bugs&nbsp;: \u00ab&nbsp;Ta vue 3D sur fond gris est tr\u00e8s belle, c&rsquo;est pas du tout ce que je vois dans le jeu.&nbsp;\u00bb L&rsquo;agent a mont\u00e9 une planche de comparaison, la vue tournante du mod\u00e8le \u00e0 c\u00f4t\u00e9 de trois vues depuis la barque, et trouv\u00e9 deux d\u00e9fauts d&rsquo;import pr\u00e9sents depuis le d\u00e9but. Nanite, la g\u00e9om\u00e9trie virtualis\u00e9e d&rsquo;Unreal, activ\u00e9e par d\u00e9faut, faisait afficher au Quest un maillage de secours dix fois plus pauvre. Et les r\u00e9imports gardaient l&rsquo;ancienne texture&nbsp;: mon pont portait celle de son substitut gris, la nouvelle barque celle de l&rsquo;ancienne. L&rsquo;agent venait de projeter mon image sur la face avant du pont pour rattraper le d\u00e9tail. Son journal le r\u00e9sume&nbsp;: \u00ab&nbsp;La projection, astucieuse, compensait un bug qu&rsquo;on n&rsquo;avait pas vu.&nbsp;\u00bb<\/p>\n\n\n\n<div class=\"alignnormal\"><div id=\"metaslider-id-326\" style=\"width: 100%;\" class=\"ml-slider-3-114-0 metaslider metaslider-flex metaslider-326 ml-slider has-dots-nav ms-theme-default-base\" role=\"region\" aria-label=\"Barque20\" data-height=\"300\" data-width=\"700\">\n    <div id=\"metaslider_container_326\">\n        <div id=\"metaslider_326\">\n            <ul aria-live='off' class='slides'>\n                <li style=\"display: block; width: 100%;\" class=\"slide-332 ms-image \" aria-roledescription=\"slide\" data-date=\"2026-10-30 15:01:50\" data-filename=\"barque-20-pont-versions-1-700x300.jpg\" data-slide-type=\"image\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-20-pont-versions-1-700x300.jpg\" height=\"300\" width=\"700\" alt=\"\" class=\"slider-326 slide-332 msDefaultImage\" title=\"barque-20-pont-versions-1\" \/><\/li>\n                <li style=\"display: none; width: 100%;\" class=\"slide-333 ms-image \" aria-roledescription=\"slide\" data-date=\"2026-10-30 15:01:51\" data-filename=\"barque-20-pont-versions-2-700x300.jpg\" data-slide-type=\"image\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-20-pont-versions-2-700x300.jpg\" height=\"300\" width=\"700\" alt=\"\" class=\"slider-326 slide-333 msDefaultImage\" title=\"barque-20-pont-versions-2\" \/><\/li>\n                <li style=\"display: none; width: 100%;\" class=\"slide-330 ms-image \" aria-roledescription=\"slide\" data-date=\"2026-10-30 15:01:50\" data-filename=\"barque-20-pont-versions-3-700x300.jpg\" data-slide-type=\"image\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-20-pont-versions-3-700x300.jpg\" height=\"300\" width=\"700\" alt=\"\" class=\"slider-326 slide-330 msDefaultImage\" title=\"barque-20-pont-versions-3\" \/><\/li>\n                <li style=\"display: none; width: 100%;\" class=\"slide-331 ms-image \" aria-roledescription=\"slide\" data-date=\"2026-10-30 15:01:50\" data-filename=\"barque-20-pont-versions-4-700x300.jpg\" data-slide-type=\"image\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-20-pont-versions-4-700x300.jpg\" height=\"300\" width=\"700\" alt=\"\" class=\"slider-326 slide-331 msDefaultImage\" title=\"barque-20-pont-versions-4\" \/><\/li>\n                <li style=\"display: none; width: 100%;\" class=\"slide-328 ms-image \" aria-roledescription=\"slide\" data-date=\"2026-10-30 15:01:50\" data-filename=\"barque-20-pont-versions-5-700x300.jpg\" data-slide-type=\"image\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-20-pont-versions-5-700x300.jpg\" height=\"300\" width=\"700\" alt=\"\" class=\"slider-326 slide-328 msDefaultImage\" title=\"barque-20-pont-versions-5\" \/><\/li>\n                <li style=\"display: none; width: 100%;\" class=\"slide-329 ms-image \" aria-roledescription=\"slide\" data-date=\"2026-10-30 15:01:50\" data-filename=\"barque-20-pont-versions-6-700x300.jpg\" data-slide-type=\"image\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-20-pont-versions-6-700x300.jpg\" height=\"300\" width=\"700\" alt=\"\" class=\"slider-326 slide-329 msDefaultImage\" title=\"barque-20-pont-versions-6\" \/><\/li>\n                <li style=\"display: none; width: 100%;\" class=\"slide-327 ms-image \" aria-roledescription=\"slide\" data-date=\"2026-10-30 15:01:50\" data-filename=\"barque-20-pont-versions-7-700x300.jpg\" data-slide-type=\"image\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-20-pont-versions-7-700x300.jpg\" height=\"300\" width=\"700\" alt=\"\" class=\"slider-326 slide-327 msDefaultImage\" title=\"barque-20-pont-versions-7\" \/><\/li>\n            <\/ul>\n        <\/div>\n        \n    <\/div>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Le pont et son passage en sept versions, au m\u00eame instant de la balade (1&nbsp;min&nbsp;52).<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dernier essai, Hunyuan3D 2.1, t\u00e9l\u00e9charg\u00e9 avec mon accord&nbsp;: une g\u00e9om\u00e9trie plus sculpt\u00e9e, mais sans texture. On est rest\u00e9 sur TRELLIS.2. Les reconstructions prenaient 27&nbsp;minutes, jusqu&rsquo;\u00e0 ce qu&rsquo;on comprenne que la m\u00e9moire de la carte graphique \u00e9tait partag\u00e9e avec l&rsquo;\u00e9diteur d&rsquo;Unreal&nbsp;; avec un n\u0153ud de nettoyage de la m\u00e9moire branch\u00e9 dans ComfyUI, on est tomb\u00e9 \u00e0 trois minutes par mod\u00e8le.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">La musique vient de Suno<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;\u00e9chec d&rsquo;ACE-Step ne s&rsquo;est pas arr\u00eat\u00e9 aux trente brouillons. Apr\u00e8s un prompt r\u00e9\u00e9crit, la m\u00e9lodie \u00e9tait meilleure, mais \u00ab&nbsp;\u00e7a fait son midi, \u00e7a sature dans les aigus&nbsp;\u00bb. L&rsquo;agent l&rsquo;a confirm\u00e9 par la mesure&nbsp;: un son deux fois plus brillant que celui d&rsquo;un morceau de Suno (le centro\u00efde spectral, le centre de gravit\u00e9 du spectre), et une st\u00e9r\u00e9o d\u00e9phas\u00e9e. \u00c0 14&nbsp;h&nbsp;45 le premier jour, on a tranch\u00e9&nbsp;: la musique viendrait de Suno, g\u00e9n\u00e9r\u00e9e par moi sur un prompt \u00e9crit par l&rsquo;agent. \u00c0 15&nbsp;h, \u00ab&nbsp;Luminous Wonder&nbsp;\u00bb \u00e9tait dans le d\u00e9p\u00f4t.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suno fournit aussi les pistes s\u00e9par\u00e9es d&rsquo;un morceau, les stems. J&rsquo;ai d\u00e9pos\u00e9 les dix, et l&rsquo;agent les a plac\u00e9es autour de la barque, en douze sources sonores&nbsp;: le clavier devant \u00e0 droite, \u00e0 hauteur de la proue, les basses sous la barque, l\u00e0 o\u00f9 passera la b\u00eate, les cordes en nappe derri\u00e8re, les cuivres \u00e0 douze m\u00e8tres devant. Dans le casque, la musique vient de quelque part.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-21-son.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"724\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-21-son-1024x724.png\" alt=\"\" class=\"wp-image-301\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-21-son-1024x724.png 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-21-son-300x212.png 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-21-son-768x543.png 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-21-son-1536x1086.png 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-21-son.png 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Les pistes de la musique, plac\u00e9es autour du spectateur assis.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Les sons, choisis sans oreilles<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;agent ne peut rien \u00e9couter. Il a pourtant choisi les dix-sept sons de la d\u00e9mo dans la banque Freesound, uniquement parmi ceux qui sont dans le domaine public. Pour compenser, il mesure. Whisper, un mod\u00e8le de transcription, lui dit s&rsquo;il y a de la parole&nbsp;: c&rsquo;est comme \u00e7a qu&rsquo;il a trouv\u00e9 la voix anglaise que j&rsquo;avais entendue \u00e0 l&rsquo;entr\u00e9e du lac, au d\u00e9but d&rsquo;un enregistrement d&rsquo;ambiance. Le niveau sonore et la part de basses fr\u00e9quences lui signalent la circulation ou le vent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le 19 au soir, je lui signale qu&rsquo;\u00e0 la fin, \u00ab&nbsp;on croit entendre une voiture qui d\u00e9marre&nbsp;\u00bb. Il d\u00e9coupe l&rsquo;ambiance du lac en demi-secondes, mesure la part de graves de chacune, et trouve un grondement 33&nbsp;secondes apr\u00e8s le d\u00e9but du passage jou\u00e9. L&rsquo;ambiance s&rsquo;arr\u00eate maintenant deux secondes avant.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-22-lac.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"583\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-22-lac-1024x583.jpg\" alt=\"\" class=\"wp-image-302\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-22-lac-1024x583.jpg 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-22-lac-300x171.jpg 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-22-lac-768x437.jpg 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-22-lac-1536x874.jpg 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-22-lac.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>L&rsquo;ambiance du lac lue sans l&rsquo;\u00e9couter&nbsp;: la voix du d\u00e9but, le passage gard\u00e9, puis le grondement.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">M\u00eame m\u00e9thode pour le h\u00e9ron, dont le cri pr\u00e9c\u00e8de l&rsquo;arriv\u00e9e de deux secondes et demie et vient de sa direction&nbsp;: l&rsquo;agent a v\u00e9rifi\u00e9 l&rsquo;enveloppe et le spectre des enregistrements, et m&rsquo;a laiss\u00e9, je cite, \u00ab&nbsp;la validation \u00e0 l&rsquo;oreille&nbsp;\u00bb.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-23-heron.mp4\"><\/video><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Le h\u00e9ron du final, pr\u00e9c\u00e9d\u00e9 de son cri. Dans le casque, le son vient de sa direction&nbsp;; dans cette vid\u00e9o, il est centr\u00e9.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Le bilan, outil par outil<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Ce qu&rsquo;on a demand\u00e9<\/th><th class=\"has-text-align-left\" data-align=\"left\">Outil<\/th><th class=\"has-text-align-left\" data-align=\"left\">O\u00f9<\/th><th class=\"has-text-align-left\" data-align=\"left\">Verdict<\/th><\/tr><\/thead><tbody><tr><td>D\u00e9cors peints<\/td><td>Z-Image Turbo, BiRefNet<\/td><td>en local<\/td><td>excellent, c&rsquo;est ce qui a sauv\u00e9 la for\u00eat<\/td><\/tr><tr><td>Images de r\u00e9f\u00e9rence<\/td><td>Midjourney<\/td><td>mon abonnement<\/td><td>excellent<\/td><\/tr><tr><td>Textures repeintes, vues manquantes<\/td><td>Qwen-Image-Edit<\/td><td>en local<\/td><td>correct, moins beau que Midjourney<\/td><\/tr><tr><td>3D depuis une image<\/td><td>TRELLIS.2, Pixal3D<\/td><td>en local<\/td><td>bonnes silhouettes, d\u00e9tail liss\u00e9<\/td><\/tr><tr><td>3D, autre essai<\/td><td>Hunyuan3D 2.1<\/td><td>en local<\/td><td>plus sculpt\u00e9, sans texture&nbsp;: \u00e9cart\u00e9<\/td><\/tr><tr><td>Musique<\/td><td>ACE-Step<\/td><td>en local<\/td><td>d\u00e9cevant<\/td><\/tr><tr><td>Musique<\/td><td>Suno<\/td><td>mon abonnement<\/td><td>excellent, pistes s\u00e9par\u00e9es comprises<\/td><\/tr><tr><td>Sons<\/td><td>Freesound, Whisper<\/td><td>en ligne (gratuit), en local<\/td><td>bon, par la mesure&nbsp;; rien de g\u00e9n\u00e9r\u00e9<\/td><\/tr><tr><td>Relief tir\u00e9 des images<\/td><td>Depth Anything<\/td><td>en local<\/td><td>ne tournait pas, et pas fait pour des images \u00ab&nbsp;cartoonis\u00e9es&nbsp;\u00bb<\/td><\/tr><tr><td>Simulation d&rsquo;eau<\/td><td>Niagara Fluids<\/td><td>dans Unreal<\/td><td>\u00ab&nbsp;c&rsquo;est tr\u00e8s moche&nbsp;\u00bb<\/td><\/tr><tr><td>Code, sc\u00e8ne, compilation, mesures<\/td><td>Claude Code, Claude Opus 5.5<\/td><td>en ligne<\/td><td>a tout fait tourner<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Unreal Engine vu par un joueur<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Unreal Engine, je le connaissais par les jeux qui l&rsquo;utilisent. Ce chapitre suit les questions que j&rsquo;ai pos\u00e9es \u00e0 l&rsquo;agent pendant ces six jours, et ce que chacune m&rsquo;a appris.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00ab&nbsp;\u00c7a devait pas \u00eatre un filtre de rendu UE&nbsp;?&nbsp;\u00bb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le deuxi\u00e8me matin, j&rsquo;ai regard\u00e9 les captures et \u00e9crit&nbsp;: \u00ab&nbsp;Sur tes screenshots je ne vois pas le rendu dessin anim\u00e9. \u00c7a devait pas \u00eatre un filtre de rendu UE&nbsp;?&nbsp;\u00bb Dans ma t\u00eate de joueur, un style graphique, c&rsquo;est un filtre pos\u00e9 sur l&rsquo;image. Sur un Quest, c&rsquo;est impossible&nbsp;: le rendu mobile du casque n&rsquo;a pas le HDR dont le post-traitement a besoin. Le look peint est donc pass\u00e9 dans les mat\u00e9riaux. Un mat\u00e9riau maison, qui ne d\u00e9pend pas de l&rsquo;\u00e9clairage du moteur, ombre chaque objet en deux tons, avec un bord peint, un liser\u00e9 de contre-jour et une lumi\u00e8re propre \u00e0 chaque moment de la balade.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur PC, pour les vid\u00e9os de contr\u00f4le, l&rsquo;agent avait gard\u00e9 un filtre de peinture. Je lui ai demand\u00e9 de l&rsquo;enlever, \u00ab&nbsp;vu qu&rsquo;on l&rsquo;a pas dans le Quest&nbsp;\u00bb&nbsp;: une vid\u00e9o plus jolie que le casque ne m&rsquo;aide pas \u00e0 juger.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-24-filtre-pc.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"342\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-24-filtre-pc-1024x342.jpg\" alt=\"\" class=\"wp-image-305\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-24-filtre-pc-1024x342.jpg 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-24-filtre-pc-300x100.jpg 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-24-filtre-pc-768x257.jpg 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-24-filtre-pc-1536x514.jpg 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-24-filtre-pc.jpg 1992w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Le m\u00eame instant en rendu PC, avec le filtre de peinture et sans. Le Quest ne sait pas appliquer ce filtre.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est devenu un fil rouge&nbsp;: l&rsquo;\u00e9diteur d&rsquo;Unreal affiche une image correcte, et le casque en montre une autre. Le brouillard n&rsquo;a pas \u00e9t\u00e9 rendu au casque avant le deuxi\u00e8me apr\u00e8s-midi, parce que sa passe exige elle aussi le HDR mobile. Les shaders calcul\u00e9s en 16 bits pixellisaient le ciel. Un mat\u00e9riau qui ne d\u00e9clare pas qu&rsquo;il sert \u00e0 des objets instanci\u00e9s s&rsquo;affiche en gris. Et le profil Quest 3 d&rsquo;Unreal h\u00e9rite d&rsquo;un profil Android moyen, qui affiche toutes les textures un niveau en dessous et coupe le filtrage anisotrope&nbsp;; l&rsquo;agent l&rsquo;a d\u00e9couvert dans le journal du casque, le 21.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00ab&nbsp;C&rsquo;est vraiment une limite du casque&nbsp;?&nbsp;\u00bb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le m\u00eame jour, au casque, j&rsquo;\u00e9tais \u00ab&nbsp;surpris par le manque de polygones [\u2026] c&rsquo;est vraiment une limite du casque&nbsp;?&nbsp;\u00bb. J&rsquo;ai demand\u00e9 une version bien plus d\u00e9taill\u00e9e, quitte \u00e0 tomber \u00e0 25&nbsp;images par seconde, pour comparer. L&rsquo;agent l&rsquo;a install\u00e9e \u00e0 c\u00f4t\u00e9 de l&rsquo;autre&nbsp;: elle tournait entre 44 et 50.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour savoir o\u00f9 partait le temps de calcul, il a mesur\u00e9 en direct. Pendant que la d\u00e9mo tourne dans le casque, il envoie une commande \u00e0 la console du jeu par adb, et compare le temps de calcul d&rsquo;une image avant et apr\u00e8s. Pour tenir 72&nbsp;images par seconde, chaque image doit \u00eatre calcul\u00e9e en moins de 13,9&nbsp;millisecondes. Cacher les maillages du d\u00e9cor faisait gagner 8&nbsp;millisecondes&nbsp;; baisser la r\u00e9solution \u00e0 60&nbsp;%, un tiers de milliseconde. La sc\u00e8ne \u00e9tait limit\u00e9e par la g\u00e9om\u00e9trie. Baisser la r\u00e9solution, le premier r\u00e9flexe d&rsquo;un joueur sur PC, ne servait \u00e0 rien.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-25-leviers.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"520\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-25-leviers-1024x520.png\" alt=\"\" class=\"wp-image-306\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-25-leviers-1024x520.png 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-25-leviers-300x152.png 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-25-leviers-768x390.png 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-25-leviers-1536x780.png 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-25-leviers.png 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Ce que chaque r\u00e9glage faisait gagner par image, mesur\u00e9 au casque le 18\/10.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les mesures ont tranch\u00e9 \u00e0 ma place. Couper l&rsquo;anticr\u00e9nelage faisait gagner 3&nbsp;millisecondes, mais les bords scintillaient&nbsp;: on l&rsquo;a gard\u00e9 \u00e0 2\u00d7. Les ombres du soleil co\u00fbtaient 1,4 milliseconde pour un d\u00e9cor qui ne d\u00e9pend pas de l&rsquo;\u00e9clairage du moteur&nbsp;: coup\u00e9es. Un pr\u00e9passage de profondeur faisait tomber la d\u00e9mo \u00e0 27&nbsp;images par seconde&nbsp;: \u00e9cart\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les niveaux de d\u00e9tail, ensuite. Quand j&rsquo;ai demand\u00e9 si Unreal savait faire \u00ab&nbsp;une version adaptative&nbsp;\u00bb, la r\u00e9ponse \u00e9tait oui, sans Nanite, que le Quest ne g\u00e8re pas&nbsp;: l&rsquo;arche a re\u00e7u trois versions de 300&nbsp;000, 100&nbsp;000 et 30&nbsp;000&nbsp;triangles, choisies selon la distance. Une r\u00e9gression de fluidit\u00e9, plus tard, m&rsquo;a appris quelque chose sur la VR elle-m\u00eame&nbsp;: le pont restait dans sa version la plus fine bien trop loin, parce qu&rsquo;en VR un objet de 42&nbsp;m\u00e8tres para\u00eet \u00ab&nbsp;grand \u00e0 l&rsquo;\u00e9cran&nbsp;\u00bb beaucoup plus longtemps qu&rsquo;on ne croit.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00ab&nbsp;C&rsquo;est trop bizarre&nbsp;\u00bb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le matin du troisi\u00e8me jour, apr\u00e8s la premi\u00e8re nuit en images peintes, j&rsquo;ai \u00e9crit&nbsp;: \u00ab&nbsp;c&rsquo;est tr\u00e8s fourni et je confirme que les sprites c&rsquo;est la bonne id\u00e9e \u00e0 creuser&nbsp;\u00bb, et \u00ab&nbsp;les oiseaux et les feuilles qui tombent trop bien&nbsp;!&nbsp;\u00bb. Puis&nbsp;: \u00ab&nbsp;les sprites qui bougent\/tournent quand on bouge ou tourne la t\u00eate, c&rsquo;est trop bizarre. Il faut que les sprites soient fixes.&nbsp;\u00bb Selon l&rsquo;orientation de ma t\u00eate, des arbres se rentraient dedans ou non.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-26-plans.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-26-plans-1024x576.png\" alt=\"\" class=\"wp-image-307\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-26-plans-1024x576.png 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-26-plans-300x169.png 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-26-plans-768x432.png 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-26-plans-1536x864.png 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-26-plans.png 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Trois fa\u00e7ons d&rsquo;orienter les arbres peints, vues de dessus, et pourquoi seule la troisi\u00e8me tient en VR.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le sch\u00e9ma r\u00e9sume trois versions successives. Au d\u00e9part, chaque plan se tournait vers l&rsquo;\u0153il. Chaque \u0153il ayant sa position, un m\u00eame plan avait deux orientations, et deux arbres voisins se croisaient pour un \u0153il et pas pour l&rsquo;autre&nbsp;: d&rsquo;o\u00f9 les bandes verticales. L&rsquo;agent a ensuite rendu tous les plans parall\u00e8les \u00e0 la vue. Plus de croisement, mais les arbres pivotaient quand je tournais la t\u00eate. La version finale oriente chaque plan une fois pour toutes, au placement, vers le point de la rivi\u00e8re d&rsquo;o\u00f9 on le voit \u00e0 45\u00b0 devant. Deux voisins visent presque le m\u00eame point&nbsp;: leurs plans restent presque parall\u00e8les, et rien ne bouge plus avec la t\u00eate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Chaque correction en a amen\u00e9 une autre. Une touffe vue par la tranche devenait un grand aplat&nbsp;: un fondu selon l&rsquo;angle de vue l&rsquo;efface. Ce fondu effa\u00e7ait aussi les n\u00e9nuphars, toujours vus en rasant depuis la barque&nbsp;: ils en sont exclus. Immobiles, les arbres \u00e9taient devenus fig\u00e9s&nbsp;: un balancement lent, calcul\u00e9 dans le shader, leur rend du vent, le pied fixe et la cime qui bouge. Ce vent est rest\u00e9 invisible un moment, \u00e0 cause d&rsquo;une erreur d&rsquo;unit\u00e9&nbsp;: cinq millim\u00e8tres de balancement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il fallait aussi du relief, parce qu&rsquo;une image plate reste plate pour deux yeux. Depth Anything, un mod\u00e8le qui estime la profondeur d&rsquo;une image, refusait de tourner dans ComfyUI, et je lui ai confirm\u00e9 que \u00e7a ne marcherait pas&nbsp;: \u00ab&nbsp;tes images sont cartoonis\u00e9es et le moteur ne sait pas traiter ce genre de choses&nbsp;\u00bb. L&rsquo;agent a tir\u00e9 le relief de la silhouette peinte&nbsp;: chaque image se bombe en d\u00f4me, plus \u00e9paisse au centre qu&rsquo;aux bords.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00ab&nbsp;L&rsquo;eau reste une surface plane&nbsp;\u00bb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;eau a \u00e9t\u00e9 le chantier le plus long. Premier obstacle&nbsp;: sur le Quest, le mat\u00e9riau de l&rsquo;eau ne peut pas lire la profondeur de ce qu&rsquo;il y a dessous. Les pieux du ponton se voyaient nettement \u00e0 travers l&rsquo;eau&nbsp;; j&rsquo;avais trouv\u00e9 le ponton \u00ab&nbsp;superbe&nbsp;\u00bb, mais ce d\u00e9faut-l\u00e0, \u00ab&nbsp;\u00e7a m\u00e9rite une vraie recherche sur Internet&nbsp;\u00bb. L&rsquo;agent a retourn\u00e9 le probl\u00e8me&nbsp;: ce sont les objets immerg\u00e9s qui s&rsquo;\u00e9teignent, selon la longueur de leur trajet sous l&rsquo;eau.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Deuxi\u00e8me obstacle, plus sournois. Les rides de l&rsquo;eau \u00e9taient des traits allong\u00e9s, orient\u00e9s en travers de la rivi\u00e8re. Vers l&rsquo;aval, \u00e7a donnait une eau peinte. Mais d\u00e8s qu&rsquo;on tournait la t\u00eate, la perspective les changeait en rayons qui convergent&nbsp;: l&rsquo;effet \u00ab&nbsp;pluie&nbsp;\u00bb des captures du casque, et une bonne part de ce qui faisait \u00ab&nbsp;pas fini&nbsp;\u00bb. L&rsquo;agent les a remplac\u00e9es par un r\u00e9seau de cr\u00eates sans direction, que la perspective \u00e9crase en traits horizontaux, o\u00f9 que l&rsquo;on regarde. Le sillage, qui partait de la poupe et ne se voyait pas, na\u00eet maintenant \u00e0 l&rsquo;\u00e9trave, comme celui d&rsquo;un vrai bateau, et longe les flancs, sous les yeux du passager assis \u00e0 l&rsquo;arri\u00e8re.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-27-eau.mp4\"><\/video><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Le m\u00eame instant, avant et apr\u00e8s la nuit du 19 au 20\/10&nbsp;: les rides orient\u00e9es \u00e0 gauche, les cr\u00eates sans direction \u00e0 droite.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Puis j&rsquo;ai \u00e9crit&nbsp;: \u00ab&nbsp;Ton souci c&rsquo;est que l&rsquo;eau reste une surface plane&nbsp;\u00bb. Un article d&rsquo;Epic sur l&rsquo;eau de Still Wakes the Deep, un jeu o\u00f9 elle est simul\u00e9e, a servi de piste. La version Quest est plus modeste&nbsp;: une hauteur d&rsquo;eau calcul\u00e9e pour la houle et le sillage, une grille fine qui se d\u00e9forme autour de la barque, des reflets sur la pente des vagues, des n\u00e9nuphars qui flottent. La simulation compl\u00e8te, Niagara Fluids, a \u00e9t\u00e9 essay\u00e9e au casque le 20 au soir. Mon verdict&nbsp;: \u00ab&nbsp;c&rsquo;est tr\u00e8s moche&nbsp;\u00bb. Elle est rest\u00e9e de c\u00f4t\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;\u00e9cume, enfin, restait invisible, pour trois raisons empil\u00e9es&nbsp;: depuis la place assise, le plat-bord cache toute l&rsquo;eau \u00e0 moins de 1,10&nbsp;m de l&rsquo;axe de la barque&nbsp;; une fonction de transition \u00e9crite \u00e0 l&rsquo;envers valait z\u00e9ro \u00e0 la compilation, et effa\u00e7ait au passage une partie des ailes du h\u00e9ron&nbsp;; le motif de d\u00e9coupe \u00e9tait fait de lignes trop fines. Refaite, elle sautait par taches. Elle a fini par dispara\u00eetre&nbsp;: l&rsquo;eau ondul\u00e9e suffisait.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00ab&nbsp;Je n&rsquo;ai pas vu de fort tangage&nbsp;\u00bb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Une r\u00e8gle de confort interdit de faire pencher la cam\u00e9ra. Pour que la barque bouge quand m\u00eame, l&rsquo;agent l&rsquo;a mont\u00e9e sur un pivot qui porte la coque, la lanterne et le h\u00e9ron, mais pas la cam\u00e9ra&nbsp;: c&rsquo;est la barque qui bouge sous le spectateur. Au premier essai, la coque a disparu, rest\u00e9e \u00e0 l&rsquo;origine du monde&nbsp;: dans Unreal, un parent \u00ab&nbsp;mobile&nbsp;\u00bb refuse des enfants \u00ab&nbsp;statiques&nbsp;\u00bb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il a commenc\u00e9 prudemment, avec quelques degr\u00e9s. Je ne voyais rien. Puis 9\u00b0 au passage de la b\u00eate, et ma remarque&nbsp;: \u00ab&nbsp;je n&rsquo;ai pas vu de fort tangage quand la b\u00eate remonte&nbsp;\u00bb. Avec la cam\u00e9ra droite, seul le bord de la barque bouge, et l&rsquo;\u0153il le remarque \u00e0 peine. Je lui ai dit de doubler \u00ab&nbsp;pour voir&nbsp;\u00bb&nbsp;: 18\u00b0 de roulis, une houle de 50&nbsp;centim\u00e8tres. C&rsquo;est rest\u00e9, avec mon verdict du dernier jour&nbsp;: \u00ab&nbsp;les vagues nickel, le tangage nickel&nbsp;\u00bb.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-28-tangage.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-28-tangage-1024x1024.jpg\" alt=\"\" class=\"wp-image-310\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-28-tangage-1024x1024.jpg 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-28-tangage-300x300.jpg 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-28-tangage-150x150.jpg 150w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-28-tangage-768x768.jpg 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-28-tangage.jpg 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Au casque, au passage de la b\u00eate&nbsp;: la barque penche de 18\u00b0, la cam\u00e9ra reste droite.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce r\u00e9glage a laiss\u00e9 un dernier d\u00e9faut, trouv\u00e9 dans la version finale&nbsp;: \u00e0 18\u00b0 de roulis, l&rsquo;avant du plancher, plus large que la coque \u00e0 la flottaison, plongeait sous la surface, et une flaque apparaissait dans la barque. Le premier rendu de contr\u00f4le, une seconde trop tard, ne montrait rien. Une s\u00e9rie toutes les demi-secondes l&rsquo;a trouv\u00e9e. Sous le plancher, l&rsquo;eau reste maintenant 30&nbsp;centim\u00e8tres plus bas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Un moteur qui se pilote en Python<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ce qui m&rsquo;a le plus surpris, c&rsquo;est qu&rsquo;Unreal se pilote enti\u00e8rement par script. Le projet lui-m\u00eame a \u00e9t\u00e9 cr\u00e9\u00e9 par un script Python, avec les r\u00e9glages du Quest 3&nbsp;: OpenXR, Vulkan, rendu mobile en forward, multiview. Les r\u00e9glages que l&rsquo;\u00e9diteur ajoute de lui-m\u00eame sont report\u00e9s dans le script, pour que tout reste rejouable. Les vid\u00e9os sortent de Movie Render Queue, l&rsquo;outil de rendu d&rsquo;Unreal, lanc\u00e9 lui aussi par script.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les pi\u00e8ges \u00e9taient souvent en dehors du moteur. Le JDK install\u00e9 sur mon PC \u00e9tait trop r\u00e9cent pour Gradle, l&rsquo;outil qui assemble l&rsquo;application Android&nbsp;; le niveau d&rsquo;API \u00ab&nbsp;latest&nbsp;\u00bb visait Android 15, que le Quest 3 ne charge pas. Install\u00e9 hors du launcher d&rsquo;Epic, le moteur s&rsquo;identifie par un identifiant unique&nbsp;: \u00e9crire \u00ab&nbsp;5.8&nbsp;\u00bb dans le projet faisait proposer une conversion \u00e0 chaque ouverture. Pendant les rendus vid\u00e9o, le compilateur de shaders DirectX 11 plantait en boucle&nbsp;; en passant au Shader Model 6, on est pass\u00e9 de 0,2 image par seconde \u00e0 une vid\u00e9o de quatre minutes rendue en 50&nbsp;secondes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D&rsquo;autres pi\u00e8ges ne se voient qu&rsquo;au casque. Un jour, je me suis retrouv\u00e9 assis derri\u00e8re la barque (\u00ab&nbsp;Je suis derri\u00e8re le bateau&nbsp;\u00bb)&nbsp;: l&rsquo;origine de la VR d\u00e9pendait de la zone de jeu du Quest, et l&rsquo;agent a \u00e9crit, par script, un Blueprint qui recentre le joueur au d\u00e9marrage. Plus tard, j&rsquo;ai vu la sc\u00e8ne se construire \u00ab&nbsp;petit \u00e0 petit&nbsp;\u00bb avant le noir du d\u00e9but. L&rsquo;explication de l&rsquo;agent&nbsp;: au premier lancement, chaque objet attend que ses shaders soient compil\u00e9s. Tout ce qui se dessine est maintenant cach\u00e9 pendant quatre secondes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il y a enfin deux applications dans mon casque&nbsp;: la version de travail, avec la console et la capture au bouton A, et la version finale, compil\u00e9e en mode Shipping, qui charge moins le processeur (33&nbsp;% au plus, contre 52&nbsp;%). L&rsquo;application de travail est pass\u00e9e de 719 \u00e0 414&nbsp;Mo le dernier jour, quand l&rsquo;agent a retir\u00e9 les vid\u00e9os d&rsquo;un essai abandonn\u00e9&nbsp;: le moteur embarquait tr\u00e8s probablement l&rsquo;une d&rsquo;elles dans chaque APK. La version finale p\u00e8se 369&nbsp;Mo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Les mots que j&rsquo;ai appris<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Draw call&nbsp;: une commande envoy\u00e9e \u00e0 la carte graphique pour dessiner un objet. Notre budget de d\u00e9part&nbsp;: 150 par image.<\/li>\n\n\n\n<li>Triangle&nbsp;: l&rsquo;unit\u00e9 de la g\u00e9om\u00e9trie 3D. Budget de d\u00e9part&nbsp;: 500&nbsp;000 visibles \u00e0 la fois.<\/li>\n\n\n\n<li>Niveau de d\u00e9tail (LOD)&nbsp;: plusieurs versions d&rsquo;un m\u00eame objet, de plus en plus simples avec la distance.<\/li>\n\n\n\n<li>Nanite&nbsp;: la g\u00e9om\u00e9trie virtualis\u00e9e d&rsquo;Unreal 5, activ\u00e9e par d\u00e9faut, inutilisable sur le Quest.<\/li>\n\n\n\n<li>Rendu forward&nbsp;: la m\u00e9thode de rendu des casques autonomes, plus l\u00e9g\u00e8re que le rendu diff\u00e9r\u00e9 des PC.<\/li>\n\n\n\n<li>Post-traitement&nbsp;: les filtres appliqu\u00e9s \u00e0 l&rsquo;image termin\u00e9e. Absent ici.<\/li>\n\n\n\n<li>MSAA&nbsp;: un anticr\u00e9nelage qui lisse les bords des objets.<\/li>\n\n\n\n<li>Billboard, ou imposteur&nbsp;: une image peinte pos\u00e9e sur un plan, \u00e0 la place d&rsquo;un objet 3D.<\/li>\n\n\n\n<li>Shader&nbsp;: le petit programme qui calcule la couleur de chaque pixel, ou la position de chaque sommet.<\/li>\n\n\n\n<li>World Position Offset&nbsp;: d\u00e9placer les sommets d&rsquo;un objet dans le shader, sans squelette. C&rsquo;est ce qui fait nager la b\u00eate, voler la cr\u00e9ature et balancer les arbres.<\/li>\n\n\n\n<li>Level Sequence&nbsp;: la ligne de temps d&rsquo;Unreal. Ici, l&rsquo;horloge de toute la balade, cal\u00e9e sur la musique.<\/li>\n\n\n\n<li>Development et Shipping&nbsp;: la version de travail d&rsquo;une application, avec ses outils, et la version finale, all\u00e9g\u00e9e.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Ce que je retiens<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-29-avant-apres.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"342\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-29-avant-apres-1024x342.jpg\" alt=\"\" class=\"wp-image-311\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-29-avant-apres-1024x342.jpg 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-29-avant-apres-300x100.jpg 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-29-avant-apres-768x257.jpg 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-29-avant-apres-1536x514.jpg 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-29-avant-apres.jpg 1992w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Le premier soir et le dernier jour, \u00e0 la m\u00eame place, au m\u00eame instant de la balade.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ma premi\u00e8re question a une r\u00e9ponse nette. Pour tout ce qui se voit sur un \u00e9cran ou se mesure, l&rsquo;agent est all\u00e9 tr\u00e8s loin seul. Il a \u00e9crit 10&nbsp;000 lignes de code, g\u00e9n\u00e9r\u00e9 plus d&rsquo;une centaine d&rsquo;images et vingt-huit mod\u00e8les 3D, choisi les sons, construit la sc\u00e8ne, compil\u00e9, install\u00e9 et mesur\u00e9, la nuit comme le jour, sans que je touche une ligne. Il s&rsquo;est arr\u00eat\u00e9 au casque&nbsp;: le relief, l&rsquo;\u00e9chelle, le confort et le go\u00fbt sont rest\u00e9s de mon c\u00f4t\u00e9. Et quand il ne pouvait pas voir, il m&rsquo;a fabriqu\u00e9 des outils pour mieux lui montrer&nbsp;; le bouton A en est le meilleur exemple.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u00f4t\u00e9 outils, octobre 2026 a un grand gagnant&nbsp;: l&rsquo;image g\u00e9n\u00e9r\u00e9e en local. Les 114&nbsp;images peintes sont coh\u00e9rentes, dans le style voulu, et c&rsquo;est gr\u00e2ce \u00e0 elles que la d\u00e9mo tient au casque. La 3D depuis une seule image donne de bonnes silhouettes et un d\u00e9tail liss\u00e9. Pour la musique, Suno&nbsp;; pour les sons, une banque libre et des mesures. Les solutions toutes faites, Depth Anything ou la simulation d&rsquo;eau d&rsquo;Unreal, n&rsquo;ont rien donn\u00e9 ici.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u00f4t\u00e9 Unreal, j&rsquo;ai appris qu&rsquo;un casque autonome n&rsquo;est pas un petit PC&nbsp;: pas de filtre, un budget de g\u00e9om\u00e9trie serr\u00e9, et un \u00e9diteur qui montre autre chose que le casque. J&rsquo;ai aussi d\u00e9couvert qu&rsquo;Unreal se pilote enti\u00e8rement en Python, et qu&rsquo;une image peinte vaut souvent mieux qu&rsquo;un maillage pauvre.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;agent n&rsquo;a pas tout r\u00e9ussi, et son journal le dit. Il a conclu trop vite sur une mesure, avec le casque qui regardait le ciel. Il a corrig\u00e9 des sympt\u00f4mes sans en v\u00e9rifier l&rsquo;\u00e9tendue&nbsp;: la bande de for\u00eat \u00ab&nbsp;corrig\u00e9e&nbsp;\u00bb sur un seul anneau, des fleurs en 3D oubli\u00e9es depuis le tout premier d\u00e9cor. Et il a longtemps raisonn\u00e9 sur l&rsquo;aspect d&rsquo;un d\u00e9faut plut\u00f4t que sur une capture dat\u00e9e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le plan de d\u00e9part n&rsquo;a pas surv\u00e9cu non plus. CLAUDE.md pr\u00e9voyait une architecture hybride&nbsp;: le d\u00e9cor proche en temps r\u00e9el, le lointain en vid\u00e9o 360 st\u00e9r\u00e9o pr\u00e9-rendue, la brume pour faire le raccord. D\u00e8s que la for\u00eat est pass\u00e9e en images peintes, toute la balade a tenu 72&nbsp;images par seconde en temps r\u00e9el. Le lointain en vid\u00e9o n&rsquo;a jamais servi&nbsp;; l&rsquo;agent l&rsquo;a retir\u00e9 le dernier jour, avec 3,4&nbsp;Go de vid\u00e9os de test.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il y a eu des incidents, aucun grave&nbsp;: l&rsquo;interface du Quest qui plante en boucle une nuit, 2,4&nbsp;Go de vid\u00e9os 4K envoy\u00e9es par erreur sur GitHub, un historique git r\u00e9\u00e9crit et un d\u00e9p\u00f4t recr\u00e9\u00e9 pour repasser de 7,3 \u00e0 3,9&nbsp;Go.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-31-chiffres.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"467\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-31-chiffres-1024x467.png\" alt=\"\" class=\"wp-image-314\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-31-chiffres-1024x467.png 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-31-chiffres-300x137.png 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-31-chiffres-768x350.png 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-31-chiffres-1536x701.png 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-31-chiffres.png 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Le projet en chiffres.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-30-volet-lac.mp4\"><\/video><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Le lac, le 19 et le 23\/10. La lanterne qui masquait le centre de l&rsquo;image est descendue au fond de la barque, et le h\u00e9ron s&rsquo;est pos\u00e9.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le 23 octobre, j&rsquo;ai \u00e9crit \u00e0 l&rsquo;agent&nbsp;: \u00ab&nbsp;bah l\u00e0 on a fini en vrai\u2026 Tu vois des choses \u00e0 am\u00e9liorer&nbsp;?&nbsp;\u00bb Dans son suivi, il en note trois&nbsp;: un audit automatique des plans vus par la tranche, la famille de d\u00e9fauts revenue deux fois&nbsp;; une vid\u00e9o partageable sans casque&nbsp;; et le premier jet de cet article. Il reste aussi 34 \u00e9l\u00e9ments g\u00e9n\u00e9r\u00e9s en local en attendant mieux, tous en place dans la d\u00e9mo. Pour remplacer l&rsquo;un d&rsquo;eux, il suffit de d\u00e9poser une image et de relancer le script concern\u00e9. C&rsquo;\u00e9tait \u00e9crit dans le fichier de consignes d\u00e8s le premier jour.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le casque, c&rsquo;\u00e9tait moi<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En lan\u00e7ant ce projet, je me demandais ce qu&rsquo;une IA saurait faire seule. Au bout de six jours, la question qui m&rsquo;int\u00e9resse est l&rsquo;inverse&nbsp;: ce qu&rsquo;il m&rsquo;est rest\u00e9 \u00e0 faire. Rien de technique. J&rsquo;ai regard\u00e9 au casque ce que l&rsquo;agent ne pouvait pas voir, dit en une phrase ce qui n&rsquo;allait pas, lanc\u00e9 quelques id\u00e9es de mise en sc\u00e8ne, et r\u00e9pondu oui ou non quand il demandait une installation. C&rsquo;est un travail de directeur artistique.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour quelqu&rsquo;un qui cr\u00e9e seul, ce partage des r\u00f4les change l&rsquo;\u00e9chelle de ce qu&rsquo;on peut tenter. Je ne ma\u00eetrise pas Unreal, et la d\u00e9mo existe quand m\u00eame, avec un journal qui explique chacune de ses d\u00e9cisions. La limite est physique&nbsp;: tant que l&rsquo;agent ne voit pas en relief et n&rsquo;entend pas une voiture au fond d&rsquo;une ambiance de lac, il faut quelqu&rsquo;un dans le casque.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La le\u00e7on de m\u00e9thode vaut bien au-del\u00e0 du jeu vid\u00e9o. Sans le fichier de suivi, les d\u00e9fauts r\u00e9versibles et une sc\u00e8ne qui se reconstruit d&rsquo;une commande, je n&rsquo;aurais pas laiss\u00e9 l&rsquo;agent seul une nuit enti\u00e8re, encore moins vingt heures. Le mod\u00e8le fait le travail&nbsp;; ces quelques r\u00e8gles m&rsquo;ont permis de lui faire confiance.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La barque d\u00e9rive toujours dans mon casque. Le h\u00e9ron s&rsquo;y pose \u00e0 3&nbsp;min&nbsp;47, annonc\u00e9 par un cri d&rsquo;aigrette que l&rsquo;agent n&rsquo;a jamais entendu.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"La barque des lucioles (version 2D)\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/TjaWKkIgm0Q?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Addendum\u00a0: une 3D \u00e0 360\u00b0 qu&rsquo;Unreal ne sait pas rendre<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;article \u00e0 peine fini, j&rsquo;ai pos\u00e9 une derni\u00e8re question \u00e0 l&rsquo;agent, presque en passant\u00a0: \u00ab\u00a0au fait, Youtube g\u00e8re de la 3D \u00e0 360\u00b0 je crois. Tu peux voir les specs n\u00e9cessaires et voir pour g\u00e9n\u00e9rer la vid\u00e9o en question\u00a0?\u00a0\u00bb. J&rsquo;imaginais un r\u00e9glage d&rsquo;export. Il m&rsquo;a rendu sa copie une heure et douze minutes plus tard, et c&rsquo;est l&rsquo;\u00e9pisode du projet qui m&rsquo;a le plus surpris.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les specs, d&rsquo;abord. YouTube veut l&rsquo;image enti\u00e8re d\u00e9pli\u00e9e comme une carte du monde (la projection \u00e9quirectangulaire), les deux yeux l&rsquo;un au-dessus de l&rsquo;autre, l&rsquo;\u0153il gauche en haut&nbsp;; Meta conseille au plus 5760 \u00d7 5760 pixels pour les Quest. Le son peut \u00eatre spatial&nbsp;: quatre canaux d&rsquo;ambisonie, dont les sons restent accroch\u00e9s au d\u00e9cor quand on tourne la t\u00eate, plus deux canaux st\u00e9r\u00e9o qui suivent la t\u00eate, pour les ambiances. Enfin, le fichier doit porter des m\u00e9tadonn\u00e9es que ffmpeg sait lire mais pas \u00e9crire. L&rsquo;outil de Google qui les \u00e9crit demande une installation, et mes consignes interdisent d&rsquo;installer quoi que ce soit sans mon accord \u00e9crit. L&rsquo;agent a donc \u00e9crit son propre injecteur, 234 lignes de Python, et l&rsquo;a v\u00e9rifi\u00e9 deux fois&nbsp;: la vid\u00e9o d\u00e9cod\u00e9e image par image est identique avant et apr\u00e8s, et ffprobe relit \u00ab&nbsp;top and bottom&nbsp;\u00bb, \u00ab&nbsp;equirectangular&nbsp;\u00bb, \u00ab&nbsp;ambisonic 1+stereo&nbsp;\u00bb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ensuite, l&rsquo;obstacle. Unreal 5.8 sait rendre un panorama, mais depuis un seul point&nbsp;: sans relief. Une 3D \u00e0 360\u00b0 demande, pour chaque direction du regard, deux yeux plac\u00e9s de part et d&rsquo;autre de cette direction&nbsp;; quand on tourne la t\u00eate, les yeux tournent sur un cercle de 6,4 cm. Le moteur a bien un plugin exp\u00e9rimental qui fait ce travail tranche par tranche, avec plus de 2&nbsp;500 captures par image, mais il est incompatible avec le rendu VR du projet.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-32-rig-360.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-32-rig-360-1024x576.png\" alt=\"\" class=\"wp-image-341\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-32-rig-360-1024x576.png 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-32-rig-360-300x169.png 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-32-rig-360-767x431.png 767w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-32-rig-360-1536x864.png 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-32-rig-360.png 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Le principe, les vingt-six cam\u00e9ras et la cha\u00eene jusqu&rsquo;au casque.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La parade de l&rsquo;agent tient en vingt-six cam\u00e9ras attach\u00e9es \u00e0 la barque. Pour chaque \u0153il, douze cam\u00e9ras \u00e9troites couvrent chacune une tranche de 30\u00b0, plac\u00e9es l\u00e0 o\u00f9 serait l&rsquo;\u0153il quand on regarde le milieu de la tranche&nbsp;; deux autres visent le haut et le bas. Chaque cam\u00e9ra \u00e9crit aussi la distance de chacun de ses pixels. Entre le milieu et le bord d&rsquo;une tranche, l&rsquo;\u0153il devrait glisser de quelques millim\u00e8tres sur le cercle&nbsp;: le script d&rsquo;assemblage s&rsquo;en charge, en recalculant avec ces distances o\u00f9 chaque point serait vu. Cela fait 62,5 millions de pixels par image, sept fois et demie une image 4K.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Avant de demander une minute de carte graphique, il a voulu prouver que la m\u00e9thode tenait. Il a \u00e9crit un petit moteur de rendu en Python, qui calcule une sc\u00e8ne de synth\u00e8se vue par chacune des vingt-six cam\u00e9ras&nbsp;: de l&rsquo;eau en damier, une barque, des roseaux tout contre le bord\u00e9, une branche juste au-dessus de la t\u00eate. Il calcule aussi, rayon par rayon, l&rsquo;image exacte que chaque \u0153il devrait recevoir. Assembl\u00e9e avec les distances, son image s&rsquo;\u00e9carte de la v\u00e9rit\u00e9 sur 0,07&nbsp;% des pixels&nbsp;; recoll\u00e9e sans elles, sur 0,81&nbsp;%, et les bord\u00e9s se d\u00e9doublent aux raccords.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-33-ods-verite.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"376\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-33-ods-verite-1024x376.jpg\" alt=\"\" class=\"wp-image-342\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-33-ods-verite-1024x376.jpg 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-33-ods-verite-300x110.jpg 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-33-ods-verite-766x281.jpg 766w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-33-ods-verite-1536x564.jpg 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-33-ods-verite.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>La sc\u00e8ne de synth\u00e8se, \u0153il gauche, vers l&rsquo;avant gauche de la barque.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le son a suivi le chemin du 5.1 de la vid\u00e9o \u00e0 plat&nbsp;: chaque source reprise \u00e0 sa place et sur sa trajectoire, mais encod\u00e9e dans sa direction autour du spectateur, hauteur comprise. Pour le v\u00e9rifier sans l&rsquo;\u00e9couter, l&rsquo;agent a d\u00e9cod\u00e9 les directions&nbsp;: la b\u00eate passe sous la barque, \u00e0 30\u00b0 sous l&rsquo;horizon&nbsp;; la cr\u00e9ature volante est \u00e0 20\u00b0 au-dessus&nbsp;; le h\u00e9ron descend vers la proue.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Restait Unreal. L&rsquo;agent y a construit \u00ab&nbsp;\u00e0 blanc&nbsp;\u00bb les s\u00e9quences, les vingt-six cam\u00e9ras et les travaux de rendu, les a v\u00e9rifi\u00e9s, puis a tout supprim\u00e9 sans rien enregistrer. Une premi\u00e8re tentative s&rsquo;est arr\u00eat\u00e9e \u00e0 mi-chemin, et la copie de s\u00e9quence rest\u00e9e en m\u00e9moire refusait de dispara\u00eetre&nbsp;: \u00ab&nbsp;en cours d&rsquo;utilisation&nbsp;\u00bb. Le coupable, trouv\u00e9 dans le journal de l&rsquo;\u00e9diteur, \u00e9tait la trace Python de l&rsquo;erreur, qui gardait la s\u00e9quence en vie. Derni\u00e8re \u00e9tape, une r\u00e9p\u00e9tition compl\u00e8te&nbsp;: des vues de synth\u00e8se en vraie d\u00e9finition jusqu&rsquo;au fichier de 5760 \u00d7 5760 et \u00e0 ses m\u00e9tadonn\u00e9es.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Puis il s&rsquo;est arr\u00eat\u00e9, comme demand\u00e9, avec un devis&nbsp;: au moins quatre heures de carte graphique, 310&nbsp;Go de disque au plus fort, et une proposition, un essai de trois secondes sur le cas le plus dur, les roseaux qui fr\u00f4lent la barque.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;ai donn\u00e9 le feu vert pour l&rsquo;essai, et par avance pour la suite&nbsp;: \u00ab&nbsp;une fois que ton test sur 3s fonctionne et que tu as control\u00e9 toi m\u00eame le rendu, je te donne mon accord pour lancer le rendu total&nbsp;\u00bb. Le premier essai a rat\u00e9. Unreal n&rsquo;a rendu qu&rsquo;une cam\u00e9ra sur vingt-six, rang\u00e9e sous le nom \u00ab&nbsp;main_camera&nbsp;\u00bb. L&rsquo;agent est all\u00e9 lire le code source du module de rendu, livr\u00e9 avec le moteur&nbsp;: Movie Render Queue ne reconna\u00eet une cam\u00e9ra qu&rsquo;\u00e0 la liaison de son composant cam\u00e9ra, celle que Sequencer cr\u00e9e tout seul quand on ajoute une cam\u00e9ra \u00e0 la main. Les cam\u00e9ras cr\u00e9\u00e9es par script n&rsquo;en avaient pas. Il a ouvert chaque s\u00e9quence dans Sequencer le temps de les cr\u00e9er, en v\u00e9rifiant au passage que le niveau restait intact&nbsp;: sinon, le rendu se serait arr\u00eat\u00e9 sur une bo\u00eete de dialogue que personne n&rsquo;aurait vue.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le second essai a rendu les vingt-six vues, et l&rsquo;agent l&rsquo;a contr\u00f4l\u00e9 de lui-m\u00eame avant de me rendre la main. Les couleurs converties sont celles d&rsquo;Unreal \u00e0 une unit\u00e9 pr\u00e8s sur 255&nbsp;; deux vues voisines ne s&rsquo;\u00e9cartent plus que de 0,14 sur 255 l\u00e0 o\u00f9 elles se recouvrent, contre 0,47 sans la correction par la distance. Il a mesur\u00e9 le d\u00e9calage entre les deux yeux&nbsp;: 49 pixels sur le plancher de la barque, 15 sur l&rsquo;eau \u00e0 4&nbsp;m\u00e8tres, 3 sur les arbres \u00e0 20&nbsp;m\u00e8tres, ce qu&rsquo;on attend d&rsquo;un \u00e9cart de 6,4 cm. Un d\u00e9calage de 4 pixels sur ce qu&rsquo;il croyait \u00eatre des nuages l&rsquo;a arr\u00eat\u00e9 un moment, le ciel devant \u00eatre \u00e0 l&rsquo;infini. Il a compar\u00e9 les deux vues d&rsquo;origine et la distance \u00e9crite par Unreal&nbsp;: il mesurait en fait la cime d&rsquo;un arbre peint, \u00e0 14&nbsp;m\u00e8tres.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-34-360-essai.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"512\" src=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-34-360-essai-1024x512.jpg\" alt=\"\" class=\"wp-image-343\" srcset=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-34-360-essai-1024x512.jpg 1024w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-34-360-essai-300x150.jpg 300w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-34-360-essai-768x384.jpg 768w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-34-360-essai-1536x768.jpg 1536w, https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-34-360-essai.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Une image de l&rsquo;essai, \u0153il gauche, d\u00e9pli\u00e9e \u00e0 plat&nbsp;: 360\u00b0 de large, 180\u00b0 de haut. La proue au centre, le banc o\u00f9 l&rsquo;on est assis en bas, la poupe aux deux bords.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Avant la balade enti\u00e8re, l&rsquo;agent a voulu gagner du temps\u00a0: une seconde de test avec deux fois moins d&rsquo;\u00e9chantillons par image. Le rendu n&rsquo;allait que 19\u00a0% plus vite, le co\u00fbt tenant surtout au nombre de vues\u00a0; il a gard\u00e9 la qualit\u00e9 de la vid\u00e9o 4K. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce qui m&rsquo;a frapp\u00e9, c&rsquo;est l&rsquo;ordre des op\u00e9rations : comprendre ce que le moteur ne sait pas faire, inventer un contournement, construire de quoi le prouver, et seulement ensuite demander la carte graphique. Le relief, lui, l&rsquo;agent ne le voit toujours pas. La v\u00e9rification finale se fera dans mon casque.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Six jours, Claude Code, Unreal Engine et un casque Quest 3. J&rsquo;ai demand\u00e9 \u00e0 une IA de construire une balade en r\u00e9alit\u00e9 virtuelle, de la premi\u00e8re ligne de code \u00e0 l&rsquo;application install\u00e9e dans mon casque. Ce qu&rsquo;elle a su faire seule, et ce que j&rsquo;ai appris d&rsquo;Unreal en la regardant travailler. Le lac, \u00e0 3&nbsp;min&nbsp;52&nbsp;: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[84,85],"class_list":["post-338","post","type-post","status-publish","format-standard","hentry","category-divers-informatique","tag-ai","tag-automation"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Une IA peut-elle faire une d\u00e9mo VR toute seule\u00a0? - My thoughts<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Une IA peut-elle faire une d\u00e9mo VR toute seule\u00a0? - My thoughts\" \/>\n<meta property=\"og:description\" content=\"Six jours, Claude Code, Unreal Engine et un casque Quest 3. J&rsquo;ai demand\u00e9 \u00e0 une IA de construire une balade en r\u00e9alit\u00e9 virtuelle, de la premi\u00e8re ligne de code \u00e0 l&rsquo;application install\u00e9e dans mon casque. Ce qu&rsquo;elle a su faire seule, et ce que j&rsquo;ai appris d&rsquo;Unreal en la regardant travailler. Le lac, \u00e0 3&nbsp;min&nbsp;52&nbsp;: [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/\" \/>\n<meta property=\"og:site_name\" content=\"My thoughts\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-30T15:52:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-31T08:57:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-01-heros.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1125\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Olivier\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@odoucet\" \/>\n<meta name=\"twitter:site\" content=\"@odoucet\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Olivier\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"50 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/2026\\\/10\\\/30\\\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/2026\\\/10\\\/30\\\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\\\/\"},\"author\":{\"name\":\"Olivier\",\"@id\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/#\\\/schema\\\/person\\\/d093cada9eddc4839cbae3de5c823a39\"},\"headline\":\"Une IA peut-elle faire une d\u00e9mo VR toute seule\u00a0?\",\"datePublished\":\"2026-10-30T15:52:08+00:00\",\"dateModified\":\"2026-10-31T08:57:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/2026\\\/10\\\/30\\\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\\\/\"},\"wordCount\":10283,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/2026\\\/10\\\/30\\\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/barque-01-heros-1024x576.jpg\",\"keywords\":[\"AI\",\"Automation\"],\"articleSection\":[\"Divers informatique\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/2026\\\/10\\\/30\\\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/2026\\\/10\\\/30\\\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\\\/\",\"url\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/2026\\\/10\\\/30\\\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\\\/\",\"name\":\"Une IA peut-elle faire une d\u00e9mo VR toute seule\u00a0? - My thoughts\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/2026\\\/10\\\/30\\\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/2026\\\/10\\\/30\\\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/barque-01-heros-1024x576.jpg\",\"datePublished\":\"2026-10-30T15:52:08+00:00\",\"dateModified\":\"2026-10-31T08:57:15+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/#\\\/schema\\\/person\\\/d093cada9eddc4839cbae3de5c823a39\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/2026\\\/10\\\/30\\\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/2026\\\/10\\\/30\\\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/2026\\\/10\\\/30\\\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/barque-01-heros.jpg\",\"contentUrl\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/barque-01-heros.jpg\",\"width\":2000,\"height\":1125},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/2026\\\/10\\\/30\\\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Une IA peut-elle faire une d\u00e9mo VR toute seule\u00a0?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/\",\"name\":\"My thoughts\",\"description\":\"En fran\u00e7ais and in english :)\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.olivierdoucet.info\\\/blog\\\/#\\\/schema\\\/person\\\/d093cada9eddc4839cbae3de5c823a39\",\"name\":\"Olivier\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f1c8a1c3e0a2d475588dca05ad37562efeeadbcba48cf3ca1293e987d2b9a33d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f1c8a1c3e0a2d475588dca05ad37562efeeadbcba48cf3ca1293e987d2b9a33d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f1c8a1c3e0a2d475588dca05ad37562efeeadbcba48cf3ca1293e987d2b9a33d?s=96&d=mm&r=g\",\"caption\":\"Olivier\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Une IA peut-elle faire une d\u00e9mo VR toute seule\u00a0? - My thoughts","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/","og_locale":"fr_FR","og_type":"article","og_title":"Une IA peut-elle faire une d\u00e9mo VR toute seule\u00a0? - My thoughts","og_description":"Six jours, Claude Code, Unreal Engine et un casque Quest 3. J&rsquo;ai demand\u00e9 \u00e0 une IA de construire une balade en r\u00e9alit\u00e9 virtuelle, de la premi\u00e8re ligne de code \u00e0 l&rsquo;application install\u00e9e dans mon casque. Ce qu&rsquo;elle a su faire seule, et ce que j&rsquo;ai appris d&rsquo;Unreal en la regardant travailler. Le lac, \u00e0 3&nbsp;min&nbsp;52&nbsp;: [&hellip;]","og_url":"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/","og_site_name":"My thoughts","article_published_time":"2026-10-30T15:52:08+00:00","article_modified_time":"2026-10-31T08:57:15+00:00","og_image":[{"width":2000,"height":1125,"url":"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-01-heros.jpg","type":"image\/jpeg"}],"author":"Olivier","twitter_card":"summary_large_image","twitter_creator":"@odoucet","twitter_site":"@odoucet","twitter_misc":{"\u00c9crit par":"Olivier","Dur\u00e9e de lecture estim\u00e9e":"50 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/#article","isPartOf":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/"},"author":{"name":"Olivier","@id":"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/d093cada9eddc4839cbae3de5c823a39"},"headline":"Une IA peut-elle faire une d\u00e9mo VR toute seule\u00a0?","datePublished":"2026-10-30T15:52:08+00:00","dateModified":"2026-10-31T08:57:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/"},"wordCount":10283,"commentCount":0,"image":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/#primaryimage"},"thumbnailUrl":"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-01-heros-1024x576.jpg","keywords":["AI","Automation"],"articleSection":["Divers informatique"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/","url":"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/","name":"Une IA peut-elle faire une d\u00e9mo VR toute seule\u00a0? - My thoughts","isPartOf":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/#primaryimage"},"image":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/#primaryimage"},"thumbnailUrl":"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-01-heros-1024x576.jpg","datePublished":"2026-10-30T15:52:08+00:00","dateModified":"2026-10-31T08:57:15+00:00","author":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/d093cada9eddc4839cbae3de5c823a39"},"breadcrumb":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/#primaryimage","url":"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-01-heros.jpg","contentUrl":"https:\/\/www.olivierdoucet.info\/blog\/wp-content\/uploads\/2026\/10\/barque-01-heros.jpg","width":2000,"height":1125},{"@type":"BreadcrumbList","@id":"https:\/\/www.olivierdoucet.info\/blog\/2026\/10\/30\/une-ia-peut-elle-faire-une-demo-vr-toute-seule\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.olivierdoucet.info\/blog\/"},{"@type":"ListItem","position":2,"name":"Une IA peut-elle faire une d\u00e9mo VR toute seule\u00a0?"}]},{"@type":"WebSite","@id":"https:\/\/www.olivierdoucet.info\/blog\/#website","url":"https:\/\/www.olivierdoucet.info\/blog\/","name":"My thoughts","description":"En fran\u00e7ais and in english :)","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.olivierdoucet.info\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/d093cada9eddc4839cbae3de5c823a39","name":"Olivier","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/f1c8a1c3e0a2d475588dca05ad37562efeeadbcba48cf3ca1293e987d2b9a33d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f1c8a1c3e0a2d475588dca05ad37562efeeadbcba48cf3ca1293e987d2b9a33d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f1c8a1c3e0a2d475588dca05ad37562efeeadbcba48cf3ca1293e987d2b9a33d?s=96&d=mm&r=g","caption":"Olivier"}}]}},"_links":{"self":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts\/338","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/comments?post=338"}],"version-history":[{"count":2,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts\/338\/revisions"}],"predecessor-version":[{"id":344,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts\/338\/revisions\/344"}],"wp:attachment":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/media?parent=338"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/categories?post=338"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/tags?post=338"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}