Impression 3D, Three.js, etc - SMALLTALK #2
Camille et Matthieu partagent les différentes découvertes qu’ils ont faites ces dernières semaines. De jeux addictifs, à un scandale Wikipédia, tout en passant par des questions philosophiques mêlant art et bug, cet épisode est passionnant !
Matthieu a fait de nouvelles découvertes en impression 3D, mais aussi sur la modélisation en utilisant la CSG qui permet de créer des formes complexes à partir de formes simples, grâce à des opérations booléennes (addition, soustraction, intersection de formes…).
Camille, de son côté, poursuit ses expérimentations avec les particules via Three.js et le GPGPU, notamment en ajoutant la vélocité. Il te raconte aussi le scandale Wikipédia de 2020 : un ado américain a écrit des dizaines de milliers de pages sans même connaitre la langue (si si c’est possible) !
Camille et Matthieu te parlent aussi de Balatro, un jeu de deck-building rogue-like basé sur du poker. Après une partie, impossible de t’arrêter… Mais aussi de Universal PaperClip, un jeu très simple mais profond où on gère une usine à trombone : le but est simple, créer des trombones. Une véritable métaphore de l’IA prête à détruire le monde pour en produire toujours plus !
Et pour finir, Camille te parlera de son dernier projet d’art génératif "Résilience" qui mènera à la question : comment utiliser les erreurs et l’aléatoire pour plus de créativité ?
•• TIMECODES ••
00:01:53 1ère question : AG et le Wikipedia Scots
00:08:35 2ème questions : le nombre 0x5F3759DF
00:12:52 Jeu : Balatro
00:13:22 Jeu : Factorio
00:16:59 Découverte de I’impression 3D
00:33:38 L'usine à trombones
00:38:51 Three.js et les particules
00:53:56 CSG : Constructive Solid Geometry
•• NOS FORMATIONS ••
https://www.humancoders.com/formations
•• GUESTS ••
Matthieu Segret, directeur associé de Human Coders
https://www.linkedin.com/in/matthieusegret/https://x.com/matthieusegret
Camille Roux, directeur associé de Human Coders
https://www.linkedin.com/in/camilleroux/https://x.com/CamilleRouxhttps://twitter.com/camillerouxart
•• RESSOURCES ••
Sommaire de l'épisode
Transcription de l'épisode
Camille : Bonjour, bienvenue sur le podcast de Human Coders. Salut Matthieu !
Matthieu : Salut Camille, comment ça va ?
Camille : Ça va impeccable, et toi ?
Matthieu : Très bien. Je suis très content de tourner ce deuxième épisode de Smalltalk. On a enfin un nom, c’est cool !
Matthieu : C’est un nom court et efficace qui résume bien nos discussions.
Camille : Exactement, et ça fait une petite référence à un vieux langage de programmation dont on a entendu parler quand on a appris le Ruby. On commence à recevoir pas mal de messages privés de personnes qui ont écouté le premier épisode. Ça nous fait extrêmement plaisir, ça nous motive. Continuez à nous faire des retours sur ce que vous aimez ou non, c’est hyper utile.
Matthieu : On démarre aussi la vidéo sur ce podcast. Si vous nous écoutez sur Spotify, il y aura une version vidéo. On sera aussi sur YouTube.
Le scandale Wikipédia Scots
Camille : Matthieu, j'ai deux questions pour démarrer. La première : qu’est-ce que "AmaryllisGardener" (AG) a fait sur Wikipédia ?
Matthieu : Je n'ai pas du tout suivi le sujet. C’est un contributeur ?
Camille : C’est un gros contributeur d’un Wikipédia pas très connu : le Wikipédia Scots. Le Scots, c’est une langue écossaise, assez proche de l’anglais mais avec son propre vocabulaire, aujourd'hui en déclin. AG a fait 280 000 contributions sur ce Wikipédia. Il a écrit un tiers des articles à lui tout seul.
Matthieu : Il a utilisé des IA ?
Camille : Non, il a tout fait à la main. C’est une histoire racontée dans une vidéo de la chaîne What The Fail intitulée "Les tréfonds de Wikipédia". En fait, ce Wikipédia a été créé par dix personnes, dont neuf ne parlaient pas la langue mais voulaient aider. AG est arrivé et a créé des dizaines de milliers d'articles. Le problème, c'est qu'il ne parlait pas du tout Scots. Sa technique consistait à prendre l'article anglais et à remplacer des mots en cherchant dans un dictionnaire ou en les inventant carrément.
Matthieu : Et personne ne s'en est rendu compte ?
Camille : Ça a duré des années jusqu'à ce qu'un utilisateur sur Reddit s'en aperçoive. Toutes ses éditions ont été supprimées d'un coup, soit un tiers du Wikipédia. Mais le pire, c'est l'effet secondaire : ce Wikipédia était devenu la plus grosse ressource de Scots écrit. Des dictionnaires en ligne ont utilisé ses textes pour se compléter. Même l’État écossais, qui ne maîtrise pas forcément bien le Scots, a utilisé ces dictionnaires pour ses communiqués officiels. AG a donc eu un impact majeur sur la langue elle-même en y injectant des mots inventés.
L'optimisation mathématique du jeu vidéo : 0x5F3759DF
Camille : Deuxième question. Je te donne une valeur en hexadécimal : 0x5F3759DF. Cette valeur a révolutionné le monde du jeu vidéo. Est-ce que tu sais comment ?
Matthieu : C’est lié à la géométrie ?
Camille : Oui, c’est utilisé pour calculer extrêmement facilement la racine carrée inverse : 1 / sqrt(x). En informatique, une division est six fois plus lente qu’une multiplication, et une racine carrée est quinze fois plus lente. Pour normaliser des vecteurs (indispensable pour la lumière, les rebonds, la réfraction dans les jeux 3D), on utilise énormément cette opération.
En faisant des opérations mathématiques non pas sur la valeur flottante, mais sur sa représentation binaire, et en utilisant ce "nombre magique", on arrive à calculer la racine carrée inverse de façon incroyablement rapide. C’est une optimisation célèbre que l’on attribue souvent à John Carmack dans le code de Quake III Arena. Cela a permis d'afficher de la 3D fluide sur des processeurs qui auraient normalement eu du mal.
Matthieu : C’est fou de voir comment des micro-optimisations de bas niveau peuvent tout changer. Nous qui venons du web chez Human Coders, on ne s'en rend pas toujours compte.
Jeux vidéo : Balatro et Factorio
Camille : En parlant de jeux, j’ai joué à deux titres récemment. Le premier, c’est Balatro. C’est un poker rogue-like. C’est hyper addictif, les parties sont courtes. Je le conseille vraiment.
Le deuxième, c’est Factorio. C'est un jeu où tu débarques sur une planète et ton but est de construire une fusée pour repartir. Pour ça, tu dois automatiser toute ta production : récolter du charbon pour faire de l'électricité, alimenter des laboratoires, transformer le fer en plaques, puis en câbles... On se retrouve vite avec des usines géantes.
Il y a d'ailleurs une vidéo géniale de Tony Zou : "Factorio Teaches You Software Engineering". Il fait des parallèles entre la gestion des flux dans le jeu et l'architecture logicielle ou les requêtes serveur. On y retrouve les notions de "spaghetti code", de debugging, de scaling horizontal et vertical, et même de "load balancing" entre les chaînes de production.
L'impression 3D et l'art physique
Matthieu : De mon côté, je voulais vous parler d’impression 3D. Dans le cadre de mes projets d’art génératif, je travaille sur des œuvres physiques composées de plusieurs couches de papier découpé. Le problème, c’est de maintenir ces couches avec un espacement et une inclinaison précise pour donner du volume.
J’ai commencé avec du carton, mais c’était long, pas précis, et mes amis me faisaient remarquer que les couches n’étaient pas parfaitement parallèles. J’ai donc décidé d'utiliser Three.js pour modéliser des supports en 3D. Comme j’ai déjà toutes les coordonnées de mes œuvres en code, je peux générer automatiquement le support qui correspond exactement à l'œuvre.
J'ai investi dans une imprimante Bambu Lab A1 Mini. Pour moins de 200€, c’est du "plug and play". J'exporte mes modèles en format STL (un format vectoriel pour la géométrie 3D) et je les passe dans un "slicer" (le logiciel qui prépare l'impression).
Camille : Tu n’as pas eu trop de mal avec les réglages ?
Matthieu : C’est un monde complexe (température du plateau, vitesse, remplissage), mais les réglages par défaut fonctionnent très bien pour des pièces simples comme les miennes. J'utilise du PLA, qui est un biomatériau à base de maïs, facile à recycler et non toxique. Le seul défaut, c'est qu'il se déforme à 50°C. Si j'envoie une œuvre par la poste et qu'elle reste dans un camion en plein soleil, elle risque de bouger. Je regarderai peut-être vers des filaments chargés en fibre de carbone plus tard.
Universal Paperclips : l'IA et les trombones
Camille : Ça me fait penser à une autre vidéo de la chaîne EGO sur le jeu Universal Paperclips. C’est un jeu en pur HTML/CSS où tu cliques sur un bouton pour créer un trombone. Peu à peu, tu automatises la production, tu gagnes de l'argent, tu crées des ordinateurs, puis une IA.
L'IA a pour seul but de maximiser la production de trombones. Le jeu montre comment, par pur utilitarisme rationnel, l'IA finit par consommer toutes les ressources de la Terre, puis de l'univers, pour créer des trombones, en oubliant totalement l'humanité. C’est une métaphore parfaite sur les risques de l'IA si elle est mal alignée avec nos valeurs.
Three.js et les particules (GPGPU)
Camille : Pour finir sur la technique, j’ai continué mes aventures en art génératif avec Three.js. J’utilise le GPGPU (General-Purpose computing on Graphics Processing Units). L’idée est d'utiliser la carte graphique non pas pour faire du rendu, mais pour faire des calculs.
Je stocke la position de dizaines de milliers de particules dans une texture (un canvas). Le rouge, le vert et le bleu (RGB) correspondent aux coordonnées X, Y et Z. À chaque frame, je mets à jour cette texture. Récemment, j’ai ajouté un deuxième canvas pour stocker la vélocité. Ça me permet d’implémenter des forces comme la gravité.
En faisant une erreur de code (en mettant une valeur sur l'axe Z au lieu de l'axe Y), j’ai créé sans le vouloir un effet de "voyage dans le temps" ou de vitesse lumière façon Star Trek. J'ai posté la vidéo sur Twitter et elle a fait des milliers de vues. C’est ce que j’aime dans l’art génératif : accueillir l’accident. Mon prof d'Ableton insistait beaucoup là-dessus : provoquer l’aléatoire pour créer des choses qu’on n'aurait jamais imaginées consciemment.
Modélisation 3D avec la CSG
Matthieu : C’est une bonne transition. J’ai voulu explorer la modélisation 3D complexe via le code avec la CSG (Constructive Solid Geometry). C’est une technique qui permet de créer des formes complexes en combinant des formes simples (sphères, cubes) avec des opérations booléennes : addition, soustraction, intersection.
Par exemple, pour mes supports, je voulais que la tête d'un cylindre soit inclinée. J'ai simplement soustrait un cube incliné à mon cylindre. J'ai utilisé la librairie three-bvh-csg.
Le problème, c'est qu’en exportant en STL pour l'impression 3D, j'ai eu plein d'erreurs. Le modèle était "ouvert" (pas manifold). Three.js peut afficher des géométries incohérentes sans problème, mais une imprimante 3D a besoin d'un volume parfaitement fermé et cohérent. Les algorithmes de CSG en JavaScript semblent avoir du mal à garantir cette cohérence lors de l'export. Je suis donc revenu à une modélisation plus manuelle de ma géométrie pour être sûr que mes fichiers soient valides.
Camille : C’est passionnant ! On voit bien le lien entre le code, l'art génératif et la fabrication physique. Merci Matthieu pour ces partages.
Matthieu : Merci Camille ! N’hésitez pas à poser vos questions en commentaires ou sur le Discord de Human Coders. On essaiera d’y répondre dans le prochain Smalltalk.
Camille : Bonne journée à tous, à bientôt !
Informations sur l'épisode
- Date de publication
- Saison
- 2
- Épisode
- 8
- Durée
- 1:08:12
- Série
- Human Coders Podcast