The main thing is, at somewhere past 10,000 units, floating point accuracy drops to a point where dynamic objects begin to "jitter".
So if the player never leaves 0,0,0 and you move everything else around him, as the dynamic objects move closer to 0,0,0 they get their accuracy back and stop jittering.
For static objects it doesn't matter because they are just placed where they are and nothing interacts with their position to cause the decimal portion of their position to fluctuate.
BlitzTerrain will solve your extra large terrain issues, but for other objects you'll still have the same problems.
Quote: "Surely that would mean updating many sets of variables (with potential accuracy problems) instead of one? How would having the point of origin 100,000 units from the player be any different to having the player 100,000 units from the point of origin?"
I think you misinterpreted something. The object is to make sure the player is never more than 10,000 units away from 0,0,0. As they approach 10,000 in any direction you move everything including the player 20,000 units in the opposite direction which keeps them inside that 10,000 x 10,000 area as they continue moving forward.
[example]
- The player is running towards 0,0,10000
- When he reaches 0,0,10000 you subtract 20000 from the Z position of everything and move it there
- Now the player is at 0,0,-10000 still running in the same direction with all the same objects around him
[/example]
For accurate object placement, you would probably have to devise a system where you break up your world into sectors. You would only load the objects that are in the immediate sector, and the ones around it. Those objects would have position data within the 10,000 x 10,000 sector space (to maintain their accuracy) and would be positioned relative to the current sector that the player is in.