Skip to main content

Level of Detail (LOD)

The LOD system swaps mesh detail levels based on player distance, reducing draw calls and memory usage.

Mesh Naming Convention

Assets in ReplicatedStorage.Assets.Folliage follow this pattern:

Meshes/Conifer_04_Conifer_04_LOD0    ← Full detail
Meshes/Conifer_04_Conifer_04_LOD1 ← Medium
Meshes/Conifer_04_Conifer_04_LOD2 ← Low
Meshes/Conifer_04_Conifer_04_LOD3 ← Lowest

The LOD map is built on first access by scanning all assets and grouping by base name.

Distance Thresholds

Default thresholds (configurable):

LOD LevelDistanceDetail
LOD00–50 studsFull
LOD150–100 studsMedium
LOD2100–150 studsLow
LOD3150+ studsLowest

Client Update Loop

LodController runs every 0.5 seconds:

  1. Evaluates all chunks, closest first
  2. For each MeshPart, calculates appropriate LOD level
  3. Swaps up to 60 MeshParts per cycle (20 reserved for forest trees)
  4. Replaces mesh by destroying old part, cloning template into same parent

Manual Override

Debug UI provides a slider to force all meshes to a specific LOD level, bypassing distance checks.

Server-Side LOD

serverSpawnLOD can pre-downgrade decore before clients receive chunk data, reducing initial network payload.

Key Files

FilePurpose
lod-map.tsBuilds lookup table from asset names
lod-swap.tsPart replacement logic
lod-state.tsState atoms (override, thresholds)
lod-controller.tsClient update loop