LCM Nav3D Free demo Get it on Fab

Tutorial 12 - Small worlds (centimetre-scale navigation)

TL;DR: the plugin voxelizes in Unreal units (1 uu = 1 cm). A 120 × 70 × 40 cm aquarium with 5 cm cave openings navigates at a 1 cm leaf either way you build it: at 100:1 on any release, or at 1:1 with the World Scale profile set to Small. Both were measured on the same test tank.

The two rules that are not obvious

  1. Set half the leaf you want. The octree halves a half-extent until it drops below Min Voxel Size, so the finest leaf lands at 2-4× the value. For a 1 cm leaf set 0.5.
  2. Make the world edge a power-of-two multiple of the leaf. World Extent is a cube half-extent centred on the world origin (the manager actor's location is ignored). With World Extent 64 and Min Voxel Size 0.5 the halving chain lands exactly on 1 cm; with 60 it lands on 0.94.

Option A - build at 100:1 (works on every release)

Setting Real In Unreal at 100:1
Tank 120 × 70 × 40 cm 12000 × 7000 × 4000 uu
Manager: World Extent - 6400 (finite)
Manager: Min Voxel Size - 50
Clearance Padding fish half-width half-width × 100
Fish speed 6 cm/s 600 uu/s (the shipped default)

Measured: a 5 cm cave mouth resolved and routed, a plugged cave correctly unreachable, an agent crossing the tank in 3 s.

Option B - build at 1:1 with World Scale = Small

Set World Scale to Small, World Extent to 64, Min Voxel Size to 0.5. Clearance Padding is derived for you (half the leaf); the start-rescue distances and the large-node cost threshold scale with the leaf as well. The Details panel will note that the world is only 128 leaves across - that is expected for a small world, not a fault. The line-of-sight sampler, the neighbour probe and the route executor's sampling floors follow the leaf on their own, on every profile.

Agents follow too. The Fly To task (BT and StateTree) and the flight movement component carry an Agent Scale that defaults to 0 = follow the manager's World Scale, so under Small a fish authored with the shipped drone values (600 cm/s, 100 cm acceptance, 120 cm agent size) flies at 6 cm/s with a 1 cm acceptance and a 1.2 cm agent size, along the same path shape, in the same time. Scale the pawn actor itself (mesh and collision) to match - the plugin scales motion, not geometry. Set Agent Scale explicitly on a task when an agent should not follow the world (a large creature in a small world, or the reverse).

One engine-side limit remains for very small bodies: Unreal's swept movement pulls every blocking hit back by an absolute 0.1-1 cm and treats gaps inside the physics contact offset (2 cm minimum) as an initial overlap, so a body whose collision is itself a centimetre or less meets a wall under a different regime than its metre-scale twin. Measured with the bird pawn at agent scale 0.01: the flight is identical to the 100:1 flight until the first wall contact (and, on this tank, arrives sooner after it). Bodies that keep clear of walls, such as the navigator drones, are exact end to end. If wall-hugging behaviour must match a metre-scale reference exactly, build at 10:1 (agent scale 0.1), where the engine tolerances are still small against the body.

Stones with caves: collision, not the mesh

Solidity is read from collision. Set stone meshes to Use Complex Collision As Simple; a convex hull or box spanning a cave mouth is solid as far as the plugin is concerned, however fine the leaf. (Measured: the same tank with the stones' collision removed routes straight through them; with complex-as-simple it is byte-identical to the baseline.)

What to expect at small scale