Sélectionner une page

Des attracteurs étranges en 3D dans Blender

Nous expliquions déjà ici (il y a plus de dix ans), avec des trémolos dans la voix, la découverte des attracteurs étranges par le météorologue Lorentz. Une découverte qui donna lieu à la théorie du chaos et son fameux « effet papillon », à la notion des dimensions fractionnaires et à la géométrie fractale.

Rappelons qu’il s’agit de visualiser dans l’espace l’évolution au cours du temps (et donc des itérations) d’un point soumis à des équations différentielles particulières. Le point qui se déplace devient alors cheminement et trace une courbe qui se met rapidement à tournoyer autour d’un ou plusieurs endroits de l’espace vers lesquels elle semble attirée : les fameux « attracteurs étranges »…

Il est possible de visualiser ces attracteurs avec tout un tas de programmes dédiés, beaucoup fonctionnant même en ligne grâce à des scripts javascript ou WebGL.

Notament, le plus complet, « Strange Attractors« , programmé par l’excellent physicien danois Mikael Hvidtfeldt Christensen auteur également de Structure Synth, ou Fragmentarium

Il est même possible d’exporter les modèles générés en .OBJ ou .STL pour les utiliser ou les imprimer directement. Oufff…

 

Généré et paramétré en ligne, exporté en .OBJ, importé, texturé et rendu avec Blender3D…

 

Mais on peut aussi les modéliser « en dur » dans des logiciels de 3D pour en disposer à des fins artistiques… Il existe plusieurs façons de faire, pour cela.

Utiliser un plugin « tout fait »

Attracteurs étranges : des courbes à foison !

La première méthode consiste à utiliser un plugin dédié. Il faut charger les plugins de l’excellent Mike Tyka sur son GitHub  et les installer dans Blender : un nouveau menu apparait dans « curves ». Magie : Le type s’est cogné toutes les équations différentielles des principaux attracteurs connus et les a codés en Python, pour notre plus grand plaisir…

Rien d’autre à faire en effet que de bidouiller les réglages de chaque courbe proposée puis de la « solidifier », la texturer et l’éclairer à la manière habituelle. C’est la solution des feignasses, la noble corporation des procrastineurs dont je m’honore de faire partie.

Des plugins similaires existent aussi pour Cinema 4D… Mais c’est une bonne entrée en matière dans le monde étrange des attracteurs du même nom.

 

En utilisant la courbe générée par le plugin, j’ai utilisé Geometry Nodes pour lui appliquer un profil (qui est une autre courbe fermée – un vecteur – sans « âme » – des maths, quoi…) et créer une existence « physique », pour ensuite lui appliquer une texture, etc. A titre d’exemple, voici le résultat d’une courbe simple « droite » combinée avec quelques autres courbes disponibles dans GeoNodes…

Mais on peut aussi utiliser en guise de profil un objet quelconque modélisé dans Blender et glissé/déposé dans GeoNodes. Grâce au node magique « Mesh to curve » qui, comme son nom l’indique, transforme un objet en courbe.

Ce peut être un plan (étoile), un plan déformé à la main (dans l’espace) ou carrément un objet 3D (roue dentée entière). Mais, pour une raison que je ne m’explique pas, il est impossible par contre de glisser directement une courbe dans GeoNodes. Bref.

 

C’est ainsi que j’ai produit ces différents modèles avec une texture de verre diffractant (voir plus bas). Aizawa, Dequan Li, Rikitake, Chen Lee, Shimizu : On notera, parmi ces chasseurs d’attracteurs, le grand nombre de chercheurs japonais, chinois ou d’origine asiatique (souvent américains)…

Qui dit procédural dit création d’un système entièrement paramétrable sans destruction. Ainsi, on peut ajouter autant d’attracteurs et de profils que l’on veut pour les combiner et créer des formes étonnantes. Et une animation réglée pour une forme est valable pour toutes les autres en changeant simplement les liaisons des nodes. Le temps gagné et la souplesse sont… Incomparables !

L’exemple en vidéo avec le premier attracteur découvert : le « Lorentz ».

 

Une autre animation « en boucle » avec 2 rotations (axes des Z et Y). C’est cette fois l’attracteur de Dequan Li profilé par une courbe quadratique de Bezier qui tourne comme un derviche. Eclairage de surface blanc venant du haut et deux points de lumière colorée…

 

 

Texturons !

L’un des avantages des logiciels de 3D est qu’on peut appliquer aux objets créés toutes les sortes de textures imaginables, réalistes ou non. En raison de l’étrangeté de ces attracteurs et donc de leur fragilité, j’optais, comme on l’a vu plus haut, pour du verre ! Il y a un « node » tout fait dans Blender pour créer cette texture transparente : « Glass BDSF ». Pourquoi se fatiguer ? Procédons aux essais avec cette pierre précieuse taillée pour l’exercice…

Verre simple

Peut mieux faire. Hein ? Même effet avec cette fois une fractale en « cube de Menger » en utilisant toujours l’éclairage global venant du haut mais en ajoutant une lampe orangée, à l’intérieur. C’est assez long à calculer en raison des réflexions infinies…

Mais il manque une touche de réalisme à ce verre là : son comportement à la lumière sous certains angles ; la fameuse diffraction en « arc en ciel »… Ni une ni deux, j’ajoutais les canaux nécessaires de réfraction rouge, vert, bleu grâce à une combinaison de shaders et de quoi moduler la puissance de l’effet.

Et, de fait, le réalisme augmente un peu… Beaucoup… Passionnément.

Pas de quoi casser trois pattes à un canard transparent, toutefois. Alors, j’essayais un prisme plan avec un éclairage de côté et cette fois l’effet est indubitable. Et pour certains, sans doute, imbitable. Pardon.

Rien n’oblige à utiliser du verre pour texturer l’objet, naturellement ! J’ai même fait des essais avec une texture de lumière émissive : c’est l’objet lui même qui éclaire la scène. Si !

A la main

Attracteur de Lorentz.

Mais, revenons à nos attracteurs. Une deuxième méthode plus « chinoise » consiste à tout coder dans GeoNodes… En effet, qui dit mathématiques et formules dit possibilité d’utiliser Geometry nodes pour les transcrire dans Blender comme nous l’avons déjà vu de nombreuses fois.

Il faudra récupérer auparavant (chinois) les équations différentielles de chaque attracteur pour les implémenter dans l’interface de GeoNodes. Ces formules sont de la forme ci-contre (par exemple, pour Lorentz).

La procédure à utiliser est expliquée en détail dans cette vidéo. C’est l’occasion de mieux comprendre les fantastiques possibilité de mariage de Blender avec les mathématiques fondamentales : rendre « visible » des concepts touffus. Et de découvrir aussi une tripotée de nouveaux nodes tous plus utiles les uns que les autres (Bake, Fillet Curve, etc). Vous l’avez compris, la modélisation procédurale est appelée à terme à remplacer complètement les autres types de modélisations…

 

Echecs et maths !

Il est prudent pour cela de charger la toute dernière version de Blender 4.1.1. Voici donc un aperçu du « moteur » de création avec les itérations et tout… Et le nouveau groupe, décisif, de nodes « repeat ». Le fait que son contenant brun ressemble à un cercueil est indépendant de ma volonté. Quoique… La formule mathématique des différents attracteurs sera injectée dans le slot « Vector » du node « Add » (coloré en jaune pour les daltoniens)…

Passons aux formules, donc… J’ai bidouillé à mon tour le procédé et ai décidé de me faire les dents avec l’attracteur Nose – Hoover (aspirer par le nez ?) dont la formule ci-contre ne me paraissait pas trop difficile à établir dans Blender

Victoire ! En quelques minutes, j’accouchais du fameux attracteur ! Avec 80.000 itérations tout de même (à 90.000, mon tout récent mac à puce silicon M2 gèle et je dois quitter l’application au chausse pied – en « hard reset »)… On est là, encore une fois, aux limites de la puissance actuelle des machines. Je sais, je n’ai pas la carte graphique qui… Gna gna gna…

D’autres exemples avec différents profils (cercle, quadratic Bezier) et textures (verre, métal réfléchissant) et pour la dernière image un léger flou de mouvement. Car, oui, bien entendu j’ai animé le bazar ! Et maintenant sur les 3 axes X, Y et Z.

 

Toujours construit avec mes petites pattes de devant, je ne suis pas peu fier de vous révéler l’attracteur Chen – Lee tout frais sorti des presses !

 

 

 

Mais il est temps d’abandonner ces plats de nouilles (chinoises) pour créer d’autres attracteurs et surtout des animations plus complètes en jouant sur quantité de paramètres qui deviennent cette fois accessible ! Comme le nombre d’itérations par exemple. La différence est de taille avec la première méthode et saute aux yeux ! On peut désormais avoir le contrôle sur tous les paramètres lors de la contruction de l’attracteur et non pas animer simplement l’objet fini.

Aizawa !

Essayons cette fois de générer l’attracteur Aizawa dont la formule, un peu plus complexe, est celle-ci :

 

Il s’agit maintenant de transcrire cette formule et ce n’est pas donné, comme çà, à, priori… Voyons cette formule ? Boah, c’est pas méchant : un seul node ! Malheureux… Ca m’a pris une heure pour traduire l’équation différentielle de l’attracteur Aizawa en « Math Nodes »…

Un « Tab » dessus et l’horreur se déploie dans toute sa complexité, devant nos yeux brouillés…

 

 

 

Voici les résultats :

 

Sympa cette pâte de verre qui coule sans fin… Mais en fait, elle ne coule pas, elle monte ! Je vais corriger çà et inverser le mouvement.

Et qu’est-ce que c’est que ce boudin qui finit abruptement ? D’abord, boucher le trou, pour éviter les courants d’air.

Ensuite, il y a bien un moyen de finir la courbe en finesse, non ? Voyons çà !

 

Mais oui: il suffit d’insérer un node « Spline Parameter » piloté par un « Float Curve » dont on dessine la courbe jusqu’à l’effet désiré. J’ai coloré les nodes incriminés en… Bleu ! Nan, j’déconne…

 

Animer çà ?!?

Quant au mouvement, il se trouve que je ne veux pas que l’attracteur tourne « verticalement » comme plus haut – auquel cas il suffit d’animer la rotation en Z de 360° à 0° – mais que l’objet soit incliné élégamment comme dans l’illustration.

Quand on essaye d’animer çà, le bazar tourne en tous sens et non pas sur lui-même ! C’est la cata.

 

 

 

Pour contourner ce désagrément (plusieurs kilos d’ongles rongés), on utilise généralement une imbrication « poupée russe » avec un objet neutre dont dépend un autre objet neutre et on anime chacun séparément. Relire la phrase en clignant légèrement des yeux et en soufflant profondément… Prise de tête garantie !

Mais une nouvelle fonction « Delta Transform » rend cette opération très facile. On procède en fait en deux temps : d’abord on anime la rotation sur le modèle vertical. Puis, grâce aux réglages de rotation « Delta », on incline la figure comme désiré. C’est cuit !

 

 

 

 

 

Halvorsen

Même punition avec la formule de l’attracteur Halvorsen. Suffisament compliquée pour occuper le badaud pendant quelques heures avec ses centaines de nodes. Mais une fois que c’est fait, on peut jouer sans fin !

 

 

 

 

D’autres logiciels ?

Pour finir ce billet qui, au fil des rendus, est devenu un roman, un petit détour par les fractales. Bien sûr, JWildfire n’est pas en reste et propose dans ses équations une variation « Lorentz_js » qui est bien le célèbre attracteur… L’occasion de créer vite fait cet espèce de double trou noir dans les profondeurs de l’espace… Où personne ne vous entendra crier.

 

Publié le Mai 8, 2024

Voir le site pro ?

Tous les tableaux

Tous les articles

0 commentaires