← All ideas

Support OGC 3D Tiles file format

Note: similar in a way to the feature request to support COPC (Cloud Optimized Pointcloud) within Blender.

OGC 3D Tiles standard
The OGC 3D Tiles is a file format which has become the standard within the cloud native geospatial community for representing, storing and sharing massive 3D scenes. It is often used to share massive 3D scans (scenes made of several 100M up to a few billion geometric primitives) produced via photogrammetry, laser scanning or both, either in a tiled mesh representation or a tiled pointcloud representation.

This standard was primarily intended for web viewing - streaming tiles of content of massive 3d models, depending on the user viewport and a specified acceptable screen space reprojection error - via the oss CesiumJS library. It has now seen some integration within other 3D engines - see below. It is meant to store either tiled meshes ( b3dm spec) and tiled pointclouds ( pnts spec) - as well as instanced meshes (i3dm) which is probably less interesting to the Blender community. The HLOD structure (Hierarchical LOD) usually relies on an octree representation, where all nodes containing geometry are stored as binary glTF tiles (glb with textures embedded). The 1.0 spec was released in mid 2018 and has since been tightly integrated within some softwares of the ecosystem.

Support within the overall 3D ecosystem
At the moment, the main option which does enable support for viewing and rendering OGC 3D Tiles in a 3D engine is Epic Unreal Engine, via the Cesium for Unreal plugin - also see the plugin source on github , which was developed jointly by Cesium and Unreal teams. All major photogrammetric suites do enable 3D Tiles export support (Agisoft Metashape, RealityCapture, ContextCapture), and the Cesium Ion service offers tiling and storage capabilities for multiple types of massive input mesh.

Feature Request
Cross-posted on the Cesium Community forum

  • It would be great if a 3D Tiles dataset could be imported within Blender - first for viewing in the viewport/openGL renders, and at a later stage with other Blender rendering engines.
  • Another tricky implementation to take care of would be support geo-referenced data as 3D Tiles datasets are often stored with geo-referenced coordinates - which are hard to manage for any 3D render engine with floating point precision. Using a way to manage geo-referenced scenes the way the BlenderGIS plugin does it could help smooth this last step - simply storing a scene global shift to have manageable local coordinates.
  • Being able to view 3D Tiles stored locally on the filesystem or on a web server could both be great

Some timeline could look, via order of complexity, integrating
local color-less pointclouds (pnts) > colored pointclouds > colored meshes (b3dm) > textured meshes > geo-referenced scenes

Seeing the BlenderGIS example below fetching satellite imagery 2D Tiles, porting the feature set from the BlenderGIS 2D tiles fecthing to 3D tiles fetching could probably be a good starting point. Looking at the Uber loaders.gl js library is also a good starting point, as the aim of this library is to make any 3D tiles format (OGC 3D tiles, potree, entwine etc) to be viewed on any js 3D viewer (threejs, cesium, deckgl/mapbox, etc)

3D Tiles Next
Note that the next iteration of that tiled standard, 3DTiles Next, has been announced last year and is going through a community discussion phase

Reference
3D-Tiles cheat-sheet 3D Tiles BlenderGIS 2D Tiles fetching

100%

Development Status: Open

Upvote 7 Downvote 0
jochemla
18 Jul 2022

3 Comments

jochemla Author

With the Google release a few months back of their entire Photorealistic 3D cities as OGC 3D-tiles, the integration within Blender would make even more sense. Would make it possible to embed within a blender scene any location on earth existing within the dataset, more than 1200 cities available completely free during the first phase!

Announcement and Demo webapp

1
laurent77

Hello, is there a plan to implement 3DTiles support within blender ? I there an opened project ? We are interested and may contribute.

jochemla Author

Suggestion by Patrick Cozzi, head of the Cesium team, is to rely on the open-source Cesium Native C++ library that streams 3D Tiles (used in Cesium plugins for Unreal, Unity, Omniverse) and could potentially be integrated.

My two cents before that suggestion were:

  • the way BlenderGIS does it for standard 2D TMS tile maps, full pythonic could be a step in the right direction
  • or better encapsulate NASA-AMMOS/3DTilesRendererJS or loaders.gl + create python/wasm wrappers for these libs, probably be easier to maintain