Skip to content

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.
  • 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.
  • 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. bExtendToGround stretches 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.
  • 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.
  • 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 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.
  • ACityGenTimeOfDay runs 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.
  • 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, DisablePlacementMode and more) and an OnPlacementModeChanged event, so HUD buttons can highlight the active mode without polling. The included WBP_HUD is already wired up.
  • Save and load. UCityGenSaveGame stores 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.
  • 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.

  • Virtual Shadow Maps and Distance Field Shadows by default, for high-quality shadows at any distance.
  • Nanite compatible: ISM foliage, grass and roadside props.
  • Full C++ source (the CityGen runtime module and the CityGenEditor editor module)
  • BP_CityGenCameraPawn, BP_CityGenPlayerController and the IMC_CityGen input mapping context
  • WBP_HUD in-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_Pole and M_Light materials
  • A sidewalk pavement mesh and concrete material
  • Night lighting content: MPC_CityGen and 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