I saw the prompts for Nodevember and wasn’t initially going to participate, but the first prompt just got me curious how would I approach making pumpkin procedurally. I sat a time limit and was unpleasantly surprised how little I can achieve in this time frame.
But watching Erindale’s timelapses and CGMatter streams got me inspired to keep going.
I tried a random walk that’s converging at top. Originaly there was only 1 plane, but papercraft-like result of khellstr.fi inspired me to make it layered.
Spent too much time on this one. Constricting myself to make all geometry inside GN wasn’t the best idea. I’ll try to remake it (at some point) using splines for input.
I don't think I'll be doing all the prompts, but so far I enjoyed these non-committal exercises.
Inspired by CGMatter and Cartesian Caramel streams I tried Blender physics build. Unfortunately, I couldn’t make concave colliders to work. So I switched to plan B.
I used head model from Blender’s Human Base Meshes to align geometry and gems from JewelCraft addon, Align Curve Normal and Curve Offset from Higgsas geometry nodes groups.
Initially wanted to make Great Wall of China, but quickly realized it’s not a one day build.
El Castillo was a pleasure to make. Such a form is just asking to be made procedurally.
Used Decimate Curve from higgsas geometry nodes groups for temple curve profile.
Used tile generator I made some time ago and higgsas geometry nodes groups (Edge Offset, Inset Faces).
Realized I can use volume node without the need of setting material to it.
Haven’t finished it in one day and at the end was so tired that was just hardcoding indices. Loft Splines, Edge Offset, 3D Curve Fill from higgsas geometry nodes groups.
Translated an example from one of my favorite books The Nature of Code (only the fittest is displayed).
It’s so captivating to play with parameters.
I reproduced the cool rocket from Blender download experimental page.
For even thickness of the outline I used z-Curve-Sweeper by zeroskilz.
I’m very glad of how this one turned out.
There are 3 types of nodes: with geometry input/output, join geometry and “math”.
It’s funny that generated nodes are much tidier z-Curve-Sweeper by zeroskilz for outline.
Instantiate pentagons on circles.
Oh, wait, this is not a pentagon! This irregular hexagon made me stuck for a while. At the end I made a generator that given 2 angles and 4 radii produces desired shape.
Although, I ended up not using WFC method I still wanted to try to implement it.
Finally I got it working!
Original pattern:
Image generation:
Color is stored as color index
3x3 pattern tile stored as matrix of color indices
Unique patterns are found using Split to Instances grouped by pattern matrix converted to hash
Neighbour’s patterns are stored as nested instances
Core generation function consists of multiple nested repeat zones that can revert contradiction state to the state of last pattern selection for undefined pixel
It is very slow, especially when generating tileable image. But isn’t it satisfying to watch?!
Original pattern:
Image generation:
This one uses 2x2 pattern tiles rotated and reflected.
After rendering these progression animations it became clear where performance improvements could be made. Anyway, I barely scratch the surface of what can be done using this method.
Hey ! This is amazing ! I looked into WFC as a way to generate 3D architecture but completely failed It looks like you’re on a good path if you want to try that !
Anyway, this sketchbook is a goldmine for inspiration !
To test if the core function works in 3D I've written connection rules manually and imported them as CSV. But I made a few mistakes in data and to avoid this in the future neighbor tiles are now calculated automatically and stored as attributes on proxies.
The image looked simple enough for a quick exercise, but in the end it took way more time than I expected.
At first glance it has circles distributed on spiral. → But I wasn’t able to produce the right spiral.
After watching the intro I noticed that each outer circle affected all inner circles. → Tried manipulating transformations with matrices, but wasn’t successful.
Circles travel along their outer circle → Sampling curve factor and aligning rotation inside Repeat Zone turned out to be almost identical to 3D_Singh’s showcase.
But I wasn’t satisfied. It should be doable with matrices… And after lots of trial and error this elegant solution emerged:
It required some tweaking in what’s considered a neighbor (previously I used overlapping method, but adjacent/simple tiled is more suited for this one).
Somehow I ended up rewriting the whole thing from data structure (nested instances replaced with points) to core function.
One of the links in Gumin’s repository leads to a site that’s no longer available. I’m so glad I decided to check it out on Internet Archive! Not only did I discover Wang tiles, but I also found great sources for inspiration: BorisTheBrave and The Buckblog.
I used layout to generate image and then replaced it with tileset.
I have an idea of how the result should look like and generation is 80% there, but the other 20%
Rebaking with different seeds over and over and over again…
Even though I ended up spending too much time on it, I think it was still worth it.
Assets made by Kenney.
Some WFC videos mentioned hex grid… on sphere.
I had to give it a try!
Turns out you can’t make a sphere with hexagons only… and hexagons are not regular… and tiles need to be tapered.
Assets made by Kenney.
Final thoughts:
The algorithm itself is pretty straightforward. The hardest part is providing sufficient tiles and defining neighbor rules. And the most time consuming is fine tuning tile weights if you want specific outcome.
I don’t know a way of manipulating instances vertices/pixels in Cycles without realizing geometry. But it can be done in Eevee. recursive_subdivision-eevee.blend (1.5 MB)
This will definitely come in handy in future projects.
I modified this technique a bit and combined with the one inspired by Ilir Beqiri. The result demonstrates hand-on-wall maze-solving algorithm.
Font used - Titan One.