游戏中到底是Z轴朝上还是Y轴朝上?

游戏开发那些事

共 1804字,需浏览 4分钟

 ·

2020-12-12 16:43

这是【游戏开发那些事】的第42篇原创

点击关注加“星标”获取更多游戏开发知识与科普文章


在谈到游戏世界中的坐标轴时,我们经常会看到这样的争论。

戏中Y轴是向上的好么?这你都不知道?

“不对,空间直角坐标系不就是Z轴向上的么?”

“拜托,请搞清楚坐标系再来讨论好么?”.....



对于长期空间直角坐标系(Z轴向上)的我也存在着同样的困惑,左右手坐标系已经够让人头大了,为什么连哪个轴向上都不能统一一下?而后当我试图通过搜索引擎寻找答案时,发现这个问题确实有不少人在讨论,也终于搞清楚了其中的缘由。



故事可能要从著名的三维建模软件3DS Max说起。3DS Max是公司AutoDesk第一款建模软件,它于1990年发布,主要用于设计和建筑领域。

在建筑学中,通常要先从平面图开始设计,所以先在2D网格上绘制X轴和Y轴,随后在将其拉伸成3D模型。很自然的,他们将下一个轴设置向上,即在3DMAX里面向上的便是Z轴Z-Up)。这种思路与我们在学校时第一次从平面几何踏入空间几何的想法完全契合。


而在1998年,另一款著名的建模软件——
Maya诞生了。Maya一开始主要作为动画软件系统发行,广泛用于动画电影当中。

与建筑领域相似,当时的动画通常也是2D的,即正面看Y轴向上,X轴向右。不过早期的迪士尼和其他动画作品为了能在不改变2D画面效果的条件下增加维度(例如2D平台游戏),保留了X轴和Y轴的朝向,新增的Z轴便成为了深度。当然,这里也有一定程度的历史原因——由于Maya一开始为SGI的(硅谷图形公司Silicon Graphics, Inc.)硬件开发,SGI早期提供的渲染引擎就是Y轴向上的,所以Maya就跟随SGI的标准制定坐标系(Y-Up)。



其实,造成这种差异的根本原因在于你是在屏幕空间中思考还是在世界空间中进行思考。

在屏幕空间中,给定X和Y的屏幕坐标,将Z作为深度可以方便的处理遮挡问题(即Y-Up)。许多渲染技术(DX、OpenGL)都使用“ Z缓冲区”之类的名称的来处理屏幕空间渲染(三维空间的渲染最后还是会输出到屏幕空间)。很明显,在二维环境中,Y轴向上的坐标系更有意义一些。




然而在世界空间中,我们通常希望像现实一样构建三维的世界。正常的三维空间示意图都将第三个坐标视为垂直方向的(即Z-Up)。要在世界空间中定义一个矩形,则要给出其长、宽、高。如果将Y视为垂直方向,那么就会陷入了一种不符合常识的情况,与我们多年来接触的笛卡尔坐标系相悖。



当你仔细调查一下目前流行的软件时,你会发现不同的软件其坐标系默认都是不一样的。除了前面提到的两款三维建模软件,另外两款著名的游戏引擎Unity与Unreal也有着不同的坐标系。受到历史因素的影响Unreal诞生时3DS Max是当时大多数开发人员选择的建模工具包(Maya还没有诞生),所以采用了Z轴向上的左手系坐标。而Unity3D在2000以后才正式发布,采用的则是Y轴朝上左手坐标系。


由于标准的不同,导致我们在使用不同游戏引擎以及不同建模软件交互时需要手动处理坐标系的转换。而对于那些只接触过部分软件的人往往会保留“Z轴向上”或者“Y轴的向上”的固有印象,从而造成了前面提到的争论现象。无论哪种坐标系,都有其一定的道理,我们理解其中的缘由并能灵活的运用即可。


最后,再帮大家复习一下左手坐标系和右手坐标系(挥动双手的同时不妨点个赞支持一下)。


 ————  往期推荐文章  ———— 



使用虚幻引擎4年,我想再谈谈他的网络架构

你有哪些“相见恨晚”的UE4学习资料?

史上最全的C++/游戏开发面试问题总结

网络同步在游戏历史中的发展变化

游戏中的角色是如何“动”起来的?

如何学习大型项目的源码?

为什么说“角色移动”看上去很简单,却需要极高的技术力与细节成本?



游戏开发那些事


我是Jerish,网易游戏客户端开发工程师,

公众号会定期输出技术干货和游戏科普的文章

回复"gamebook",获取游戏开发书籍

回复"C++面试",获取C++/游戏面试经验

回复"操作系统",获取操作系统经典书籍

游戏开发交流群(875867499)


浏览 169
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报