DEV Community

Cover image for Existing Conditions as a Data Problem: Terrain, Point Clouds and One-Click City Generation
Shapezo
Shapezo

Posted on

Existing Conditions as a Data Problem: Terrain, Point Clouds and One-Click City Generation

Most of my complaints about 3D city tooling come from treating existing conditions as a rendering problem when it is a data problem. I ran the comparison directly: InfraWorks, which composes terrain, imagery, transport networks and geographic layers into a model environment, against Shapezo, which returns a generated model for whatever region you outline on a map. Below is the pipeline-level view of what each one does with the inputs, and where the assumptions start to hurt.

Ingestion

The environment model is an ingestion exercise. Elevation surfaces, orthophotos, road centrelines, parcel and footprint layers, survey points and point clouds all arrive with coordinate systems attached, and the software's job is to keep them consistent. When something is off by a metre, I can usually trace it to a projection, a datum, or a source that predated the road built last year. That traceability is the whole product.
The generated model has no ingestion surface I can inspect. I supply a boundary. Whatever the service used underneath, terrain resolution and source currency included, is now baked into geometry I cannot attribute. For a backdrop that is acceptable. For anything that gets measured it is a dead end, because a number without provenance cannot be reviewed.

Terrain and vertical accuracy

This is the sharpest divide. Grading, drainage routing, sight-distance checks and intersection sight triangles are all vertical questions. A flat plane under a district kills them immediately. I ran a slope analysis over the corridor and found two alignment options that only worked if the ground was wrong, which is precisely the failure mode a generated model cannot warn you about.

The quiet one-metre error

Every team I have worked with eventually hits the same bug: two datasets in the same projection but different vertical datums, so everything looks aligned and nothing is. A bridge soffit ends up underground, a storm inlet sits above the pipe it connects to. The environment model at least lets me find it, because the surfaces stay separate and queryable. Once a generated mesh has fused ground and structures into one shell, that class of error becomes undiscoverable by inspection, and I no longer trust any vertical reading from it.

Level of detail and scene weight

Both approaches force an LOD decision, just at different ends. The environment lets me keep terrain and networks dense while buildings stay as footprints until they matter, so a four-kilometre corridor stays interactive. The generated model arrives dense everywhere and uniform, which is heavy in the viewport and wasteful for the parts of the scene nobody inspects. Decimation is my first step whenever a generated asset has to sit in a larger scene.
The performance gap is not only about polygons. In the environment, the layers are separable, so I can turn imagery off, thin the point cloud, and keep the network for analysis while the frame rate recovers. A fused mesh has no such switches. Its cost is fixed, and the only lever I have is destroying detail I might have needed later.

Editability and downstream handoff

Parametric objects in the environment respond to design changes: move a road and the corridor features follow, then the same model feeds detailed design tools without a format fight. A generated mesh is a terminal artefact. It can be moved, scaled, converted and looked at. It cannot be designed against, and every handoff from it is a lossy export rather than a live connection.

Reproducibility

I can commit the source list, the styling and the alignment parameters for a model environment and rebuild the scene from scratch. That makes the model reviewable, which matters in an industry where someone signs something. Region-to-generation gives me an artefact and a screenshot of the boundary I drew. Two runs are two results, and I cannot diff them in ## any useful way.
What I wish fast generators exposed
A manifest. Which layers were used, roughly how current they are, what confidence the heights carry, and a per-object handle I can address. None of that would slow the interesting part down, and all of it would let a generated backdrop sit in a real pipeline instead of being quarantined at the edge of a slide deck.

Top comments (0)