Hiding a streamed model in our application's model manager leaves some of its geometry visible. The same model-level hide operation works correctly in our stable WebGL build.
The WebGPU build uses the beta streaming system hosted in a components World via fragments.core.settings.streaming.host.
Versions:
@thatopen-platform/fragments-beta: 3.5.9
@thatopen-platform/components-beta: 3.5.18
@thatopen-platform/components-front-beta: 3.5.16
Reproduction in the application
- Load a model using its streamed entry with a WebGPU renderer and a streaming host/provider configured.
- Wait until the model is visible.
- Hide the entire model using the following operation, then request an update:
model.object.visible = false;
model.object.removeFromParent();
await fragments.core.update(true);
Actual: much of the model disappears, but some pieces remain visible.
Expected: the entire model disappears. Geometry that arrives after the hide should also remain hidden until the model is shown again.
We hide at the model-object level to preserve per-element visibility: showing the model again should retain hidden IFC spaces and any individual elements the user had already hidden.
Possible cause in the published beta source
Under src/FragmentsModels/src/streamed/system/ in the installed fragments-beta@3.5.9 package:
facade.mjs, chief.setHome() (around lines 2783–2793), reparents each model's pieceHome beneath the host's model.object, compensating for its position.
core/shards/supply.mjs, ShardSupply.load() (around lines 1365–1372), adds block.mesh or each cell.mesh directly to the scene.
This appears to leave the shard/ribbon meshes outside the model object's visibility and attachment hierarchy, while the detailed pieces follow it. The identification of the remaining geometry as ribbons/LOD is based on this source inspection; we have not yet confirmed it with a standalone reproduction or GPU capture.
Intended model-level visibility API?
Should model.object visibility/scene removal cover every streamed representation, or is there another supported API for hiding an entire streamed model while preserving its per-element visibility state?
setVisible(undefined, false) appears to propagate hidden slots to the streaming system, but simply pairing it with setVisible(undefined, true) would overwrite existing per-element hides. Ideally, model-level visibility would cover detailed geometry, ribbons/LOD and later arrivals without changing those item states.
Hiding a streamed model in our application's model manager leaves some of its geometry visible. The same model-level hide operation works correctly in our stable WebGL build.
The WebGPU build uses the beta streaming system hosted in a components World via
fragments.core.settings.streaming.host.Versions:
@thatopen-platform/fragments-beta: 3.5.9@thatopen-platform/components-beta: 3.5.18@thatopen-platform/components-front-beta: 3.5.16Reproduction in the application
Actual: much of the model disappears, but some pieces remain visible.
Expected: the entire model disappears. Geometry that arrives after the hide should also remain hidden until the model is shown again.
We hide at the model-object level to preserve per-element visibility: showing the model again should retain hidden IFC spaces and any individual elements the user had already hidden.
Possible cause in the published beta source
Under
src/FragmentsModels/src/streamed/system/in the installedfragments-beta@3.5.9package:facade.mjs,chief.setHome()(around lines 2783–2793), reparents each model'spieceHomebeneath the host'smodel.object, compensating for its position.core/shards/supply.mjs,ShardSupply.load()(around lines 1365–1372), addsblock.meshor eachcell.meshdirectly to the scene.This appears to leave the shard/ribbon meshes outside the model object's visibility and attachment hierarchy, while the detailed pieces follow it. The identification of the remaining geometry as ribbons/LOD is based on this source inspection; we have not yet confirmed it with a standalone reproduction or GPU capture.
Intended model-level visibility API?
Should
model.objectvisibility/scene removal cover every streamed representation, or is there another supported API for hiding an entire streamed model while preserving its per-element visibility state?setVisible(undefined, false)appears to propagate hidden slots to the streaming system, but simply pairing it withsetVisible(undefined, true)would overwrite existing per-element hides. Ideally, model-level visibility would cover detailed geometry, ribbons/LOD and later arrivals without changing those item states.