3d map 2500km² running on three.js and 3dtilesrenderer

Hello,

A side project I’ve been working on for past few years. 3d maps covering 2500km² running on amazing library developed by @gkjohnson.

There still are pretty much no real features, but the foundation is already in place.

Best,
Bartolome

11 Likes

Cool stuff! Which software did you use for photogrammetry and generating the tiles?

1 Like

For that specific set most of 3d reconstruction was done in Agisoft Metashape 2.1 and 3d tiling as well. All drone footage was processed and color calibrated from RAW DNG in Darktable as it’s got great support for color chart calibration and it’s open-source. Then I’ve used couple of python tools for merging individual 3dtiles sets.
The hardest part was actual 3d tiling to avoid random mesh fragmentation killing whole purpose of 3d tiles.

This set is pretty average as it’s got shadows and texel density set to 6”, but I’ve got 32TB of these scans testing different workflows. Entire set takes ~75GB, which gives ~30MB/km².

I’ve tried Meshroom, PIX4D, RealityCapture, Terra and bunch of other ones over time, but there were either issues with RTK input, no control over output models and never ending issues.

1 Like

I’ve got a few more 4k screenshots I thought could be worth sharing. Main goal of this set was to have consistent color calibration across entire reconstruction along with realistic and natural feel.
@gkjohnson
@vincent-lecrubier-skydio

1 Like

Looks great! Thanks for sharing - love seeing this kind of stuff. A few small comments on the app:

  • it seems like the server is a bit slow which may be out of your control but that could help data load more quickly.
  • it looks like DebugTilesPlugin is added to the tiles renderer, which can have a performance impact when enabled. It would be best to remove the plugin if you’re not using it.
  • The traversal of the hierarchy to calculate the cache display is fairly slow. This should also be skipped if it’s not displayed.

Hopefully some features coming soon to help improve load times in coming 3d tiles releases, as well! :crossed_fingers:

3 Likes

I’m glad you liked practical application of your library. It’s actually based on older release from almost a year ago. I saw there were many major updates since then and will need to start a new project form testing smaller 3dtile sets with different chunking and geometry optimization.
Thanks a lot for pointing out quick optimization steps.

This set is around 75GB in total and consists of over 700k 3d tiles, which makes it highly susceptible to latency issue when server is located on another continent. I need to do more testing though.

Do you have any suggestion for extracting exact height from WGS84 3d tiles exported individually and combined together in top level JSON? All 3d geometry have local coordinates of vertices and each chunk is nested in hierarchy defined in 3d tile JSON and then in top level JSON. Is there any existing method to extract high precision height of nearest vertex, or face?

I have another set with small area, but with 1cm texel size and more 3d structure rather than flat ground. The issue over there is that highest level of 3dtiles don’t want to load too easily.

If you need any 3d tiles for development, or showcase I can share with you some of my resources as my bit of contribution.

This set is around 75GB in total and consists of over 700k 3d tiles, which makes it highly susceptible to latency issue when server is located on another continent. I need to do more testing though.

Location may play a role. Just for some context: for me I’m seeing over a minute to download a single tile and often over 40 seconds. The files are also fairly large with some tiles being 3-4 megabytes in size, most of that likely being texture size (one 3.5mb file has five 512x512 textures and five meshes). I would try to compress the files using something like gltf-transform to get the sizes down and maybe consider processing the tiles so that there’s only one texture and mesh required per tile.

Do you have any suggestion for extracting exact height from WGS84 3d tiles exported individually and combined together in top level JSON? All 3d geometry have local coordinates of vertices and each chunk is nested in hierarchy defined in 3d tile JSON and then in top level JSON. Is there any existing method to extract high precision height of nearest vertex, or face?

I’m not exactly sure what you mean here but if you’re looking for a “height” from any 3d mesh, including 3d tiles, you can use a raycaster or render a depth map.

The issue over there is that highest level of 3dtiles don’t want to load too easily.

Some of my above suggestions may help. Some of the newer features in the latest and upcoming releases may help, as well, if number of tiles or slowness are a concern.

1 Like

I’ve tried applying optimizations you’ve suggested along with higher errorTarget to avoid loading highest 3d tile level geometry, queue, loading and parsing adjustments and now it works a lot better. Server should be fast as all data is hosted on NVMe SSD, but it’s in Europe. Wider queue should compensate for latency.

6” map

1” - 4” map

1/2” location

1 Like

Thanks a lot! After adjustments the project is working so much better and viewing quality went to whole new level. Now it’s looking more like drone footage rather than web 3d. Much appreciated @gkjohnson !

Now I will need to work out extracting correct point altitude above the sea level for raycasting, add linear measurements tool, cross-sections, area measurements and perhaps volumetric ones. All my data is RTK corrected in WGS84 datum + EGM2008 EPSG:9518 ellipsoid height correction and there is a good chance for cm location precision globally, which is far better than in satellite maps and has no drift.

Ultimately whole initiative is for civil defense and planing. With your library it’s very well suited for standalone deployment and controlled data networks for security and safety projects.

2 Likes