Skip to content

Fix GSplat LOD re-evaluation when params change via frame:ready event#8498

Merged
mvaligursky merged 1 commit intomainfrom
mv-gsplat-lod-progressive-load
Mar 4, 2026
Merged

Fix GSplat LOD re-evaluation when params change via frame:ready event#8498
mvaligursky merged 1 commit intomainfrom
mv-gsplat-lod-progressive-load

Conversation

@mvaligursky
Copy link
Contributor

@mvaligursky mvaligursky commented Mar 4, 2026

Summary

  • Fix: When frame:ready event listeners modify GSplat params (e.g. lodRangeMin/lodRangeMax), the dirty flag was immediately cleared by frameEnd() before the next update could act on it. Now, after firing frame:ready, if params were dirtied by listeners, octree instances are marked with needsLodUpdate so the new range takes effect on the next full update.
  • Example: Updates the lod-streaming example to demonstrate progressive loading — starts with only the lowest quality LOD, then expands to the full quality range once initial streaming completes via the frame:ready callback.

Technical Details

The frame:ready event fires at the end of GSplatManager.update(), but GSplatDirector calls frameEnd() immediately after all manager updates, clearing the dirty flag before the next frame's update() can see it. The fix checks for re-dirtied params after the event fires and sets needsLodUpdate on all octree instances, which survives across frames and triggers LOD re-evaluation on the next full update.

The frame:ready event fires at the end of GSplatManager.update(), but
the dirty flag set by event listeners was immediately cleared by
frameEnd() before the next update could act on it. This meant changing
LOD range in response to streaming completion had no effect until the
camera moved.

Now, after firing frame:ready, if params were dirtied by listeners,
octree instances are marked for LOD re-evaluation so the new range
takes effect on the next full update.

Also updates the lod-streaming example to demonstrate progressive
loading: start with lowest LOD only, then expand to full quality range
once the initial low-quality data finishes streaming.

Made-with: Cursor
@mvaligursky mvaligursky self-assigned this Mar 4, 2026
@mvaligursky mvaligursky requested a review from a team March 4, 2026 12:16
@mvaligursky mvaligursky merged commit 816ae22 into main Mar 4, 2026
8 checks passed
@mvaligursky mvaligursky deleted the mv-gsplat-lod-progressive-load branch March 4, 2026 12:19
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.

1 participant