visgl / deck.gl

WebGL2 powered visualization framework
https://deck.gl
MIT License
12.25k stars 2.08k forks source link

[Bug] Error: Tile3DLayer: Failed to render layer of type cmpt #8789

Open joedjc opened 7 months ago

joedjc commented 7 months ago

Description

Hi,

I'm trying to load an asset i've uploaded to Cesium ION (a GLB file converted to 3D tiles) in Deck GL (v9).

I'm using the cesium ION loader: CesiumIonLoader

new Tile3DLayer({ id: 'tile-3d-layer', pointSize: 2, data: TILESET_URL_2, loader: CesiumIonLoader, loadOptions: { 'cesium-ion': {accessToken: ION_TOKEN}, '3d-tiles':{isTileset:true}, isTileset:true, loadGLTF: true } })

Whilst some of the tiles load, I receive errors as some tiles seem to be composite tiles:

chunk-TLP2UBGU.js?v=2a7521f5:25091 deck: update of Tile3DLayer({id: 'tile-3d-layer'}): Tile3DLayer: Failed to render layer of type cmpt Error: Tile3DLayer: Failed to render layer of type cmpt at _Tile3DLayer._getSubLayer (@deck__gl_geo-layers.js?v=2a7521f5:19511:15) at @deckgl_geo-layers.js?v=2a7521f5:19603:24 at Array.map () at _Tile3DLayer.renderLayers (@deckgl_geo-layers.js?v=2a7521f5:19598:28) at _Tile3DLayer._postUpdate (chunk-TLP2UBGU.js?v=2a7521f5:29493:34) at _Tile3DLayer._update (chunk-TLP2UBGU.js?v=2a7521f5:29117:12) at LayerManager._updateLayer (chunk-TLP2UBGU.js?v=2a7521f5:14613:13) at LayerManager._updateSublayersRecursively (chunk-TLP2UBGU.js?v=2a7521f5:14570:16) at LayerManager._updateLayers (chunk-TLP2UBGU.js?v=2a7521f5:14539:10) at LayerManager.setLayers (chunk-TLP2UBGU.js?v=2a7521f5:14488:10)

Screenshot 2024-04-15 at 09 45 59

I noticed that the loaders gl documentation for the Tiles3DLoader suggests it supports .cmpt file types (https://loaders.gl/docs/modules/3d-tiles/api-reference/tiles-3d-loader).

However, I can't see much other documentation of examples of this - so i'm not 100% sure if it's supported?

Flavors

Expected Behavior

Cesium IOC cmpt tiles are displayed using Deck GL

Steps to Reproduce

const deckOverlay = new DeckOverlay({ // interleaved: true, layers: [ new Tile3DLayer({ id: 'tile-3d-layer', pointSize: 2, data: TILESET_URL_2, loader: CesiumIonLoader, loadOptions: { 'cesium-ion': {accessToken: ION_TOKEN}, '3d-tiles':{isTileset:true}, isTileset:true, loadGLTF: true } }) ]})

Environment

Logs

chunk-TLP2UBGU.js?v=2a7521f5:25091 deck: update of Tile3DLayer({id: 'tile-3d-layer'}): Tile3DLayer: Failed to render layer of type cmpt Error: Tile3DLayer: Failed to render layer of type cmpt at _Tile3DLayer._getSubLayer (@deck__gl_geo-layers.js?v=2a7521f5:19511:15) at @deckgl_geo-layers.js?v=2a7521f5:19603:24 at Array.map () at _Tile3DLayer.renderLayers (@deckgl_geo-layers.js?v=2a7521f5:19598:28) at _Tile3DLayer._postUpdate (chunk-TLP2UBGU.js?v=2a7521f5:29493:34) at _Tile3DLayer._update (chunk-TLP2UBGU.js?v=2a7521f5:29117:12) at LayerManager._updateLayer (chunk-TLP2UBGU.js?v=2a7521f5:14613:13) at LayerManager._updateSublayersRecursively (chunk-TLP2UBGU.js?v=2a7521f5:14570:16) at LayerManager._updateLayers (chunk-TLP2UBGU.js?v=2a7521f5:14539:10) at LayerManager.setLayers (chunk-TLP2UBGU.js?v=2a7521f5:14488:10)

ibgreen commented 7 months ago

In the last 5 years we haven't really seen any use of composite 3D tiles, so we never put any effort into this.

Also the new 3D Tiles standard seems to be moving away from the original set of tile types toward GLBs (glTF) with embedded 3D tiles metadata, so I am a bit surprised to see .CMPT tiles appearing now.

I would say that we'd be willing to accept PRs fixing CMPT, but we are unlikely to prioritize this unless this is becoming a widespread issue (which can e.g. happen when Cesium makes changes to their tiling pipelines).

joecusdin commented 7 months ago

Thanks @ibgreen - i'm not sure why Cesium ION creates these - we've looked to see if we can avoid them being made but haven't found any. I'll reach out to Cesium to try to understand in what circumstances it uses CMPT.

yangtanyu commented 6 months ago

I am also encountering this issue: 'Tile3DLayer: Failed to render layer of type cmpt'. I have used 3d-tiles-tools to convert .cmpt files to .b3dm for loading, but this is not an ideal solution. I hope the official support for direct loading of .cmpt files can be implemented. Thanks . This is a issues #6389 ,that is about the keyword : cmpt

anil1712 commented 5 months ago

@yangtanyu I am also facing the same, is there any workaround for this?

ibgreen commented 5 months ago

Is this a hard error that breaks all rendering? Perhaps we could just skip rendering these composite tiles and log a soft error until we support them in loaders.gl

yangtanyu commented 5 months ago

use 3d-tiles-tools to convert .cmpt files to .b3dm for loading @anil1712