Procedurally generated buildings, ground and details created with custom Houdini tools
This scene was an experiment in generating detailed structures using a relatively simple Houdini setup. The approach was to combine surface subdivision and building generation, in order to be able to create generic city blocks at once or input custom geometry to be detailed.
Buildings without texture or lights
Cinema 4D is a little unconventional for such a heavy scene, but had the right amount of control over fog and lighting.
This network is broken down into modules:
- Base geo generator for city block
- Base geo for individual buildings
- Greebling (random subdivision) loop
- Regular subdivision
- Inline and Additive windows
- Rooftop features
- UV unwrapping
- High and Low poly output
Generating a bunch of building-shapes has got to be one of the most thoroughly solved problems in Houdini. This approach is simply copying a box to a selection of points from a grid, and using attributenoise to resize the boxes within a threshold. Then, they can be operated on as a group, or named and operated on individually.
Detailing the surface is a process of:
- Breaking down the surface into large chunks
- Identifying the roof, sides and bottom
- Adding detail and further subdivision depending on the surface
The whole building is first broken down randomly into chunks within a certain size range. On the sides of the building, these chunks are then given a regular subdivision, which can be unique per section or uniform across the building. This pipeline includes options of inline windows, which are carved into the geometry, or additive windows, which are separate geometry. The roof has less subdivision, but additional boxes and antennae. The bottom can be carved off completely, depending on how the asset will be used.
For the initial random subdivision, I tried different methods for greebling before deciding on a modified version of Jake Rice’s Dynamic Polygon Splitting technique. It’s a flexible method of dividing quads in Houdini using half-edges. Basically, it evaluates each quad, chooses an edge, finds a point randomly along the half-edge, draws a line to the opposide half-edge, and subdivides the quad.
Each unique section of the building can be given unique identifiers such as color to be used in texture assignment inside Substance or other programs. I haven’t taken advantage of this for the textures used in this scene, but the functionality is built in.