Esri CityEngine · Generate Realistic 3D Cities From Satellite

Generate Realistic 3D Cities from Satellite Images — Unreal Fusion
✦ Tutorial · Esri CityEngine · Unreal Fusion

Generate
Realistic
3D Cities
From Satellite

A complete step-by-step guide to transforming real-world satellite data into fully procedural 3D cities using Esri CityEngine — from import to Unreal Engine 5.

Unreal Fusion
CityEngine + UE5
Beginner → Advanced
SCROLL

What if you could turn a satellite image of any city on Earth into a fully textured 3D environment — in minutes?

That's exactly what Esri CityEngine lets you do. By combining real-world geospatial data with procedural generation rules (CGA), you can build massive, realistic urban environments at a fraction of the time it would take to model manually. Whether you're a game developer building open-world maps, an architect visualizing urban planning proposals, or a filmmaker crafting digital environments — this workflow is a game-changer.

In this tutorial, we'll walk through the entire pipeline: importing satellite imagery, auto-generating street networks, applying CGA rules for instant building generation, adding realistic texture variation, and finally exporting everything to Unreal Engine 5.

"Procedural city generation doesn't just save time — it gives you the creative power to iterate at city scale. Change a rule, and a thousand buildings update instantly."

#CityEngine #ProceduralModeling #3DCity #CGA #UnrealEngine5 #GameDev #UrbanPlanning #Satellite #Tutorial

5 Skills That Will
Level Up Your Workflow

01
🛰️
Satellite Import
Learn how to pull real-world imagery and GIS data directly into CityEngine using OpenStreetMap, Google Maps tiles, and custom geotiff files.
02
🗺️
Street & Layout Generation
Automatically generate street networks from satellite data and fine-tune block layouts with CityEngine's graph editing tools.
03
⚙️
CGA Procedural Rules
Write and apply CGA (Computer Generated Architecture) rules to automatically create thousands of unique, detailed buildings from footprints.
04
🎨
Textures & Variation
Use randomized texture atlases, facade variations, and LOD techniques to create cities that look real from every angle.
05
🚀
Export to Unreal Engine 5
Export your procedural city as optimized static meshes into UE5, complete with materials, LODs, and Nanite-ready geometry.

The Full
Pipeline

01

Importing Satellite Images into CityEngine Foundation

The workflow starts with real data. CityEngine supports multiple geospatial data sources, including OpenStreetMap (OSM) exports, GeoTIFF satellite imagery, and live tile services. For best results, export your target area from overpass-turbo.eu or download directly via the built-in OSM import.

Once imported, CityEngine will automatically recognize building footprints, road centerlines, and terrain elevation data — giving you an instant base layer to build on.

💡
Pro Tip: For higher-resolution satellite textures, use QGIS to export georeferenced imagery and import it as a terrain layer in CityEngine. This dramatically improves ground-level realism.
02

Generating Streets and Building Layouts Structure

CityEngine's street network generation interprets road centerlines from your OSM data and creates full-width street polygons with intersections, curbs, and sidewalks. You can also use the built-in street growth algorithm to procedurally generate plausible street patterns from scratch based on city type (Manhattan grid, organic, radial).

Building footprints extracted from OSM define your lot shapes — the basic input for all procedural architecture. Clean up overlapping lots using the Graph Cleanup tools before moving to rule assignment.

CGA · Street Setup
/* Street width rule — applied to all road segments */ Street --> envelope(streetWidth, 0, streetWidth) split(y) { '0.05 : AsphaltLayer | '0.1 : CurbLayer | ~1 : SidewalkLayer } attr streetWidth = 12 // in meters
Speed Tip: Assign rules to lot types in bulk using the Inspector panel. Select all residential lots, drag and drop your rule file, and watch hundreds of buildings generate simultaneously.
03

Writing CGA Rules for Fast City Creation Core Skill

CGA (Computer Generated Architecture) is CityEngine's scripting language for procedural generation. A rule file defines how a building footprint grows floor by floor, how facades are subdivided into windows and panels, and how roof types are applied — all from a set of compact, reusable rules.

The key concept is shape grammar: each shape (a lot, a floor, a facade) is processed by a rule that splits it, extrudes it, or assigns geometry. The result is geometry generated on-the-fly, which means changing one attribute updates your entire city instantly.

CGA · Basic Building Rule
/* Minimal building generator from lot footprint */ attr floorHeight = 3.5 attr numFloors = rint(rand(3, 20)) Lot --> extrude(floorHeight * numFloors) comp(f) { side : Facade | top : Roof | bottom: Ground } Facade --> split(y) { 'floorHeight : Floor }* Floor --> split(x) { ~2 : Window | ~0.5 : Panel }* Window --> i("facades/window_01.obj") color(rand(glazingColors)) Roof --> roofHip(20, 1.5)

Notice how rand() and rint() introduce controlled randomness — so every building in your city has a unique height while still feeling coherent. This is the core power of procedural generation.

🔥
Advanced: Use conditional rules based on lot area or street type to automatically apply different building styles — dense downtown towers near main roads, low-rise residential deeper in blocks.
04

Enhancing Realism with Textures & Variations Visual Polish

A procedural city lives or dies by its texture quality. CityEngine supports UV mapping of facade textures through the CGA setupProjection() and projectUV() functions, allowing you to tile brick, concrete, glass, and metal textures at real-world scale across your buildings.

For maximum visual variety with minimal work, build a texture atlas with multiple facade styles and use the rand() function to randomly select from them per building. Combine with color tinting using color() to create hundreds of perceived variations from just a handful of assets.

CGA · Texture Variation
attr facadeSet = fileRandom("assets/facades/*.png") BuildingFacade --> setupProjection(0, scope.xy, '1, '1) texture(facadeSet) projectUV(0) color(#ffffff) // white = no tint, vary for diversity

Don't overlook LODs (Levels of Detail). Use CGA's case statements with geometry.area to switch between detailed and simplified geometry based on lot size — this keeps performance manageable even across entire city districts.

🎨
Art Direction: Define 3–4 neighborhood "archetypes" with distinct facade palettes — historic European, modern glass tower, industrial, residential. Assign them to zones using CGA attributes driven by GIS data for instant art-directed variation.
05

Exporting to Unreal Engine 5 Final Step

CityEngine's FBX and GLTF export pipelines are built for game engine handoff. Export your city in sections (chunks of ~500m × 500m work well) to keep file sizes manageable. Enable mesh merging per block in export settings to batch similar building meshes and reduce draw calls dramatically.

In Unreal Engine 5, import your FBX with the standard static mesh workflow. Enable Nanite on your building meshes for cinematic-quality geometry at no runtime performance cost. Use World Partition to stream your city sections in and out dynamically — essential for open-world city-scale environments.

🚀
UE5 Optimization: Use Hierarchical Instanced Static Meshes (HISM) for repeated building types. This can reduce your draw call count from thousands to dozens across an entire city district, while keeping full visual fidelity.
🌍
Georeferencing: Use the Cesium for Unreal plugin alongside your CityEngine export to add real-world terrain, satellite imagery ground textures, and even global 3D tiles for the far horizon — creating seamless transitions from your procedural buildings to the actual world.
🏙️
From Satellite Pixels
to Game-Ready City
in One Workflow

CityEngine + CGA + UE5 is the most powerful open-world urban pipeline available today — and it runs on real-world data.

Perfect For Every Creator

Whether you're just starting out or looking to add a powerful new tool to your professional pipeline, this workflow scales to your needs.

🎮 Game Developers
🏛️ Architects
🏙️ Urban Planners
🎬 VFX Artists
🎓 Beginners
🔧 Technical Artists
🗺️ GIS Specialists
📐 Environment Artists

Ready to Build
Your City?

Watch the full tutorial on Unreal Fusion and start generating your first procedural city today. Drop a comment with the city you want to recreate! 🔥

👍
Like
💬
Comment
🔔
Subscribe

@unrealfusion1 · 3D Tools · Game Dev · Procedural Modeling

Tutorial: Esri CityEngine → Satellite → 3D City → Unreal Engine 5

Post a Comment (0)
Previous Post Next Post

....