CityGen features
- Player-drawn road tool. Click to add points on the terrain, then press Enter to commit. Each road is rendered as spline-mesh tiles, with exclusion zones along the corridor that flatten the terrain and clear foliage.
- Fixed-angle bends. Toggle a 45° / 90° snap while drawing for clean corners, built as single-anchor fillet arcs.
- Linear road grade. Roads change height linearly between your clicks, so the rendered mesh and the flattened terrain bed match exactly, with no sag on rolling ground.
- Bridges. When a road crosses low ground, such as a river, a valley or a below-sea-level pass, that section becomes a bridge automatically: a bridge deck mesh plus pillars stacked down to the terrain. Hysteresis stops bridge sections flickering on and off at their edges.
- Clean junctions. At a T-junction, the connecting road tucks slightly under the main road (Junction Tuck Depth, 20 cm by default). Where two roads cross mid-segment, the older road drops so the newer one renders on top. Either way, there is no z-fighting.
- Zoom-safe cursor. Road, Demolish and Zone clicks still work at full RTS zoom-out.
Sidewalks
Section titled “Sidewalks”- Kerbed sidewalk strips on both sides of every ground tile. They follow the road’s grade and junction tucks, with settings for width, kerb height and offset from the road edge.
- Off by default. Setting a Sidewalk Material on the road asset turns them on. They reuse the road mesh unless you assign a dedicated Sidewalk Mesh.
- Tucked crossings. Where a sidewalk crosses another road, it slides under that road’s deck on both sides, so there is no gap or z-fight at the intersection.
Roadside props
Section titled “Roadside props”- Data-driven props. Each road asset carries a list of props (bridge pylons, lamp posts, road signs, guard rails, bollards, hydrants and so on), each with its own spacing, side offset, both-sides mirroring, scale, rotation and vertical offset.
- Bridge filters. Choose per prop whether it appears on bridge sections, ground sections or both, so pylons stay on bridges and kerb props stay on the ground.
- Extend to ground.
bExtendToGroundstretches any upright post mesh from the road deck down to the terrain, so it works as a bridge pylon. - Zone filters. Toggle each prop on or off for dezoned, residential, commercial and industrial land, so each district can have its own set of props.
- Carve-aware placement. Props sit on the actual rendered road bed and are never placed on the deck of a crossing road.
- Instanced rendering. One instanced static mesh component per distinct prop mesh, shared across all roads. Optional collision shares the source mesh’s collision body, so there is no per-instance cook.
Buildings
Section titled “Buildings”- Building placement tool. A ghost mesh follows the cursor: green when placement is valid, red when it is refused. The grid snaps to the direction of the nearest road, in the style of Cities: Skylines, and falls back to world axes away from roads.
- Collision and slope checks. Placement is refused if the building would overlap another building or a road corridor (oriented-box tests using the Separating Axis Theorem), or if the terrain is steeper than the building asset’s
MaxSlopeDegrees. - Footprint-aware height. A building sits at the highest of nine height samples across its rotated footprint, so it is never buried on a slope. A deep base on the mesh hides the gap on the downhill side.
- Footprints, variants and height variation. Buildings can cover several grid cells. One building asset can hold several meshes, picked at random for each placement, plus a random height (Z scale) roll. The chosen mesh and roll are kept in the save.
Zoning
Section titled “Zoning”- Zone painting. Paint residential, commercial or industrial cells along any road. Each click paints a 4×4 block on the clicked side of the road.
- Auto-fill. Painted cells fill with buildings picked at random from the zone’s weighted building pool. Erase the cells and the buildings zoning spawned there disappear.
- Manual buildings are safe. Origin-cell tracking means the zone eraser only removes buildings that zoning spawned.
- Junction-aware. Cells inside a crossing road’s corridor are skipped.
- No zoning on bridges. The brush skips bridge sections. Erasing still works there.
Demolish
Section titled “Demolish”- Demolish mode (X) removes buildings and road segments.
- Hover preview. A translucent red box shows exactly which building a click will remove.
- Dezone on demolish. Removing a building clears every zone cell whose centre lies inside its footprint, for both hand-placed and zone-spawned buildings.
- Roads clear their path. Confirming a new road removes any building it draws through.
Day and night
Section titled “Day and night”ACityGenTimeOfDayruns a single clock that drives the sun’s rotation and intensity, an optional moon, post-process exposure and Sky Light recapture.- Night illumination. A Material Parameter Collection scalar,
Illuminate, ramps smoothly from 0 to 1 and back across the lit window (17:00 to 07:00 by default, with a 30-minute fade at each end). Building windows, lamp post bulbs and ground light-spill decals all read it, so the whole city lights up at dusk and fades at dawn together. - Editor preview. The Preview In Editor button shows the lighting for any time of day without entering Play.
- Distance fog. The demo map includes a tuned Exponential Height Fog that hides LOD popping and adds depth.
Camera, HUD and saving
Section titled “Camera, HUD and saving”- RTS camera pawn. Enhanced Input throughout, pan speed that scales with zoom, automatic pitch as you zoom, middle-mouse pan and right-mouse orbit with damping.
- HUD API. Blueprint-callable mode toggles on the player controller (
ToggleRoadMode,EnableZoneMode,DisablePlacementModeand more) and anOnPlacementModeChangedevent, so HUD buttons can highlight the active mode without polling. The includedWBP_HUDis already wired up. - Save and load.
UCityGenSaveGamestores roads, buildings (including their mesh variant and height roll), zone paint, terrain deformation and consumed spawner positions. QuickSave with F5, QuickLoad with F9. - Clean loading. After a load, buildings, props and bridge pillars wait until the terrain has finished carving, so loaded cities don’t float or sink.
Terrain (from WorldGen)
Section titled “Terrain (from WorldGen)”- Infinite chunk streaming from a recycled actor pool, with async mesh generation and collision cooking, so the game thread never blocks.
- Stream hysteresis. Separate View Distance and Release Distance settings stop chunks loading and unloading repeatedly at chunk boundaries.
- Layered noise (Perlin, Simplex, Cellular, Ridged Multi, Domain Warp) from CodeLikeMe’s original CLMNoise library, with no third-party dependencies. Layer 0 controls where land and ocean go.
- Biome blending (Grass, Rock, Snow, Beach, Underwater) through vertex colours, plus spatial biomes (Tundra, Boreal, Desert, Tropical) with smooth gradients.
- ISM foliage and dense grass, a water plane at sea level, a flattened beach band, distance-based LOD and a low-resolution far terrain ring.
- Hydraulic erosion, runtime terrain deformation with persistent changes, exclusion volumes, a biome-aware actor spawner and a terrain query API (
SampleTerrainAt,GetHeightAtWorldPos). - Multiplayer streaming. Terrain streams around every connected player; a dedicated server builds collision only.
- Deterministic. Foliage, grass, building variants and zone fills use a seeded random generator per chunk.
- Editor preview with Preview and Clear Terrain buttons.
CityGen’s inherited systems work the same as in WorldGen 1.11. See the WorldGen docs for the full reference.
Rendering
Section titled “Rendering”- Virtual Shadow Maps and Distance Field Shadows by default, for high-quality shadows at any distance.
- Nanite compatible: ISM foliage, grass and roadside props.
What’s included
Section titled “What’s included”- Full C++ source (the
CityGenruntime module and theCityGenEditoreditor module) BP_CityGenCameraPawn,BP_CityGenPlayerControllerand theIMC_CityGeninput mapping contextWBP_HUDin-game UI with Road, Residential, Commercial, Industrial, Demolish, Save and Load buttons- A terrain material with biome blending
- Sample road, building and zone data assets, including
DA_Road, preconfigured with bridge-only pylons (extend-to-ground), weight distribution slabs and lamp posts, with the sidewalk fields filled in - 15 pre-composed building scenes: 5 residential (house, yard and props), 5 commercial (tower, shop, plaza) and 5 industrial (warehouse, lot and props)
- Bridge prop meshes (pylon, weight distributor, lamp post) with the
M_Concrete,M_PoleandM_Lightmaterials - A sidewalk pavement mesh and concrete material
- Night lighting content:
MPC_CityGenand the lamp post light-spill decal (M_LampPostDecal,T_LampPostLightDecal) - Sample foliage and grass data assets, with tree, pine and grass meshes and materials (under
/CityGen/Foliage/and/CityGen/Grass/) - A sample spawner data asset (under
/CityGen/Spawner/) and demo actor - A demo map, with the day/night cycle and distance fog already set up
