Buildings and streets with some geometry nodes

Hello !

I’ve started a new project to keep on experimenting with geometry nodes,
This time I’ll share a bit more about the process, even if I currently don’t have the time to make a full tutorial on all the techniques, I’ll try to add some few tips and tricks here and there !

The idea is to make a regular cyberpunk city thing… I’m not exactly sure about how far I’ll go yet, but here is what I’ve got now :

Older renders :

The idea is to use some basic geometry and enhance it with hand modeled props or procedural stuff when that makes sense.

Here are the elements that makes the buildings :

Here are most of the assets used for the buildings :


Some of them I’ve modeled myself, some of them I found on the web

Now in the first posts I’ll try to sum up what I’ve done to get there , and after that I’ll share my progress as it goes !

138 Likes

The first thing I did on this project was a pipe generator :

It takes some curves and and mesh as input…


(the curves)

The curves are then duplicated and tweaked ,
The hardest parts was to get these patterns right :

Then it’s turned into a mesh

and a few extra details are added…

Once I’ve got this I was confident that I can cyperpunk-ify everything that was a bit lacking by putting pipes on it…

16 Likes

Then I started to work on the buildings…

One way of doing it, is to create several arrays that forms a cubic shape, like in these very cool tutorials : https://www.youtube.com/watch?v=9RGEhDPRqgM

I wanted in the end to have more shapes variations to not to be stuck with cubic shapes, and tried another approach that is not the simplest …

Still , I’m using a cube for my tests :

I separate the top and bottom part with a dot product , that gives only the walls :

Then comes the difficult part :


It looks like nothing but I’ve got a hard time to figure all this out…
Basically it instances a grid on the face of the mesh, and resize the grid to fit some tiles shapes,

In the end, I can then plug my floors basemesh and it gets duplicated on all the faces :

Here is a screenshot from that day…

The cool thing is that I can then do some different shapes of buildings :


Well , there are still some bug to fix…

16 Likes

Then I started to look into how to add detail to the buildings :

This is the base shape used,


It’s possible with geometry nodes to separate some parts based on materials,

So I separate things and then tweak them,
The green plane add some procedural pipes that I made before,

While the pink ones instances some Air conditionners that I modeled ,
With nodes I can delete some of the pink planes so each windows gets populated a bit differently,
But because I choose where to put them in this basic mesh it’s still organised logically.

17 Likes

After that I needed a break from the buildings, I tried some Japan inspired electric poles form hell :

Here are the hand modeled parts :


I used some kitbash and modeled some parts by myself too .

I’ve used a cool trick to make the cables :

I’ve added some green planes and red planes on the mesh.
After that I separated these faces using their materials,

The green parts emits some curves, and then I used a geometry proximity on the tips of the curves to snap the curves to the red parts :

Here the cables are instanced on the green planes with some randomness :

And then snapped to the nearest red planes :

I’ll probably work on those a bit more, because the shape is hard to read :

But at least I’ve got the technical parts ironed out…

23 Likes

After that I started to work on the 1rst floor :

It’s the same technique than for the floors, but I’ll probably need more detail and procedural stuff here.

One day I had some fun turning these planes :

into this :

The 3D models used :

I started to look into how to pack things together :


This one takes a cube and fill it with boxes of varying sizes that kind of don’t intersect themselves, but I probably should re-do it with a cleaner basis because it’s still a bit buggy…

19 Likes

A failed attempt at making some piles of plastic bags / trashes :

12 Likes

And now I’ve added some sidewalks and started to work on the rooftops that still need to be fixed :

22 Likes

Wow, that looks really cool.
My real concern with this is the Blender performance in the Viewport. I’m curious how heavy for Blender viewport would be an entire and detailed big city with geometry nodes.

2 Likes

I guess we’ll eventually find out :smiley:

I think I’ll keep a few buildings very detailed and try to simplify them when they are far…
But yeah filling a whole city with that will probably end up in a big fail …

Also I’ll probably stick to some closer shots well detailed rather than some wide shots or mega-flight trough the city …

2 Likes

As cherry on top you can add some pipes ( with machinery ) on walls. Great ones, with … some functions :stuck_out_tongue: Seriously I see this many times, such stuff don’t have sense… but look sooooo good and cyberpunkish

1 Like

Reeaaally awesome work! This really blew my mind, specially because I’m also trying on my own to do something similar and I’m struggling so so much! And I actually gave up and didn’t go very far :frowning:


It was a mix of basic hand modeling and I was assigning different materials to dictate the design(where it should be windows, where it should be ledge, etc). So we would have a bit of easy art direction control rather than doing everything with sliders.

I’m really curious to know more about the facade creation technique if you don’t mind. Without the possibility of creating loops easily, how do you get the correct coordinate and size to place your grid, to fit the faces? And even with loop tools, without knowing the vertex ID due to the hand modeling it would still be difficult to be precise actually…
What I was trying to achieve in my version was that when we model our building, it would automatically add or remove windows depending of the length of the face. Same for the roof tiles and other stuff. To maintain a consistent density whatever polygon size we apply the node on. (and you can see on my version it’s not working haha)

Congrats on this and on your abandon house system, it’s very inspiring!

5 Likes

Hey Thanks !

That’s fun, I had a similar , semi-failed attempt before going wild with the abandoned house a bit later,

What you’ve done looks pretty cool already, it’s a bit weird around the tiles but that’s still an achievement. If you’ll get back at it a bit latter you’ll have new ideas and hopefully it will work better !
And it’s quite fun to see similar concepts developed in different ways, well done !!

It’s actually the trickiest part, I’ll try to describe it as best as I can, it deserve a tutorial or a .blend accessible, I’m thinking on it, but in the meantime…

So first, in the house and on my semi-failed attempt, I made that “Instance grid on face” node, and that 's the basis for many things.

It’s not that complicated at first, I delete points on the grid based on proximity from the faces, and near edge removal remove points near edges of the original mesh.

This is working , but there is an issue : When two faces are aligned, because the grid is way bigger than the faces you’ll end up having 2 grids on top of each other.
That’s fixable by storing the ID of the faces and remove points of the instanced grids that doesn’t belong to that ID.

With that it’s possible to make roof tiles and also windows, it’s not perfect as you can see on my first attempt : it was hard to get the right windows distribution, sometime you get an huge wall with one windows in the middle…

For that technique to work better, it’s important to have as less faces as possible on the mesh.
On my house thing, I used a decimate modifier set to planar to simplify the basemesh as much a possible, it worked without but it was better. It’s in fact the only modifier used on the project :smiley:

So now, how do we take this grid tool thing and makes the grid match the faces width and height ?
You’ll probably be disappointed because this is quite limited and hackish …

It’s kind of possible to get the face X,Z size if it’s square or rectangular. Because two X aligned edges got the same size you don’t have to bother about the order of points or ID.
That’s what I’m doing for the building, I separate some edges based on their Z orientation to get the height of the face, and the others give the width.

Then I use the bounding box of my panel to get it’s size, and I compare it with face’s size.
And finally I try to fit as much panels in the face and scale them a bit to fit the face.
The bigger the building is, the less obvious it is that the panels doesn’t have exactly the same size.
It works on that simple cube, but I already have some issue on other meshes, so I’m not sure how it will ends up…

That’s basically it, it probably sound like a big pile of hack that’s waiting for the right moment to fail… there is some truth to that …

I’ll start working on a base mesh generator for the buildings and I’ll see how it goes…

Don’t hesitate to come back to me if you have question or you want me to explain some things better. I’m quite curious of what you’ll end up with it you get back to it !

7 Likes

node coding lol

1 Like

Thank you so much for the method breakdown :smiley: It make sense and it’s pretty clever :slight_smile:
I hope we got a more straight forward way to do this one day :frowning:
I don’t think I’ll get back to this soon anyway.
My dream would be to get something similar to this, in geonode: https://blendermarket.com/products/building-nodes

1 Like

This addon is awesome , I didn’t know it !
Indeed that could takes some time before it’s possible to do the same things with geo nodes, and it will probably need a bunch of dedicated node groups.
The tessellate node would probably help : https://developer.blender.org/D13515

I’ve started working on the basemesh generator , and polished a bit the instancing of the panel that is now failing less often :

There are some issues that seems hard to fix given how I’ve done it, I can probably live with it…

This is the “debug” mode that I’ve setup to get a better idea of what’s going on :

I’ll see if I can improve the shapes of the buildings to make them a bit more interesting …

3 Likes

Some small tweaks on the basemesh generator, and some pipes to the rescue.


I’ll start a cleaning pass to improve what’s there and put back everything together.

4 Likes

A first cleaning pass to put everything together :

There have been a few happy accident that I’ll keep like that…

For now I think I’ll start to jump between adding some material , make some building tiles and assets variations, and slowly moving forward putting some buildings together …

17 Likes

how do you separate geometry by material? im super noob on geometry nodes…

1 Like