Skip to content

Streamed model remains partially visible after hiding/removing model.object (WebGPU beta) #49

Description

@rihokirss

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

  1. Load a model using its streamed entry with a WebGPU renderer and a streaming host/provider configured.
  2. Wait until the model is visible.
  3. 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions