Model export application notes

Note #1: Format Recommendations

Please note that some of the listed tools require additional plugins to be able to load all formats.

ToolFormatMandatory Options

ArcGIS Earth

KML

Autodesk Max

OBJ, FBX

(for obj, enable import of smoothing groups in max)

Autodesk Maya

FBX, ABC, OBJ

(Maya cannot import ABC materials out-of-the-box.)

Autodesk MotionBuilder

OBJ, FBX

Blender

OBJ, FBX, ABC

- Multi-Texturing

Cinema 4D

OBJ, DAE

- Multi-Texturing

Deep Exploration

OBJ, FBX, DAE

SideEffects Houdini

ABC, USD

The Foundry Katana

ABC, USD

Lightwave

OBJ

Polytrans

OBJ, FBX, DAE

e-on Vue

VOB, OBJ

Note #2: Working with Expensive Assets

If you work with expensive (i.e., large) assets, it is of advantage to create simplified proxy assets and switch between them with a global LOD (Level of Detail) attribute. To avoid scattering the LOD attribute all over the rules, it is useful to put the conditions into separate "asset loader" rules:

attr LOD = 0
...
Shaft -->
    s(diameter,’1,diameter) center(xz) color(shaftC) ShaftAsset 
    
ShaftAsset -->
	    case LOD == 0: primitiveCube()
	    else: i("path/to/expensive/asset.obj")
...

Note #3: Working with Large Models

If you plan to create large models, it is of great advantage to implement global CGA attributes into your rule sets that allow to selectively block the generation of polygon-intensive model features. For example, one could replace some high-polygon greek columns with simple cuboids by using an attribute LOD, together with a corresponding condition in the CGA rules.

Application Example

Let's assume you want to render a large scene with Maya/Arnold and you have a CityEngine scene ready with a LOD switch. By exporting the scene with LOD = 0 to a single .obj file (without any textures) and importing it, for example, into Maya, you are able to quickly setup the lights and camera without overburdening Maya with heavy geometry. Once the environment is ready you can go back to CityEngine and export the whole scene with LOD = 1 to USD files and link them to the render setup.

Implementation Example

Below you find a modified version of the Parthenon temple shape grammar example. Note the usage of the LOD attribute:

The temple with LOD = Low, ~90k polygons

...

# ---------------------- model parameters ----------------------

@Group("Model Options", 0)
@Order(1)
@Enum("High","Low")
attr Level_of_Detail  = "Low"
const HighLOD         = Level_of_Detail == "High"

...

### Columns ###

...

ColumnTile --> 
    set(trim.vertical,false) 
    primitiveCube() s( Diameter ,’1, Diameter ) t(’-0.5,0,’-0.5) 
    color(Column_Color) 

    [ case HighLOD : Column
      else : Column. ]

Column --> ...	  
	  
...
The temple with LOD = Low, ~90k polygons

The temple with LOD = High, ~675k polygons

The temple with LOD = High, ~675k polygons