Comment créer un film d’animation en 8 kB
- En novembre 2022, le défi a commencé : créer une animation en temps réel en moins de 8 kilo-octets.
- L’objectif était d’y inclure des graphismes de qualité, de l’animation, de la mise en scène, du travail de caméra et de la musique.
- En avril 2023, après plusieurs mois de travail, "The Sheep and the Flower" a été terminé puis publié.
Vue d’ensemble
- Le résultat prend la forme d’un exécutable Windows, et tous les éléments visuels utilisent des shaders GLSL calculés en temps réel sur le GPU.
- Le rendu repose sur la technique du raymarching, et les shaders sont réduits avec l’outil Shader Minifier.
- La musique a été composée avec OpenMPT et le synthétiseur 4klang ; les instruments sont décrits de façon procédurale et la liste des notes est compressée.
- Le code a été écrit en C++ et utilise le framework Leviathan pour lancer les options du compilateur et l’initialisation.
- La sortie finale est compressée avec Crinkler.
Le début de la création
- Le projet a démarré après avoir été inspiré par le partage, par un ancien collègue, d’une vidéo intitulée "Capoda" réalisée il y a longtemps.
- Ce projet pouvait devenir un bon exemple de size coding avec une histoire adaptée à 8 kB.
- Ce nouveau défi, différent de l’objectif initial de 64 kB, a suscité un réel intérêt.
Rendre un monde avec deux triangles
- Un rectangle couvrant tout l’écran (deux triangles) est dessiné, puis un programme GPU écrit en GLSL (shader) calcule la couleur de chaque pixel à chaque frame.
- La scène est représentée sous forme de champ de distance signé, puis convertie en pixels avec le raymarching.
Mise en scène
- Une réflexion a été menée sur la manière de raconter l’histoire et d’exprimer les émotions avec un nombre limité de personnages et d’animations.
- Les éléments inutiles au récit ont été retirés afin de se concentrer sur les détails, la mise en scène, le montage et la synchronisation avec la musique.
- Le travail de caméra et les techniques de narration sont utilisés pour transmettre les émotions.
Processus de développement
- Le code source contient de nombreuses constantes codées en dur, chacune ayant été déterminée au fil de multiples itérations.
- Pour obtenir une boucle de feedback rapide, les shaders sont recompilés à l’exécution.
- Un lecteur était nécessaire pour faciliter le travail sur l’animation et le contrôle de la caméra.
Musique
- Une musique adaptée à l’histoire nécessitait différentes sections et des transitions à des moments précis.
- La musique a été composée avec le synthétiseur 4klang, et les données ont été compressées pour économiser de l’espace.
Animation & synchronisation
- Tout dans la démo est réévalué à chaque frame, et l’ensemble se compose d’environ 25 plans de caméra manuels.
- Pour chaque plan, il faut décrire comment chaque paramètre de la caméra évolue dans le temps.
Textures & matériaux
- Contrairement à un moteur de rendu traditionnel, des textures 3D sont calculées et utilisées en temps réel.
- Des textures comme les panneaux de signalisation sont générées en combinant plusieurs fonctions.
Les yeux
- Au début du développement, les yeux semblaient ternes et inanimés, alors qu’ils sont essentiels comme outil de narration.
- L’ajout de reflets lumineux dans les yeux leur a donné de la vie.
Post-traitement
- Pour apporter la touche visuelle finale et installer l’atmosphère de l’histoire, une correction colorimétrique, une correction gamma, du vignettage, un filtre FXAA, entre autres, sont utilisés.
Compression
- Au lieu de stocker des données, l’approche retenue consiste à les générer avec du code.
- L’outil de compression Crinkler est utilisé pour rendre l’exécutable auto-extractible.
Minimisation
- L’outil Shader Minifier est utilisé pour réduire autant que possible la taille du code source des shaders.
- De nouvelles fonctionnalités ont été ajoutées à Shader Minifier pour minimiser et compresser le code shader.
La guerre entre le mouton et la fleur
- Pensez-vous que la guerre entre le mouton et la fleur n’a pas d’importance ? Ce thème évoqué dans "Le Petit Prince" constitue une part importante de l’histoire.
Conclusion
- Ce type de démo s’appuie sur des techniques avancées et sur des recherches déjà existantes.
- L’espoir est que ces nouvelles fonctionnalités aideront d’autres personnes à créer de meilleures démos.
- La catégorie 8 kB offre davantage de possibilités que le 4 kB, et on espère qu’elle gagnera en popularité.
L’avis de GN⁺
- Ce projet est un exemple de résultat remarquable obtenu en dépassant les limites techniques et en faisant preuve de créativité.
- Cette animation achevée dans l’espace extrêmement limité de 8 kB montre la combinaison de la programmation, de l’optimisation algorithmique et de l’expression artistique.
- Le développement d’outils comme Shader Minifier et l’usage de l’outil de compression Crinkler mettent en avant une approche innovante en ingénierie logicielle et en compression de données.
1 commentaires
Avis Hacker News
Avis de l’auteur original :
Mention du Sloot Digital Coding System :
Avis sur les vidéos de la demoscene :
Analyse des techniques de la demoscene :
Souvenir du jeu .kkrieger :
Recommandation de Cosmos Laundromat :
Réaction positive au film :
Éloges de la créativité :
Souvenir de Razor 1911 :
Informations sur les catégories de la demoscene :