Ce que ressentent les murs

Un vidéoclip pour le compositeur Frank Horvat.
Été 2020

En octobre 2019, le compositeur torontois Frank Horvat publiait un album de musique de chambre minimaliste L’album s’intitule What Goes Around et vous pouvez l’écouter sur son site Web. C’est de l’excellente musique que je recommande fortement. et décidait du même coup d’engager des cinéastes pour transformer chacune des pistes de l’album en court métrage expérimental. Le projet comprend maintenant le travail des animatrices montréalaises Moïa Jobin-Paré et Sunny Stanila, de l’artiste torontois Matthew Maaskant, et le mien.

Vous pouvez regarder mon vidéoclip sur la chaîne YouTube de Frank. Il a été créé avec des logiciels libres et conçus expressément pour cette production. Le code écrit pour réaliser le vidéoclip est également distribué en code source libre, vous pouvez le trouver ici.

Mise en images d’une musique minimaliste

La piste de l’album avec laquelle j’ai choisi de travailler est un morceau mélancolique pour six clarinettes, intitulé What the Walls Feel as they Stare at Rob Ford Sitting in his Office Dans les notes qui accompagnent le morceau, Frank explique (en anglais) comment lui est venu ce titre hors du commun. (« Ce que ressentent les murs en regardant Rob Ford assis dans son bureau »). Le morceau est composé dans le style minimaliste, et conséquemment il présente de lentes transformations de motifs répétés, introduisant de nouvelles variations musicales à l’intérieur de balises très restreintes. Comme la plupart des pièces minimalistes, le morceau possède aussi très peu de variations dynamiques (très peu d’écart entre les sons les plus forts et les sons les plus doux), et il submerge plutôt les auditeur·trice·s dans une riche séquence de variations microscopiques.

J’adore la musique minimaliste, ayant passé un nombre d’heures incalculable avec les œuvres de géants du genre tels que Steve Reich, Meredith Monk et Julius Eastman, alors l’idée de traduire visuellement une telle musique m’a immédiatement semblée très excitante. Il m’a aussi semblé clair que l’animation géométrique et algorithmique était l’outil idéal pour représenter graphiquement cette idée des variations microscopiques à l’intérieur de balises restreintes. La musique minimaliste est fortement associée à la process music (« musique de processus »), que Steve Reich a décrit ainsi : « des pièces musicales qui sont littéralement des processus ». Dans le domaine de l’art algorithmique, tout est un processus — un algorithme étant simplement une liste d’instructions à suivre qui définit un processus. L’art algorithmique est ainsi souvent appellé art procédural.

Les pochettes de certains albums minimalistes importants, tels que Music for 18 Musicians et Drumming de Steve Reich et Two Solo Pieces de Jon Gibson, sont faites de denses motifs géométriques et offrent aussi de bons exemples de cette connivence conceptuelle entre la musique minimaliste et l’art algorithmique.

Recherche d’un système visuel

Il s’agit de ma deuxième expérience de réalisation d’animations algorithmiques dans le cadre d’une commande. La première fois, ce fut pour un vidéoclip réalisé par Pascaline Lefebvre, une illustratrice, autrice, designer et cinéaste montréalaise. La plus grande part de l’animation qui se trouve dans le vidéoclip a été dessinée à la main par Pascaline, et j’ai contribué en animant des volées d’oiseaux qui apparaissent dans quelques scènes. Les volées d’oiseaux étaient animées grâce à des algorithmes qui simulent le comportement d’oiseaux en vol. Ces algorithmes étaient inspirés des Boids de Craig W. Reynolds, dont j’ai appris l’existence grâce aux tutoriels vidéo de Daniel Shiffman. Le code écrit pour réaliser ce projet se trouve ici.

Cette fois-ci, j’ai entamé ma recherche visuelle en écoutant en boucle le morceau de Frank et en esquissant de nombreuses idées avec le logiciel p5.js. J’ai éventuellement eu une idée qui m’a semblé avoir un lien fort avec le morceau : un mur de petits points qui se meuvent en différentes chorégraphies et qui forment un ensemble de motifs complexes.

J’ai esquissé un prototype de cette idée avec l’éditeur Web p5.js. Le voici : Vous pouvez aussi voir cette esquisse juxtaposée au code qui la génère dans l’éditeur Web p5.js. L’éditeur vous permet de modifier n’importe quel élément de l’esquisse et de voir les résultats immédiatement.

Le mur était un bon point d’ancrage visuel pour tout le film, considérant le titre du morceau. Malgré que les points se meuvent par oscillations douces et harmonieuses, ils restent tout de même attachés à une grille rigide que l’on perçoit bien visuellement. Une certaine tension se crée entre ces deux phénomènes, entre oscillation et rigidité, et j’ai trouvé qu’elle répondait bien à la tension qui se ressent dans la musique. Le mur rumine, se contorsionne de diverses manières en réfléchissant à ce qu’il observe.

Création de logiciels

Le film a été réalisé entièrement par l’écriture de logiciels conçus expressément pour ce projet. Le film lui-même est un programme — lorsque ce programme est exécuté, il peut soit jouer le film ou en exporter les images finales sur le disque dur. Le film est distribué avec une licence de logiciel libre, et vous pouvez en trouver le code ici. Vous êtes libres de consulter ce code, de le modifier et d’en distribuer des copies modifiées. Mon travail était aussi grandement inspiré du logiciel p5.js, créé par Lauren McCarthy et son équipe.

Pour écrire le film, j’ai également utilisé un autre logiciel que je suis en train d’écrire, qui se nomme Les environs. Les environs est également distribué avec une licence en code source libre. Vous pouvez télécharger ce logiciel ici. Les environs est un environnement de programmation “à la volée” ou programmation in vivo (de l’anglais live coding) — il permet d’écrire et de modifier un programme pendant même son exécution. J’ai d’abord développé ce logiciel pour la performance en direct d’animation et de musique, et m’en suis servi lors de quelques concerts dans des salles de spectacles à Montréal en 2019. Adapter cet outil de performance aux besoins d’une production cinématographique était un défi intéressant. Je me suis retrouvé à construire différents modules pour couvrir toutes les étapes de la production : l’animation, le montage, la coloration, le compositing et le rendu.

Vous pouvez voir ci-dessous à quoi ressemble le logiciel lorsque je suis en train de travailler sur le film.

Le cadre du film couvre presque tout l’écran, et une part du code y est superposée (le code peut aisément être dissimulé afin de révéler l’image complète). En bas à droite se trouve la ligne du temps, où toutes les scènes sont représentées par des rectangles alternativement blancs ou gris. Tout en bas se trouvent les onglets, qui permettent d’afficher différentes sections du code (le code est séparé en de multiples fichiers). Le code peut être modifié alors même que le film joue, et tout changement est immédiatement appliqué et visible. Par exemple, alors que la ligne du temps est représentée visuellement, elle ne peut être modifiée que dans le code, et lorsque la durée d’une scène est changée dans le code, la ligne du temps visuelle est aussitôt mise à jour. Il est aussi possible d’afficher à plus grande échelle une toute petite section de la ligne du temps, afin de faire un travail de montage plus précis.

Coloration

Une des plus importantes améliorations que j’ai faites à mon logiciel d’animation dans le cadre de ce projet a été de rendre possible le mélange de multiples calques d’image en utilisant les diverses “fonctions de mélange” (blending functions) que l’on retrouve normalement dans Photoshop et After Effects (multiplication, addition, lumière douce, etc.). Plus précisément, mon système ne repose pas sur des piles linéaires de calques comme le font Photoshop et After Effects. Il permet plutôt des graphes non linéaires de calques, ou des réseaux de calques. Pour la petite histoire, la première fois que j’ai assemblé un film d’animation, j’utilisais un logiciel aujourd’hui très obsolète : USAnimation, par Toon Boom. Dans cet article d’awn datant de 2001, on peut voir une image du module “Camera” de USAnimation et l’on voit bien qu’il reposait sur cette idée très puissante des graphes de calques. Après avoir passé de USAnimation à After Effects il y a déjà longtemps, je me suis toujours senti très limité par le système des piles linéaires de calques d’After Effects. C’est un grand plaisir de retourner aux graphes après tout ce temps. J’ai trouvé une réplique de ces fonctions de mélange dans cette excellente note de blog datant de 2009, et comme ces fonctions sont distribuées en code source libre, il m’a été possible de les intégrer à mon système. Mon système de calques n’existe présentement pas sous aucune forme visuelle (il ne m’est donc pas possible de le montrer), alors la combinaison des calques se fait uniquement par l’écriture de code, et ce faisant il faut visualiser mentalement l’ordre des calques avant de voir apparaître les résultats.

Ce système de calques amélioré m’a été d’une grande utilité lors de la coloration du film. Je me suis retrouvé à faire beaucoup de recherches de coloration qui m’ont amené sur de nombreuses pistes très divergentes. Vous pouvez voir ci-dessous certains exemples des images générées lors de ces recherches. Mes recherches m’amenaient souvent vers des palettes de couleurs très vives et joyeuses, mais celles-ci ne fonctionnaient pas du tout avec l’ambiance du morceau musical. La musique avait besoin d’une palette plus sombre, plus réservée, un peu triste.

J’ai aussi fait beaucoup d’expériences de transitions de couleurs entre les scènes du film, mais ces transitions ne fonctionnaient pas non plus. La couleur musicale du morceau de Frank est tellement stable et trouve tant de sa force et de son caractère dans cette constance presque entêtée, que tout changement des couleurs semblait venir de nulle part — l’image semblait dériver soudainement sur un chemin différent, s’éloignant de la musique. Les transitions de couleurs donnaient aussi l’impression que j’essayais simplement d’introduire à tout prix toutes les palettes que j’avais créées dans le cadre de mes recherches, ce qui était effectivement le cas.

Les principes mathématiques du film

Le système mathématique sur lequel le film entier est construit est une grille à deux dimensions, avec un axe horizontal x et un axe vertical y. Dans chaque cellule de cette grille se trouve un point, qui possède ses propres coordonnées x et y. Par exemple, le point au coin supérieur gauche de la grille a la position x=0,y=0.

Chaque point de la grille est ensuite capable de se mouvoir dans l’espace. Sa position initiale dans l’espace est définie par les coordonnées x et y de la cellule dans lequel il se trouve. Et puis, la position finale p du point est calculée par l’application d’une transformation mathématique, qui est, pour la plupart du temps, une équation paramétrique. Par exemple, voici la transformation qui est appliquée dans l’animation qui se trouve plus haut dans cet article.

m=xy103+tpx=x+cos(m)py=y+sin(m)

Une copie identique de cette équation est envoyée à chacun des points de la grille, mais puisque chaque point a des coordonnées x et y différentes à l’intérieur de la grille, le résultat de l’équation est légèrement différent pour chaque point. Cette équation a trois variables d’entrée : x, y et t. Les variables x et y sont simplement la position que le point occupe dans la grille. La troisième variable, t, représente le temps. C’est une variable dont la valeur est d’abord 0, puis elle est incrémentée à chaque nouvelle image de l’animation. Dans ce cas-ci, elle est incrémentée de π/60. Cette valeur implique que la fonction se répétera à toutes les 120 images, puisque les fonctions sinus et cosinus se répètent sur 2π.Puisque la variable t représente le temps, elle représente aussi la vitesse à laquelle les points se meuvent — plus la valeur t est grande, plus la vitesse est grande. La variable t est la même pour chaque point ; le temps avance à la musique vitesse pour tous les points.

Une fois que cette formule est calculée pour chaque point, les valeurs px and py de chaque point déterminent sa position exacte dans l’espace. Un point a aussi la liberté de s’envoler à l’extérieur de la cellule qu’il occupe dans la grille — cette cellule ne sert qu’à donner au point sa position initiale, et non pas à restreindre ses mouvements.

Variations infinies

Ce que j’ai tout de suite aimé dans ce système lorsque j’ai commencé à l’élaborer, c’était l’évidente infinité des variations qu’il pouvait produire. En changeant chaque paramètre de la transformation mathématique, et aussi en écrivant de toutes nouvelles transformations, je pouvais obtenir une quantité infinie de chorégraphies de points.

Par exemple, l’équation ci-dessous m’a donné une grande surprise. L’animation qui en résulte ne ressemble plus à un motif d’oscillation harmonieuse (malgré qu’elle en soit un). Elle ressemble plutôt au résultat d’un algorithme qui opère sur la grille.

m=xy200.5px=x+mcos(y2+t40)700py=y+msin(x2+t40)700

Cette équation est utilisée pour la scène d’ouverture du vidéoclip, dans laquelle les points se meuvent en lignes droites, comme des automobiles coincées dans un embouteillage.

En conclusion

Répondre à la musique de Frank avec mes animations fut un projet très inspirant. J’ai aussi grandement apprécié cette opportunité de continuer à construire mes outils d’animation. Les résultats obtenus sont au final très différents de tout ce que je pouvais imaginer au départ. Il y a encore des millions de façons par lesquelles mon système pourrait être amélioré pour de futures productions, et j’espère avoir l’opportunité de continuer ce travail.