How to Create LOD (Level of Detail) for Your Splat
This guide explains how to create a LOD of your Splat using splat-transform and upload it to Arrival.Space
TL;DR
- Create reduced versions of your
.plyfile (or use an.lccfile with built-in LODs) - Generate LOD structure:
splat-transform [files] -l [level] output/lod-meta.json - Zip and upload to Arrival.Space
- Tune LOD settings via the "Edit" button in the preset selector
Install splat-transform
The installation guide can be found in section Splat Transform Guide.
1. Prepare Your LOD Files
Option A: Using an .lcc file
If you have an .lcc file, it usually already contains all LOD levels built-in. You can skip the manual reduction steps below and proceed directly to generating the output.
Option B: Using .ply files
Start with your highest-resolution .ply file.
Then create reduced versions — ideally each one about 50% smaller than the previous.
Example for an 8 GB source:
my_splat_file.ply (8 GB) → LOD 0
my_splat_file_1.ply (4 GB) → LOD 1
my_splat_file_2.ply (2 GB) → LOD 2
my_splat_file_3.ply (1 GB) → LOD 3
my_splat_file_4.ply (512 MB) → LOD 4
my_splat_file_5.ply (256 MB) → LOD 5
2. Generate the LOD Structure Using splat-transform
Create a target folder for the final LOD output:
mkdir LOD_OUT
For .lcc files:
splat-transform input.lcc LOD_OUT/lod-meta.json
For multiple .ply files:
splat-transform \
my_splat_file.ply -l 0 \
my_splat_file_1.ply -l 1 \
my_splat_file_2.ply -l 2 \
my_splat_file_3.ply -l 3 \
my_splat_file_4.ply -l 4 \
my_splat_file_5.ply -l 5 \
LOD_OUT/lod-meta.json
This writes a lod-meta.json file and the corresponding LOD chunks into the LOD_OUT/ directory.
3. Upload to Arrival Space
Zip the LOD folder:
zip -r LOD_OUT.zip LOD_OUT/
- Upload
LOD_OUT.zipas "+ Content" in Arrival Space - (Recommended) Upload into a new space to keep everything clean and organized
4. Tuning LOD Settings
Tune the LOD settings in Arrival.Space by pressing the "Edit" button in the LOD preset selector dropdown. You can also access the LOD settings per entity via Content > Splat LOD> Edit JSON
You can define your own presets and set the defaults for mobile defaultMobilePreset and desktop defaultDesktopPreset.
range: Defines the start and end LOD levels to use.0represents the highest detail level.lodDistances: Defines the distance thresholds at which the viewer switches to the next LOD level.enableDebugUI: Shows the debug UI to tune Levels
A typical LOD settings configuration looks like this:
"lodSettings": {
"presets": {
"desktop-max": {
"range": [0, 6],
"lodDistances": [10, 20, 40, 80, 120, 150, 200]
},
"desktop": {
"range": [0, 6],
"lodDistances": [5, 10, 25, 50, 65, 90, 150]
},
"mobile-max": {
"range": [1, 6],
"lodDistances": [5, 7, 12, 25, 75, 120, 200]
},
"mobile": {
"range": [2, 6],
"lodDistances": [2, 4, 6, 10, 75, 120, 200]
}
},
"defaultDesktopPreset": "desktop",
"defaultMobilePreset": "mobile",
"lodUpdateDistance": 0.5,
"lodUnderfillLimit": 5,
"lodUpdateAngle": 90,
"lodBehindPenalty": 5,
"radialSorting": true,
"enableDebugUI": true
}
5. Adding Collision
Currently, it is not possible to generate collision directly from the LOD structure itself.
Workaround:
- Generate a low-resolution version of your splat.
- Upload a low-resolution version of your splat (approx. 1-2 million splats) as a separate entity (preferably in a separate space)
- Use the "Generate Collision" button on that entity to create the collision mesh.
- Download or locate the generated collision file.
- Upload this collision file to your LOD entity.
More
- For more information about
splat-transform, visit the SplatTransform CLI Tool documentation