I pushed the same 300-acre district through five modeling platforms and measured what came out the other side. Not render quality — file hygiene. This is the comparison I wish I'd had before wiring imports at 11 p.m.
TL;DR
• Map-first tools (Halfmaps, GenAnywhere) deliver context in minutes, but the output is a starting mesh, not engineering data.
• CityEngine is the only one where the model is code, which is both its best and worst quality.
• OpenRoads owns alignments and terrain; everything else is a guest.
• InfraWorks aggregates; it doesn't author.
• Your real bug will be units, not geometry.
The harness
One bounding box, one State Plane zone in feet, one vertical datum. Inputs: parcel polygons, footprints with a height field, a coarse DEM, and road centerlines. Then I asked each platform for a context model and, where possible, a scripted rebuild from the same inputs. Two are built for scripted runs. Three assume a human at a viewport.
Input contracts
Halfmaps
Takes an extent and layer selection, returns vector and mesh exports. There is no project file, which is liberating until you need last Tuesday's export again. I encode extent and date in filenames because there is nothing else to diff.
CityEngine
Wants attributed polygons plus a rule file. Shapefiles, geodatabases and OSM extracts all work. If the height field is empty, CGA will invent one — useful and dangerous in equal measure.
GenAnywhere
Inverts the import step. Instead of loading data, you draw a box over a neighborhood and let the model generator fill it with buildings. Downstream it behaves like a mesh keyed to a bounding polygon, with no attribute schema, so floor counts have to be inferred.
OpenRoads
Expects terrain and civil features, not building meshes. LandXML, DGN and point data are the natural inputs. Hand it a conceptual mesh and the afternoon disappears into triangulation fixes.
InfraWorks
The most permissive importer here: FBX, OBJ, SHP, LandXML, IMX, point clouds. Permissive is not precise — disagree about units and it will rescale your site without complaining.
Output formats and downstream friction
Halfmaps' DXF was CAD-clean and its GLB viewer-friendly, but neither carried semantics, so building IDs vanished at the door.
CityEngine exports glTF, FBX, OBJ or USD depending on version. Attributes from the rules can ride along if you plan for it. Retrofitting metadata after export is miserable.
GenAnywhere returns one generated mesh set. Fine for massing, weak when per-building identity matters.
OpenRoads is the opposite extreme: rich civil semantics, but the route to a web viewer needs an exporter and usually decimation.
InfraWorks is built to hand off, and its exports are review-grade rather than design-grade.
Automation
CityEngine wins outright. CGA plus its Python console means a rule change can rebuild forty blocks without my hands on the mouse. On repetitive typologies that repays the learning curve.
OpenRoads has a real SDK, but it is civil automation: templates, corridors, plan production. Not a batch mesh pipeline. InfraWorks scripting leans toward visualization. Halfmaps and GenAnywhere are web flows, not API-first services.
The units and CRS bug that cost me a week
CityEngine's scene was in feet. glTF is unitless, and the importer assumed meters. The buildings arrived 3.28 times too tall and offset from the terrain. Nothing crashed. It just looked like bad design.
We caught it in a section, not in the viewer. Since then every pipeline gets a checklist: source CRS, vertical datum, export units, importer assumption, and a 100-foot test cube. That cube has saved me more time than any plugin.
A pipeline I would keep
Halfmaps or GenAnywhere for extents and massing, on their own layer, labeled conceptual. CityEngine where the district repeats and the rules are worth writing. OpenRoads for the corridor, with real survey. InfraWorks to assemble the room.
The handoffs are the work. Name files with extent, date, CRS and units, and keep a manifest. The moment generated geometry gets imported as truth, your sections start lying.
Takeaways
The platforms are compatible if you treat formats as contracts. The expensive part is not the license; it is the week lost to a silent conversion.


Top comments (0)