Why
A large compiled world reads its whole object table before its first frame, and the tab crashes.
- Seen: the open world with 2 regions (90 k placed nodes, 7 031 primitives) loads in 9.8 s to a 767 MB JS heap, then the tab crashes on the first frame.
- Fetched and parsed before the first frame:
scene-tables.json 72 MB (≈ 800 B per node), source.gltf 24 MB, scene.gltf 20 MB, clusters.json 9.6 MB. The full world holds ≈ 300 k nodes.
To do
Files
- Reproduction:
site/examples/an-open-world.html, scripts/docs-open-world.ts (branch 332-open-world).
Proof of done
- A lightweight reproduction scene of the repository (comparable node/table shape, seconds to load) opens and draws its first frame without crashing the tab; JS heap and bytes fetched before the first frame published, before and after.
- Proven on one scene never tuned on.
- Verified against the open world in pasquelin/Trillion3D-openworld, once the engine there is pinned on the fixing commit.
Links
Moved out (CTO, 26 Sept.)
This issue keeps the audit remainders delivered by branch 404-audit-remainders: the dead code in the arrival queue, one frame budget, cellReach following the zoom, the inCellFrame shear, and a scale-down growing rows in place on engines with growPlacements. Moved:
Why
A large compiled world reads its whole object table before its first frame, and the tab crashes.
scene-tables.json72 MB (≈ 800 B per node),source.gltf24 MB,scene.gltf20 MB,clusters.json9.6 MB. The full world holds ≈ 300 k nodes.To do
A merged, simplified proxy (HLOD) per cell for what is far.Moved to Streaming without holes 10/12: world-scale roots, pinned memory independent of the world size #23 (world-scale roots), 24 Sept., before the merge of Streaming without holes 11/12: world partition, object descriptors in cells read by distance (#404) #555.Files
site/examples/an-open-world.html,scripts/docs-open-world.ts(branch332-open-world).Proof of done
Links
Moved out (CTO, 26 Sept.)
This issue keeps the audit remainders delivered by branch
404-audit-remainders: the dead code in the arrival queue, one frame budget,cellReachfollowing the zoom, theinCellFrameshear, and a scale-down growing rows in place on engines withgrowPlacements. Moved:growPlacements): Content changes: forgotten-page cleanup and final no-reopen integration proof #572;getObjectByNamename buckets, and the compiler refusing a partition that breaks an invariant (rule 3): Mesh pages carry their own tables and clusters.json stays the same size whatever the world #762;