Skip to content

feat: enable LODs in worlds - #8907

Merged
alejandro-jimenez-dcl merged 2 commits into
devfrom
feat/enable-lods-worlds
Jun 8, 2026
Merged

feat: enable LODs in worlds#8907
alejandro-jimenez-dcl merged 2 commits into
devfrom
feat/enable-lods-worlds

Conversation

@alejandro-jimenez-dcl

Copy link
Copy Markdown
Contributor

Pull Request Description

What does this PR change?

Fixes #8892. Enables LODs in worlds through the ISS descriptor.

VisualSceneStateResolver short-circuited every fixed realm to SHOWING_SCENE, so world scenes never transitioned to SHOWING_LOD and the LOD/ISS systems introduced in #8870 never ran for worlds.

The gate is now descriptor-conditioned: an SDK7 world scene with a resolved ISS descriptor participates in the regular bucket-based LOD flow (full scene near, {sceneId}_ISS_LOD per-asset descriptor LOD at mid range, legacy LOD_1 AB at far range, unload when out of range). Worlds without descriptors, SDK6 world scenes,
LSD and portable experiences keep the current always-full-scene behavior.

Changes:

  • VisualSceneStateResolver.ResolveVisualSceneState takes the scene's ISSDescriptor; fixed realms only resolve to SHOWING_LOD when the descriptor resolved to Descriptor state.
  • ResolveSceneStateByIncreasingRadiusSystem passes the descriptor (already cached in OrderedDataManaged).
  • New VisualSceneStateResolverShould unit tests covering world/volatile, SDK6/SDK7, descriptor states, and unload tolerance hysteresis.

No timing risk: the existing descriptor gate in ResolveSceneStateByIncreasingRadiusSystem already blocks any state transition until the descriptor resolves in place.

Test Instructions

Test Steps

  1. Connect to cozyhouse.dcl.eth on zone, walk into 0,0: full scene loads.
  2. Run away from the scene: the scene unloads and the LOD asset loads.
  3. Walk back: LOD swaps back to the full scene

Additional Testing Notes

  • Regression, worlds without descriptors (any production world on org): always full scene, unchanged.
  • Regression, Genesis City on zone: LOD behavior unchanged.
  • LSD and portable experiences opt out of ISS at construction, unaffected.

Quality Checklist

  • Changes have been tested locally
  • Documentation has been updated (if required)
  • Performance impact has been considered
  • For SDK features: Test scene is included

@alejandro-jimenez-dcl
alejandro-jimenez-dcl marked this pull request as ready for review June 5, 2026 14:21
@alejandro-jimenez-dcl
alejandro-jimenez-dcl requested a review from a team as a code owner June 5, 2026 14:21
@alejandro-jimenez-dcl
alejandro-jimenez-dcl requested a review from a team as a code owner June 5, 2026 14:21
@github-actions
github-actions Bot requested a review from DafGreco June 5, 2026 14:21
@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

badge

New build in progress, come back later!

@m3taphysics

Copy link
Copy Markdown
Contributor

PR #8907, run #27022606716

Builds: Windows change, Windows baseline, macOS change, macOS baseline

How to read this table
  • Each build is measured 3 times. The values are the median, and (min–max) is the lowest and highest of those runs — a wide range means the metric is noisy and small differences are not trustworthy.
  • Δ is Change minus Baseline (a negative Δ means Change is faster).
  • 🟢 faster / 🔴 slower — a real difference: larger than both 3% and the run-to-run range.
  • ⚪ within noise — the difference is smaller than how much the build varies between its own runs, so it cannot be told apart from random variation. Treat it as no change.
  • Exceptions logged — exceptions found in the run logs; more than the baseline is flagged 🔴 even when frame times look fine.

Framework 13 i7

Metric Baseline Change Δ Result
Samples 2700 (×3) 2701 (×3)
CPU average 33.3 ms 33.3 ms -0.0 ms ⚪ within noise
CPU 1% worst 34.1 ms (34.0–34.2) 33.5 ms (33.4–33.7) -0.6 ms ⚪ within noise
CPU 0.1% worst 39.8 ms (36.5–40.2) 34.3 ms (33.9–36.8) -5.5 ms 🟢 14% faster
GPU average 7.6 ms (7.2–8.6) 8.3 ms (7.8–8.7) 0.7 ms ⚪ within noise
GPU 1% worst 19.5 ms (18.8–19.9) 17.8 ms (16.7–18.7) -1.7 ms ⚪ within noise
GPU 0.1% worst 25.8 ms (23.1–26.3) 25.0 ms (20.8–25.3) -0.8 ms ⚪ within noise
Exceptions logged 50 42 -8 🟢 fewer errors

@Ludmilafantaniella Ludmilafantaniella left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested on Windows and Mac. ✅

Main flow on zone (cozyhouse.dcl.eth):

  • Full scene loads when walking into 0,0
  • LOD asset loads when walking away
  • Swaps back to full scene when walking back

Regression on org (Genesis City): LOD behavior unchanged.

LGTM 🚀

8907-evi.mp4
8907-evi2.mp4

✅Smoke test performed:

  • ✔️ Backpack and wearables in world
  • ✔️ Emotes in world and in backpack
  • ✔️ Teleport with map/coordinates/Jump In
  • ✔️ Chat and multiplayer
  • ✔️ Camera
  • ✔️ Skybox

@alejandro-jimenez-dcl
alejandro-jimenez-dcl merged commit a4151f9 into dev Jun 8, 2026
16 of 19 checks passed
@alejandro-jimenez-dcl
alejandro-jimenez-dcl deleted the feat/enable-lods-worlds branch June 8, 2026 05:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

LODs should load in worlds through the ISS descriptor

4 participants