Tutorial 16: Urban planning

To access the tutorials in CityEngine, click Help > Download Tutorials and Examples.... After choosing a tutorial or example, the project is automatically downloaded and added to your workspace.

This tutorial describes how CityEngine can be used for typical urban planning tasks.

proposed building design


This tutorial describes how CityEngine can be used to work for typical urban planning tasks. For this purpose, we are using a fictitious example of a development area with nine building plots in the center of a city. The goal is to design a mixed use quarter, where shopping, living, and working will take place. In this tutorial we are developing a schematic design for this area that meets the city's zoning regulations. (This tutorial was developed in collaboration with Matthias Buehler (http://www.garsdaledesign.co.uk) and the Swiss urban planning company SEILER&SEILER (http://seilerseiler.com), who use CityEngine extensively for their daily work.)

Of course, urban planning processes are typically reaching a much higher level of complexity than the simplified case described in this tutorial. In reality, these processes are influenced by a large number of factors, such as a variety of stakeholder interests, budget, project phasing, mobility targets, capacity of infrastructure (public transport, supply and waste), listed buildings, nature conservation, etc. What this simplified example covers in about two hours would take several months up to several years in reality. CityEngine is particularly well suited to deal with such processes of iterative nature. Feedback-loops with clients are easily managed by sharing the proposed design options via CityEngine WebScene. As it is typical work in CityEngine, the refinement of the designs are mostly done by adapting shapes, positions, and changing attributes in the Inspector. Changes are immediately reflected in reported key figures such as FAR (floor area ratio).

This tutorial shows how CityEngine's procedural modeling can successfully be applied to a point and polygon "feature-driven" semi-automated workflow. Since writing custom distribution rules for building placement patterns can result in quite complex CGA code, we propose in this tutorial to simply use either point shapes or manually created footprint shapes of any form, as a faster way to control the footprint distribution. Many people may find this quite intuitive and more flexible, especially for small to medium-sized contexts.

Here is an overview of this tutorial:

  • Urban Planning Tools gives an overview of the CGA-files that we will use to accomplish our urban planning tasks.
  • Zoning defines and displays the zoning regulations as maximum building height and setbacks for the development area.
  • Master planning develops a schematic design for the building plots, which is in line with the zoning regulations that were just defined.

As you will see, CityEngine can be used in multiple contexts, disciplines, and planning phases for your projects.

Urban Planning tools

Here is an overview of the CGA-files that will be used in this tutorial:


  • Zoning.cga: Applies zoning definitions such as setbacks, maximum building height etc. to a building plot and displays these as frame.
  • Pointmarker_To_FootprintShape.cga: Creates footprint shapes from a point marker shape and then uses (imports) FootprintShape_To_Building.cga to extrude these. Size of grid, footprint form, and various other attributes allow easy customization of the footprints. To draw a point marker, use the Shape Creation Tool ( in the viewport, Shift-S). To rotate a building, rotate it's marker with the 'R' key. Scale it with 'E'.
  • FootprintShape_To_Building.cga: Extrudes a footprint shape and applies building usages. The attributes will switch to display building parts that break the zoning regulations defined in Zoning.cga. Parts that are not entirely within a zoning volume produce red-colored geometries. This is very useful in visually exploring multiple designs.
  • Landscaping.cga with start rule Water body: Creates a water body with surrounding walls.
  • Landscaping.cga with start rule Trees and TreeAlley: Creates schematic trees and allows changing their size, distribution type, density, etc. (Note: TreeAlley is supposed to be used on dynamic street shapes.)
  • Some of the rules produce helpful dimensioning text.
  • All rules produce CGA reports.
  • The FAR value report needs the parcelArea attribute to be mapped correctly in order to work. Please refer to other tutorials or the manual for more details on "attribute mapping".
  • Please note that some of these rules have "styles" defined. These styles are just example "presets" that were defined for this tutorial and can be freely customized for individual use.

Example styles:


Example models:

  1. Open scene with example models 2_UrbanPlanning_Tools.cej.
  2. Play with the rules and have fun!


In this part of the tutorial, we focus on the definition of the development framework. Usually, there is an area or a city-specific zoning system defined by the public authorities that serves as a guideline for master planning and potentially also a strategy/mission statement that further refines the task (e.g. 100'000 flats in 10-years). For the sake of simplicity, we define the development framework based on the spatial context (allotment, city structure, neighboring quarters etc.). First, we define the arrangement and proportion of different usages and then we specify the maximum building heights and setback lines.

fictional setting

Definition of usages

Plot A overview (aligned to north)

We use building Plot A as an example to show how the usages are derived from the spatial context. Here are the defined conditions:

  • Plot A acts as entrance gate for the development area.
  • The main street that runs along its eastern side brings a high amount of motorized and non-motorized traffic into the area.

Based on these conditions, we plan for mixed-usage along the main street with shops on the ground floor and services on the upper floors; plus residential usage behind the buildings.

  1. Open 3_Zoning_01.cej. This scene contains the building plots and the neighboring context. Click Accept and CityEngine will generate all models.
  2. Zoom-in on the building Plot A by selecting it and pressing 'F'.
  3. empty plots
  4. Assign the rule Zoning.cga
  5. Choose the style Mixed_Use for Zoning.cga.
  6. Adapt the visibility of the layers and toggle wireframe display ('7' key) if needed.
  7. default zoning volume

Definition of building heights and setbacks

Setting the maximum building height (usually this is defined in the existing building and zoning regulations).

  1. Make sure the maxHeight attribute of the zoning volume is set to 50-meters to ensure that we allow a dense enough context integration.
  2. Note:

    In addition, it is possible to look at the sun incidence angle (layer scene light in the Scene Editor window), to check direct sunlight in the spaces between the buildings. We will skip this step in our example.

  3. Specify all setback distances to 10-meters, to allow flexible usage of the outer areas (parking, outdoor seating, etc.).
  4. zoning volume with attribute values displayed in Inspector

Reflecting the zoning definitions

To start, we will test if our zoning definition allows sufficient density for an urban center. Notice that in the scene, there is already a small test shape (layer Footprint) that we can use as a locator (indicated in green in the next screenshot) to place a building. Actually, instead of placing only one, we will place nine (3x3 grid) mixed-use towers with a total height of 50-meters and check the FAR in the Reports section of the Inspector.

Building locator shape, ready to assign a rule
  1. Open 3_Zoning_01.cej and generate all models.
  2. Assign rule file PointMarker_To_FootprintShape to the footprint shape and generate the model.
  3. Set mainLength to 25 and mainDepth to 25.
  4. Set footprintForm to Rectangle.
  5. Set gridWidth and gridDepth to 3.
  6. Set gridDistWidth and gridDistDepth to 35.

    You can also use one of the predefined styles.

  7. Switch to FootprintShape_To_Building.
  8. Set numberFloors to 13.
  9. Look at the building reports.

The current FAR value is 0. To get a correct value, we input the area of the plot the building occupies. The simplest way this is done is by defining the value as a user set value in the rule. Do the following:

  1. Temporarily, assign the rule rules/helpers/reportShapeArea.cga to the plot shape. Write down the reported value. For this plot, it should be 40,445 m2.
  2. Go back and reassign the Zoning.cga rule.
  3. In the rule FootprintShape_To_Building, set the value of parcelArea to a user value of 40,445 in the Inspector.

    This value could also be mapped in the Inspector instead of setting manually.

  4. Look at the FAR in the reports section: The FAR value is 1.81 and therefore fulfills the requirements of an urban center.

Of course, this is only a very coarse design approach, but it gives us a ball-park number for the FAR very quickly. We now can dig deeper and work out more details, with more precisely placed buildings and better overall designs. Let's do this:

  1. Open 3_Zoning_03.cej for an example of zoning design.
  2. Feel free to play some more with the zoning volumes of the rest of the plots. Come up with your own designs!

urban block with FAR=1.81

Master planning

Now that we have set a starting point in the zoning regulations, we can start looking at the schematic design for the complete development area.

First, we select an initial layout with base topologies and main usages for the building plots and show how the compliance with zoning regulation can be ensured. Next, we zoom in on one building plots and further refine topology and design. Finally, we move our focus to the exterior space and add structuring elements.

Schematic design

We have prepared an initial layout with a mixture of rectangle, L-shapes, and U-shapes with a variety of usages. We can now easily customize the design by changing the attributes in the Inspector. The predefined styles for usage mixes, footprint shapes, and the ability to create grid-like arrays make this process substantially more simple.

  1. Open the initial scene 4_Masterplanning_01.cej
  2. Play around with footprint shapes, grids, usage mixes, etc. Open Reports in the Inspector and see how reported key figures such as FAR are updated automatically when you change the building specifications.
    3 X 3 grid of square buildings
  3. Adjust the footprint shapes to L buildings to get the following:
    3 X 3 grid of L buildings

Now let us have a look at how we can use the given rules to visualize any broken zoning regulations. We can change the height of one of the buildings to a value that is higher than allowed, such as 20 floors. The part of building that exceeds the maximum height allowed by the zoning regulation is displayed in red.

The building rules in this tutorial have a small set of attributes to actually design the building, especially the overall building volume. You can drive the building's total height and then design the building minimally by cutting away one part of the building. We will use the three attributes volumeChangeFloorID, volumeChangeRotation, and relVolumeChangeSplit for this. Do this:

  1. Select one of the buildings.
  2. Set attribute visualizeBrokenLaw to True.
  3. Change the number of Floors to 20.
before: playing with the visualizeBrokenLaw attribute

after: playing with the visualizeBrokenLaw attribute

Adding two new landmark buildings

Let's zoom in on the central building plot and refine the design of the future entrance to the neighborhood. We add landmarks by changing the design of the two adjacent buildings. 4_Masterplanning_02.cej shows the results of these adjustments.

  1. Open 4_Masterplanning_02.cej, generate all models.
  2. view of the default building volume proposals
  3. Change numberFloors of the L-Shape building to 13 and volumeChangeFloorID to 5.
  4. Set volumeChangeRotation to 330 degrees.
  5. Set relVolumeChangeSplit to 0.5. This changes the building form to a slightly truncated tower which starts at level 5.
  6. simple proposed building design
  7. Change the numberFloors of the line-shaped building to 13 and its volumeChangeFloorID to 5.
  8. Set the relVolumeChangeSplit to 0.7. This attribute drives the split for the tower and cuts away 70% (relative 0.7) of the top volume.
  9. addtional simple proposed building design

Designing exterior space

4_Masterplanning_03.cej shows the results of our basic design for the exterior space. Now we are ready to zoom in further and design the exterior space (our attempt on landscape architecture) right at the entrance of the development area. We increase the amenity of the entrance by adding a water basin and trees.

  1. Open scene with exterior space design 4_Masterplanning_03.cej.
  2. Let's start with a simple pool of water. Create a square shape and apply the rule file Landscaping.cga with the start rule Waterbody.
  3. added landscaping element: a big water pool
  4. In our fictitious city, the temperatures are relatively high in summer. Therefore, we add a line of trees along the street.
  5. Continue using the landscaping tools at hand to create your own exterior designs!
  6. If you are stuck, have a look at our result in 4_Masterplanning_04.cej.
    Simple proposed design
  7. Change your view.
    Alternate view of simple proposed design

Obviously, we only have time in this tutorial to focus on this small and abstract design. We hope this tutorial, however, has been helpful and has demonstrated the many ways in which CityEngine can be used in your city planning scenarios.