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
- 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. - Make the world edge a power-of-two multiple of the
leaf.
World Extentis a cube half-extent centred on the world origin (the manager actor's location is ignored). WithWorld Extent64 andMin Voxel Size0.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
- Cost trends volumetric. In a world a few dozen leaves across nothing is far from geometry in leaves, so the octree cannot stay coarse anywhere; node count grew 7.3-7.9× per halving of the leaf on the test tank. The voxel budget (64 M cells per volume) still applies.
- Unreachable goals are cheap. Free-space components are labelled at build time, so a goal behind sealed stone fails before any search runs.
- Bakes land in the plugin folder.
Bake to Assetwrites under/LCMNav3D/BakedData/even for a map in your project. Remove test bakes before packaging; the manager logs a warning when it bakes a map that lives outside the plugin. - Infinite mode is not for this. Its per-chunk budget
forces
Chunk Size ≤ 400 × Min Voxel Size; the panel says so if you try.