Converting Unreal Engine to Y-Up: PLEASE RECONSIDER!!!

Hi, I’ve just seen this tweet announcing that you plan to convert Unreal Engine to a Y-Up coordinate system. https://x.com/TimSweeneyEpic/status/1930678660098408669

This is genuinely the worst idea I have ever heard, and I hope that by posting in this place we can maybe get in some feedback before it is too late? I don’t know where else we can turn to about what you are proposing to do to the engine.

What’s wrong with Y-Up?

The main problem, of course, is that it does not make any intuitive sense. In a game engine, we almost always deal with 3d worlds that are based on a ground surface. It is perfectly intuitive to have X/Y for movement on the ground surface, and add a third height component to the end.

This used to be a breath of fresh air for those of us coming from Unity to finally be working in an engine where the coordinate system actually matched how we intuitively thought about the world geometry. By using the middle component for the height, you are turning everything on its head.

Y-Up is also terrible for gameplay code

Many games routinely need to do math in both 3 dimensions and 2d relative to the ground plane. Currently, this is trivial: drop the last dimension to go from 3d to 2d, expand with a 0 to go from 2d to 3d. With Y-Up, the middle coordinate becomes the height (???) so now we have to do weird shuffling like converting X and Y to (X, 0 , Y) to turn it into a 3d vector, or removing the middle element to turn it into a 2d one.

This is going to infect everything from vector literals, which currently make perfect intuitive sense as (X, Y, Height) to every single math function which now has to deal with the wrong coordinate being used.

The sheer scale of the effort required from all of us

This is not a change you can make isolated to the core engine. Every client project is now going to have to deal with the bugs introduced all over the place. No longer limited to the boundary on import from a third party DCC, we can now have wrong coordinates everywhere! If you’re planning to somehow support both coordinate systems at the same time in the same engine, that is even worse, the incompatibilities will multiply unchecked. Should this piece of gameplay code be using Y-Up or Z-Up coordinates? Who knows?

You’re about to force all of your users through an insanely complicated migration process for no actual reason (if it even works at all) and finally end up with a worse, less intuitive engine.

I assume it is already too late to change this direction since it seems to be one of Tim Sweeney’s pet projects, but I had to at least make it known that you are doing something a large amount of your users don’t want. Maybe others can join in the discussion with their own experiences to add more weight to this post. Thanks!

My biggest fear is that this moves the complication of dealing with disparate coordinate systems from existing almost purely at the import pipeline level into actual gameplay code which seems like a massive no-no. Furthermore it may remove complications for the most common external DCC tools, but there are still many tools it solves nothing for and many of the same transforms will still need to be maintained at the pipeline level.

More than anything, though, is the sheer potential for bugs here, especially with a signal that this may start in some future 5.x version. It’s pretty alarming that such a massive source for bugs and break in unreal’s APIs would be announced as a tweet with no care for how it will affect your external customers. As much as it might help with issues you have on Fortnite (as many recent decisions seem to be driven by) the lack of care for not breaking “userland” has only seemed to have accelerated in recent versions and this would only make that worse.

Hey folks,

thanks a lot for your feedback on this topic.

We’re aware that there’s not a lot of information on how this will impact UE at the moment.

This decision was made with a focus on UEFN and has been discussed internally quite a lot.

Currently this is primarily a change and decision for UEFN and we’re aware that there’s not much information on how this will specifically affect UE and what the timeline of these changes will be.

It will likely still take years to make it into UE and we will make sure to have a very solid plan for how it’s gonna be integrated into the Engine and how migration of both Engine code and custom gameplay code should work.

I’ve forwarded your feedback to the product team and they will definitely take your considerations into account when it comes to the UE specific changes.

Kind Regards,

Sebastian