游戲中到底是Z軸朝上還是Y軸朝上?
在談到游戲世界中的坐標軸時,我們經常會看到這樣的爭論。
“游戲中Y軸是向上的好么?這你都不知道?”
“不對,空間直角坐標系不就是Z軸向上的么?”
“拜托,請搞清楚坐標系再來討論好么?”.....
對于長期接觸空間直角坐標系(Z軸向上)的我也存在著同樣的困惑,左右手坐標系已經夠讓人頭大了,為什么連哪個軸向上都不能統(tǒng)一一下?而后當我試圖通過搜索引擎尋找答案時,發(fā)現這個問題確實有不少人在討論,也終于搞清楚了其中的緣由。


故事可能要從著名的三維建模軟件3DS Max說起。3DS Max是公司AutoDesk第一款建模軟件,它于1990年發(fā)布,主要用于設計和建筑領域。

在建筑學中,通常要先從平面圖開始設計,所以先在2D網格上繪制X軸和Y軸,隨后在將其拉伸成3D模型。很自然的,他們將下一個軸設置向上,即在3DMAX里面向上的便是Z軸(Z-Up)。這種思路與我們在學校時第一次從平面幾何踏入空間幾何的想法完全契合。

而在1998年,另一款著名的建模軟件——Maya誕生了。Maya一開始主要作為動畫軟件系統(tǒng)發(fā)行,廣泛用于動畫電影當中。


其實,造成這種差異的根本原因在于你是在屏幕空間中思考還是在世界空間中進行思考。
在屏幕空間中,給定X和Y的屏幕坐標,將Z作為深度可以方便的處理遮擋問題(即Y-Up)。許多渲染技術(DX、OpenGL)都使用“ Z緩沖區(qū)”之類的名稱的來處理屏幕空間渲染(三維空間的渲染最后還是會輸出到屏幕空間)。很明顯,在二維環(huán)境中,Y軸向上的坐標系更有意義一些。

然而在世界空間中,我們通常希望像現實一樣構建三維的世界。正常的三維空間示意圖都將第三個坐標視為垂直方向的(即Z-Up)。要在世界空間中定義一個矩形,則要給出其長、寬、高。如果將Y視為垂直方向,那么就會陷入了一種不符合常識的情況,與我們多年來接觸的笛卡爾坐標系相悖。

當你仔細調查一下目前流行的軟件時,你會發(fā)現不同的軟件其坐標系默認都是不一樣的。除了前面提到的兩款三維建模軟件,另外兩款著名的游戲引擎Unity與Unreal也有著不同的坐標系。受到歷史因素的影響,Unreal誕生時3DS Max是當時大多數開發(fā)人員選擇的建模工具包(Maya還沒有誕生),所以采用了Z軸向上的左手系坐標。而Unity3D在2000以后才正式發(fā)布,采用的則是Y軸朝上左手坐標系。

由于標準的不同,導致我們在使用不同游戲引擎以及不同建模軟件交互時需要手動處理坐標系的轉換。而對于那些只接觸過部分軟件的人往往會保留“Z軸向上”或者“Y軸的向上”的固有印象,從而造成了前面提到的爭論現象。無論哪種坐標系,都有其一定的道理,我們理解其中的緣由并能靈活的運用即可。
最后,再幫大家復習一下左手坐標系和右手坐標系(揮動雙手的同時不妨點個贊支持一下)。

?———— ?往期推薦文章??————?
使用虛幻引擎4年,我想再談談他的網絡架構
你有哪些“相見恨晚”的UE4學習資料?
網絡同步在游戲歷史中的發(fā)展變化
如何學習大型項目的源碼?
為什么說“角色移動”看上去很簡單,卻需要極高的技術力與細節(jié)成本?
游戲開發(fā)那些事
我是Jerish,網易游戲客戶端開發(fā)工程師,
公眾號會定期輸出技術干貨和游戲科普的文章
回復"gamebook",獲取游戲開發(fā)書籍
回復"C++面試",獲取C++/游戲面試經驗
回復"操作系統(tǒng)",獲取操作系統(tǒng)經典書籍
游戲開發(fā)交流群(875867499)
