I don’t have an issue with different programs having different conventions for axes. I’m used to that from years of using various DCCs. But one thing I find really odd is how the z “forward” is flipped for 3D asset space. And as I consume various tutorials, I see that I’m not the only one confused by this. Some people rotate their assets to faces -z, and others keep them facing +z.
I’ve been rotating my characters to face -z because that’s Godot’s convention, and I haven’t had to do any funny business with my movement vectors.
But then I found this in the documentation, where it states:
The convention for 3D assets is to face the opposite direction as the camera, so that characters and other assets are facing the camera by default. This convention is extremely common in 3D modeling applications, and is codified in glTF as part of the glTF 2.0 specification. This means that for oriented 3D assets (such as characters), the +Z axis is the direction of the front, so -Z is the rear, +X is the left side, and -X is the right side for a 3D asset. In Blender, this means that +Y is rear and -Y is front for an asset.
The Y-up right-handed coordinate system with LUF (Left-Up-Forward) are the de facto standards. This isn’t necessarily for mathematical reasons, but simply because that is how 3D assets are commercially traded.
Those are formats. But I see what you’ve done here. It’s a logical fallacy called Moving the Goalposts. When you’re original argument of Unreal is doing it in Fortnite didn’t work, you came up with a different reason and hoped we wouldn’t notice.
FBX sometimes uses LUF, but not always. glTF does use LUF. Collada does not have a set codification it’s just an XML export format. USD uses right-handed coordinate system with -Z as forward. Big swing and a miss there. Also, OBJ which you did not mention also does not have a standard.
Try shifting those goalposts again. Maybe you’ll have better luck next time!
I think your expertise in this subject matter is pretty suspect at this point. You’re gonna have to provide some links at this point. Not saying you’re wrong mind you, just that your approach to this discussion has made you untrustworthy @user151.
BTW, remember in reply number 2 to this thread when I told you that you were in the wrong place and gave you a link to file this feature request if you were serious?
While DCC tools like Blender, 3ds Max, Maya, and Houdini have different internal coordinate systems, they typically export using the Y-up, right-handed, LUF convention. This is a de facto standard regardless of the file format, and it’s even explicitly defined in the glTF specification. Since game engines are on the receiving end of these exported files, following this convention is essential. Although DCC tools and game engines might seem similar, they serve completely different purposes: one is for creating 3D models, while the other is for utilizing them.
The math is taught right handed thats why. The LUF system is a right handed coordinate system.
I used to use C++ for graphics and the matrices were often [ R, U, F, P ] or the transpose, (depending on which graphics library, DirectX or OpenGL)
Both libraries use the left handed coordinates internally and thats because the normalized device coordinates are the legacy coordinates from the early days when the screen was scanned in from top left to bottom right.
Interestingly, Godot also now uses the reverse Z buffer algorithm for the shaders.
A point made below is that you can use your own coordinates as long as you convert back to the standard at the end of the pipeline.