visgl / loaders.gl

Loaders for big data visualization. Website:
https://loaders.gl
Other
705 stars 193 forks source link

About Tiles3DLoader loading 3d tiles will flicker #2570

Open vanness30214 opened 1 year ago

vanness30214 commented 1 year ago

Here is a demo https://github.com/vanness30214/map-demo

question:

  1. After loading the model, when zooming, the "REPLACE" will disappear or flicker. Slices keep flickering; this visual experience is not friendly
  2. Regarding "skipLevelOfDetail", whether to optimize this strategy in the future; this will achieve faster loading;
  3. When moving left and right, the tiles will disappear and hide, and then reloaded; how can it be achieved without disappearing, slowly loading from the rough model to the high model of the corresponding level; directly disappear and hide this experience not friendly

These are the issues I found, thanks a lot

vanness30214 commented 1 year ago

https://github.com/visgl/loaders.gl/assets/49246317/be768ceb-d9b8-4596-86de-52bda89d949b

This video will help you to see the problem more visually

ibgreen commented 1 year ago

Thanks for reporting. that particular tileset does seem to exhibit the problem in a very pronounced way.

Assuming the tileset is well formed (I would guess that something in the tileset is exacerbating the issue), this would indicate problems in the tileset traversal algorithm (the algorithm that selects which tiles to show based on the viewport).

Unfortunately, loaders.gl currently does not have any active maintainers of the traversal algorithms for 3D tiles. We are always looking for contributors, however the funding and focus in loaders.gl for the last few years has been on I3S rather than 3D tiles.

vanness30214 commented 1 year ago

Through understanding, it seems to be related to the logic of tiles' isVisible '

ibgreen commented 1 year ago

@vanness30214 Thanks for investigating! If you can provide additional info it would be highly appreciated.

vanness30214 commented 1 year ago

I don't know if my viewpoint is correct or not;

It seems to be related to the rendering scheduling order of tiles;

According to my personal understanding, the tiles with the lowest LOD level at the beginning of the rendering serve as the bottom layer for bottoming out; Then render deeper level tiles;

Based on source code:tiles-tile-3d.ts - updateVisibility function

this._visibilityPlaneMask = this.visibility(frameState, parentVisibilityPlaneMask); this._visible = this._visibilityPlaneMask !== CullingVolume.MASK_OUTSIDE;

It is related to the "_visible" logic display of this code

Then I consulted some other friends about the solution to this problem, and they proposed

"Template testing solution, first dye the sub template values, and render the parent based on the sub template values"

Solution for

vanness30214 commented 1 year ago

I don't know if my explanation will be helpful to the team, as I am also a beginner and don't have much ability to make changes. I have implemented too many functions and can only request the team's help; thanks

vanness30214 commented 1 year ago

https://github.com/visgl/deck.gl/issues/5832

This question has been asked before by an issue.

vanness30214 commented 1 year ago

@ibgreen