NASA-AMMOS / 3DTilesRendererJS

Renderer for 3D Tiles in Javascript using three.js
https://nasa-ammos.github.io/3DTilesRendererJS/example/bundle/mars.html
Apache License 2.0
1.62k stars 289 forks source link

Cesium OSM Buildings from Cesium ion are not displayed #662

Closed jailln closed 3 months ago

jailln commented 3 months ago

Steps to reproduce the behavior:

  1. Go to https://nasa-ammos.github.io/3DTilesRendererJS/example/bundle/ionExample.html
  2. Add your access token and the following asset id: 96188
  3. See that nothing gets displayed.

There is no specific error. When looking at the network pane, Cesium ion connection is ok and the tileset and root tile are correctly retrieved so it doesn't seem related to cesium ion specifically. Bounding volumes are regions, could it be related to #624 ?

gkjohnson commented 3 months ago

The tile set you're loading is the size of the globe which the ion example page is not designed for. If you load it with the appropriate camera controls that account for the WGS84 ellipsoid the tiles can load in, though very slowly:

image

I'll create another issue for that.

gkjohnson commented 3 months ago

Closing in favor of #663

gkjohnson commented 3 months ago

If you load it with the appropriate camera controls that account for the WGS84 ellipsoid the tiles can load in, though very slowly

For more context on this I added a new TilesRenderer that loads the OSM data as a sibling tile set in the google maps globe example the lru cache max size was increased to ~6000.

jailln commented 3 months ago

The tile set you're loading is the size of the globe which the ion example page is not designed for. If you load it with the appropriate camera controls that account for the WGS84 ellipsoid the tiles can load in, though very slowly.

Thanks! Sorry I missed that, I tested it in itowns first and then created a quick reproduction on 3DTilesRendererJS without paying enough attention. Turns out there was an issue anyway, thanks for the quick fixes :)

For more context on this I added a new TilesRenderer that loads the OSM data as a sibling tile set in the google maps globe example the lru cache max size was increased to ~6000.

Just to be sure, the cache size doesn't have an impact on whether more tiles are rendered or not, does it? It's just that newly loaded and rendered tiles are not cached?

gkjohnson commented 3 months ago

Just to be sure, the cache size doesn't have an impact on whether more tiles are rendered or not, does it? It's just that newly loaded and rendered tiles are not cached?

LRUCache.maxSize sets a hard cap on the number of tiles that can be downloaded at all. If the cache is full then no more tiles will be downloaded until tiles from the cache can be evicted. This is a safety measure to avoid using too much memory. Once tiles are no longer needed they are unloaded until LRUCache.minSize is reached by disposing of loadPercent amount of tiles per frame until min size is reached.

A better option would be to estimate how much GPU memory a tile requires for rendering and cap the cache based on memory usage, though. See https://github.com/NASA-AMMOS/3DTilesRendererJS/issues/384.

I added a new TilesRenderer that loads the OSM data as a sibling tile set in the google maps globe example the lru cache max size was increased to ~6000.

To be clear the fixes I made address this issue. Previously all sibling tiles were being loaded even for tiles with "ADD" refinement which was causing far too many tiles to load. This tile set now works with default cache settings.

jailln commented 3 months ago

Ok, thanks for the details. #384 would be great indeed!

To be clear the fixes I made address this issue. Previously all sibling tiles were being loaded even for tiles with "ADD" refinement which was causing far too many tiles to load. This tile set now works with default cache settings.

Yes of course, I was just asking to make sure I had understood correctly how the LRUcache works.

tdurand commented 1 month ago

I ran into the same issue while trying to render the "Cesium OSM buildings" based on the ionExample.html , sorry for the newbie question, but if you can share a sample code to do this: load it with the appropriate camera controls that account for the WGS84 ellipsoid the tiles can load in

The tile set you're loading is the size of the globe which the ion example page is not designed for. If you load it with the appropriate camera controls that account for the WGS84 ellipsoid the tiles can load in, though very slowly:

would be much appreciated, just starting to play with 3D tiles and it is a bit overwhelming to understand everything 🙃

gkjohnson commented 1 month ago

would be much appreciated, just starting to play with 3D tiles and it is a bit overwhelming to understand everything 🙃

I don't think I have the time right now to put together a full example but an example would basically look like the googleMapsExample (googleMapsAerial) page with a second tile set pointing to the OSM tiles. Though keep in mind that the OSM tiles are likely designed to work with Cesium's globe tile set so they may not line up with Google tiles all that well so you may have to toggle the earth data set to see them well.

The important point is to position the camera far out and use the GlobeControls class to allow for navigation or position the camera on the planet surface. The OSM tiles won't show up until the camera is close up, though.

If you'd like to put together a try at getting that going I can point you in the right direction if you run into issues.

tdurand commented 1 month ago

thanks for the pointer 💙, will try to play with this and let you know