Building distribution in non-uniform city blocks

I’m working on creating a low-poly city which will have a layout that isn’t grid-based, but instead a more organic shape. Because my city blocks aren’t squares, using particles to replicate buildings doesn’t generate the sort of results that will be very convincing. I don’t necessarily mind manually populating the city, but I imagine that even with very low poly assets, it’s going to take a while and be very high-poly by the end. I’ve had a look at arrays as well, but again I don’t think I can get the distribution and orientation right.


Here’s what I’ve achieved, next to what an approximation of what my ideal layout would be.

Can anyone recommend a good approach?

My initial thought is to try duplicating the houses along a curve following your ‘ideal’ house path, and with Z-Up as the orientation setting.

You want your houses along the outline, so you have to give the particle system a way of knowing what the “direction” of the outline is.

You´ll want an emitter that looks like this only with the polygons being very small:

  • You do this by removing the polygon from your emitter object and keeping only the outline edges.

  • You then subdivide the edges so that you have as many edges as you want houses

  • Then you select all edges and extrude them on the z-axis.

  • now you select all edges and split them so that you have single polygons

  • then you select all polygons and scale them with “individual origins” activated really small

  • Your particle system is set to emit the same number of particles as you have poylgons in your emitter

  • Source to “Emit from Faces”

  • Distribution “Random”

  • “Random” checkbox off

  • “Even Distribution” on

  • you set physics to “none”

  • Rotation to “normal” or “hair”

You can try emitting from vertices:


I used this technique to place windows in a recent personal project. It gave me a reasonable control on where to place those windows.

I allways have lots of trouble controlling the rotation when emitting from verts. How do you do it?

You set orientation axis to ‘Normal’ (without any randomness). I setup 3 windows in a collection and enabled ‘Object Rotation’.
image
Windows stands as seen (no need to rotate 90 etc):


Their origins are at the back (Origin is the exact place that will touch vertices).
image

Hmm… correct me if I´m wrong but that makes the particles look in the direction of the vertex normal.
Influencing vertex normals directly is not possible without Python, right?
So what is an easy way to control vertex direction in cases like alexthealex case?

I don’t know much about python possibilities. In OP’s case global/object Z orientation could be just enough. I’m not sure how to tackle problems related to slope though.

Wouldn´t all houses look in the same direction then? alexthealex wants his houses to be oriented towards - i guess - the street.
I think he really needs to emit from faces but I´d be very interested in a solution that uses vertices. It would make the whole process of creating the emitter less cumbersome.

You’re right it would, so I gone back to the Normal direction posibilities and this looks like a good starting point maybe?


I basically seperated the ‘street border’ and extruded it upwards (to fix directions of particles). There is also a vertex group for density distribution.
street_border_extruded
Here you can check the blend file: housing_particles.blend (718.2 KB)

1 Like

Ah, yes, that´s a good way. Saves you from edge splitting and scaling the faces.