-
Notifications
You must be signed in to change notification settings - Fork 84
Description
Hello,
While using obj2tiles to generate 3D Tiles datasets for viewers such as [NASA 3d-tiles-renderer-js](https://github.com/NASA-AMMOS/3DTilesRendererJS), we have encountered recurring issues when loading certain scenes.
Problem Statement
For some models, especially those that:
- Have a very large spatial extent (landscape-scale datasets);
- Or have a very elongated shape (corridors, roads, linear networks);
the generated tileset does not include content at the root level (root.content is null and refine: "ADD").
This leads to the following behavior:
- Nothing is visible initially — the viewer renders an empty scene until children tiles are selected.
- Children tiles are only refined once their Screen Space Error (SSE) exceeds the threshold, which might require zooming very close before any geometry becomes visible.
- More compact or cube-shaped scenes are less affected by this behavior and load more intuitively.
This has been noted by other users as well — see the forum discussion [About the choice of Obj2Tiles’ spatial data structure](https://community.opendronemap.org/t/about-the-choice-of-obj2tiles-spatial-data-structure/18612), which raises concerns about the subdivision strategy and its effect on the number of tiles and performance.
Analysis
This behavior is compliant with the 3D Tiles specification: refinement is driven by SSE, and without root content, no “context LOD” is rendered until children are considered necessary.
For very large models with small geometricError values, this results in a “blind navigation” phase before any tile becomes visible, creating confusion for end-users.
The above-mentioned discussion also points out that the current subdivision strategy leads to a very high number of tiles for large models (>1000), which negatively impacts loading time and runtime performance. Alternative spatial structures (such as kd-trees or octrees, similar to [Nexus](https://vcg.isti.cnr.it/nexus/)) could reduce the number of top-level tiles and make the dataset much more efficient to stream.
Proposed Change
-
Add a Very Simplified Root LOD
- Generate a highly decimated mesh (few hundred/thousand faces max) attached to
root.content. - Keep
refine: "ADD"so that higher-resolution children overlay progressively. - Provide a CLI flag to control the simplification ratio (e.g.,
--root-simplification 0.005for 0.5% of original faces).
- Generate a highly decimated mesh (few hundred/thousand faces max) attached to
-
Consider a More Adaptive Spatial Structure (Octree / kd-tree)
-
As suggested in the referenced discussion, switching to a kd-tree or octree subdivision could:
- Minimize the number of tiles at the lowest levels,
- Concentrate tile density where it is most needed (high-detail regions),
- Improve loading time and runtime performance for large models.
-