Walls, walls and more walls (geonodes wall making thingy)

Current thumbnail:

Not sure this is in the correct place, but anyhoo…
For one reason or another I’ve not really been feeling very creative lately but I have had an urge to see if I could make myself a procedural dry stone wall geonodes setup. Why? Mainly because my images usually have dry stone walls in them and, in the main, I either use some very good photo scanned models or use image textures. These are great - and probably always better in most cases - but not as adaptable and sometimes I may want something specific or a bit different. The second big reason is seeing if I could do it, and learn some stuff about geometry nodes in the process. I 'm having a bit of fun anyway.

What I’ve come up with so far is quite basic, and probably very hacky, but I think it has some promise (at least as background/middle distance props where looking superficially OK is OK!).








… and in a very quick and dirty ‘scene’ (very far from my best work…):

So, with the different parameters I can go from normal not very random walls (with a very basic and not good option for mortar) through to quite random stones, more akin to a rural dry stone wall. I’ve got options for course height, block width, adding cap stones, with or without crenelation, random rotation and alignment of the stones, some vertical displacement, I can vary the noise on the stones so they are either very uniform or very messy, can alter the degree of subdivision, alter the scale of the stones (fine tuning if the gaps get too big) and so on and so forth. Works on a curve as with most of these types of things.

Must say that this uses existing node groups from @higgsas (many thanks Higgas!), Bradley Animation and Erindale - doubt I would have even got to this basic level without them (so thanks again!).

The images above just show some basic variations (the materials are all from Blenderkit - not my own but the ‘Mossy Rock’ on the 1st three does work quite well I think).

Limitations: Too many to list, but:

  • Stones not varied enough or realistic in shape yet (as noted above, probably look ok as a mid-distance asset, but not really a ‘hero’ asset… though not sure that’s a major problem for me)
  • My lack of geonodes knowledge means there is far too much manual tweaking needed to fix issues (like when gaps appear, I’ve tried to work out how to move the instances but can’t get it to work, so basically need to eyeball it by changing the scale of the instances)
  • No collision detection of any kind, so instances do overlap (but I’m not that fussed as I hope nobody is going to look that closely!?)
  • It wouldn’t be much good for anything other than gentle gradients (the way it currently works, the stones wouldn’t align as they do in real life)
  • Currently can only deal with flat tops - so walls which slope or have any changes of height wouldn’t work
  • Cap stone and mortar options are dodgy at the moment
  • Breaks easily. Have to be very subtle with an control without it going bang and destroying itself.
  • Quite slow and memory intensive at times.
  • And more…

To Do:

  • Fix all of the above - most of which I know how to do (and some I have no idea)
  • Have the option to remove parts of the wall and add rubble - so you can things which are a bit less perfect (or completely destroyed)
  • Add ability to add my own stones from a collection (at the most its just an instanced primitive cube mesh which is then manipulated)
  • Options for moss and ivy
  • Options for damage to individual stones/bricks
  • … and no doubt much more that I can’t think of.

I have no real aim with this other than to maybe use it in some of my projects (and have the aforementioned fun), but I thought I’d share some of the outputs anyway if for no other reason that I haven’t done anything since October and I may get some pointers on how to make things better. I’ll probably keep sharing my progress, and maybe some questions on how to do things, even if I doubt I’ll be able to share the node group (as, as mentioned above, it uses other people’s products).

20 Likes

Dammit, why do your posts always make me want to go for a walk? :angry: :joy: Also, I totally want this generator.

You could probably screenshot your node tree and mark which groups are 3rd party, with a note about what you are using them for (if it isn’t clear from the name). That way we could roughly see what you are doing without you sharing assets that aren’t yours (we can see the inputs and outputs of the 3rd party groups, but not what is inside them doing the actual heavy lifting).

This might give smart people (that rules me out) an idea of what you are doing, and possibly what could be improved. But if you aren’t comfortable and think you might still give away something you shouldn’t, don’t feel obliged to.

:blossom: :blossom: :blossom:

2 Likes

The last image in the original post looks particularly good. Excellent work.

1 Like

Pretty good ! It’s amazing that the same setup can manage all these variations.
I think on the stone walls we can still feel some kind of grid pattern.
Maybe by having a giant grid and looking into recursive subdivision might result in a more chaotic pattern :

Anyway, in it’s current state with some stuff you’re planning on your todo it’s going to look amazing !

Keep up the good work !

3 Likes

Thanks @Jvry @ontogenic @sozap for the feedback and advice - very much appreciated!

@sozap This does use Higgas’ “mesh face divider” which I think does a pretty similar job. I agree the examples do maintain their grid structure. The whole process starts with a grid and then the mesh divider kicks in depending on the settings. But if, as I have in the examples, I start with a small course height and small block width then it does tend to stay quite uniform. I’ve just experimented by having just one tall course and a very wide block width and then bumped up the number of iterations on the mesh face divider and it came out with this - which I think looks a bit more organic (?). Interestingly, doing this also exploded the cap stone option - so another bug to squash :slight_smile:

Thanks all once again!

2 Likes

Cool ! Ok indeed there is more variations, but I didn’t foresee the issue, that is that stones are kinda still aligned where probably in reality they’ll be more like bricks :
image

I think that it’s these vertical lines that feels unnatural , they are much less of them in a real stone wall…

IDK if it’s an easy fix, at least it looks like something achievable with recursive subdivision but that’s only a wild guess :smiley:

3 Likes

They aren’t so much unnatural as they are unstable. A novice probably could lump similar sized stones together like that but, being drystone, the only thing keeping the wall together is how well the stones interlock, so it would be a very weak structure. Probably would not stand the test of time.

Of course, it all amounts to the same thing… unless Lazlo decides to deliberately do a piece with a weak wall, in which case the distinction does actually matter. :slight_smile:

4 Likes

Lol , yeah it’s another way to put it I guess ! By unnatural I wouldn’t mean it’s not possible. But just that in my own idea of a stone wall it doesn’t feel right, for the exact reasons you mentioned !

1 Like

In my opinion they look very good. I did the same thing with shader nodes, and the results were… let’s say they were just okay.

spring part

1 Like

Its getting people talking if nothing else :laughing:!!

@sozap @Jvry Thanks again for the interest. I agree that the most recent example would probably fall down! I think the original examples look more sturdy - and yes there is some uniformity you don’t get in all dry stone walls - but it is there in some (there is after all a huge diversity in this type of wall). Nonetheless I’m going to try and make it so that it can mimic as wide a range as possible. Thanks again.

Its all fun and games though. Spent a couple of hours while watching the Cup Final sorting a few things out and trying to make it accept Collections. So far it has crashed every time, which is fun!! So lots to continue to play with and Rome wasn’t built in a day… particularly not with walls like these :grin:

@Akikun Many thanks for your kind words - appreciate it!

3 Likes

yeah I hope these comment aren’t felt harsh, it’s a pretty inspiring project, making comments is a lazy way to feel like I’m part of it :smiley:
Keep up the good work and I’m looking forward to the next iteration :slight_smile:

1 Like

Does that mean you’ll be trying to add a variety of incorporated stiles into the mix? :open_mouth:

Honestly though, I’m loving the project. I love a good drystone wall, and I think you are doing a marvellous job so far. At present all I can give you is my encouragement.

Once you’ve got this working to your satisfaction I’m looking forward to your next country management project: Cornish hedges :stuck_out_tongue:

1 Like

Thanks for the comments since the last update.
Don’t have much time to play at the moment - a lot of real life and work getting in the way.
Have made it so I can use any mesh as a capstone (only an object not a collection at the mo). Still too much manual tweaking and fixing scales and stuff to make it truly procedural (or like a good / polished product) but I don’t mind for my own purposes.



Not a massive improvement, but a bit of one.

EDIT: As soon as I’d uploaded the previous examples I asked myself… “But why didn’t you make it so you could use a collection?”… and the answer was… “I don’t really know”. So a few tweaks and a bit of problem solving later - it now takes a collection rather than an object:

But I’ll need to make sure the stones are all of a similar size or it really won’t work when having to rescale and tweak.

6 Likes

Bit more tinkering. Here we have an embryonic damage system. Uses objects in a collection to delete the points and thus remove the blocks. Unless somebody can suggest a better way, I think using a collection will allow better ‘artistic control’ (but open to suggestions). The way I’m doing this does leave the possibility of the odd floating / gravity defying stone - but that maybe something I can think about way off in the future.


Next thing is to add the possibility of some fallen stones by the gaps (they’ve got to go somewhere). Not sure how I’m going to do that yet, or control the output. More problem solving.

EDIT:
Added some rudimentary rubble - but so far quite difficult to control (and lots of potential for floating stones…). This (sort of) picks up the stones/blocks that will be removed and throws them to the floor. But with no collision detection or anything fancy like that. More to do but as with much of this project, it looks superficially OK I think, which is probably as good as it will get in terms of accuracy. (Please ignore the floating trees in the background!)

7 Likes

It’s coming along, keep up the good work. :smiley:

There is something rattling around in my head about potentially dealing with the floating stones, but I can’t quite get at it. :rage: Proximity node something something…I’ll see if it comes to me tomorrow.

If you put mulch rings round the trees, maybe no one will notice they are floating. :thinking:

1 Like

This is probably quite subtle but I’ve made quite a few changes to the initial setup (completely rebuilt actually) to allow a randomness to the heights of each block course/layer. This adds a bit more variety and, while still quite grid-like, breaks it up a bit. I’ve also added a few more controls to randomise the splitting of the faces to make smaller blocks. Again, very subtle but quite significant to me. I’ve also added my little robot Laz… for no other reason that he’s keen on sitting on walls in the countryside.

4 Likes

This looks extremely good. (Does Blender have any sort of formal “contributed resource library,” as many programming languages do?)

Looking out at the “random stone wall (in need of a bit of repair)” in front of my own house, I notice that the stones used varied considerably. In my case the structure is firmly held together with concrete, but the stones are clearly “found.”

Nevertheless – “many projects need a convincing stone wall,” and, even if we have to go through the output manually to check for things like “floaters,” or to “tweak here and there,” it is still an enormous “win” to be able to generate even the “first draft” of one.

1 Like

Thanks - that is very much appreciated. I’m definitely trying to work out how I can have parameters to make the blocks appear more ‘found’ and less ‘dressed’. At the moment, there is a little bit of noise that can be added to make them irregular but not as much as you see out in the real world. In the meantime I’m trying to add as much randomness as possible to break up the pattern. The next step is to add random width as a starting point, to complement the change to random height (all controllable so you can have a perfect wall or a very messy one).
Have been away from home a lot recently with work so very little time to play - very frustrating!
Thanks again!!

1 Like

A little update. Still haven’t quite got random width as a starting point working well, but it is now set up for the cap stones - so I can have either use the “built-in” block or a collection and set a ‘starting width’ and then randomise from there. Unfortunately, the tutorial I followed only seems to work if the objects are 2m wide (the default size of primitive meshes seemingly). So more manual tweaking needed to sort it out. Also unfortunately, trying to put this type of thing together when you don’t really understand everything (yet!!!) means I can’t quite work out why. Nevertheless, it sort of works for my purposes… but if I were ever to share this in any way, that would have to be fixed I think. Nevertheless, there are a wide range of options to tweak things so it works in a fashion.

I’ve also been tinkering to try to make sure there are no really small slivers of stone or tiny blocks, ensure the noise doesn’t effect the really small blocks (as it really ruins them), added some nice options to blur the noise, so can crank it up a bit and then smooth it out (I quite like this).

Actually though, I’m only really posting now because I like to keep changing the parameters and rendering pointless pictures…! The 3 below probably don’t look that much different to the very first attempts, but they are quite different in a lot of ways (and I’m understanding more and more about geonodes as I go on to make things work a bit better behind the scenes). I think these show some nice variations (?).




(This one is with the ‘noise’ cranked up quite a lot and with many blurring iterations to smooth things out… can see the problem with holes in the wall. It pays to render another wall (or plane) in the background to hide such things! :slight_smile:


This illustrates the number of options to play with thus far (not all well titled). And still quite a lot that hasn’t been ‘exposed’ as yet.

I still want to try and get more variation (and control) on the initial setup (the aforementioned width issue, for example). And as I posted earlier, I need to add a way of getting some different, less ‘blocky’ shapes. The noise creates some irregularity but the more options the better. There are things to improve in terms of the damage settings and somehow need to create a decent approach to mortar. Still not really sure what the end result is of this. I think I just see it as a problem I need to solve (until I get bored, or inspired to do some actual ‘art’!).

5 Likes

Another little update. I’ve made a start on moss. This uses raycasting and bits of noise and stuff to select faces for points and then a case of normal point density (various options exist to control the extent of faces selected, clumping, increasing or decreasing the spread, controlling the height at which moss is included and there is camera culling based on the new Camera Info node (so only works on 4.5). Not sure my moss model or placement is the best here but its all I’ve got at the moment. It is also quite slow and probably needs a lot more work to work well and look good. But a start!

I’ve finally got the random width starting point working in a fashion. It doesn’t look much different to using the ‘standard offset’ (ie normal brick wall) with some of the face splitting options implemented, but I think it might give opportunities for more interesting variations… or not :man_shrugging: (FWIW the ‘moss’ example above used the random width as a starting point). Annoyingly, the way I’ve built things, the same settings on random heights will give different results depending on whether using standard or random offset but hardly a major problem (its not meant to be CAD afterall!).

Also added an option for controlling the ‘rake’ of the wall - so can have top of wall smaller than bottom, vice versa or equal (I know its unlikely that a stone wall would look like this end on, but just an example).

Can’t remember what else I’ve done. Always tinkering :slight_smile:

Can anybody recommend a good GIF recorder, as I think some of these things would look better if I could show how the different settings change things ‘live’ so to speak (I’m not very savvy with this sort of thing. Its an age thing I think!).

Cheers