The main concept of CityEngine is the procedural approach toward modeling efficiently. The computer is given a code-based procedure that represents a series of commands—in this context, geometric modeling commands—which then will be executed. Instead of the classical intervention of the user, who manually interacts with the model and models 3D geometries, the task is described abstractly, in a rule file.
Procedural modeling core
The commands provided in the CityEngine CGA shape grammar, such as extrude, split or texture, are widely known commands in most 3D applications, and you can adapt them to create complex architectural forms.
To learn more about procedural modeling, see Grammar-based modeling.
Dynamic city layouts
The dynamic city layouts allow you to create interactive street networks that automatically update in real time. Streets, sidewalks, and whole blocks, which form the specific urban context, adapt efficiently to your input and allow you to design the layout of complete cities.
All the geometries that depend on the layout of the underlying dynamic city layout are also updated on the fly. Your buildings are rebuilt while you edit the width of the surrounding streets.
The user interface (UI) in CityEngine can be adapted to tasks, including rule creation, working on the street network, editing attributes with real-time feedback, or studying the statistical reports of your current city's development.
To have control repetitive tasks, create formatted reports in file format, or automate other specific actions, use Python scripting to further streamline the workflow in CityEngine.
CityEngine supports the industry's most common formats for both import and export. You can transport line data, shape data (footprints), and 3D geometry to and from CityEngine. Whether you work in urban planning, architecture, entertainment or simulation, CityEngine provides a way to transport your data.
CityEngine modeling pipeline
Modeling an urban environment with CityEngine usually implies the individual stages of the pipeline given in the image below. The pipeline consists of several procedural modeling tools for generating large-scale urban layouts, as well as applying CGA rules for the creation of detailed building models.
A CityEngine scene is stored as layers of data types representing the different stages. The pipeline is flexible and can be entered at various stages. For example, street blocks or building masses can be imported and further processed.
Generate large-scale urban layouts
CityEngine consists of several procedural and interactive tools to lay out street networks and align and subdivide shapes. Streets can be grown according to patterns and edited interactively. For example, street-crossings can be moved, streets can be deleted or selected, and the street growth wizard can be applied again on the selection. Also editing tools for lot shapes are available, such as aligning building lots to a terrain. The tools usually work on the selection in the 3D view window or the viewport or operate on the whole layer.
The layered organization of CityEngine scenes provides a practical and organized handling of the massive data sets. For example, it is recommended that you duplicate layers before editing and therefore create variations in each layer. You can switch on or off the visibility of each layer.
Grammar-based modeling, or procedural modeling, has a widespread range of applications, but mostly it is applied when large numbers of iterations of a design or large numbers of objects have to be created that obey certain standardized rules. Automation of the modeling is the goal, and the overall quality of the grammar-based description is reflected in the quality and number of details of the generated models. Unique objects (such as landmark buildings) are best modeled by hand and usually do not need the procedural approach since often none of the modeling tasks on that object can be automated.
Of course, the preparation of the rule set creates a certain overhead at the beginning, but on the other side, the model generation itself is done in a small fraction of the time compared to classic manual modeling. The following chart compares both techniques, showing that the application of grammar-based modeling becomes useful with a certain amount of models to do.
Computer Generated Architecture
The Computer Generated Architecture (CGA) shape grammar of CityEngine is a unique programming language specified to generate architectural 3D content. The idea of grammar-based modeling is to define rules, or CGA rules within CityEngine, that iteratively refine a design by creating more and more detail. The rules operate on shapes that consist of a geometry in a locally oriented bounding box (the scope). The following rule derivation illustrates the process: on the left side, the start shape is shown, and on the right side, the resulting generated model is displayed.
The generation of building geometries with the CGA shape grammar works as follows:
- The building lots are either created by CityEngine with the above mentioned tools or imported. Instead of polygons, mass models (building envelopes) can also be the starting point.
- You select which rule file (.cga) to apply onto these shapes. You can either assign one rule to all buildings or assign rule sets on a per-building basis.
- You can trigger the application of the rules on the selected shapes. Therefore it is important that the start rule of the shape is present in the rule file. Otherwise, no rule can be invoked. You can then explore the generated models in the 3D viewer of CityEngine. In the case of very large models, it is not recommended to generate all buildings in CityEngine due to memory constraints.
- To edit the resulting 3D models, you can edit the rules, overwrite the rule parameters of a rule set on a per-building basis, and if stochastic rules are used (rules with random parameters), alter the random seed of all or single buildings.
- After the design is finalized, you can export the selected
buildings or streets to a hard disk (including textures).
There are no memory constraints in the exporting mode.