Skip to main content

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

  1. Create reduced versions of your .ply file (or use an .lcc file with built-in LODs)
  2. Generate LOD structure: splat-transform [files] -l [level] output/lod-meta.json
  3. Zip and upload to Arrival.Space
  4. 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.zip as "+ 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. 0 represents 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:

  1. Generate a low-resolution version of your splat.
  2. Upload a low-resolution version of your splat (approx. 1-2 million splats) as a separate entity (preferably in a separate space)
  3. Use the "Generate Collision" button on that entity to create the collision mesh.
  4. Download or locate the generated collision file.
  5. Upload this collision file to your LOD entity.

More