472 Commits over 1,249 Days - 0.02cph!
Fixed landlocked lakes near the spawn beach sometimes creating valid spawn points, players can now only spawn on true beaches. Also fixes lighthouses spawning inland and not off the beach.
PlaceMonuments and SpawnHandler both use an outside-in floodfill ocean check to distinguish inland ocean topology with real connected ocean.
Extended the Rail Lift stage to also fix any floating rails (pre-existing to cs170256), this could happen at a junction where one rail goes uphill but the lower rail sculpts terrain from underneath the other.
Fixed railway tracks getting buried by terrain from TerrainHeightSet smoothing of cliff backfaces as well as rail terrain and road terrain stages - new World Setup stage 80 `Rail Lift` to look for buried rail and gently raise. Overlapping rails/junctions/sidings are lifted together so junctions line up.
Tested 5 seeds in editor, observing better rail visuals and no issues using the workcart. 0.4s stage time
Fixed shore ice spawning over railway tracks - added a Rail TerrainFilter to `shore_ice_[abc]` to reject ice placement over rail topology. Existing checks at single points easily failed. Tested in editor, resolved.
Fixed roadside waterpipes sometimes spawning on top of a road at T-junctions - stage's SpawnFilter now excludes road topology during placement
Draw monument gizmos when editing terrain to help line up painting blend/splat within the radius and topology bounds
Speculative fix for ocean water appearing inside canyons placed near the shore - extended Mountain topology on `ue_canyon_[abc]` to prevent Water topology where canyons dig below sea level. This required a small radius increase on `ue_canyon_b` & S2P
Couldn't reproduce the original report.
Don't paint grass or forest splat on ocean or oceanside terrain when placing monuments - fixes large monuments sometimes painting green patches under water
Fixed monument editor gizmo to ensure Radius is always centered correctly. Added a separate square to mark the topology footprint
Made icelake placement much fairer so Ice Lake 4 isn't disproportionately spawning compared to the other 3 variants - larger icelakes now spawn more often.
Uses a new TerrainAnchorBlendGenerator to generate terrain anchors using the icelake's blend map so anchors are used more sparsely and only in the areas they are needed to make placement easier. The big disc anchors were too mean.
Manually reviewed all icelakes across 25 seeds and observed much more diverse placement.
Modified procgen world setup to move `Caves` above `Power Line Layout` to prevent floating powerlines over caves. Cave terrain blend was lowering terrain under already placed powerlines.
This was previously fixed in cs
82195 but later stomped in cs
84963
Don't allow monument placement where the terrain blend map will overlap river topology - prevents a rare issue where a monument spawns too close to a river and the water floats
Taper river terrain with smooth slopes when monument terrain blend would otherwise dig terrain out
Increased the bounds of some monuments to match their terrain pad so they can't spawn too close to eachother and overlap terrain. S2P on all. Tested a previously problematic seed in editor
- Military tunnels
- Powerplant
- Trainyard
- Water Treatment Plant
- Launchsite
Repainted terrain at the exit computer room and at the truck blocked off garage area, S2P - prevents terrain clipping into underground rooms causing players to get stuck. Tested in-editor on a 6k map
Added a second `CaveNetworkGroupLayerOverride` to the nuclear missile silo to cover the "living quarters" and "computer room" section - fixes issues with players and NPCs disappearing/reappearing on the stairs
Added new DungeonGridBlocker to `ue_canyon_[abc]` to prevent underground train tunnels generating too close and removing terrain collision (`TerrainCollisionTrigger`) - prevents players rarely dying at the bottom of canyons.
Added 2 new side anchors to cliff_tall_slope_l_a to fix gaps
Fixed gizmos not displaying in the CliffSandbox dev scene
Prefab filters can now check topology in radius using generated distance transform fields of Chebyshev distance to the nearest texel of that topology. Effectively a per-stage cache of distance from topologies to avoid walking texels.
- Built in two-pass Burst
- Built per-stage only when a stage has asked about a bit 100k times to make the building worth it. Bits written mid-stage fall back to the existing texel scan (decor that writes topology as it is placed)
- TerrainTopologyMap.GetTopology picks fields or the existing texel scan
New tests compared with previous baseline show 8-12s saved (Cliffs Hills & Cliffs Hills Small) depending on the seed. Roughly 3% time savings across the entire generation.
Radius scans per run dropped from 8.76 billion -> 2.12 billion.
Prefab placement is slightly stricter as fields check a full square of texels whereas the scan clipped corners at radii of 1 or 2 texels. Recorded a 1.6% reduction cliff hills small placements (0.7% of all prefabs)
Replace powershell nonsense with Unity editor window, similar to ProcgenReplay.
Updated procgen benchmark to create durable version controlled results (we could probably further automate and grafana this at a later date).
Ran a baseline test over 2 repeats of 5 size 3250 seeds (10 runs total), median 205.9s generation time (per-stage breakdown in the CSV).
Added a per-stage benchmark measurement harness before moving onto experimental optimisations. To be used to measure future improvements and map changes.
- ProcgenStats: time per-stage, number of prefabs placed, placement hash, counters (filter calls, radius scans, texel reads, anchor scans, monument attempts).
- ProcgenBenchmark: editor tooling to generate maps for queued seeds and writes a CSV row per-stage. One map per play session, exiting play mode after each generation.
- Powershell scripts to drive the editor benchmarks and compare CSV outputs by hash and stage time
merge from procgen_visualiser
First pass on the Procgen Replay visualisation tool to trace all steps of generating a procedural map and then visualising each placement from candidate positions. Intended for bug finding and development testing.
Play/pause/restart/seek to each procgen step to see how the final map was created. Starts at heightmap generation and follows (today's) 91 stages until the map is complete.
Added editor-only hooks in SpawnFilter, Prefab, World, WorldSetup and LODUtil. Any editor effect requires first arming in the `Tools > Procedural > Procgen Replay` window, use the ProcgenReplay scene to (optionally generate and) replay map seeds.
New CountBy admin command that returns the same count as DeleteBy but without deleting entities
▌▄ ▍▊▉█▋▊ ▄▆▉▄▋▊▌█ ▆▍▇ █▇▊▅▊▇█▌
▄ ▄▅▌▌▉▌▋ ▅▇▆▍▅▍█▌ ▆█▆▉ █▉▅▆▇▄▇ ▅█▆▉ ▆█▆▆▉ ▋█▌ ▋▌█▌▌▄▌█ ▌▌ ▆█▉▍▇▇▉ ▍▍█▋ ▆▋▇ ▍▋▄█▌▊▌▄▌▊ ▉▋▄ ▊▆▅▉▉ ▉▆▅ ▋▍▆▅▌▋▊▌▍▅▉▅▅▍▄▄▇ ▊▅▄ ▅▊▍▇▊ ▇▌ ▊▋▍▅▊█▅▆▌▋▇▄▍▅ ▅▌ █▄▊ ▌▋▅ ▅▅▍█▆▍ ▄▍▍ ▉█▍▄ ▅▄▄▌ ▊▍▋▆ ▇▄▉ ▅▌▄▋█▇▍ █▄▉▊ ▋▅▆▆▅▅▌ ▌▌ ▉▄▅▄▌█▅▍▍ ▍ ▌▋▅ █▆▇▍ ▆▉▉▉▄ ▌▉ █▆ ▌▉█▋ ▊█▉▅▄▅▋▍▍▍ ▅▄▉ ▅▊▌▊▋▄▌ ▆▌▆▆ ▇▉▆▊▊▉ ▉▊▉▅▇▇▆▍ █▅▊▄▇▉▇█ █▋▌▉▊▅▉▉▉▋▆ ▆▌ █▌▄ ▇█▇▉██▋ ▆▊▋ ▆▌▅▆▉▊▌▌ ▅█▋▄▍▇▄▄ ▉▊▅▍▄▍▆▊▊ ▌▅ ▌▄▍ ▍▊▍▍▍ ▋▇▇ ▅▉▇▄▇▇▆▆▉ ▄█▇▌▅▅▊▊▆▉▉▉▊▉▄▋▅▉▅▅▄█▇▊▆█▊ ▉▄▊ ▌▇█▇▅▇▊▅▋ █▆▆▊▅ ▌▌ ▉▄▇ ▆▆▌▅▅█▉▄▋▊▋█▅▉▊▋▅▅ ▆▇▊▅▍▋ ▊▍▋ ▌ ▆▋█▌▊▅ ▌█▄ ▆▆▌▊▆▍ ▉▄▄▅ ▊▍█▊▊▆ ▊▋▄ ▆ ▄█▆▋▋▌▍▆ ▌▌▍▋▆▊ ▍▌▇▋ ▇▆█ ▋▊▌▄▌▌ ▅▋▊▍█▋▆▍▋▄ ▅▌█▍ ▆▅▅ ▅▍▋▋ ▊▌▍▌▇▌
▇ ▍▊█▍▌ ▍ ▌▌▉▇▇▉▄▅ ▇▅▍▄ ▍▇▌ ▍▅▅▉▋▌▅█ █▍▄▊▆▇▆▄▋▍ █▌█▊▅ ▇▆▇▍▋▊█▊▇▇█ ▄▉▆ ▇▄▅▊█ ▅█ ▆▍▋▋▅▅▅▄▉▉█▆▍▌▇█▍█▋▍▇▋ ▇▌ ▇▊▋▇▍▇▅ ▍▉▋▅▇▊▅▉ ▉▆▊▋▌▄▋▊ █▄▊ ▅▆▋▅▅ ▉▉ ▍███▋ ▅▆▇█▋▆▊▄ ▌▋▌▅ ▋ ▊▍█ ▋▉▄▆ ▇▆▅▍▆▇ ▊▉▋▊ ▊▄ ▅██▉█▊▍ ▇▋▄▋▇▇▉ ██▊▅▅▍█▅ █▌▅█▆▇▉▅ ▆▅▅ ▋▄▆▆ █▍▅▉▊█▇█ ▋▉▊ ▍▆▍▊█ ▋▊▍▄ ▊▇▄▇ ▊▋▊▋▊▆ ▉▉▆▆▆ ▅▄▇▋▋▅ ▇▇▌▉█▇ ▆▊▊▇ ▅▅▆▉▄ ▍▋▍ ▌▌▉▌█▄▅ ▋▄ ▋███ ▍▅▌▇▍▆▋▅██▄ ▍▍█▇▍ ▊▅▆▆▇▌▍▉█▌▌█▋▇▉▆▆▍▅▍ ▇ ▆▄▊▄ ▋█▇█ ▍▉▉ ▌▋▇▉▅▅▄▄ ▆▇▌ ▄█ ▇█ ▄▍▌▋▍▆ ▇▊█▄▉ ▆▊█▉▄ ▉▇▆▊▍▄▍▄ ▄▌▅▋▄▇▍▆ ▊▇▇ █▊▅▉▆█▄ ▍█▊ ▍█▉▋▆▇▋▅▊█▄▍▌▊▄▄▊▊▅▄▇▉ ▆▄▄█ ▇▋▄▅▍▄██▅█ ▊▍▌ ▄▆ ▅▄▌▇█▋▉█▅▌ █▋ █▇▇▅▉ ▊▋▍▄ ▄█▉▍▉█▉▊█▊▌ ▄▌▅▉ ▇▋▉▊ ▌▆ ▍▇█▇▄▄▋ ▆▅ ▇▄▄ ▅▄▉▇▇ ▍▇▄▌▊▅▊▋▉▅▌▋▋▄▄ ▄▌▅▄▄▊█ ▇▋▇▇ ▇▋▄▋▄▍ ▄▇ ▊▇▌▇▆ ▆▌▉█▍▍█▇▆ ▍▍▇▍█▆▋█▄▇ █▆▌▌▊▌▅▌▋ ██▋▆█▍▌▆
▌ ▇▊▆ ▉▆ ▋▆▉▊▊▋▄▊▄▉ ▄▆▌▇▊ ▆▊▄▍▍▌ ▆▆▋▉▊▋▊▆█▊▋ ▇▉ ▇▌▌▋█ ▉▊▊ ▋▄▋▄█▉▋▉ ▊▉▇▊██▍ ▋▅▄ ▍█▇▉▍▇ ▌▆▍ ▋█▌ ▊█▇▅█▆ ▄█▆▅ ▌▋▌▄▇▋ ▅▍▍ ▄▊█▉▅▆▅▅ ▇▅▅▊▄▄▌▍▌▆▇ ▍▋▊▊▌ ▌▉▊▋▌▄ ▅▅▄▌█▆▅ ▍▅▌▇▅▋ ▆▅▉▌▊ ▄▅ ▉█▋▍ ▅▇ ▍▉▋▊▊█ ▆▇ ▄▍ ▊▅▊▉▋ ▍▅█ ▊▉▍▇▋▆ ▋▄▋▊ █▊▇▄ ▊▄▆▉ ▆ ▉▆▌ ▌█▆▅▌▊ ▍██▉▆▇ ▆▉█▊ ▌█▌▉▊ ▊▌█▉▉▉ ▊▇▅▋▊▆▋▋ █▅▉█▄▅▇▆ ▌▇▄▌ ▄▊▊▋▋▊▊▆▆▊ ▋▊▇ ▅▇▅▆▌ ▊▅█▌ ▍█▇ ▄▋█▇▇▍▄█▊█▍▊█▍ ▍▉ ▉▉▌▇▌▄▌▋ ▅▍▍▋▍▇ ▆▊▅▇ ▋▌▆▌ ▌▋▋▅▊ ▋▇█▌▍▊ ▉▌▆ ▅▄▉▍▌▊▅▇▍▇▉ ▇▆ ▆█▄▅▅▆ ▋▋▅▊▋ █▅█ ▋▅▄▄▇▉
Attempting to fix pipe access point procgen spawning by generating an outter and inner terrain anchor ring to look for 'flat' terrain underneath the prefab, s2c
Changed TerrainFootprint's default MaxTiltDegrees to 35 after finding a tiny rock gap that was not resolved by the footprint terrain modifications because the rock was at 26 degrees, 1 degree over the existing MaxTiltDegrees
Bear rug: 100% comfort within 2m of the comfort trigger spheres. Gradual falloff until 3m.
Rug: 100% comfort within 1m of the comfort trigger spheres. Gradual falloff until 2m.
Previous fixes would have meant these deployables would have only given a solo player 25% comfort. Boosted values to not destroy years long gameplay behaviour
merge from more_cliff_fixes
Terrain footprint for both variants of rock_formation_medium_e
Terrain footprint for 3 variants of rock_formation_medium_d
Terrain footprint for 3 variants of rock_formation_medium_c
Terrain footprint for 3 variants of rock_formation_medium_b
Terrain footprint for both variants of rock_formation_medium_a
Add terrain footprint calls to PlaceDecorUniform, PlaceDecorValueNoise, PlaceDecorWhiteNoise so all rock types can make use of the new component
Removed lingering generator on hills_cliffs_small\rock_formation_small_d, added terrain footprint for v3_rock_formations_small\rock_formation_small_d
Terrain footprint for both variants of rock_formation_small_c
Terrain footprint for both variants of rock_formation_small_b
Terrain footprint for both variants of rock_formation_small_a
Slightly decreased size of fireplace.deployed's deploy volume to fix bug where you couldn't place the fireplace under an existing floor
Don't override bestRot before spawning
Applied terrain footprint to rock_formation_small_d to fix terrain gaps when it spawns over terrain erosion gutters - need to do a pass over all similar 'flat' rock prefabs
Added footprint functionality into the CliffSandbox dev scene
Apply TerrainFootprint's terrain changes in the PlaceCliffs procedural pipeline after all other component steps before spawn