City Builder

I’m working on a procedurally generated city. Instead of keeping it for myself until it’s finished (which can still take quite some time), I decided to work on it publicly and share the progress.

It all started in spring with a small road generator:

…continuing with the footprint generation of buildings:

and instancing elements onto the sides:

Now there’s even further logic like detecting which elements can be instanced directly and which ones need to be deformed, like e.g. in this video:

The current step I finished was developing an interior mapping shader.

The used room textures were created thanks to the great CC0 assets of PolyHaven. This interior mapping shader will soon also be added to my generic nodes library:

Next step will be to create many different room textures and apply them on the facade elements of the buildings.

The whole project is too large to attach here, so I created a public GitLab repository, where one can grab it (in case someone would be interested):


Damn, you are on fire !
I can’t wait for the Banananas tree generator for vegetation around the buildings !
Awesome work so far ! Well done !

1 Like

Nice one!

This is pretty cool, Man.

1 Like

Just wrote a blog post about my room parallax shader. People interested can read it here:

So far I’ve created a couple of rooms, but still not enough to make the buildings look non-repeating. Here are some examples.

Next step is to create more rooms and also to adapt the building generation to different possible element lengths. Currently each element is 1x1 units large. There’s definitely the need for 2x1 or 3x1 sized elements.


Hello Frank ! Super cool what you did and thanks a lot for sharing those !

Let me share some thoughts, I’m not an expert in large scale scenes but that’s something I’m definitely looking into recently.

You might want to set a few boundaries about how far or close you want to be able to navigate into your city. For windows what you did is pretty cool for close up shots, and to have enough of them to create diversity is definitively a giant task.

From a distance these shape can become fairly abstract :

And by day :

Paralax will help a lot but the textures in themselves can probably be simplified a lot.
On the first image it’s hard to tell exctly if we look at a chair , a desk, someone, a coffee machine,
But we see clearly the ceiling and having that darker “noise” at the bottom of each window is enough to feel real.

Anyway, I’m looking forward how this will evolve, it’s super interesting !


Hi Sozap! Thanks for the kind words. I somehow agree with you about the detail and that what I’m doing is maybe not necessarily needed. However I’ve drawn inspiration from the description Simon Hughes wrote about the rooms he did for Forza Horizon 4:
And since I don’t have a deadline, the creation of the rooms happens on lazy evenings, when I surf the internet and find free assets to grow my library. Creating a new room is then just dropping a couple of new assets into the template I have and render the image. Assets, that are only royalty free and not CC0 I unfortunately can’t share on my gitlab project page, but the room images will certainly end up there with the next update…

1 Like

Hey ! This breakdown is indeed truly inspiring !
If you have time and patience then it’s great, at some point these details will pay off for sure !
It’s just that recently I build a large scale scene for fun and since I don’t have constraints it’s hard to settle on a general scale. Now I’m having small parts quite detailed next to big chunks that can only be seen from a distance to stay believable :smiley: And I probably projected my personal issues into your work :smiley:

Keep up the good work I’m quite curious about how far this city experiment will end up ! There is a really great basis at least !

And here’s another update after a long time. The city builder now can create buildings with different segment length. Here’s an example:

This one shows a facade of the office buildings. The pattern used 2 segments of length 1 followed by 1 segment of length 2. This can be specified in the geometry node of the building generator as a string “001”. It specifies not directly the lengths, but the clusters of segments. Cluster 0 is of length 1, while cluster 1 is of length 2. For this I created a couple of reusable geometry nodes. The panels of the building are organized in a spatial fashion. Along the x-axis I arrange all panels of the same cluster. Along the y-axis panels have different lengths. The z-axis, represents the floors.

All those panels are within a single collection. When constructing the building, Blender needs to choose the right instance. This is done by first rearranging the panels in circular clusters separated by the y and z axis:

Afterwards, a geometry node is choosing a cluster by the authored pattern and the floor level. A random instance from this cluster is chosen by randomly calculating an angle on the cluster’s circle and taking the closest instance to this random point. This gives me up to 3 drive-able criteria to choose from, but up to now I only need 2 (pattern and floor-level).
Those nodes as well as other utilities together with small examples are as usual available on my GitLab repository:
The whole city project was also updated: