Mini City

I created this procedural city as a demo project during my time as a SideFX intern. The goal was to demonstrate uses of the Lot Subdivision SOP (which is a node my team made before I joined). The city is completely generated in Houdini and rendered in Unreal. 

You can see the project on the SideFX Labs ArtStation.

Below is a breakdown of how I created it :)

Final Renders

Breakdown

Buildings

I started the by implementing a very simple base setup that divides the input area into city blocks which are further divided into building lots. Each building lot then gets a random number of floors. In this simple base system, all floors were originally identical. 

I then extended the system to make the first floor of every building a shop. Each shop has a storefront facing the street, and sometimes also another window on the additional wall facing side. Shops have different storefront layouts (door placement and type, awning placement and type, window type, display ledge material) and wall materials (bricks, slats, or plain). 

I also added different roof shape variations (tapered roof, decorative roof fronts of various shapes, and staggered castle-like extrusions). Some tapered roofs have dormers, and some flat roofs have scattered objects on top like pipes and vents. 

Although it's hard to see some of these differences in the grey shaded version, they add a lot once the final city is in color. 

Initial rough city system with identical floor modules

City after adding variation to shop floors and roofs

Courtyards and Parks

Next, I wanted to add more variation and break up the repetitive silhouette of the city by adding empty blocks and lots. I made it so some building blocks are randomly turned into parks with grass, cobblestone paths, park benches, trees, and fountains. I also made it so blocks with very few buildings would be turned into cobblestone courtyards with seating and trees. Some of the challenges I encountered were making sure park benches always face a sensible direction, and never block store doors. I also took care to ensure none of these procedurally dressed elements intersected each other. 

Pigeons

Just for fun, I thought it would be amusing and add a bit of life to the city if I scattered some pigeons. I made a simple pigeon generator (video on the right) with some controls for making a variety of pigeons. Then I scattered them on the available areas in parks and on roofs. I think they add a lot of charm to the city!

pigeonvideo.mov

Cars, Traffic Lights, and Street Lamps

Next, I added cars to the roads. I thought this would also help make the city feel a little more alive. There are two car shape variations, and some cars also have taxi patterning. I also procedurally placed traffic lights and street lights on the corners of some blocks, because I knew I wanted to have some nighttime renders so lights would add a lot. 

Fire Escapes, Balconies, and Vines

Next, I wanted to make the building silhouettes a bit more varied, so I added fire escapes and balconies. Fire escapes have a random chance of being added to the sides of buildings with two or more floors. Buildings with no fire escapes also have a chance of getting balconies, which have different styles and materials and can span the whole width of a building or just a subset of the windows.

I also wanted to add some more organic details, so I added vines. If a building doesn't have a fire escape, then it has a random chance of vines being grown on the side instead. These vines shapes are generated using a shortest path algorithm. 

Plants

I thought the vines added a lot to the city, so I decided to also add some more plants! There are five procedurally generated plant variants, and they can be found in window boxes, on balconies, and outside shops (by entrances or by cafe seating). These were very fun to add and I think they turned out super cute! Aside from the pigeons, these are my favorite part of the city.

Cafe Seating

Lastly, I wanted to add cafe seating outside of some of the shops to give the street level views of the city a bit more personality. Each shop side has a random chance of being designated for cafe seating. Cafe seating areas then get a random table and chair (with a random matching color scheme) and sometimes a potted plant too!