LOD streaming fails to load chunks when lodRangeMin=4 at startup

Having some LOD loading issues at LOD 4, here are the details:

Environment

  • PlayCanvas Engine: (version from package.json)
  • Browser: Chrome/Safari
  • Platform: macOS / iOS

Description
When setting app.scene.gsplat.lodRangeMin = 4 before initial scene load,
certain spatial chunks fail to load, resulting in black voids in the scene.

However, if I start with lodRangeMin = 3 and then change it to 4 at
runtime (via user input), all chunks load correctly and no voids appear.

Steps to Reproduce

  1. Load a large gsplat scene with LOD streaming (hierarchical chunks from splat-transform)
  2. Set app.scene.gsplat.lodRangeMin = 4 and lodRangeMax = 5 before loading
  3. Observe black voids in certain areas of the scene
  4. Press a key to change lodRangeMin = 4 at runtime
  5. Voids disappear, scene renders correctly

Expected Behavior
Setting lodRangeMin=4 at startup should produce the same result as
changing to lodRangeMin=4 at runtime.

Actual Behavior

  • lodRangeMin=3 at startup: ✓ works
  • lodRangeMin=5 at startup: ✓ works
  • lodRangeMin=4 at startup: ✗ black voids
  • lodRangeMin=4 at runtime: ✓ works

Additional Context

  • Scene has ~70M Gaussians across 6 LOD levels
  • Using splat-transform with -O 0,1,2,3,4,5 -C 256 -X 8
  • lodDistances: [5, 12, 25, 50, 80, 110, 140]

This suggests a possible chunk request bug specific to lodRangeMin=4 during
initial load, possibly an off-by-one error or boundary condition.

Thanks for any suggestions folks might have.

I’ll see if I can reproduce it, definitely unexpected.
I just quickly tried this example:
https://playcanvas.vercel.app/#/gaussian-splatting/lod-streaming

and modified the initial configuration to this:

    'desktop': {
        range: [4, 5],

and reloaded the code, I could not reproduce it.

Try to do the same and also point url to your scene, to see if you can repro it this way.

Thanks for the response. Here’s the url: https://landscapescan.com/. I have an LOD toggle in top right on desktop. I’ve made default LOD 3 because that doesn’t have the black void issue. If you toggle to LOD 4 right when you get to scene and navigate, you’ll likely encounter some black voids if you poke around for a bit. It would be preferable to use LOD 4 in this scene rather than 3 because fps is better. You’ll notice a time button I’ve added to scene where it can toggle between scans taken two months apart and pretty much keep the same perspective. Thanks for any suggetions you can provide about the LOD4 thing.

Hmm I’ve tried few times, with network cache enabled and disabled, and I do not see the issue. The loading seems pretty slow here, could that be related? Does it load those files as you wait longer?

Have you managed to reproduce it in the lod-streaming example I listed above as well?

Do you see any console errors in the browser?

I was able to reproduce.

This doesn’t always happen. I had to hard refresh a few times, then switch to lod 4 and change the scene (bottom button) a couple of times.

Network tab shows that data keeps trying to re-download.

Interesting, so it keeps loading it seems. I’ll need to investigate more.

I think the issue might have been the hosting. I switched from Dreamhost Shared to Cloudflare R2, and the LOD4 issue seems to have disappeared. Perhaps the CDN and efficiencies of Cloudflare R2 are ideal for LOD streaming.

hmm that is strange, if it would not deliver the files, I’d expect some console errors, and also errors in the network tab. Great this is resolved, but please do ping back if you see it again.