// BLOG

Building a Multi-World Coordinate System in Unreal Engine

Building a Multi-World Coordinate System in Unreal Engine

The Solvren setting contains four planets and nine moons. Putting those objects into one ordinary Unreal coordinate space would force a choice between astronomical scale and useful local precision. Ashes of the Unbound needs both.

The solution was not to make the Unreal world infinitely large. It was to admit that “the world” is only one coordinate view, then build explicit frames above and below it.

Local rendering and durable coordinates

A character walking through a factory needs centimetre-scale precision. A moon orbiting a planet needs placement over a vastly larger range. Those requirements should not be served by the same raw vector.

The runtime world remains a local, high-precision presentation frame around the player. Durable celestial placement lives in a larger representation. Conversion between them happens deliberately, with the current origin and owning body as inputs.

This is the core of floating-origin work, but the important part for multiplayer is that the origin can be client-specific. Two players may be near different locations and render their surroundings around different local origins while the server retains one authoritative description of where both are in the system.

Rebasing is therefore not movement in the game world. It is a change in how a client represents the same durable position.

Body-fixed sectors

On 1 May, body-fixed sectors became the next layer of that model.

A sector attached to a moon should move and rotate with the moon without making every object inside it recompute its astronomical position as an unrelated free body. Local structures can be expressed in the body’s frame. The body can then be placed in the larger celestial hierarchy.

This creates a coordinate namespace: a local position only has meaning together with the body and sector that own it. X=100 is not a location in Solvren. It is a component of a location within a named frame.

The same design helps persistence. A factory anchored to Selene should be saved as something on Selene, not as a huge absolute vector that happens to coincide with Selene at one instant.

Converting vectors between frames

Coordinate work often begins with positions and then fails on everything else.

Directions, velocities, rotations and accelerations cross the same frames. A saved movement vector may be tangent to one moon’s surface. Applying that numeric vector after restoring near another body can point somewhere entirely different. A camera direction stored in the current client frame may include the effect of a rebase. A replicated impulse needs a defined source and destination basis.

The project therefore needed explicit conversions for more than points. Later restore bugs would prove why this matters: the player could appear at the correct place while the movement correction attached to that placement was still expressed in the wrong frame.

Controlling subsystem activation

Another architectural consequence appeared here. Unreal world subsystems are created for more runtime contexts than the authoritative game server. Clients, editor preview worlds and test worlds may all instantiate them.

That makes initialization policy part of the design. A subsystem which assumes its existence implies authority can create duplicate celestial state, execute server-only restoration or capture evidence in the wrong world. It must inspect the world and net mode, then either become active for that context or remain deliberately inert.

This would matter again during dedicated restoration and evidence automation.

The celestial transform hierarchy

At this stage it was tempting to view the coordinate stack as engine plumbing. In practice, it directly enables the game.

Factories can remain attached to a world. Players can travel without abandoning durable identity. A dedicated server can describe everyone in one system while clients preserve local precision. Celestial rendering can receive body-relative inputs rather than guess which origin a position came from.

The hierarchy is what allows a large world to contain small, reliable machines.

Next step: celestial lighting

Once Aetheria and Selene could exist coherently in the same celestial model, they also had to illuminate each other coherently. That required measured targets, self-shadowing receivers and lighting that remained stable through local rebases.

The next dispatch follows that work: Lighting One World With Another.