Petit défi pour amateurs de Geometry Nodes

Published 2023-05-13
Voici un maillage représentant la façade d'une maison. Il n'est vraiment pas d'une complexité délirante, il comporte 84 vertex, c'est-à-dire 42 côté recto et autant côté verso, et exactement 100 faces (j'aurais voulu le faire exprès que je n'y serais pas parvenu).

Toute la difficulté de l'exercice va consister à déterminer les coordonnées de ces quelque trente points avec les plus extrêmes précision et régularité, et d'autoriser les tâtonnements: il doit être possible de rendre la façade un peu plus haute, un peu moins, le toit plus ou moins pointu...

Une autre façon de le dire est qu'il faut rendre ce maillage modifiable en fonction d'une douzaine de paramètres: hauteur, largeur et écartement des éléments, épaisseur du mur, pente du toit.

Je suis quelqu'un de méthodique, et pour moi une grande partie du travail va consister à dessiner un schéma explicatif. Cela peut être fait non seulement hors de Blender, mais même sans aucun outil informatique. Ici, j'ai utilisé un logiciel de dessin pour la lisibilité, mais un bout de papier et un crayon suffisent pour donner des noms aux cotes pertinentes, et aussi pour numéroter les vertex, nous allons voir pourquoi.

Une fois qu'on a des idées claires sur le nom des cotes horizontales et verticales et les numéros des vertex, il faut calculer les valeurs pertinentes, et ça n'est vraiment pas bien malin. Je suppose que les fanatiques des Geometry Nodes feraient ça avec des noeuds, mais pour moi que les listings Python n'effraient pas,il suffit d'écrire quelques lignes de code tellement élémentaires qu'à mon avis elles seraient à la portée d'un élève de quatrième -- bon, on peut pousser jusqu'à la troisième si on veut s'autoriser un tout petit peu de trigonométrie (ici pour pouvoir jouer facilement avec la pente du toit), mais dans la quasi-totalité des cas la maîtrise des quatre opérations est suffisante.

Je n'exclus pas qu'il soit possible de noter les valeurs pertinentes directement dans Blender, mais moi je fais cela dans un petit fichier extérieur à la syntaxe simplissime: à raison d'une ligne de texte par point, on note dans l'ordre les numéros de tous les points suivis de leurs trois coordonnées x, y et z, et c'est le programme Python qui, après avoir effectué les calculs, note les valeurs pertinentes aux bons endroits -- ce qui, là encore, n'est vraiment pas bien malin: ça demande un peu de saisie mais très peu d'attention, et même si on est distrait au point de ne pas réussir à indiquer du premier coup les noms pertinents pour les valeurs d'abscisse et d'ordonnée, de telles erreurs seraient très faciles à repérer comme à corriger.

Les points étant définis, il reste à créer les faces, simplement en faisant l'inventaire des vertex qui délimitent leurs périmètres. En fait, c'est tellement simple qu'on pourrait noter ça à la main directement dans le fichier de texte descriptif, mais pour l'automatisation il est préférable de demander au listing Python de s'en charger, ce qui est juste un tout petit peu plus bavard.

Bon, on a donc noté toutes les indications pertinentes, ou plus exactement on a écrit un programme Python qui les note, et il ne reste qu'à traduire ces indications dans une syntaxe qui permette leur importation dans Blender. A ce jour et à ma connaissance, c'est le format d'Alias Wavefront, avec l'extension .OBJ, qui constitue le moyen le plus adéquat pour faire entrer des données 3D dans Blender. Ce format utilise une syntaxe sensiblement plus complexe que celle que nous venons de voir, mais dont la logique est assez similaire pour qu'une petite moulinette Python puisse effectuer une traduction automatisée en un tournemain -- raison pour laquelle, comme Ducros, je me suis décarcassé à écrire un tel convertisseur. Il peut être utilisé par toute personne qui en posséderait une copie, et comme le vieux militant du logiciel libre que je suis, je me ferai un plaisir de vous la fournir pour peu que vous me le demandiez.

Soit dit en passant, vous pouvez même avec très peu d'adaptations faire tourner ce convertisseur à l'intérieur de Blender si vous travaillez sur l'infect Windows où Python n'est pas installé en standard -- mais même sous Windows on peut installer Python, qui est lui aussi un logiciel libre, et alors ce sera encore beaucoup plus simple.

Si les Geometry Nodes étaient conformes à ce que j'ai envie de leur demander, on pourrait faire tout ça à l'intérieur même de Blender, et tester des variantes de ma façade en direct, à la souris, sans même devoir subir ce délai de vingt secondes.

Mon défi aux amateurs de Geometry Nodes est donc le suivant: faites tout ce que je viens de faire avec des Nodes... et surtout apprenez-moi à le faire.

All Comments (1)