Skip to content

LODs should load in worlds through the ISS descriptor #8892

Description

@dalkia

Context

PR #8870 (chore: new lods through ISS descriptor, branch chore/iss-v2) introduced descriptor-driven LODs for SDK7 scenes. It works in Genesis City, but worlds never show LODs — they stay in full-scene state regardless of distance.

Where to look first: VisualSceneStateResolver

Explorer/Assets/DCL/Infrastructure/ECS/SceneLifeCycle/IncreasingRadius/VisualSceneStateResolver.cs:22-23 short-circuits any fixed (world) realm to SHOWING_SCENE:

//If we are in a world, dont show lods
if (scenesAreFixed) return VisualSceneState.SHOWING_SCENE;

This early return is upstream of every LOD/ISS code path — once it returns SHOWING_SCENE, neither UpdateSceneLODInfoSystem nor ResolveISSLODSystem ever get a chance. The likely fix is to lift or condition this short-circuit when the scene has an ISS descriptor available, so the resolver can flip to SHOWING_LOD on distance / quality-reduction the same way Genesis does.

Reproduction world

cozyhouse.dcl.eth on the .zone environment — two scenes:

  • 0,0 (cozyhouse)
  • 100,100 (spookyhouse)

World definition: https://worlds-content-server.decentraland.zone/world/cozyhouse.dcl.eth/scenes

Note on AB availability

Both scenes were deployed with descriptor generation enabled, but the asset-bundle converter was heavily backed up at deploy time, so the LOD_1 asset bundle may not yet exist for one or both. The LOD URL is composed by UpdateSceneLODInfoSystem.cs:89 + PrepareAssetBundleLoadingParametersSystemBase.GetAssetBundleURL as:

{ab-cdn}/LOD/{level}/{sceneId.ToLower()}_{level}{platform}

{platform} = _windows or _mac (from PlatformUtils.GetCurrentPlatform()).

LOD_1 URLs to verify before testing — just paste them in the browser; a 404 means the AB hasn't been baked yet:

Scene 1 — 0,0 cozyhouse (bafkreihfseoexluqxvlcpecww3p5pte74ogfihredpdunpp47omdn76i4i)

Scene 2 — 100,100 spookyhouse (bafkreiae5svrazu3yr3lqp7th5r2k4weeld53npobhf65uqjsf3u54hlei)

If a URL 404s, the AB still hasn't been baked — either request a re-bake or test against a scene whose LOD_1 is known to exist.

How it should work (repro steps)

  1. Connect to cozyhouse.dcl.eth on the .zone realm.
  2. Walk into 0,0 — the full scene loads (this already works).
  3. Run away from the scene (or jump to 100,100, then far past it).
  4. Expected (near range, descriptor path): the previous scene unloads and the ISS-descriptor-driven LOD appears in its place. A {sceneId}_ISS_LOD GameObject should show up in the Unity hierarchy with the per-asset LOD entries parented under it.
  5. Expected (further range, quality-reduced LOD): keep running away — once the partition bucket crosses the LOD threshold, the system escalates to LOD level 1 and the LOD_1 AB GameObject itself should appear in the hierarchy (the legacy single-AB LOD container, not the per-asset descriptor entries). This is the bundle whose URL you sanity-checked above.
  6. Actual today: scene unloads, but neither the descriptor-driven _ISS_LOD container nor the LOD_1 AB GameObject ever appears.

You can use the currente Genesis Plaza in zone as an example of how LOD should load/unload

While reproducing, check the hierarchy at each transition — the _ISS_LOD container and the LOD_1 AB GameObject appearing/disappearing are the clearest signal of which state the resolver / LOD systems put the entity in.

Related

  • PR: chore: new lods through ISS descriptor #8870chore: new lods through ISS descriptor (background on the descriptor flow, the gate in ResolveSceneStateByIncreasingRadiusSystem, and how the LOD systems consume the resolved descriptor).

Metadata

Metadata

Labels

2-mediumMedium severity issuesbugSomething isn't workinggraphicslod

Type

No type

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions