3 points par GN⁺ 2024-01-25 | 1 commentaires | Partager sur WhatsApp

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

 
GN⁺ 2024-01-25
Avis Hacker News
  • Avis de l’auteur original :

    • En tant que créateur du film original, il trouve impressionnant que ce remake tienne en 8 kB, alors que l’original se composait de fichiers Blender, SVG et audio de l’ordre du Mo.
    • Il y voit un bon exemple d’usage utile d’une licence de partage d’œuvre (Creative Commons) et dit qu’il aimerait que le personnage du hérisson et la mélodie de l’œuvre originale soient utilisés.
  • Mention du Sloot Digital Coding System :

    • Référence au Sloot Digital Coding System avec la formule « Sloot lives!!! ».
  • Avis sur les vidéos de la demoscene :

    • Il souligne que les vidéos de la demoscene sont amusantes et ne reçoivent pas l’attention qu’elles méritent, alors que davantage de gens devraient les voir.
    • Il aimerait que des chaînes comme Retro Game Mechanics Explained expliquent bien la demoscene.
  • Analyse des techniques de la demoscene :

    • En regardant et en étudiant beaucoup d’œuvres de la demoscene, on finit par comprendre comment des simplifications géométriques sont possibles, comme représenter les pattes d’un mouton par des formes coniques.
    • Il mentionne que la plupart des productions de la demoscene reposent sur l’accélération 3D du GPU, mais que les démos au style d’animation 2D sont rares, et presque inexistantes dans de si petites tailles.
    • Il s’interroge sur le fait de savoir si l’animation 3D est plus facile que la 2D.
    • Il ajoute que « mouton » signifie « sheep » en français, et que « mutton » en dérive.
  • Souvenir du jeu .kkrieger :

    • Même si l’aspect technique est différent, cela lui rappelle le jeu FPS 3D compressé à 96k, .kkrieger.
    • Il estime que .kkrieger était une œuvre fascinante.
  • Recommandation de Cosmos Laundromat :

    • Bien que plus grand que 8 kB, il recommande Cosmos Laundromat de la Blender Foundation, un film d’animation sur un mouton, sombre de manière inattendue.
    • Il note qu’il existe une tendance à produire des films aux thèmes inhabituellement sombres pour des démos techniques.
  • Réaction positive au film :

    • Il le juge intéressant et surprenant, avec une fin imprévisible.
  • Éloges de la créativité :

    • Il admire le fait d’avoir créé une histoire créative et amusante dans un cadre aussi contraint.
    • Il aimerait en savoir plus sur les détails techniques et sur les méthodes utilisées pour réduire le nombre d’octets.
  • Souvenir de Razor 1911 :

    • La mention de « Razor 1911 » lui inspire une pure nostalgie.
  • Informations sur les catégories de la demoscene :

    • Il explique que 8KB est l’une des catégories de la demoscene et indique que Pouet en propose un bon index.