Innovating Urban Landscapes: Nordisk Film’s Procedural City Generator
Date of Project: 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. As someone passionate about R&D and innovation, I thoroughly enjoyed tackling this challenge and exploring ways to improve our workflows.
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. VEX scripting handled tasks such as placing windows, doors, and bricks; aligning roof tiles with slopes; and ensuring seamless transitions between neighboring buildings. Python was used to create user-friendly interfaces and shelf tools, enabling artists to quickly set up and customize 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.
Conclusion
This project transformed how cities were created at Nordisk Film Shortcut. By automating complex processes and allowing for the reuse of modular assets, we achieved greater efficiency and detail in production. The tools I developed enabled faster turnarounds while offering creative flexibility to tailor cityscapes to specific artistic and narrative needs. It was a deeply rewarding experience that underscored my love for R&D and problem-solving through technical innovation.