Skip to content

Distances and screen sizes

Unreal switches the LODs of static and skeletal meshes by screen size: how large the mesh’s bounding sphere is on screen. Each LOD has a screen size, and a LOD takes over when the mesh’s screen size drops below it. The same screen size is a different distance for every mesh and every camera: a pebble reaches a screen size of 0.1 a few metres away, a building hundreds of metres away. And a VR headset with a wide field of view sees the same mesh smaller than a TV does.

LOD Tailor lets you think in metres instead. A preset says “LOD 1 at 15 m”, and LOD Tailor works out the screen size that makes each mesh switch at 15 m, for its size and for each target’s camera.

LOD Tailor uses the same calculation as Unreal’s ComputeBoundsScreenSize, for a camera with a horizontal field of view:

screen multiple = 0.5 × max(1, aspect ratio) / tan(field of view / 2)
screen size = 2 × screen multiple × bounds radius (cm) / (distance (m) × 100)
distance (m) = 2 × screen multiple × bounds radius (cm) / screen size / 100
  • Bounds radius is the radius of the mesh’s bounding sphere at scale 1, in centimetres.
  • Field of view is horizontal, in degrees. For VR headsets use the field of view and aspect ratio of one eye.
  • An aspect ratio below 1 (a screen taller than wide, or a VR eye) counts as 1.
  • Distances below 1 cm count as 1 cm.

Preset distances are for a mesh at scale 1 on the reference camera: by default 90° at an aspect ratio of 1.7778 (16:9), set with Reference Field Of View and Reference Aspect Ratio in the settings. Its screen multiple is 0.5 × 1.7778 / tan(45°) = 0.8889.

The screen sizes for the reference camera become the mesh’s default screen sizes. Every platform without its own values uses them.

Static meshes can instead let Unreal compute their screen sizes (Let Unreal compute screen sizes in the recipe); then the distances are not used. Skeletal meshes have no automatic screen sizes, so they always get the screen sizes from the distances.

Every enabled target with a platform key gets its own screen sizes, written as per-platform overrides:

target distance = preset distance × distance scale of the target
screen size = formula above, with the target's field of view and aspect ratio

So a target switches at its distance scale times the preset distance, measured on its own camera. A target without a platform key uses the default screen sizes; its distance scale doesn’t change anything, and on its own camera the switch distance is whatever the default screen sizes give.

  • LOD 0 gets a screen size of 1.0, or LOD 1’s screen size + 0.01 when that is larger. Large meshes close to the camera have screen sizes above 1.
  • Every LOD’s screen size is at least 0.0001 smaller than the LOD before it, and at least 0.00001.

A mesh with a bounds radius of 100 cm (1 m) gets the Standard preset, LOD 1 at 15 m, with the default targets:

Camera Field of view Aspect ratio Screen multiple Distance used LOD 1 screen size
Reference (default screen size) 90° 1.7778 0.8889 15 m 0.1185
Steam Deck (Linux) 90° 1.6 0.8 15 × 0.8 = 12 m 0.1333
Meta Quest (Android) 104° 0.95 (counts as 1) 0.3906 15 × 0.6 = 9 m 0.0868

The steps for Meta Quest:

screen multiple = 0.5 × 1 / tan(52°) = 0.5 / 1.2799 = 0.3906
screen size = 2 × 0.3906 × 100 / (9 × 100) = 78.13 / 900 = 0.0868

And back, on the Meta Quest camera: 2 × 0.3906 × 100 / 0.0868 / 100 = 9 m. In the headset, LOD 1 takes over at 9 m.

PC and Switch 2 have no platform key by default, so they use the default screen size 0.1185. On their 90°, 16:9 cameras that is 15 m: the Switch 2’s distance scale of 0.7 only takes effect once it has a key.

LOD 0 gets max(1.0, 0.1185 + 0.01) = 1.0. A building with a bounds radius of 1,639 cm would get a LOD 1 screen size of 1.7778 × 1639 / 1500 = 1.94 at 15 m, and LOD 0 1.95.

The panel and the reports convert screen sizes back to distances with the same formula:

  • The LOD 1 at column of the mesh table: on the selected target’s camera with the screen size that applies to the target (its key, then its platform group, then the default), or on the reference camera with the default screen size for All targets.
  • The LOD chain table of the mesh details: one distance per LOD and target.
  • The LOD1 at columns of the HTML report and the LOD1 distance (m) columns of the CSV report.
  • screen_size_to_distance and distance_to_screen_size in Python.

This works for any mesh, also for screen sizes that were set by hand or computed by Unreal, so you can see where an existing mesh switches on each device.

All distances are for the mesh at scale 1. The bounding sphere grows with the actor’s scale, so an actor at scale 2 switches at twice the distance and one at scale 0.5 at half the distance, as in Unreal.

A wider field of view makes everything smaller on screen, so a mesh drops below a LOD’s screen size closer to the camera. With only the default screen sizes, a VR headset with a 104° field of view per eye switches LODs much closer to the camera than a 90° screen: the default LOD 1 screen size of 0.1185 from the example above is reached at 2 × 0.3906 × 100 / 0.1185 / 100 = 6.6 m on the Meta Quest camera. Because each target with a platform key gets screen sizes from its own camera, LOD 1 takes over at 9 m in the headset instead: the preset’s 15 m times Meta Quest’s distance scale of 0.6.