CityGen troubleshooting
The building ghost is red and won’t place
Section titled “The building ghost is red and won’t place”Cause: the placement is refused. That happens when any of these is true:
- The terrain slope across the footprint is steeper than the building asset’s
MaxSlopeDegrees(5° by default). - The building would overlap an existing building.
- The building would overlap a road corridor, player-drawn or procedural.
Fix: move to flatter ground or away from the overlap, or raise MaxSlopeDegrees on the building asset.
Buildings don’t line up with the road
Section titled “Buildings don’t line up with the road”Cause: the grid only follows a road within RoadAlignRange (500 cm by default) of it. Further away, it falls back to the world axes.
Fix: place the building closer to the road.
Buildings float or show a gap on slopes
Section titled “Buildings float or show a gap on slopes”Cause: since 1.2, a building’s height is the highest of nine samples across its rotated footprint, so it is never buried. On a slope that leaves the downhill side above the ground unless the mesh extends below its pivot.
Fix: give your building meshes a deep base, about 50 to 100 cm below the pivot. Buildings on flat ground look the same; buildings on slopes get a clean base in the ground. If you are on a version before 1.2, update.
Buildings appear a second or two after loading
Section titled “Buildings appear a second or two after loading”This is expected. On QuickLoad, CityGen waits until the terrain chunks have finished building before it restores buildings, roadside props and bridge pillars, so they are placed on the carved terrain at the correct height. Saves made before 1.2 correct their building heights automatically when they are loaded.
The zone eraser doesn’t remove a building
Section titled “The zone eraser doesn’t remove a building”Cause: zoning tracks which cell spawned each building, and the eraser only removes buildings that zoning spawned. Buildings you placed by hand survive zone changes.
Fix: remove the building with the demolish tool (X).
Demolishing a building leaves its zone cells painted
Section titled “Demolishing a building leaves its zone cells painted”Cause: before 1.3, demolishing only cleared the zone cells of zone-spawned buildings.
Fix: update to 1.3 or later. Demolish now clears every zone cell whose centre lies inside the demolished building’s footprint, for hand-placed and zone-spawned buildings alike.
I can’t paint zones on a bridge
Section titled “I can’t paint zones on a bridge”This is by design since 1.3: the brush skips bridge sections so bridges stay unzoned. Erasing still works on bridges, so you can clear zone paint left over from earlier versions.
A building next to my new road wasn’t removed
Section titled “A building next to my new road wasn’t removed”Cause: when you confirm a road, CityGen removes buildings the road draws through, but the test is conservative and leaves buildings the road only grazes.
Fix: remove the building with the demolish tool (X).
Roads z-fight at junctions or crossings
Section titled “Roads z-fight at junctions or crossings”Cause: two road meshes at the same height fight for the same pixels.
Fix:
- T-junctions: the connecting road’s endpoint drops by Junction Tuck Depth on the road asset (20 cm by default), tucking it under the main road. This needs 1.1 or later.
- Crossings: where two roads cross mid-segment, the older road drops by the same amount so the newer road renders on top. This needs 1.2 or later.
Roads look buried or sag between points on hilly ground
Section titled “Roads look buried or sag between points on hilly ground”This was fixed in 1.1. Roads now change height linearly between your clicks, so the road mesh and the flattened terrain bed match exactly. Update to 1.1 or later.
A road turns into a bridge too early or too late
Section titled “A road turns into a bridge too early or too late”Bridge detection is controlled by two settings on the road asset:
- Bridge Gap (200 cm by default): how far the road must sit above the terrain for a section to become a bridge.
- Bridge Gap Hysteresis (100 cm by default): the difference between the enter and exit thresholds, which stops a section flickering between bridge and road.
The road cursor disappears and clicks do nothing when zoomed out
Section titled “The road cursor disappears and clicks do nothing when zoomed out”Cause: in versions before 1.2, clicks relied only on Unreal’s default cursor trace, which misses at full RTS zoom-out.
Fix: update to 1.2 or later. Road, Demolish and Zone modes fall back to a long line trace whenever the default cursor trace misses.
Sidewalks don’t appear
Section titled “Sidewalks don’t appear”- Sidewalks are off by default. Set a Sidewalk Material on the road asset to turn them on.
- They are not built on bridge tiles unless you tick
bSpawnSidewalkOnBridge, because bridge meshes usually have their own railings.
There’s a seam between the sidewalk and the road, or road markings on the sidewalk
Section titled “There’s a seam between the sidewalk and the road, or road markings on the sidewalk”- Seam: set a negative Sidewalk Offset From Edge to pull the sidewalk inward so it overlaps the road mesh and hides the seam. A positive value pushes it outward and leaves a visible gap.
- Markings on the kerb: by default sidewalks reuse the road mesh. If your road mesh has baked detail such as lane markings, assign a dedicated Sidewalk Mesh.
Roadside props are missing on some sections
Section titled “Roadside props are missing on some sections”Check the prop entry’s filters on the road asset:
bSpawnOnBridgeandbSpawnOnNonBridgecontrol whether the prop appears on bridge sections, ground sections or both.- The zone toggles (
bSpawnOnDezoned,bSpawnOnResidential,bSpawnOnCommercial,bSpawnOnIndustrial) skip the prop wherever the zone beside the road has its toggle off. Props beyond the last painted cells count as dezoned. Bridges ignore the zone toggles. - A prop is never placed inside another road’s corridor, so props are skipped where roads cross.
Props float above the road or sit on another road’s deck
Section titled “Props float above the road or sit on another road’s deck”Cause: in versions before 1.2, props took their height from your original clicks rather than from the road bed after it settled onto the terrain.
Fix: update to 1.2 or later. If props look wrong after you Live Code into a running session, run the CityGen.RebuildProps console command to re-place them without reloading.
Bridge pylons don’t reach the ground
Section titled “Bridge pylons don’t reach the ground”Tick bExtendToGround on the pylon’s prop entry. It stretches the mesh from the road deck down to the terrain and overrides bSnapToGround. Pair it with bSpawnOnNonBridge off so pylons only appear on bridges.
Lamp posts on the far side of the road face the wrong way
Section titled “Lamp posts on the far side of the road face the wrong way”Tick bFlipOnOtherSide on the prop entry. It rotates the mirrored instance by 180° so an arm that hangs over the road faces inward on both sides. It applies when bBothSides is on.
Buildings and street lights don’t light up at night
Section titled “Buildings and street lights don’t light up at night”- Assign a Material Parameter Collection to
IlluminateMPCon theACityGenTimeOfDayactor. The included content reads theIlluminatescalar fromMPC_CityGen. - Your own building materials need to multiply their window emissive by that scalar.
- The lit window runs from 17:00 to 07:00 by default, with a 30-minute fade at each end. Change it with
HoursBeforeSunsetandHoursAfterSunrise. - Ground light-spill decals are opt-in per prop: set
SpillDecalMaterialon the lamp post’s prop entry.
Night scenes are too bright
Section titled “Night scenes are too bright”- Assign your level’s Post Process Volume to the
PostProcessVolumeslot onACityGenTimeOfDay. The actor blends exposure between day and night values, forces Histogram auto-exposure and makes the volume unbound so its settings always apply. - A high minimum brightness (
AutoExposureMinBrightness) is what keeps night dark: it stops the camera brightening dim moonlit scenes to middle grey.
The moon light costs too much GPU time
Section titled “The moon light costs too much GPU time”Turn off shadows on the moon light. It costs about 0.3 ms of GPU time without shadows, against about 3 ms for a shadow-casting fill light.
The grass band disappears at the waterline
Section titled “The grass band disappears at the waterline”Cause: Rock Start is set below Sea Level (both are normalized 0 to 1 heights). Rock weight is then non-zero at the waterline and replaces the grass.
Fix: keep Rock Start above Sea Level. The defaults (0.47 and 0.44) are correct.
Underwater blending looks wrong in my own terrain material
Section titled “Underwater blending looks wrong in my own terrain material”VertexColor.R(water) is a hard step, 1.0 below sea level and 0.0 above, not a depth gradient. For a depth fade, pair it with the underwater mask approach in the WorldGen material setup.TextureCoordinate(1).R(UV1.R) carries sand only above sea level. UseVertexColor.Ras the underwater alpha.
An exclusion volume I added has no effect
Section titled “An exclusion volume I added has no effect”Cause: exclusion volumes are gathered once at BeginPlay. The road tool refreshes the list for the volumes it creates, but volumes you add in the editor are not picked up until the next Play.
Fix: stop and start Play again.
I can’t place the procedural road network in my level
Section titled “I can’t place the procedural road network in my level”ARoadNetwork (the procedural road network inherited from WorldGen) is not placeable: the streaming manager spawns and owns it. City-builder workflows use ACityGenRoadNetwork, the player-drawn road network, instead.
Chunks keep loading and unloading at chunk boundaries
Section titled “Chunks keep loading and unloading at chunk boundaries”Keep Release Distance at or above View Distance (the defaults are 8 and 4). Chunks are loaded within View Distance but only released beyond Release Distance, which stops them churning as you move back and forth across a boundary.
Characters fall through the terrain when the game starts
Section titled “Characters fall through the terrain when the game starts”Terrain Load Delay (4 seconds by default) suspends gravity for each player at spawn, so the async terrain collision has time to cook. If characters still fall through, raise it.
Erosion has no visible effect
Section titled “Erosion has no visible effect”Erosion is off by default in CityGen (bEnableErosion), because city terrain is shaped by player roads and exclusions. Set bEnableErosion to true on the streaming manager if you want it.
