- petitagore
Comment passer une valeur d'un paquet de GN à un autre?
Mar 25 Juil - 9:07
Bon, alors déjà, un petit croquis valant mieux qu'un long discours, voici pour vous donner une idée de ce que je cherche à faire...
Chaque élément bleu et jaune, appelons ça une planche; une série de dix planches, appelons-la une palissade; l'ensemble de quatre palissades, appelons-ça un enclos.
A titre d'exercice (je débute), je m'essaie à faire ça en Geometry Nodes, ce qui n'est pas bien malin. Mais comme j'ai un certain goût de la lisibilité et une sainte horreur de la programmation spaghetti, j'ai fait un paquet de nodes pour la planche, un paquet de nodes pour la palissade, un paquet de nodes pour l'enclos. Tout cela, bien sûr, est paramétrable ou voué à l'être: je peux changer la hauteur, la largeur et l'épaisseur de mes planches (voire leur orientation), le nombre de planches d'une palissade, les proportions de l'enclos.
Ca marche, alléluia.
Mais je bute sur un problème probablement très simple: chaque planche ayant pour origine son centre de gravité (à la base, c'est un cube déformé), quand j'en change la hauteur, ça modifie son positionnement en Z: si la planche est moins haute, la palissade se décolle du sol, si elle est plus haute la palissade s'y enfonce.
Je voudrais que le paquet de nodes de ma palissade puisse adapter le positionnement des planches en fonction de leur hauteur... qui dépend du paquet de nodes de la planche.
Comment s'y prendre pour passer une valeur (la hauteur) d'un paquet de nodes à un autre?
En programmation, ce serait très facile (d'ailleurs je pourrais effectivement contourner la difficulté avec un script Python). Mais comment faire ça... avec des nodes?
Piste (peut-être): le noeud "Store Named Attribute" permet quelque chose de très voisin de ce que je cherche à faire quand on veut faire passer une valeur des Geometry Nodes vers le Shader Editor: on donne un nom au bazar qu'on a besoin de transférer, on ajoute un noeud "Attribute" dans le Shader Editor en lui indiquant le même nom, et hop, on paramètre les nodes du Shader Editor comme on veut avec la valeur transmise. Mais moi, je ne veux pas passer ma valeur des Geometry Nodes vers le Shader Editor, mais d'un paquet de Nodes à un autre paquet de Nodes.
Y a-t-il moyen? Voire, soyons fou, quelqu'un aurait-il la bonté de me montrer sur un exemple?
Merci d'avance.
Chaque élément bleu et jaune, appelons ça une planche; une série de dix planches, appelons-la une palissade; l'ensemble de quatre palissades, appelons-ça un enclos.
A titre d'exercice (je débute), je m'essaie à faire ça en Geometry Nodes, ce qui n'est pas bien malin. Mais comme j'ai un certain goût de la lisibilité et une sainte horreur de la programmation spaghetti, j'ai fait un paquet de nodes pour la planche, un paquet de nodes pour la palissade, un paquet de nodes pour l'enclos. Tout cela, bien sûr, est paramétrable ou voué à l'être: je peux changer la hauteur, la largeur et l'épaisseur de mes planches (voire leur orientation), le nombre de planches d'une palissade, les proportions de l'enclos.
Ca marche, alléluia.
Mais je bute sur un problème probablement très simple: chaque planche ayant pour origine son centre de gravité (à la base, c'est un cube déformé), quand j'en change la hauteur, ça modifie son positionnement en Z: si la planche est moins haute, la palissade se décolle du sol, si elle est plus haute la palissade s'y enfonce.
Je voudrais que le paquet de nodes de ma palissade puisse adapter le positionnement des planches en fonction de leur hauteur... qui dépend du paquet de nodes de la planche.
Comment s'y prendre pour passer une valeur (la hauteur) d'un paquet de nodes à un autre?
En programmation, ce serait très facile (d'ailleurs je pourrais effectivement contourner la difficulté avec un script Python). Mais comment faire ça... avec des nodes?
Piste (peut-être): le noeud "Store Named Attribute" permet quelque chose de très voisin de ce que je cherche à faire quand on veut faire passer une valeur des Geometry Nodes vers le Shader Editor: on donne un nom au bazar qu'on a besoin de transférer, on ajoute un noeud "Attribute" dans le Shader Editor en lui indiquant le même nom, et hop, on paramètre les nodes du Shader Editor comme on veut avec la valeur transmise. Mais moi, je ne veux pas passer ma valeur des Geometry Nodes vers le Shader Editor, mais d'un paquet de Nodes à un autre paquet de Nodes.
Y a-t-il moyen? Voire, soyons fou, quelqu'un aurait-il la bonté de me montrer sur un exemple?
Merci d'avance.
- busanga
Re: Comment passer une valeur d'un paquet de GN à un autre?
Mar 25 Juil - 9:17
Effectivement, la transformation Scale se fait par rapport à l'origine. Une première solution, la + simple sans doute, serait de décaler dès le départ le cube unité en Z pour que sa face inférieure colle au sol.
Sinon tu as un nœud qui te pernet de récupérer la Bounding Box d'une géométrie, avec ses deux coins extrêmes (de type Vector) Min et Max. En isolant la coordonnée Z de Max - Min tu auras la hauteur de ta planche.
@Redstar : si les questions sur les GN se multiplient, est-ce qu'on ne va pas prévoir une catégorie ou sous-catégorie dédiée quelque part ?
Sinon tu as un nœud qui te pernet de récupérer la Bounding Box d'une géométrie, avec ses deux coins extrêmes (de type Vector) Min et Max. En isolant la coordonnée Z de Max - Min tu auras la hauteur de ta planche.
@Redstar : si les questions sur les GN se multiplient, est-ce qu'on ne va pas prévoir une catégorie ou sous-catégorie dédiée quelque part ?
- petitagore
Re: Comment passer une valeur d'un paquet de GN à un autre?
Mar 25 Juil - 9:45
J'ai essayé l'une et l'autre des méthodes que tu indiques, et bien sûr ça marche, mais j'ai vraiment le sentiment d'employer un marteau-pilon pour écraser une mouche... Ca m'étonnerait que les développeurs de Blender n'aient pas prévu un truc plus simple (d'autant qu'ils ont bel et bien mis en place un procédé très similaire à ce que je veux faire pour passer des valeurs des GN vers le Shader Editor).
- busanga
Re: Comment passer une valeur d'un paquet de GN à un autre?
Mar 25 Juil - 10:08
Quand tu parles de "paquets de nodes", c'est des Node Groups ou simplement des regroupements en Frames ?
Si tu crées un Node Group pour modéliser une planche, il prendra vraisemblablement en Input sa hauteur pour redimensionner le cube initial, tu n'as qu'à la brancher sur l'Output pour récupérer sa valeur en sortie et l'utiliser pour autre chose.
Si tu crées un Node Group pour modéliser une planche, il prendra vraisemblablement en Input sa hauteur pour redimensionner le cube initial, tu n'as qu'à la brancher sur l'Output pour récupérer sa valeur en sortie et l'utiliser pour autre chose.
- Blender Moonboots
Re: Comment passer une valeur d'un paquet de GN à un autre?
Mar 25 Juil - 10:08
Bonjour @petitagore j'ai déplacé le sujet dans la catégorie Questions & Réponses qui me semble plus adaptée
- petitagore
Re: Comment passer une valeur d'un paquet de GN à un autre?
Mar 25 Juil - 10:18
busanga a écrit:Si tu crées un Node Group pour créer une planche, il prendra vraisemblablement en Input sa hauteur
En effet...
tu n'as qu'à la brancher sur l'Output pour récupérer sa valeur en sortie et l'utiliser pour autre chose.
Brancher une valeur sur l'Output, je sais faire (j'ai vu que c'était possible... en revanche je n'ai pas bien vu à quoi ça pouvait servir!)... mais je n'ai pas la moindre idée de ce qu'il faudrait faire pour exploiter ça dans un autre ensemble de Geometry Nodes (si tout est dans le même paquet de spaghetti, évidemment ça marche, mais ce que je cherche à éviter c'est justement les énormes paquets de spaghetti).
Je m'attendais à ce qu'on trouve un socket supplémentaire dans un Node "Object Info" quand on appelle un objet avec un modificateur GN dans un autre groupe de GN... mais il me semble que ça n'est pas le cas.
C'est peut-être une question idiote, hein! Je suis un débutant en GN... Faut donc pas hésiter à me faire un dessin... (ou une copie d'écran)
- busanga
Re: Comment passer une valeur d'un paquet de GN à un autre?
Mar 25 Juil - 10:26
Je parle de l'Output du Node Group, pas de celui du modifcateur Geometry Nodes dans son ensemble (qui est en fait lui-même un Node Group que tu peux appeler dans un autre, voilà à quoi peut servir son Output). Je peux te préparer un exemple, je t'envoie ça dans la journée.
- petitagore
Re: Comment passer une valeur d'un paquet de GN à un autre?
Mar 25 Juil - 10:56
@busanga Sympa, merci.
- busanga
Re: Comment passer une valeur d'un paquet de GN à un autre?
Mar 25 Juil - 11:55
Voilà un exemple basique. Sélectionne tout ce qu'il y a dans le Frame puis Add / Group / Make Group. Tu n'observeras quasiment aucun changement visuellement dans cet exemple, mais en fait tu auras créé un Node Group (dont tu peux sortir avec Tab), tu peux réorganiser les entrées et sorties, les renommer dans le menu N / Group du Node Group et renommer le Node Group au niveau supérieur (celui du modificateur - on se croirait dans Inception ) dans le menu N / Node / Properties. Petite astuce, isole les entrées et sorties avec des Layout / Reroute comme sur mon image avant de créer le groupe, c'est pas indispensable mais vite pratique quand tu commences à élaborer des Node Groups plus touffus.
C'est pas forcément limpide comme explication, mais je pense que si tu fais la manip, tu comprendras vite le principe.
C'est pas forcément limpide comme explication, mais je pense que si tu fais la manip, tu comprendras vite le principe.
- petitagore
Re: Comment passer une valeur d'un paquet de GN à un autre?
Mar 25 Juil - 12:18
@busanga Je pense que je comprends mais... ça me semble n'être exploitable que si tout ça se passe déjà dans un ensemble de Geometry Nodes plus vaste, où on va pouvoir tirer un spaghetti depuis "hauteur" vers un autre paquet de noeuds... On ne passe pas de valeur d'un groupe de GN indépendant à un autre lui aussi indépendant: on définit seulement un sous-ensemble dans un gros groupe de GN où on met tout tout tout (sur deux niveaux hiérarchiques, en somme, le niveau "enclos" englobant un sous-ensemble "palissade").
J'admets que comme ça on peut déjà faire des choses bien plus propres que si on laisse tout mélangé, mais je ne suis pas sûr qu'on puisse répéter l'opération au sein même du Group Node "palissade", pour y créer un troisième niveau hiérarchique avec dedans un Group Node "planche". Il me semble avoir déjà essayé ça et constaté que ça n'était pas possible.
Par ailleurs, même si ça marche, ça fait créer d'abord l'ensemble, puis les composants dedans (d'abord l'enclos, puis la palissade dans l'enclos), alors que dans ma tête à moi il paraît plus intuitif de créer l'ensemble à partir des composants: une fois que j'ai défini les palissades, je crée l'enclos.
Je vais essayer de creuser l'idée. Merci du coup de main en tout état de cause.
J'admets que comme ça on peut déjà faire des choses bien plus propres que si on laisse tout mélangé, mais je ne suis pas sûr qu'on puisse répéter l'opération au sein même du Group Node "palissade", pour y créer un troisième niveau hiérarchique avec dedans un Group Node "planche". Il me semble avoir déjà essayé ça et constaté que ça n'était pas possible.
Par ailleurs, même si ça marche, ça fait créer d'abord l'ensemble, puis les composants dedans (d'abord l'enclos, puis la palissade dans l'enclos), alors que dans ma tête à moi il paraît plus intuitif de créer l'ensemble à partir des composants: une fois que j'ai défini les palissades, je crée l'enclos.
Je vais essayer de creuser l'idée. Merci du coup de main en tout état de cause.
- busanga
Re: Comment passer une valeur d'un paquet de GN à un autre?
Mar 25 Juil - 12:31
Il faut voir un Node Group comme un sous-programme, tu peux l'appeler plusieurs fois, à différents niveaux (sauf dans lui-même : pas moyen de faire des fonctions récursives donc), et même depuis un autre modificateur GN (il apparaît, avec le nom que tu lui auras donné, dans le menu Add / Group - et je crois même que tu peux l'appeler depuis le menu des modificateurs).
Tu peux donc très bien faire un modificateur GN sur un mesh quelconque qui te sert de labo où tu stockes tous les outils que tu te fabriques ainsi, en attendant de les utiliser ailleurs (et même dans un autre .blend avec un Append).
Tu peux donc très bien faire un modificateur GN sur un mesh quelconque qui te sert de labo où tu stockes tous les outils que tu te fabriques ainsi, en attendant de les utiliser ailleurs (et même dans un autre .blend avec un Append).
- petitagore
Re: Comment passer une valeur d'un paquet de GN à un autre?
Mer 26 Juil - 9:35
busanga a écrit:Il faut voir un Node Group comme un sous-programme.
Voilà. C'est exactement ça que je soupçonnais et n'arrivais pas à comprendre... et d'ailleurs, honnêtement, maintenant que j'ai à peu près compris je trouve que ça n'est pas très facile à expliquer, particulièrement pas à des gens n'ayant pas de notion de programmation. Mais il se trouve que j'en ai donc je retrouve assez vite mes marques... et je suis aussitôt possédé de l'envie de marier ça avec des scripts Python, ce qui de toute évidence est parfaitement possible.
Le noeud du problème (pour moi, du moins): au lieu d'intégrer dans le paquet de spaghetti tout en haut de la hiérarchie un objet avec un noeud Object Info, il faut intégrer un Node Group de rang hiérarchique inférieur, applicable à un tel objet -- car on peut baptiser ses propres Node Groups, puis les appeler dans l'éditeur de noeuds (avec Shift-Add).
C'est le genre d'"explications" que je déteste: le seul moyen de comprendre ce qu'elles racontent, c'est d'avoir déjà parfaitement compris ce qu'elles sont censées expliquer... Enfin bref, eurêka, j'ai pigé, et un jour s'il plaît à Dieu j'arriverai à en parler clairement.
Prochaine étape: faire une petite vidéo pour montrer de quoi je parle à défaut de réussir à l'expliquer.
- petitagore
Re: Comment passer une valeur d'un paquet de GN à un autre?
Ven 4 Aoû - 10:27
La vidéo pédagogique à laquelle j'espérais aboutir est faite, et je l'ai mise là...
Comme c'est beaucoup de travail, j'ouvrirai peut-être carrément un nouveau topic pour en signaler l'existence... mais y a pas le feu.
Comme c'est beaucoup de travail, j'ouvrirai peut-être carrément un nouveau topic pour en signaler l'existence... mais y a pas le feu.
Blender Moonboots aime ce message
- busanga
Re: Comment passer une valeur d'un paquet de GN à un autre?
Ven 4 Aoû - 11:10
Concernant la conversion des degrés en radians, il y a déjà des opérations disponibles pour ça (to Radians et to Degrees) dans le nœud Utilities / Math.
Dans la même série je viens de voir qu'il y a maintenant un nœud Mix Vector qui est quand même bien pratique pour faire calculer un milieu autrement qu'avec un Add Vector suivi d'un Scale 1/2.
C'est vrai que les GN peuvent sembler compliqués mais au fur et à mesure qu'on pratique on en comprend la logique. Les outils sont plus pensés pour répondre à plusieurs besoins similaires qu'un besoin spécifique. À titre d'exemple j'ai bossé ces jours-ci sur des courbes de Bézier, c'est la même fonction (Sample Curve) qui permet de récupérer le point de départ de la courbe, ou son point d'arrivée, un point de contrôle, une tangente, une normale... et au final ça permet des "codes" assez concis malgré tout.
Dans la même série je viens de voir qu'il y a maintenant un nœud Mix Vector qui est quand même bien pratique pour faire calculer un milieu autrement qu'avec un Add Vector suivi d'un Scale 1/2.
C'est vrai que les GN peuvent sembler compliqués mais au fur et à mesure qu'on pratique on en comprend la logique. Les outils sont plus pensés pour répondre à plusieurs besoins similaires qu'un besoin spécifique. À titre d'exemple j'ai bossé ces jours-ci sur des courbes de Bézier, c'est la même fonction (Sample Curve) qui permet de récupérer le point de départ de la courbe, ou son point d'arrivée, un point de contrôle, une tangente, une normale... et au final ça permet des "codes" assez concis malgré tout.
petitagore aime ce message
Re: Comment passer une valeur d'un paquet de GN à un autre?
Ven 4 Aoû - 23:47
Si tu le souhaite, un youtubeur fait des tutos de programmeur analyste .
https://www.youtube.com/@BlenderPro_
Ici une playlist sur les bases des nodes a la façon analyste^^ :
https://www.youtube.com/watch?v=rhC-11777fc&list=PLnaIgidp72QXU6K1JqAuWygtZhNpQ9WuI
Bonne soirée.
- petitagore
Re: Comment passer une valeur d'un paquet de GN à un autre?
Sam 5 Aoû - 11:26
@meltingman Merci de ces liens. J'ai le sentiment qu'à ce stade du récit j'ai intérêt à me faire encore pas mal la main sur des exercices sensiblement plus simples que ce que qu'expliquent ces vidéos... mais ça pourra me servir plus tard (genre: dans quelques mois).
- petitagore
Re: Comment passer une valeur d'un paquet de GN à un autre?
Jeu 7 Sep - 9:33
Mes idées sur la structuration logique des Geometry Nodes s'étant un peu clarifiées, j'ai pu accoucher d'une seconde vidéo explicative d'un gros quart d'heure, pas parfaite mais quand même très chargée en informations utiles que j'aurais été bien content de pouvoir trouver quelque part sur YouTube... Ca peut peut-être servir à d'autres que moi. Voici:
Les critiques (constructives) sont bienvenues.
Les critiques (constructives) sont bienvenues.
busanga aime ce message
- busanga
Re: Comment passer une valeur d'un paquet de GN à un autre?
Jeu 7 Sep - 14:18
Tout à fait d'accord avec ton analyse à 1:30, combien d'heures j'ai passées à préparer de quoi faire en 3 secondes ce que j'aurais fait en 30 et à prévoir des tas de paramétrages au cas où il me viendrait l'idée de vouloir un jour mettre 3 pattes à un canard .
Edit : pour renommer un Node Group (à 10:21 dans ta vidéo), une alternative à ta méthode est de donner le nom dans l'onglet Node (celui en-haut de celui nommé Group où tu as renommé les sockets d'Input/Output), mais en se plaçant au niveau supérieur (celui où le groupe n'est pas développé). Ce n'est pas le label mais le champ dans la partie Properties qu'il faut modifier.
Je te concède que c'est pas beaucoup plus intuitif que ta méthode.
Edit : pour renommer un Node Group (à 10:21 dans ta vidéo), une alternative à ta méthode est de donner le nom dans l'onglet Node (celui en-haut de celui nommé Group où tu as renommé les sockets d'Input/Output), mais en se plaçant au niveau supérieur (celui où le groupe n'est pas développé). Ce n'est pas le label mais le champ dans la partie Properties qu'il faut modifier.
Je te concède que c'est pas beaucoup plus intuitif que ta méthode.
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|