3D Tiles 1.1 support?

Is there 3D Tiles 1.1 support in Cesium for Unreal? Like implicit tiling and EXT_mesh_features/EXT_structural_metadata ?

Hi Bert

Thanks for checking in.

We’ve added some of the extensions for 3D Tiles Next into Unreal earlier this year - EXT_feature_metadata and others, but as the spec changed during the standardization process, the newer ones like EXT_mesh_features and EXT_structural_metadata still need to be implemented. These are on the roadmap for Cesium for Unreal to support before the OGC standardization process is completed and announced, most likely later this summer.

I’d love to hear from you about how you are planning to use these in your work, and how we can help in anyway, including prioritizing the implementation of these. Feel free to reach out to me directly if you are unable to share them publicly.

Regards
Shehzan Mohammed

Hi Shehzan, Ok thanks for the info! What about the implicit tiling features? 3d-tiles/specification/ImplicitTiling at draft-1.1 · CesiumGS/3d-tiles · GitHub

Hi @bertt ,

Support for a slightly older version of the implicit tiling spec was added last December. I believe the main missing implicit tiling feature is JSON subtrees (we currently only support binary subtrees). There may be some other minor spec changes that we don’t support yet.

So it’s worth trying out your implicit tilesets with Cesium for Unreal to see if they work as is. We have in-progress updates to the implicit tiling implementation that should be available ~2 months from now. Those changes will bring the implementation up-to-date with the spec.

Either way, let us know if you run into any specific issues with implicit tilesets in Cesium for Unreal!

-Nithin

Hi Nithin,

I’m trying to load https://bertt.github.io/cesium_3dtiles_samples/samples/1.1/delaware/tileset.json
in Unreal (Unreal 5.0.2 / Cesium plugin 1.15.1) but get the following error:

LogCesium: Loading tileset from URL
LogCesium: Loading tileset from URL done
LogCesium: Loading tileset from URL https://bertt.github.io/cesium_3dtiles_samples/samples/1.1/delaware/tileset.json
LogCesium: Loading tileset from URL https://bertt.github.io/cesium_3dtiles_samples/samples/1.1/delaware/tileset.json done
LogHttp: Warning: 00000B7E7A020000: request failed, libcurl error: 6 (Couldn’t resolve host name)
LogHttp: Warning: 00000B7E7A020000: libcurl info message cache 0 (Could not resolve host: content)
LogHttp: Warning: 00000B7E7A020000: libcurl info message cache 1 (Closing connection 4)
LogCesium: Error: [2022-07-19 22:29:23.883] [error] [Tile.cpp:497] An exception occurred while loading tile: Connection failed.

The tileset works well in Cesium 1.95: https://bertt.github.io/cesium_3dtiles_samples/samples/1.1/delaware/index.html

There is one subtree json file used (0_0_0.subtree) https://bertt.github.io/cesium_3dtiles_samples/samples/1.1/delaware/subtrees/0_0_0.subtree

It looks like your subtree file does not have a binary header. The current implementation of implicit tiling expects a header in the format specified by this struct:

struct SubtreeHeader {
  unsigned char magic[4];
  uint32_t version;
  uint64_t jsonByteLength;
  uint64_t binaryByteLength;
};

I believe this corresponds to the binary subtree specification in implicit tiling. It should be easy to hack your subtree file into the binary format:
The magic (usually “subt”) and version value are currently unused, but the space is needed since the header is expected to be in that exact byte layout. The jsonByteLength should be the number of bytes of your current JSON file (not including the header you will need to add). The binaryByteLength can be 0 in your case, since your subtree buffers are external in .bin files.

Let me know if that workaround is sufficient for your use case (if that doesn’t fix the problem I’ll actually try your tileset). A future version of the plugin should support your JSON subtrees as-is.

ok thanks I shall retry with the binary format.

With a binary 0_0_0.subtree file I get the following error:

LogCesium: Loading tileset from URL https://bertt.github.io/cesium_3dtiles_samples/samples/1.1/delaware/tileset.json
LogCesium: Loading tileset from URL https://bertt.github.io/cesium_3dtiles_samples/samples/1.1/delaware/tileset.json done
LogHttp: Warning: 00000AD33E020000: request failed, libcurl error: 6 (Couldn’t resolve host name)
LogHttp: Warning: 00000AD33E020000: libcurl info message cache 0 (Could not resolve host: content)
LogHttp: Warning: 00000AD33E020000: libcurl info message cache 1 (Closing connection 7)
LogCesium: Error: [2022-07-20 09:07:43.845] [error] [Tile.cpp:497] An exception occurred while loading tile: Connection failed.

Oh I see what’s going on! I had a misunderstanding about the spec changes for implicit tiling in 3D Tiles 1.1, it turns out it is no longer an extension.

In the previous version that we support, the Tile.extensions.3DTILES_implicit_tiling extension was used instead of the Tile.implicitTiling property. Since then, the integration must have been integrated into the core spec.

Try replacing this section in the tileset.json:

"implicitTiling": {
  "subdivisionScheme": "QUADTREE",
  "subtreeLevels": 5,
  "subtrees": {
    "uri": "subtrees/{level}_{x}_{y}.subtree"
  }
},

with this:

"extensions": {
  "3DTILES_implicit_tiling": {
    "subdivisionScheme": "QUADTREE",
    "subtreeLevels": 5,
    "subtrees": {
      "uri": "subtrees/{level}_{x}_{y}.subtree"
    }
  }
},

Opened an issue to actually add support for the implictTiling property directly in the tile json: Implicit tiling is no longer an extension in 3D Tiles 1.1 · Issue #527 · CesiumGS/cesium-native · GitHub

1 Like

Hi Nithin, like this? https://bertt.github.io/cesium_3dtiles_samples/samples/1.1/delaware/tileset-ext.json
Still unable to load in Unreal ([error] [Tile.cpp:497] An exception occurred while loading tile: Connection failed.).

Cesium viewer works ok https://bertt.github.io/cesium_3dtiles_samples/samples/1.1/delaware/index-ext.html