Does the paged scenemanager "moves" the center position ?

jokoon

01-09-2013 22:04:23

I want to make a very large world in the hundreds or thousands of kilometers. I intend to store the level in a procedural fashion as a form of compression, so level making is not a true problem.

In what I understand, relative space means that you move the center vector to avoid the FPU limitation, and then moves back the whole scene.

Quotes from http://floatingorigin.com/mirror/continuous-world.htm

From the beginning, the engineering team knew that the continuous world was going to significantly affect the engine and content design, and the core issue was numerical stability. Imagine two characters walking in formation two meters apart heading east away from the origin. At some point, the distance from each other is overwhelmed by the distance from the origin, and the characters will appear to be “at the same location”.

With floating point, the further you get from the origin, the more precision you lose, which can cause all manner of nasty problems. Things don’t sort right, cracks appear between adjacent meshes, space starts to quantize, and cats and dogs start living together. Dungeon Siege uses the FPU in single precision mode for the obvious performance benefits, and to match the native precision of the video hardware. However, even if we increased the precision, it ultimately could never solve the problem because the world was planned to be, and ended up, incredibly large.

The precision problem meant it would not be possible to have a unified world coordinate space like most other games. Instead, the solution was to segment the continuous world into a set of independent coordinate spaces, and switch among them periodically to reset the precision. A variety of ideas were tried out within these constraints, and we eventually settled on a variation of a standard portal system.

Our solution consists of a relational node-based coordinate system, in which each chunk of geometry (Siege Node) has its own coordinate space, and is linked spatially to neighboring geometry via the doors it shares in common with those neighbors. The arrangement of nodes connected by doors forms a continuous graph that represents the entire world map. This node system evolved over time from its original goal of maintaining FPU precision to become the primary method of efficiently subdividing space, and the root of countless optimizations.


I asked on #gamedev, I got the answer that dividing the world into chunks would be enough, but I don't know if the paged scenemanager also "resets the zero".

My question: I'm not sure is the paged scenemanager just loads/unloads chunks of geometry to free ram, but keeps the root scenenode at the same position, OR if it also moves the center vector to avoid the FPU precision loss.

Do I understand the problem right ? Is that how GTA san andreas or WoW deal with large levels, and can it be reproduced with the right Scenemanager ? I'm not even sure if the PCZ with the right parameters can work for what I want.