3D Tiles Support in LumiDB: Adaptive Streaming for Any Application
LumiDB now supports adaptive level-of-detail streaming via 3D Tiles. This means easy integration into any Cesium.js-based tool, or any tool requiring adaptive streaming of reality capture datasets, even massive ones. We’re also bringing LOD streaming into our own viewer app.
Published on
Do not index
Do not index
At LumiDB, we’re building a database for reality capture data that makes handling big point cloud datasets easy, accessible and fun. Request access to the private beta to try it out!
Introduction
Visualizing massive point cloud datasets has always meant tradeoffs: detail vs performance, tool compatibility vs vendor lock-in. At LumiDB, we’re removing those tradeoffs, starting with full 3D Tiles support.
LumiDB Now Supports 3D Tiles and Cesium
We just added compatibility with the 3D Tiles spec, which enables adaptive streaming of point clouds from LumiDB. It’s been one of our most requested features, which makes shipping it even more exciting! Our mission is to make it a breeze to integrate LumiDB into all tools that our users love, and this is a big step towards achieving that because it means teams using Cesium-based tools can now plug in LumiDB with zero friction, while getting the benefits of API-driven filtering and scalable storage. We love open technologies and making LumiDB play well with Cesium is particularly dear to us!
So what are we talking about exactly? Simply put, when flying around the 3D point cloud, you can dynamically stream in more detail around areas nearby, and gradually less detail elsewhere. Whenever the camera moves, new high-detail tiles get streamed in, and others exchanged into less-detailed ones. This results in a visually pleasing experience, yet consistent resource utilization. Think of it like Google Maps: Zoom in to see more detail, zoom out and things simplify. 3D Tiles let point clouds do the same. It is difficult to visualize any non-trivially large or high-resolution dataset without dynamic level of detail. LOD streaming has been on our roadmap since day one, and we knew LumiDB wouldn’t feel complete without it.
We’ll also roll out this feature soon into our own Viewer, which enables end-users to visualize even massive point clouds with zero friction. Whenever the user opens up a dataset, they will instantly see an overview of what the point cloud looks like, and are able to fly around and zoom in and out, while the application renders smoothly.
What Sets LumiDB Apart
This is all well and good, but truth be told, it’s hardly new. As mentioned, support for LOD streaming is expected behavior for any 3D tool dealing with this kind of data. What sets LumiDB apart, however, is that you can combine its powerful filtering capabilities with dynamic streaming. This is where LumiDB truly starts to shine.
You can filter both spatially, as well as on classification or any metadata, and both the 3D tileset as well as the individual tile contents will adhere to these filters. And you can of course configure these filters dynamically and programmatically, or via any UI. So instead of generating a static 3D tileset file from a set of .laz files, the user can slice and dice the data however they wish, for example by cropping and filtering out uninteresting point classes or scan date ranges, and only data matching those filters will get streamed into the client.
There are two ways to use 3D Tiles in LumiDB, depending on your toolchain. The first one is for users who use Cesium.js. Just call
get3DTileset()
, grab the returned URL, and plug it into Cesium like this:const tileset = await Cesium.Cesium3DTileset.fromUrl(
new Cesium.Resource({
url: tileset_url_returned_by_lumidb,
}),
);
The 3D tileset returned by that URL contains all the endpoints for individual tiles, enabling Cesium to pull in data directly from LumiDB. That’s it! Cesium takes care of the rest, dynamically fetching tiles from LumiDB as the camera moves.

The second way is for users who don’t necessarily use Cesium in their toolchain, but want dynamic LOD streaming nonetheless. The get3DTileset API call can also return the LOD hierarchy as a .json file directly. You can then use this payload to call into the API’s get3DTile method to fetch individual LOD tile contents, using any streaming logic you wish. We currently support returning the tile contents in both .PNTS format, as well as ThreeJS, which is what we use internally. GLTF will soon follow. By building on open standards like 3D Tiles and formats like GLTF and PNTS, we’re making sure LumiDB fits seamlessly into any toolchain and not locking you into ours.
How to Get Started with LumiDB
There’s a dummy example implementation in our example viewer repository, which shows how you can get started with leveraging 3D tiles with LumiDB. We’re planning on providing a slightly higher-level API for an easier Three.js integration - one that would enable you to simply provide the camera parameters, and our API would take care of all the streaming business under the hood without the user having to worry about any of it. Stay tuned for more updates!
In the meantime, however, request access to the private beta to try it out!