Hoofdstuk 88Zes uitgewerkte opbouwen, van klein naar groot
Van een handvol stenen tot een simulatie die stapelt -- de nodes uit hoofdstuk 87 in het echt gebruikt
Losse nodes kennen is niet hetzelfde als een opbouw kunnen bouwen. Dit hoofdstuk werkt zes opbouwen helemaal uit, van klein naar groot, elk als een reeks nodes in volgorde: wat je maakt, welke instellingen ertoe doen, en wat er misgaat als je een stap vergeet. Elke opbouw bouwt voort op nodes uit hoofdstuk 87 -- kom je een naam tegen die je niet meer kent, dan staat hij daar met zijn ingangen en uitgangen.
RECCONCEPT00:00:00:00schooliumHoe je een opbouw leest
Elke opbouw hieronder volgt hetzelfde stramien: eerst wat het resultaat moet worden, dan de nodes op volgorde met de instellingen die ertoe doen, en tot slot een kort rijtje met wat er misgaat als je een stap oversloeg. Bouw ze na in een lege Geometry Nodes-modifier op een eenvoudig basisobject -- de meegeleverde start_*.blend-bestanden bij elke opbouw beginnen al met de juiste basisgeometrie klaar, zodat je meteen aan de node-boom kan beginnen.
De opbouwen worden zwaarder naarmate het hoofdstuk vordert: opbouw 1 gebruikt vier nodes, opbouw 6 combineert een Repeat Zone met Raycast en bouwt voort op bijna alles wat in hoofdstuk 86 en 87 aan bod kwam.
RECRENDER · EEVEE00:00:00:001280×720Opbouw 1 -- stenen langs een pad
Wat je maakt: een curve die dienst doet als pad, met langs de lengte een reeks stenen die niet overlappen en elk een beetje anders staan.
De nodes op volgorde: Curve to Points zet het pad om in een reeks punten, met Length als methode en een Distance die de tussenruimte bepaalt. Elk punt krijgt automatisch een rotation-attribute die met de richting van de curve meedraait. Sluit die punten aan op Instance on Points, met een steen-object als Instance en de rotation van de punten als Rotation. Voeg daarna een Random Value (Float, bereik bijvoorbeeld 0.8 tot 1.2) toe op Scale, en een tweede Random Value (Vector, kleine uitslag) op een extra rotatie via Rotate Instances, zodat de stenen niet als kloontjes ogen. Sluit af met Realize Instances zodra je de stenen als echte mesh nodig hebt, bijvoorbeeld om ze te exporteren.
Instellingen die ertoe doen: Distance op Curve to Points bepaalt of stenen overlappen; te klein en ze steken door elkaar, te groot en er vallen gaten. De Seed van elke Random Value moet verschillend zijn, anders correleren schaal en rotatie op een manier die opvalt.
Wat er misgaat als je een stap vergeet: sla je Rotation op Instance on Points over, dan liggen alle stenen plat volgens de wereld-as in plaats van volgens de curve -- op een glooiend pad springen ze er meteen uit. Vergeet je Realize Instances voor een export naar een ander formaat, dan komt er soms maar een enkele steen mee, omdat instances niet altijd door elke exporter als losse geometrie worden herkend.
RECRENDER · EEVEE00:00:00:001280×720Opbouw 1 -- de node-boom

- 1Curve to Points
Zet de pad-curve om in een reeks punten met een vaste tussenafstand (Length 0,42 m), elk met een rotation die de richting van de curve volgt.
- 2Object Info (steen)
Haalt het steen-object binnen als geometrie voor Instance on Points, met As Instance aan zodat het instance blijft in plaats van meteen gerealiseerd te worden.
- 3Instance on Points
Plaatst de steen op elk punt, met Rotation gekoppeld aan de rotation van het punt.
- 4Random Value x2
Twee losse Random Value-nodes: deze (Float, 0,75-1,25) stuurt Scale Instances aan; de tweede (Vector, elk met een eigen Seed) stuurt een klein extra zwaaitje in Rotate Instances verderop.
- 5Realize Instances
Zet de instances om in echte mesh-geometrie vlak vóór Set Material en Group Output.
Opbouw 2 -- een hek dat meegroeit met een curve
Wat je maakt: een hekwerk dat automatisch de juiste lengte en vorm aanneemt zodra je de onderliggende curve verlegt -- teken je de curve om, dan volgt het hek meteen mee.
De nodes op volgorde: begin met Resample Curve op de padcurve, met Count of Length als methode, zodat de spijlen van het hek op gelijke afstand komen te staan ongeacht hoe onregelmatig de oorspronkelijke curve getekend is. Gebruik die herbemonsterde punten met Instance on Points om een verticale spijl-curve (of al een spijl-mesh) op elk punt te zetten. Bouw daarnaast, los van de spijlen, de bovenste balk: Curve to Mesh op de oorspronkelijke pad-curve met een rechthoekig profiel, wat een doorlopende balk langs de hele lengte oplevert. Combineer beide met Join Geometry.
Instellingen die ertoe doen: Count op Resample Curve bepaalt hoeveel spijlen er komen -- gebruik liever Length (vaste afstand) dan Count (vast aantal) als de curve in lengte kan veranderen, anders worden de spijlen dichter of verder uit elkaar naarmate iemand de curve uitrekt.
Wat er misgaat als je een stap vergeet: sla je Resample Curve over en gebruik je de ruwe controlepunten van de curve rechtstreeks, dan staan de spijlen op de plekken waar de tekenaar toevallig een controlepunt zette -- clusters op scherpe bochten, gaten op rechte stukken. Vergeet je het profiel bij Curve to Mesh, dan krijg je een plat lint in plaats van een balk met dikte.
RECBLENDER 5.1 · GN-HEK-RESULTAAT00:00:00:001920×1080Opbouw 2 -- de nodes die je hier gebruikt
Rechtstreeks uit Blender 5.1 uitgelezen, ter referentie bij het nabouwen.
| Generate a poly spline for each input spline | |
| Ingangen | Curve (GEOMETRY), Selection (BOOLEAN), Mode (MENU), Count (INT), Length (VALUE) |
|---|---|
| Uitgangen | Curve (GEOMETRY) |
| Convert curves into a mesh, optionally with a custom profile shape defined by curves | |
| Ingangen | Curve (GEOMETRY), Profile Curve (GEOMETRY), Scale (VALUE), Fill Caps (BOOLEAN) |
|---|---|
| Uitgangen | Mesh (GEOMETRY) |
Zelf proberen: het hek natekenen
Bouw het hek van opbouw 2 na op de meegeleverde curve en test dat het hek automatisch meegroeit zodra je de curve in Edit Mode verlengt.
- 1Open blends/start_hek_curve.blend: een gebogen curve en twee kleine objecten (spijl, profiel) in de scene.
- 2Voeg een Geometry Nodes-modifier toe aan de curve en bouw Resample Curve (Length, 0.3 m) gevolgd door Instance on Points met het spijl-object.
- 3Bouw ernaast Curve to Mesh met het profiel-object als Profile Curve, en Join Geometry om beide samen te voegen.
- 4Ga in Edit Mode op de curve en verleng hem met een extra controlepunt -- controleer dat het hek automatisch meegroeit.
Opbouw 3 -- een gebouwgevel met herhaalde ramen
Wat je maakt: een vlakke gevel met een net rooster van ramen, waarbij elk raam een lichte variatie krijgt zodat de gevel niet steriel herhaald oogt.
De nodes op volgorde: begin met een Grid-node op de afmetingen van de gevel, met Vertices X en Vertices Y gelijk aan het gewenste aantal raamposities plus een. Zet die grid om in punten met Mesh to Points, op het Vertices-domain zodat elk kruispunt van het rooster een punt wordt. Plaats daarop met Instance on Points een raam-object. Zet de twee raamvarianten in één Collection en haal ze binnen via Collection Info (Separate Children en Reset Children allebei aan); zet Pick Instance op Instance on Points aan en stuur Instance Index met een Random Value (Float) door een Compare-drempel, omgezet naar 0 of 1 via een Switch van het type Integer, zodat een klein deel van de ramen de andere variant krijgt.
Waarom niet gewoon een Switch op de geometrie zelf: een Switch met als type Geometry kan niet per punt schakelen -- Geometry is geen field-type zoals Float of Integer, dus zo'n Switch kiest de hele gevel in één keer, niet raam per raam. Instance Index op Instance on Points is wel een geheel getal (Integer) en dus wel per punt instelbaar.
Instellingen die ertoe doen: Vertices X/Y op de Grid-node bepaalt het aantal ramen rechtstreeks -- reken hier bewust: een grid van 6 bij 4 vertices geeft een rooster van 6 bij 4 punten, niet 5 bij 3 vakken. De Size X/Y van de Grid moet overeenkomen met de werkelijke breedte en hoogte van de gevel, anders passen de ramen niet op de tussenafstand die je verwacht.
Wat er misgaat als je een stap vergeet: gebruik je de grid direct als mesh in plaats van hem via Mesh to Points om te zetten naar punten, dan plaatst Instance on Points de ramen wel op de hoekpunten maar houdt de grid-mesh zelf ook nog steeds vlakken tussen die punten -- die vlakken blijven onzichtbaar meetellen in latere bewerkingen (zoals een boolean) tenzij je ze expliciet weggooit.
RECRENDER · EEVEE00:00:00:001280×720Opbouw 3 -- de node-boom

- 1Grid
Bouwt het rooster op de maten van de gevel; Vertices X/Y bepaalt het aantal raamposities.
- 2Mesh to Points
Zet de hoekpunten van de (getransformeerde) grid om in losse punten, klaar voor instancing.
- 3Random Value + Less Than + Switch
Kiest per punt willekeurig tussen het standaardraam (index 0) en een variant (index 1): Random Value + Compare (Less Than 0,25) levert een per-punt boolean, een Switch van het type Integer zet die om in de 0/1-index — Integer is, anders dan Geometry, wél een field-type en kan dus per punt schakelen.
- 4Instance on Points
Plaatst op elk punt de raam-variant die Collection Info (Pick Instance aan) via de Instance Index-waarde kiest.
- 5Join Geometry
Voegt de gerealiseerde ramen samen met de gevelmuur zelf, aangeleverd via het Group Input.
Zelf proberen: een gevel met twee raamvarianten
Bouw de gevel van opbouw 3 na en stel de kans op het variant-raam zo bij dat ongeveer een op de vijf ramen afwijkt.
- 1Open blends/start_gevel_ramen.blend: een vlakke muur en twee raam-objecten (standaard en variant).
- 2Bouw Grid > Mesh to Points > Instance on Points met het standaardraam.
- 3Voeg Random Value (Float, 0 tot 1) toe, gevolgd door Compare (Less Than 0.2) voor een kans van ongeveer 20%.
- 4Sluit die boolean aan op een Switch tussen het standaardraam en het variant-raam, en koppel de Switch-uitgang aan Instance.
- 5Verander de drempel in Compare naar 0.05 en 0.4 om te zien hoe de dichtheid van variant-ramen meeverandert.
Opbouw 4 -- gras met variatie
Wat je maakt: een grasveld met duizenden grashalmen die elk een beetje anders staan, schuin waaien in een richting, en dichter of dunner groeien volgens een gekozen patroon.
De nodes op volgorde: Distribute Points on Faces op de grondmesh, met Density gekoppeld aan een Noise Texture zodat het gras niet overal even dicht staat. Sluit de punten aan op Instance on Points met een grasspriet-object, Rotation gekoppeld aan de Normal van het punt (zodat elke spriet loodrecht op het (mogelijk glooiende) terrein staat). Voeg met Rotate Instances een extra, willekeurige rotatie rond de Z-as toe via Random Value (Float, 0 tot 360 graden omgezet met Deg to Radvia de Euler to Rotation-node), zodat elke spriet ook om zijn eigen as anders georiënteerd staat. Schaal met een tweede Random Value op Scale Instances, met een kleine spreiding rond 1.0.
Instellingen die ertoe doen: de Density-waarde van Distribute Points on Faces bepaalt niet alleen hoe vol het veld oogt maar ook hoe zwaar de boom rekent -- bij een groot veld en een hoge dichtheid loopt het aantal instances snel op; test daarom eerst op een klein stuk grond. De methode Poisson Disk voorkomt dat halmen te dicht op elkaar clusteren, wat bij Random wel kan gebeuren.
Wat er misgaat als je een stap vergeet: koppel je Rotation bij Instance on Points niet aan de Normal, dan staan alle grasspriet-instanties kaarsrecht volgens de wereld-Z-as -- op een glooiend stuk terrein steken ze er dan zichtbaar scheef doorheen in plaats van loodrecht op het oppervlak te staan.
RECRENDER · EEVEE00:00:00:001280×720Opbouw 4 -- de nodes die je hier gebruikt
Rechtstreeks uit Blender 5.1 uitgelezen, ter referentie bij het nabouwen.
| Generate points spread out on the surface of a mesh | |
| Ingangen | Mesh (GEOMETRY), Selection (BOOLEAN), Distance Min (VALUE), Density Max (VALUE), Density (VALUE), Density Factor (VALUE), Seed (INT) |
|---|---|
| Uitgangen | Points (GEOMETRY), Normal (VECTOR), Rotation (ROTATION) |
| Rotate geometry instances in local or global space | |
| Ingangen | Instances (GEOMETRY), Selection (BOOLEAN), Rotation (ROTATION), Pivot Point (VECTOR), Local Space (BOOLEAN) |
|---|---|
| Uitgangen | Instances (GEOMETRY) |
Zelf proberen: dichtheid sturen met een texture
Bouw het grasveld van opbouw 4 na en koppel de dichtheid aan een Noise Texture zodat er natuurlijke plekken met meer en minder gras ontstaan.
- 1Open blends/start_gras_variatie.blend: een glooiend grondvlak zonder gras.
- 2Bouw Distribute Points on Faces met Density Max rond 500 en een Density Factor gekoppeld aan een Noise Texture (Scale rond 2).
- 3Voeg Instance on Points toe met het meegeleverde grasspriet-object en Rotation gekoppeld aan Normal.
- 4Voeg Random Value toe op Scale Instances (0.8 tot 1.3) voor variatie in hoogte.
- 5Verhoog de Scale van de Noise Texture naar 6 en zie de plekken met veel en weinig gras kleiner en grilliger worden.
Opbouw 5 -- een simulatie die stapelt
Wat je maakt: een bak die elke frame een nieuw object laat vallen en onthoudt, zodat er na verloop van tijd een oplopende stapel geometrie ontstaat -- zonder dat er een echte fysica-engine aan te pas komt.
De nodes op volgorde: open een Simulation Zone (Add > Simulation > Simulation Zone). In Simulation Input komt de opgestapelde geometrie van de vorige frame binnen. Bouw een nieuw object op de huidige Scene Time (bijvoorbeeld de positie een klein stukje verschoven per frame via Scene Time > Frame vermenigvuldigd met een snelheid), en voeg dat nieuwe object met Join Geometry samen met wat Simulation Input binnenkreeg. Sluit dat resultaat aan op Simulation Output. Bak de simulatie (Bake-knop in de zone, of in de Physics-tab van het object) zodat ze scrollable en herhaalbaar wordt.
Instellingen die ertoe doen: zonder Bake speelt de simulatie alleen correct af als je vanaf frame 1 vooruit speelt -- spring je naar frame 80, dan mist Blender alle tussenliggende frames en klopt de stapel niet. Na het bakken staat de uitkomst per frame vast op schijf en kan je vrij scrollen.
Wat er misgaat als je een stap vergeet: vergeet je Join Geometry binnen de zone en sluit je alleen het nieuwe object aan op Simulation Output, dan vervang je de stapel van vorige frame in plaats van hem uit te breiden -- je krijgt telkens maar een los, nieuw object te zien in plaats van een groeiende verzameling.
RECBLENDER 5.1 · GN-BUILD5-BOOM00:00:00:001920×1080Opbouw 5 -- de node-boom

- 1Simulation Input
Geeft de opgestapelde geometrie van de vorige frame door -- leeg bij het allereerste frame. Dit is de linkerkant van de zichtbare Simulation-zone (Delta Time, Geometry).
- 2Scene Time + nieuw object
Scene Time levert het huidige frame-nummer, via Combine XYZ omgezet naar een Z-hoogte; die stuurt een Transform op een nieuwe Cube -- zo staat elk frame een extra kubus een stukje hoger.
- 3Join Geometry
Voegt het nieuwe stuk samen met wat Simulation Input binnenkreeg -- de stap die ervoor zorgt dat er iets bijkomt in plaats van wordt vervangen.
- 4Simulation Output
Geeft de uitgebreide stapel terug als resultaat van deze frame, en als invoer voor de volgende. Dit is de rechterkant van de zichtbare Simulation-zone (Skip, Geometry).
Zelf proberen: een oplopende stapel bakken
Bouw de simulatie van opbouw 5 na, bak hem, en controleer dat de stapel na het bakken correct blijft staan als je terugscrollt naar frame 1.
- 1Open blends/start_simulatie_stapel.blend: een leeg vlak met een klein kubus-object als bouwsteen.
- 2Bouw een Simulation Zone met daarbinnen een kopie van de kubus op een positie afhankelijk van Scene Time > Frame, samengevoegd via Join Geometry met Simulation Input.
- 3Speel de animatie af vanaf frame 1 tot frame 100 en zie de stapel groeien.
- 4Bak de simulatie via de Bake-knop in de zone.
- 5Spring direct naar frame 100 zonder af te spelen en controleer dat de volledige stapel meteen klopt.
Opbouw 6 -- Repeat Zone en Raycast samen
Wat je maakt: een reeks punten die stap voor stap naar beneden "vallen" totdat elk punt een onderliggend oppervlak raakt, zodat de punten zich precies naar de vorm van een tweede geometrie voegen -- bijvoorbeeld druppels die langs een glooiend dak naar beneden zoeken tot ze de dakrand raken.
De nodes op volgorde: begin met een verzameling startpunten (bv. Distribute Points on Faces op een vlak boven het dak). Open een Repeat Zone met als herhaalde invoer de positie van elk punt. Binnen de zone: een Raycast vanaf de huidige positie recht naar beneden naar het dak-object; is de afstand tot het raakpunt klein genoeg, laat de positie dan ongewijzigd (via Switch op basis van Is Hit en de afstand), anders verplaats je de positie een klein stapje in de richting van het raakpunt met Set Position. Na een vast aantal doorlopen (Repeat Output > Iterations, bijvoorbeeld 20) eindigen de meeste punten vlak op of net boven het dak.
Instellingen die ertoe doen: het aantal Iterations bepaalt hoe precies de punten het oppervlak naderen -- te weinig en ze zweven nog los boven het dak, te veel en de boom wordt onnodig zwaar. De stapgrootte per doorloop moet klein genoeg zijn om niet door het oppervlak heen te schieten.
Wat er misgaat als je een stap vergeet: vergeet je de Is Hit-uitgang van Raycast te controleren en verplaats je de positie hoe dan ook, dan schieten punten die het dak missen (bv. naast de rand) oneindig door in de val-richting, ver onder de rest van de scene -- een klassiek voorbeeld van een node die 'niets fout doet' maar wel een niet-gecontroleerd geval vergeet.
RECBLENDER 5.1 · GN-BUILD6-BOOM00:00:00:001920×1080Opbouw 6 -- de node-boom

- 1Repeat Input
Geeft de positie van dit punt door aan deze doorloop, aanvankelijk de startpositie boven het dak.
- 2Raycast
Schiet vanaf de huidige positie recht naar beneden naar het dak-object en levert Is Hit, Hit Position en Distance.
- 3Switch + Set Position
De Switch “Alleen bij treffer” kiest tussen de ongewijzigde positie (geen treffer) en de Hit Position (wel een treffer); Set Position past dat resultaat toe op het punt.
- 4Repeat Output
Geeft de nieuwe positie terug als invoer voor de volgende doorloop, en na de laatste Iteration als eindresultaat van de hele zone.
Zelf proberen: punten naar een glooiend dak laten zakken
Bouw de Repeat Zone met Raycast van opbouw 6 na en stel het aantal Iterations zo bij dat elk punt netjes op het dak eindigt zonder erdoorheen te schieten.
- 1Open blends/start_repeat_raycast.blend: een glooiend dak-object en een plat vlak erboven met startpunten.
- 2Bouw een Repeat Zone met de punt-positie als herhaalde waarde, Iterations op 10 om te beginnen.
- 3Voeg binnenin een Raycast naar het dak-object toe met een vaste richting recht naar beneden.
- 4Bouw de Switch + Set Position-combinatie die de positie een stapje richting het raakpunt schuift zolang de afstand groter is dan een kleine drempel.
- 5Verhoog Iterations naar 25 en vergelijk in de Spreadsheet-editor hoeveel punten na 10 tegenover 25 doorlopen daadwerkelijk op het dak liggen.