Shapemaker

shapemaker written in bold black text, with a colorful mosaic of squares containing various shapes inside

Je voulais m’essayer à l’art génératif, et, comme premier projet, créer un moyen de générer de petites formes en icône à partir d’un ensemble prédéfini de lignes, courbes et cercles possibles

Réduire l’ensemble des possibilités pour dompter le chaos du hasard

Lorsqu’on laisse le hasard contrôler les décisions dans un processus créatif, il est important de restreindre l’ensemble des possibilités, car un chaos total s’ensuit sans contraintes. C’est alors une question de trouver le bon nombre de possibilités, car il y a un compromis entre un minimum esthétique garanti et un manque de générations intéressantes.

J’ai décidé de trois contraintes:

  • Un ensemble fixe de formes possibles: courbes de Bézier quadratiques vers l’extérieur et vers l’intérieur, trois tailles de cercles, lignes et polygones (avec une limite sur le nombre de segments formant le polygone)
  • Un ensemble fixe de positions possibles pour ces formes: elles commencent et se terminent sur des “points d’ancrage” fixes: sud-ouest, sud, sud-est, est, nord-est, nord, nord-ouest, ouest et centre (j’ai ensuite généralisé cela à n’importe quel point d’une grille contrôlable, ce qui était également utile pour contrôler le rapport hauteur/largeur de l’image finale)
  • Un ensemble fixe de couleurs: j’ai réutilisé l’idée de limiter les couleurs à une palette de thème d’éditeur de code de Abstract wallpapers per color scheme, cette fois avec du noir, du blanc, du rouge, du vert, du bleu, du jaune, de l’orange, du violet, du marron, du cyan, du rose et du gris.

L’idée était ensuite de générer des SVG à partir d’objets sélectionnés au hasard qui respectent ces contraintes.

Clips musicaux

J’ai ensuite eu l’idée de lier l’évolution de ces formes à une musique, et j’ai décidé d’écrire une logique pour rendre des vidéos en se connectant à des moments clés d’une chanson: marqueurs de temps, définis dans le logiciel de création musicale, nouveaux beats (pour synchroniser quelque chose avec le beat), changement du volume des instruments individuels (pour synchroniser quelque chose avec par exemple les notes de la basse), etc.

J’ai d’abord eu du mal à garder les images en synchronisation avec le beat, mais j’ai finalement réussi en itérant sur le nombre de millisecondes au lieu du nombre d’images lors de la génération des images de la vidéo.

Comme le générateur de formes produit des SVG, les images sont converties en PNG avec ImageMagick, puis concaténées avec l’audio en une vidéo à l’aide de ffmpeg.

Code source
github.com

Temps passé

79 heures 40 minutes

réalisé avec

  • Rust
  • SVG