Hello guys, I posted this at the feedback website, if you have tried making a large world, you know how hard it is with Unity today:
https://feedback.unity3d.com/suggestions/native-world-shifting-floating-origin-to-overcome-problems-due-to-7-digit-limitation-for-floats-on-transforms
I’m trying for years (!) to see if this works, but it is still hard, there is no solution for this problem… In details:
I’m trying to make a driving simulator with large routes (20km+), and this is almost impossible in Unity right now. Tiling, loading and unloading scenes work really well (async), but…
We need a native origin shifter feature to move everything keeping the camera at 0,0,0 when the player moves far than 999 units! (or 9999 in some cases). This is because the floating point used has only 7 digits. After 999 units (1000 to 9999) we get only three decimal digits… Then the camera shakes, shadow blinks, smaller objects appear out of place… That’s so bad
In this video I explain all the problems, showing a sample of it working in a game (not mine) made with Unreal Engine:
The game shown in this video is Fernbus Simulator from TML Studios. I could not find any example of a game like this made with Unity yet, all mobile games have smaller static scenes with boring routes, or divided with loading screen between scenes (which I do not want and I will not make, that’s not natural). I want making some real routes from Brazil someday and they must be large, with real scale…
I heard that 64-bit float is not the right thing to do due to performance problems. But we need at least some API to move everything in an optimized way, where sound and other engine features continue working, like the new Navmesh… It’s dynamic but does not work if we move the world with moving agents. I’m almost giving up after some years trying to do this since Unity 3.x, but I don’t want switching engine just because of this little step… I spent many years learning Unity as an indie, I like its interface, features, services, the company vision etc…
Is it really almost impossible making open world in this engine?! What would you recommend?
I’m using a floating origin like this, with some optimizations:
http://wiki.unity3d.com/index.php?title=Floating_Origin
In essence: we should not rely on global world coordinates, we should have an API to move the entire world seamlessly, where everything continues working (light, audio, physics, navmesh, etc). I think that it is not that hard making this in Unity, since floating origin almost does it. Almost…
Without this it is almost impossible making an open world game with Unity, at least a decent one, without many limitations on other features (be it on audio, physics or navmesh, for example…).
If you have any information about this feature, or other things that I could try, please send me an e-mail:
marcos@viamep.com
marquinhosxp@gmail.com
My game, made with Unity (beta, where the problem exists): https://play.google.com/store/apps/details?id=com.viamep.pbsu
I love Unity for everything that it has and also I am a Plus subscriber, but this issue is almost killing my project… There are many feature requests related to 64-bit floating point for transforms or origin shifting, but no official position from the devs yet… For years…
Please if you can fix this huge problem, or at least give us some information on how to handle these large maps! The floating origin available at wiki is not perfect.