diff --git a/examples/editor/index.html b/examples/editor/index.html
index cf14afe7..36526634 100644
--- a/examples/editor/index.html
+++ b/examples/editor/index.html
@@ -560,6 +560,7 @@
const lodFolder = gui.addFolder("Level-of-Detail").close();
lodFolder.add(splatExtra, "lod").name("Create Level-of-Detail on load")
lodFolder.add(spark, "lodSplatScale", 0.001, 3.0, 0.001).name("LoD splat scale").listen();
+ lodFolder.add(spark, "lodRenderScale", 0.1, 10.0, 0.1).name("Min LoD pixel size").listen();
lodFolder.add(guiOptions, "splatCount").name("Current splat count").listen();
lodFolder.add(spark, "coneFov0", 0.0, 170.0, 1.0).name("Cone Fov0").listen().onChange(updateConeMeshes);
lodFolder.add(spark, "coneFov", 0.0, 170.0, 1.0).name("Cone Fov").listen().onChange(updateConeMeshes);
@@ -572,6 +573,7 @@
lodFolder.add(spark, "behindFoveate", 0.0, 1.0, 0.01).name("Behind Foveate").listen();
lodFolder.add(spark, "enableDriveLod").name("Enable LoD updates").listen();
lodFolder.add(spark, "lodInflate").name("Soften LoD splats").listen();
+ lodFolder.add(spark, "lodTraverseMode", ["standard", "dynamic"]).name("LoD traverse mode").listen();
const pageColoring = dyno.dynoBool(false);
lodFolder.add(pageColoring, "value").name("Page Coloring").listen().onChange(() => {
diff --git a/rust/spark-rs/src/lod_tree.rs b/rust/spark-rs/src/lod_tree.rs
index 73308276..84798a71 100644
--- a/rust/spark-rs/src/lod_tree.rs
+++ b/rust/spark-rs/src/lod_tree.rs
@@ -627,3 +627,237 @@ fn compute_pixel_scale<'a>(
};
foveate * pixel_scale
}
+
+#[wasm_bindgen]
+pub fn dynamic_traverse_lod_trees(
+ max_splats: u32, pixel_scale_limit: f32, last_pixel_limit: Option,
+ // lod_instances: &Array,
+ lod_ids: &[u32], root_pages: &[u32],
+ view_to_objects: &[f32], lod_scales: &[f32],
+ behind_foveates: &[f32], cone_foveates: &[f32],
+ cone_fov0s: &[f32], cone_fovs: &[f32],
+ // readback: Uint32Array,
+ // flag: bool,
+) -> anyhow::Result