Learn how to turn drone images into 3D Tiles using RealityCapture for use in Swyvl or CesiumJS—step-by-step with sample data included.
If you are sitting on a folder of drone photos and wondering how to turn them into a georeferenced 3D model for use in Swyvl or Cesium JS, this is for you. This tutorial walks through the full workflow using RealityCapture and a public sample dataset with ground control points (GCPs). We’ll cover everything from image import to 3D Tiles export, plus tips for working with ground control points (GCPs) or using RTK drones instead.
We’ve tested this exact workflow to build lightweight, accurate models that load beautifully in Swyvl.
Before we dive in, make sure you have the following:
101 49.029540967 18.290611333 249.071
102 49.029209987 18.290071979 249.000
...
DJI_0316.JPG, 101, 1772.00, 405.04
DJI_0317.JPG, 101, 1790.92, 872.09
...
Tip: For your own drone data, capture in good lighting (avoid harsh shadows or overexposure) and maintain sufficient overlap (70-80% side, 60-70% forward) to prevent gaps in the 3D model.
Since the sample dataset includes GCPs, this step is for users collecting their own data:
ID, Latitude, Longitude, Height
101 49.029540967 18.290611333 249.071
...
Tip: Distribute GCPs evenly across the area, with at least 5-10 points for a small site. Place them in areas with good visibility from multiple angles to ensure they appear in several images.
RTK (Real-Time Kinematic) drones embed centimetre-accurate GPS data in image metadata.
RTK reduces processing time and effort, but requires a compatible drone and base station setup.
With RTK, you can often skip GCP import and assignment - but you should still set the coordinate system to WGS84 in RealityCapture and verify accuracy.
Tip: Even with RTK, consider using a few GCPs as checkpoints to validate accuracy, especially for large or critical projects. For the sample dataset, GCPs are necessary since it was captured with a non-RTK drone (DJI Phantom 4 Pro).
Tip: For large datasets, ensure your computer has sufficient RAM and GPU power (e.g. 32GB RAM, NVIDIA GPU) to handle processing efficiently.
In the 1Ds view, select Ground Control from the Import & Metadata section and load the provided .txt file with 13 GCPs. This file contains the WGS84 coordinates (latitude, longitude, height) for each GCP.
An Import Ground Control prompt will show, ensure that epsg:4326 - GPS (WGS 84) is chosen as the Coordinate system. Then press OK.
In the 1Ds view, select Control Points from the Import & Metadata section and load the provided .csv file. This file automatically assigns each GCP to its pixel locations in the images, saving significant time.
The .csv file links each GCP to multiple images (e.g. GCP 101 is assigned to 20 images like DJI_0316.JPG at pixel coordinates 1772.00, 405.04). Leave the default settings and press OK.
Switch to the 2Ds view to review the assignments. RealityCapture will display the marked locations of GCPs in the images. Check a few assignments (e.g. GCP 101 in DJI_0316.JPG) to ensure accuracy, and adjust manually if needed.
Tip: The .csv file automates a tedious step, but if any assignments are incorrect (e.g. due to image distortion), you can manually adjust the pixel coordinates in the 2Ds view. Zoom in on the images to ensure precise placement.
Select Settings from the Application section.
From the Application Settings, expand the Coordinate Systems section and select EPSG:4326 - GPS (WGS 84)
In the Workflow tab, in the 2. Process section, select Align Images. RealityCapture uses the image content, GPS metadata, and GCPs (or RTK data) to compute accurate camera positions and scene geometry.
You will notice the bounding box cuts through the point cloud. Click on the model to enable it, and then rotate using the red orbit tool and adjust size using the colored grab circles at the edges.
In the Workflow tab, in the 2. Process section, select Calculate Model and then click Normal quality to generate the 3D mesh from the aligned point cloud.
For the sample dataset, the resulting mesh should be relatively small and manageable. For larger datasets, consider simplifying the mesh to optimize performance in Swyvl if you notice performance decreases.
In the Workflow tab, in the Process section, select Colorize and then click Normal quality.
RealityCapture automatically calculates vertex colors using the aligned images. This step enhances visual quality for the sample dataset’s dense mesh but is insufficient alone for Cesium 3D Tiles export.
In the Workflow tab, in the 2. Process section, select Texture.
After processing, verify the texture in the 3D view to ensure it looks correct, with no stretching or artifacts.
In the Workflow tab, in the 3. Output section, select Export.
Select Cesium 3D Tiles from the popup.
Choose the folder location you want to save the Cesium 3D Tileset.
Alternative method: Go to SCENE 3D > TOOLS, then under Export, select Levels of Detail.
The right settings make all the difference. Here’s what works well for most scenarios and why each setting matters:
Depending on your model size, this is the optimal time to grab a coffee (or two!) while you wait for the files to export.
These steps are specific to Swyvl, but a similar workflow applies to other platforms like CesiumJS—export, host, and visualise your 3D Tiles with minor adjustments depending on the platform.
The sample dataset has good overlap and lighting, but for your own projects, avoid flying during midday when harsh shadows can affect texture quality. Early morning or late afternoon light is ideal.
When collecting GCPs, ensure markers are securely placed and won’t move during the flight. Use a GNSS receiver with RTK capabilities for higher accuracy, and record heights relative to the WGS84 ellipsoid (not geoid) to match CesiumJS expectations.
If you're using an RTK drone, processing is faster since you can skip the GCP assignment step. But it's still good practice to verify the accuracy of RTK data against known points. For the sample dataset, GCPs are necessary since it was captured with a non-RTK drone (DJI Phantom 4 Pro).
The provided .csv file automates GCP assignment, which is especially helpful for the sample dataset with 149 images. Without it, manually assigning 13 GCPs to multiple images would be time-consuming.
The sample dataset is relatively small, but for larger projects, you may want to reduce the texture resolution (e.g. to 2K) or simplify the mesh further if performance in Swyvl starts to drop.
The recommended export settings—50% triangle reduction and 20,000 triangles per node—work well for the sample dataset. For larger models, it's worth testing performance in Swyvl and adjusting settings if needed.
After uploading, confirm that the model’s position in Swyvl matches the expected WGS84 coordinates. For the sample dataset, this should be close to 49.03, 18.29. If it’s off, double-check the coordinate system settings in RealityCapture.
By following this process, you’ll successfully create a georeferenced 3D model from the GCP Drone Sample Dataset using RealityCapture and export it as Cesium 3D Tiles for use in Swyvl.
For further troubleshooting, refer to RealityCapture’s documentation or Swyvl support resources.
Get started with a free trial today or schedule a demo to discover how you can be using Swyvl in your workflows.