Els Geometry Nodes són un sistema de programació visual que permet crear i modificar objectes 3D de manera procedimental (en lloc de "dibuixar" la forma a mà, definim una seqüència lògica de regles i funcions matemàtiques que la generen) i no destructiva (podem alterar qualsevol paràmetre inicial, com el radi d'una columna o el nombre de finestres d'un edifici, sense haver de tornar a començar des de zero, ja que el sistema recalcula el resultat a l'instant). En lloc de treballar amb eines de modelat tradicionals, connectem "nodes" en un esquema de flux, de manera similar a com s'organitza un algoritme o una funció composta.
La seva funció més destacada és la distribució d'instàncies. Imagina que has de crear un bosc: en lloc de col·locar cada arbre un per un, pots programar un sistema que els distribueixi sobre un pla, controlant-ne la densitat i el tamany mitjançant mapes de dades o soroll aleatori. També permeten el disseny paramètric, on un sol objecte pot transformar-se en milers de variants només movent uns quants lliscadors, ideal per crear escenaris urbans o estructures geomètriques complexes que s'ajusten a les dimensions que nosaltres vulguem.
A més, els Geometry Nodes permeten interactuar amb la física i les dades de l'escena. Podem fer que l'herba s'aparti quan un personatge camina pel damunt o que la il·luminació d'una façana canviï segons la proximitat d'una font de llum, tot de manera automàtica. És molt útil per a la creació visual d'avantguarda, des de videojocs fins a efectes especials de cinema.
Per a explicar el funcionament dels Geometry Nodes, utilitzarem un recurs educatiu de CrossMind Studio (un canal de youtube de referència en aquest àmbit) que detalla com automatitzar la distribució d'objectes mitjançant el point scattering (una tècnica que "dispersa" punts sobre una superfície per a crear una distribució orgànica d'elements). En lloc de col·locar manualment milions d'objectes —cosa que seria una feina interminable—, aquest sistema genera una "pluja" de punts que serveixen de guia. Aquesta tècnica, anomenada Points and Instancing (el procés de substituir cada punt d'aquesta guia per un "clon" d'un objecte original per a estalviar memòria), ens permet gestionar escenes d'una complexitat immensa amb una sola estratègia global, fent que l'ordinador treballi de manera molt més eficient
https://youtu.be/KntGPD1k7v0?si=fjBWG83huPM9e3Ww
Començarem utilitzant un entorn de treball senzill. Des de l'espai de treball de "Geometry nodes" deixem dues finestres verticals. Una amb el 3D viewport i l'altre amb l'editor de geometry nodes, que té un funcionament molt semblant al Shader editor, que també funciona a través de nodes.
A continuació, a la finestra de l'editor de geometry nodes crearem un projecte amb un sol pla. Crearem un nou node a la finestra d'edició de geometry nodes.
A continuació afegirem un node grid ( com un pla però s'hi pot definir una graella de files i columnes) i el connectarem enlloc del Group Input, al Group output. Farem que aquesta graella tingui 46 vèrtex y i 46 vèrtex X
A continuació amb la combinació de tecles shift + a, afegirem un node cube amb les següents mides: x->0,01, y->0,01, z->0,1 i el connectarem al grup output enlloc del grid
Ara inserirem el node Instance on points que farà que cada vèrtex ( point) de la graella contingui una instància ( una còpia que no ocupa espai de memòria a l'ordinador) d'aquest cub acabat de crear i els connectarem .
En el cas que vulguem que a més dels cubs, es mostri la graella, caldria afegir el node Join geometry: que ens permet unir dues geometries d'entrada i enviar-les a la sortida group output. En les entrades de Join geometry afegiriem el grid i l'instance points.
Per donar aleatorietat a la mida de les instàncies, necessitarem dos nodes més:
El Node Math, el connectarem a l'entrada Scale del node Instance on points. Definirà l'escalat inicial de les instàncies
El node Noise texture és el que afegeix aleatorietat, el connectarem al node add per indicar que aquest escalat és aleatori per cada instància
Per exagerar el comportament d'aquestes instàncies afegirem dos nodes més:
Node Math en funció Multiply add: serveix per multiplicar l'efecte que fa el node Add sobre l'Scale de l'Instance points
Node Map Range: ens permetrar controlar els valors màxims i mínms de les instàncies de cubs
Ara volem afegir la dimensió temporal, volem que a mesura que el temps avança, les mides de les instàncies també es vagin modificant aleatòriament. Per això afegirem un nou node value:
Al node Value podem indicar-li com a paràmetre que torni el valor del Frame en el que es troba el timeline. Només cal escriure la paraula Frame en el seu únic paràmetre. També admet operacions aritmètiques, per exemple podem indicar enlloc de Frame, Frame/600 que reduirà notablement el valor canviant d'aquesta aleatorietat. Finalment el connectem amb el node Noise texture, per fer variar aquesta aleatorietat amb el temps.
El Node Mesh to points converteix una malla en punts, on cada punt correspon a un dels vèrtex ( podem triar entre vèrtex, cares o arestes) que la definien. Aplicat a la sortida d'instàncies fa que els cubs desapareguin i en cada vèrtex d'aquests aparegui un punt, del qual podem variar el radi.
Agruparem tots els nodes tret del Grid i el JOin Geometry i la sortida, en un frame. Per a fer-ho tenim dos procediments possibles:
Mètode amb drecera de teclat
Selecciona tots els nodes que vols agrupar.
Prem la tecla Ctrl + J.
Resultat: Apareixerà automàticament un recuadro que envolta els nodes seleccionats.
2. El mètode manual
Si vols crear el marc primer i després omplir-lo:
Prem Shift + A per obrir el menú d'afegir.
Ves a la secció Layout i selecciona Frame.
Arrossega els nodes que vulguis cap a dins del frame. Quan el frame s'il·lumini (vores blanques), deixa anar el ratolí i els nodes quedaran "ancorats" a dins.
Si vull que es continuin veient les instàncies dels cubs, només caldrà connectar el node Instance on point amb Join Geometry
Si enlloc de veure points a les cares, vull veure una malla, per exemple de tipus IcoSphere, de nou afegiré dos nous nodes
Node Instance on points: servirà per indicar que en cada punt volem afegir una nova malla, i que connectarem el node Mesh to Point en la seva entrada Points. Aquest node també el connectaré al Node Join Geometry.
Node Ico Sphere que connectarem a l'instance del Node Instance On points
Per fer que només es mostri la ico Sphere que està en la part superior dels cubs, utilitzarem tres nodees
Node Normal : Aquest node detecta cap a on mira cada cara del cub.
Node Separate XYZ: Connecta la sortida del node Normal a l'entrada d'aquest. Ens interessa només el valor Z, ja que les cares laterals tenen Z=0 i la inferior Z=-1.
Node Compare (o Greater Than): Connecta el valor Z al primer valor del node Compare. Configura'l en mode Greater Than i posa el segon valor a 0.5.
Entrada Selection: Connecta el resultat (la sortida Result) a l'entrada Selection del node Mesh to Points.
Per separar una mica les Ico Spheres de les cares superiors de les instàncies dels cubs, utilitzarem tres nodes més:
Node Position: Actua com el sensor. Llegeix la posició de l'Ico Sphere en l'espai (X, Y, Z).
Node Multiply (Math): Actua com l'escalador. Multiplica el valor de l'alçada per un número. Si el número és >1, l'esfera s'estira; si és <1, s'aixafa.
Node Combine XYZ: Actua com el muntador. Torna a agafar les dades per separat (X i Y originals + la nova Z multiplicada) i les uneix en un sol vector perquè el node Set Position les pugui entendre.
En resum: Llegim les dades -> Modifiquem l'eix vertical -> Reconstruïm el punt final
Per acabar, suvitzarem la textura de la icoSphera i li assignarem un material.
Node Set Shade Smooth, s'enllaça just abans de connectar l'instance on points de les esferes amb el Join Geometry
Node Set Material, s'enllaça just des prés del Set Shade Smooth i abans del Join Geometry
Afegirem també un material nou als cubs. Així que des del node Shader, crearem un nou material i des dels nodes de materials i textures crearem una estructura de nodes amb l'objectiu que cadascun dels cubs creats des del node instances on points tinguin un color lleugerament diferent sense haver de crear materials individuals. Els nodes són els següents:
Object Info: En el seu socket Random, genera un valor aleatori diferent per a cada objecte de l'escena.
Map Range: Agafa aquest valor aleatori i el "remapeja". És a dir, l'ajusta perquè es mogui només dins d'un rang concret (entre 0.420 i 0.720) per controlar que els colors no siguin massa extrems.
Hue/Saturation/Value (HSV): Rep el valor remapejat i l'aplica al Hue (el color) i a la Saturation (la intensitat). Això fa que, partint del color base rosa, cada objecte canviï de tonalitat i de vivesa de forma aleatòria.
Principled BSDF: És el material final que rep tota aquesta informació de color i la mostra en el render (connectat a Base Color).
Després des del Geometry Nodes, caldrà afegir un node Set material, entre la sortida del node Instance on points ( dels cubs) i el Join geometry que tingui aquest material que acabem de crear assignat.