Innovating Urban Landscapes: Nordisk Film’s Procedural City Generator

September 2020

While working at Nordisk Film Shortcut, I had the opportunity to develop an in-house procedural city generator—a project aimed at automating and enhancing the process of creating realistic cityscapes for film and TV productions. Using Houdini, VEX (a programming language for Houdini), geometry nodes, and Python, I created a toolset capable of transforming individual geometry assets (like windows, doors, bricks, sidewalks, and more) into fully realized city environments. This process replaced time-consuming manual workflows with an efficient, modular system, resulting in faster production times and more intricate details.

The Challenge

At Nordisk Film Shortcut, city-building was a recurring task in many productions. Until then, this had been a highly manual process, with geometry assets being placed individually. While creating great results, it was time-consuming and limited the level of detail achievable within tight production schedules. Recognising the need for a more efficient workflow, I jumped at the chance to take on this R&D project.

By developing tools to automate much of the process, we could save significant time while improving flexibility. This not only allowed us to reuse assets across projects but also gave us the opportunity to focus on adding extra detail and realism—key elements that elevate the final result.

Technical Workflow

The videos below demonstrate the workflow in Houdini, utilizing custom nodes with intuitive interfaces that simplify the creation of cityscapes. While the interface makes the process user-friendly, the complex geometry manipulation and procedural logic happen seamlessly under the hood, ensuring both efficiency and accuracy.

1. Designing the Building Blueprint

The process begins with designing blueprints for various buildings. Artists can specify parameters such as window types, door styles, roof designs, and ornamentation. The initial blockout geometry is procedurally replaced with interconnected assets, transforming rough layouts into detailed and realistic structures. In Houdini’s viewport, a simplified preview of the building is displayed, allowing for quick iterations before rendering the final version with full shaders.

(See video for a demonstration of this process.)

2. Heightfield Generation from Geospatial Data

Using real-world geospatial data, I generated a heightfield map to accurately represent Oslo’s terrain. This was shaded with ground shaders and snow to enhance the realism of the final renders.

(See video showcasing the Oslo heightfield map)

3. Creating Building Footprints from Historical Maps and blocking out the city

For this project, we used a fire department map of Oslo from the early 1900s to recreate the city for the Norwegian Christmas Calendar TV Series Kristiania Magiske Tivolitheater (broadcast in Denmark as Det Magiske Tivoliteater). The footprints were drawn in 2D and enhanced with procedural controls to set floor heights and layouts. This enabled both historical accuracy and creative flexibility.

(See video demonstrating the blockout geometry creation process.)

4. Procedural Detailing of City Blocks

Once the blockout geometry was in place, I developed tools to procedurally replace the blocks with highly detailed geometry. Building procedural detail at this scale would be a significant undertaking from scratch — but that's where Houdini's own ecosystem becomes an asset. The workflow builds on Houdini Labs tools as a foundation, with custom VEX and Python logic layered on top to handle the specific requirements of production.

VEX scripting handled tasks such as placing windows, doors, and bricks; aligning roof tiles with slopes; and ensuring seamless transitions between neighbouring buildings. Python was used to create user-friendly interfaces and shelf tools, enabling artists to quickly set up and customise the details.

(Watch the transformation of blockout geometry into detailed buildings in the video.)

Final renders with autonomous crowd

No city is complete without its people. I also developed custom crowd system tools to populate streets with autonomous agents, bringing the city to life. These tools, along with their pipeline, are covered in the next post.

Below you can see some of the final shots, used in Luka and the Magical Theater (In Danish: Det magiske tivoliteater).

Key Features and Innovations

Dynamic Building Design: Automatically adapt buildings to their footprints while varying roof styles, ornamentation, and façade materials for a diverse yet cohesive look.

Roof Alignment and Detailing: Procedurally placed roof tiles aligned with gradients, while roof gables were corrected dynamically to maintain realism in complex layouts.

Sidewalk and Street Features: Procedural tools created sidewalks, placed streetlamps, and added details like snow tracks and footprints.

Reuse and Flexibility: The modular system enabled the reuse of individual assets across multiple projects, providing significant time savings and creative freedom.

Images below showcase the contrast between an early 1900s Oslo-inspired cityscape and a modern skyscraper-style urban environment. This change in style is achieved in less than a minute with just a few clicks, thanks to the flexibility of the custom procedural tools.

Coding and Tool Development

VEX: Extensively used for geometry manipulation tasks such as collision detection, roof slope gradient calculations, and inheriting attributes (e.g., building type, floor height) for downstream processes. These ensured the correct placement of geometry and shaders.

Python: Used to develop Houdini Digital Asset (HDA) interfaces, control menus, and create shelf tools that simplified initial setups for artists, reducing onboarding time and improving workflow efficiency.

This project transformed how cities were created at Nordisk Film Shortcut — faster turnarounds, reusable assets, and significantly more detail within production schedules. Building tools that empower other artists to work more efficiently, rather than just solving problems for a single shot, turned out to be one of the most satisfying parts of the work. It's a mindset that carries directly into the pipeline and automation work I do today.

Previous
Previous

Developing Custom Houdini Crowd Tools

Next
Next

Guiding Attention in VR