ArcGIS CityEngine

Palladio: an open-source CityEngine plugin for Houdini

Matthias Buehler, vrbn.io
Simon Haegler, Esri R&D Center Zurich

One of the original motivations for Esri CityEngine was to create digital urban environments for movies in a more efficient way than modelling everything manually. While the main application of CityEngine has shifted to urban planning since it joined the Esri product family, we still have a small but strong user base in the visual effects industry (VFX). A recent example of a movie where CityEngine has been used is Blade Runner 2049.

At the core of CityEngine is the procedural modelling language “CGA”. CGA stands for “Computer Generated Architecture” and can express a wide range of architectural patterns (e.g. the layout of windows), mass configurations (e.g. wings of a building) and much more. CGA is organized into rules that are evaluated into 3D models of a building or a whole city. These rules consume external attributes – from simple values like “building height” to more complex input data like zoning laws. In the end, these external attributes control the overall design of a city and ensure consistency across multiple buildings.

While CityEngine has a number of built-in features to create attributes for CGA on the scene level (e.g. map layers), these attributes often come from external software packages and have to be imported. And while there are a number of file formats in the VFX and GIS world that support transport of attributes (e.g. Alembic or Esri FileGDB), there is always a certain overhead or even conversion loss in this process.

CityEngine is used to author Rule Packages (RPK) which are a self-contained collection of CGA rules and associated assets (geometry and textures). These packages can be subsequently consumed by the CityEngine SDK running inside other host applications to create the final 3d models.

The difficulty with attributes is only one of the reasons we looked into ways to integrate CityEngine CGA into other software packages directly, as we have demonstrated with an experimental plugin for Autodesk Maya. The Maya plugin demonstrates a workflow that uses CityEngine to author “Rule Packages” (RPK) that are consumed by a plugin based on the CityEngine SDK (also known as “Procedural Runtime”, PRT).

We want to take this to the next level and have a seamless integration of CGA into a VFX workflow that ranges from modeling to simulation (think destruction, fire, water) to the final render pass. For this, there is no better host application than SideFX Houdini, with its 20+ years of history in procedural tools for VFX.

 

Enter “Palladio” – an open-source Houdini plugin

VRBN and Esri R&D Zurich are happy to introduce a new open-source project called “Palladio”. Palladio is a plugin for SideFX Houdini and wraps the procedural modeling core of CityEngine. It is aimed at developers in the VFX, Game, Architectural Visualization, and Urban Planning communities. We see this plugin as a building block to create higher-level modelling tools for urban environments in the form of Houdini Digital Assets (HDA).

SideFX Houdini is an award winning software package for VFX simulation, modelling, animation, and rendering. Houdini was originally released in 1996 and has a strong background in procedurally creating special effects like destruction, smoke, fire, and water simulations. It recently gained traction as a general purpose modelling and animation tool and makes for a suitable host for the very specific architectural modeling tools of CityEngine CGA.

We invite all developers working with Houdini and CityEngine to give Palladio a try, maybe even fork the repository and create pull requests. Currently, Palladio isn’t either an Esri or a vrbn product and there isn’t an official/commercial support from either of them. If you are interested in commercial services related to Palladio, please contact info@vrbn.io.

Welcome to the “Palladian Computer Graveyard”

Let’s look at an example to see how you can use Houdini operators and CityEngine rules together. The combined possibilities are endless and fun to explore. In this example, what started out as a dystopian mega-city downtown ended up looking like a junkyard of old computer cases bound together by a fishing net. This demo scene is available on the Palladio github repository (attached to releases).

This example scene consists of four main steps, the first three steps use CityEngine rule packages (RPK) chained in sequence to produce streets, parcels, and buildings old computer cases. The fourth step uses Houdini tools to put the wireframe of a convex hull around the “buildings”. Please note that chaining rule packages and operating on combined CGA leaf shape geometry is not possible in standalone CityEngine, at least not in this straight-forward manner.

(1) The first RPK generates the street layout and raw parcels by recursively subdividing and rotating the shape scopes.

(2) The second RPK randomly offsets the raw parcels to divide them into building footprint and yard area.

(3) A third RPK creates the actual building volumes. The buildings basically consist of randomly stacked cubes with two different facade styles.

(4) Next, we use Houdini operators to create a convex hull around the “leaf shapes” of the buildings (left image) and then merge it all together (right image).

Finally, we remesh all the “yards” and add wireframes to make it look like a net. Also, we apply the materials.

Please note that Palladio does not just generate geometry. Each Palladio “generate” operator can also emit CGA attributes or reports like unique building identifiers or material properties as Houdini primitive attributes. In this example, we use this to count the number of buildings (not shown above).

 

 

Acknowledgements

Our thanks go to the fine folks at Esri R&D Zurich and VRBN that provided valuable comments and feedback. Special thanks go to Johnny at vrbn for his work on the logo.

About the author

I'm a software developer in the field of computer graphics, specialized in procedural modeling. I have a background in electrical engineering (hardware development), general software development (C++, multiple scripting languages, build environments) and expert knowledge in Linux systems (several platforms). My main interest currently lies in the application of procedural 3d modeling techniques in AEC and M&E (special effects and environments for movies and computer games), as well as digital set building and production pipeline tools.

Connect:

Next Article

Harnessing the Power of Imagery: A Programmatic Approach

Read this article