How to publish 103M splats on Cesium? How to process 20,000 photos for a 3DGS model on a single RTX 4090? After 3 months of R&D, I found the answer. BUT can't publish it on Cesium!

Hey friends! I want to share the results of a major research effort. The goal was ambitious: to generate a hyper-detailed 3DGS scan from a massive dataset—20,000 drone photos at full resolution (5280x3956px). All of this on a single machine with just one RTX 4090 GPU.
https://youtu.be/vxQAPPEu_UA - video sample of it.

:exploding_head: What was the problem?
Most existing tools simply can’t handle this volume of data. For instance, Postshot, which is excellent for many tasks, confidently processed up to 7,000 photos but choked on 20,000—it ran for two days without even starting the model training.

:light_bulb: The Breakthrough Solution.
The real discovery was the software from GreenValley International https://bit.ly/LiDAR360MLS . Their approach is brilliant: instead of trying to swallow the entire dataset at once, the program intelligently divides it into smaller, manageable chunks, trains each one individually, and then seamlessly merges them into one giant, detailed scene. After 40 hours of rendering, we got this stunning 103 million splats PLY result:
:link: https://lnkd.in/dF5BiaU6

:thinking: New Challenge: How to display 103 million splats? How to publish it on Cesium?
The processing problem is solved, but a new one has emerged. The final file contains a massive 103 million splats, and publishing it for online viewing has proven tricky. Most web viewers cap out at around 40 million splats. Right now, this behemoth can only be viewed in Postshot. I’m looking for a way to share it online without sacrificing detail. Any ideas, community?

Jastrzębia Góra, Poland. 20K photos 106M splats. Andrii Shramko scan - NIRA - this is one of the solution for 103M splat online, but I need it to publish on Cesium :frowning:

:rocket: What’s next?
I plan to push this even further and build a dataset of 100,000 photos with a detail level of 0.3 cm/pixel. I have a strong feeling that even this volume can be processed on a single 4090! The only downside is that GreenValley’s software isn’t free, but for this level of power, it’s definitely worth the investment.

:wrapped_gift: For You: Free Resources & Opportunities
:open_file_folder: 120GB of source data for your research.
As promised, I’m sharing the entire 20,000-photo dataset. Feel free to use it for your own R&D projects, tests, and experiments.
Download it here: https://lnkd.in/dF5BiaU6

:bookmark: My library of free scans (bookmark this!).
I’ve created a dedicated page where I’ll be collecting all my free datasets: from RAW data to production-ready PLY files for Virtual Production and post-production.
Link to the page: https://lnkd.in/duijZGPB (404, working on it now :slight_smile: … )

:handshake: Let’s collaborate!
If you want to skip the R&D phase and get straight to the results, our team is ready to help your production create incredible scans faster and more affordably. Connect with me, and let’s make the “impossible” possible together!

Andrii Shramko Andrii Shramko - Andrii Shramko | LinkedIn

#ShramkoVR #Teleportour #ShramkoScan #3DGS #VirtualProduction #GreenValley #Photogrammetry #RTX4090 #DroneScanning #VFX #Dataset #Research
For your testing, here are some new scenes:

Nothing visible after importing 103M city splat. Is it a software bug?

Is this community dead?

It’s not dead. The issue about nothing being visible might have been overlooked. Maybe someone from the Cesium ion team can have a closer look at what might be wrong there, if you shrare the asset ID of the asset that you have created. (I assume that the tiling process finished without errors, and you had selected ‘Gaussian splats’ during the tiling process).

1 Like

Thank you for your answer. Asset with id 3651918. And yes, I had selected ‘Gaussian splats’ during the tiling process

(I can not access this, of course - only very few people, with ‘Admin rights’, can access it. But I’ll ping those people internally)

I had downloaded that PLY file shortly after you posted this (and a big :+1: for making all that freely available!). I have not uploaded it to Cesium ion (that would probably take several days with my slow upload). But I also played a bit with that data locally, and created a tileset from that data using some local tools. CesiumJS can indeed have some difficulties with rendering that. This refers to the performance, as well as certain “hard” limits. It is plainly not possible to render 106M splats at once. The challenge now is to split this data in a way that reflects a good “Level Of Detail” structure. The size of the data will certainly be a challenge for every toolchain. But eventually, Cesium ion should create a “good” tileset from that, and CesiumJS should be able to render it, regardless of whether it contains 1M, 10M, 100M or 1000M splats.

The screenshot is from the ion location editor. When you select the asset in the Cesium ion assets page, then there should be an option to “Open complete code example” in the lower right. When you select that, does it display anything? (If not: When you press F12, does it show any error messages in the browser console?)

There are a few things that remain to be investigated, both in the tiling as well as the rendering. And it’s good to have such a data set as a stress test.

To not start with the … “most stressy”… test, I created a downsampled version of the data, just taking 1% (!) of the splats. (Yes, this doesn’t make much sense, and is ironic given the lengths that you went through for creating such a large data set to begin with, but … we’ll have to start somewhere).

This smaller data set can be tiled and displayed. It is converted into a tileset with 2 (!) tiles. But there’s something odd about the rendering. The left side shows the data set in CesiumJS. The right side shows the exact GLB from this data set (!), just shown in a different renderer:

For some reason, hardly anything is visible in CesiumJS. That may have a bunch of reasons, but I’ll abstain from speculations for now. It looks slightly better when I convert that data into a tileset with my own tools…

but in this case, the tileset has multiple levels and additive refinement, and it’s flickering quite a lot when moving around, so … it’s hard to say which subset of the data is actually currently displayed there.

With 5% of the splats, the output from ion looks a bit better:

But we’re certainly hitting a limit here: The data is still only divided into two tiles, with 37MB and 49MB GLB files. (When using my own tools to create a tileset with 5 levels and 69 tiles (~0.5 to 2MB), the flickering becomes worse and it’s hard to navigate and generate a proper view)