Scènes botaniques

Encore des notes de travail d’un regrettable ésotérisme.
9 juin 2018

Le rêve vers lequel tendent mes recherches sur la botanique algorithmique est de créer des scènes botaniques complètes, avec couleurs, feuillages, perspective atmosphérique, mouvements venteux dans les branches, etc. Pour tout dire, ça ne déplairait pas de devenir le Henri Rousseau de l’art algorithmique… Je suis loin d’en être là, mais j’y travaille. J’ai rassemblé ci-dessous plusieurs notes prises lors de l’élaboration d’un système qui me permettrait de gérer des scènes avec de multiples végétaux distribués dans un tableau.

Réflexions initiales

Il me faut créer un système de scènes botaniques qui puissent gérer des animations contenant de quantités quasi illimitées d’éléments. Pour cela, il faut séparer le concept du frame d’animation de celui du frameCount de p5.js, comme je l’ai fait dans ma machine à automates cellulaires.

Donc, je peux créer autant d’arbres que je veux, et ces arbres-là doivent s’ajouter aux objets d’une scene.

En même temps, une scene devrait être une opportunité de créer de nouveaux arbres… d’interpréter différemment leurs génotypes, etc.

Y aura-t-il plusieurs sortes de scènes ? Qu’est-ce qui pourrait séparer le mécanisme d’une scène de celui d’une autre ? Chaque scène doit gérer les images d’animation, peu importe la quantité d’objets à dessiner qu’elles contiennent. Elle doit aussi activer elle-même la croissance des plantes. C’est vrai qu’au final, j’imagine des scènes qui auraient différents niveaux de profondeur, différentes répartitions de ressources naturelles et différentes ressources naturelles. Donc, au final, oui, il y aura des scènes de natures très distinctes. Mais tout ce mécanisme est très compliqué à construire et rien n’est échafaudé pour l’instant.

Il y a donc une fonctionnalité importante qui est au-dessus de toutes les scènes imaginables : la possibilité de gérer les images d’animation et leurs objets... car au fond, chacune des scènes disparates devra, en fin de compte, envoyer à quelque chose une série d’objets à dessiner, et ce quelque chose devra gérer le dessin. Même les scènes multi-plans ne feront qu’envoyer leurs éléments de décors comme des formes à la machine à dessiner.

Il y a donc une machine à dessiner à concevoir. Une machine flexible et qui gère la mémoire intelligemment.

La machine paysagiste

Cette machine doit pouvoir recevoir des objets, en faire des listes, séparer cette liste en plus petites listes (à longueurs variables). Les objets qu’elle peut recevoir sont : des lignes, des polygones. Ces objets ont des coordonnées cartésiennes et une information de couleur. Cette information de couleur peut être un dégradé.

La machine doit aussi avoir un mode simple et un mode pointilliste. Lorsqu’elle se fait pointilliste, elle peint chaque forme avec une texture formée avec de petits points. Les détails précis de ces informations de textures doivent pouvoir changer (parce qu’il y a beaucoup de choses intéressantes à faire avec divers algorithmes pointillistes). Je pourrais aussi pousser plus loin l’idée du pointillisme : je pourrais avoir des masses de très petits points, chose que j’ai déjà réalisée, mais je pourrais aussi avoir des masses de gros points, plus proches de Seurat. Et ces gros points pourraient eux-mêmes être constitués de masses de petits points (du grain de film, finalement). Et si je veux pousser les hommages à l’impressionnisme plus loin, je pourrais aussi jouer avec le fondu enchaîné, créer des scènes où tout serait en double exposition comme à la Frédéric Back et L’homme qui plantait des arbres, et comme à la Caroline Leaf.

Couleurs et niveaux superposés

Comment construirai-je les niveaux superposés ? Premièrement, je dois avoir un prototype Hill, chaque niveau représentant une colline. Une scène doit aussi avoir une propriété sky, qui sera une information de dégradé de couleurs.

Les collines devraient toujours être créées en groupes puisque chaque colline doit répondre aux collines adjacentes. Elles seront créées avec du bruit de Perlin tridimentionnel. Donc, un groupe de collines doit avoir ces propriétés :

let Terrain = function() {
    this.amountOfHills = 5;
    // A float between 0 and 1, 
    // 0 being the top of the scene, 1 being the bottom.
    this.horizon = 0.5;
    this.width = 300;
};

La fréquence et l’amplitude du bruit de Perlin est ici la question la plus intéressante.

Couleurs

Les couleurs devraient aussi pouvoir changer avec le temps ! Ce sera un élément déterminant pour la beauté de la chose.

Voici comment je définissais les couleurs d’un dégradé d’une scène dans Les joies confuses :

this.localValues.gradient = [{
    offset: 0,
    r: 255,
    g: 255,
    b: 0
}, {
    offset: 0.25,
    r: 55,
    g: 120,
    b: 0
}, {
    offset: 0.8,
    r: 255,
    g: 50,
    b: 0
}];

J’étais ainsi limité à des dégradés à trois couleurs. Devrais-je encore me limiter à trois couleurs ? Ce n’est pas bien compliqué d’y aller pour une quantité n de couleurs, mais est-ce utile ? Également, je définissais mes dégradés de manière complètement manuelle, il serait plus intéressant d’y aller cette fois-ci de façon générative, en utilisant mon système de palettes de couleurs.

Perspective atmosphérique

La définition de la perspective atmosphérique pourrait aussi être une fonction trigonométrique ! La perspective atmosphérique répond toujours à un nombre réel situé entre 0 et 1, qui représente la distance d’un objet avec la « caméra ». L’axe des z est défini ainsi : le premier plan est toujours à la position 0, et chaque plan suivant incrémente l’axe des z de 1. Et pour calculer la perspective atmosphérique, on utilise la valeur d’un objet sur son axe des z et on envoie cette valeur à une fonction trigonométrique (une palette de couleur).

Une plante doit pouvoir être positionnée à diverses hauteurs sur une colline. Et la perspective atmosphérique qui est appliquée sur cette plante doit se faire en fonction de cette hauteur.

Nuages

Oh, ce serait intéressant d’avoir des nuages !

Contexte

Cette note de blog fait partie de mon projet de recherche Vers un cinéma algorithmique, démarré en avril 2018. Je vous invite à consulter la toute première note du projet pour en apprendre davantage.