切換
舊版
前往
大廳
主題 達人專欄

[遊戲閒聊] 偽3D,那個曾經改變世界的圖學技術

靈巧 | 2020-06-15 00:36:55 | 巴幣 1322 | 人氣 3167


在很久之前,絕大部分的遊戲都還只有2D,連3D的基本概念都沒有,只有少數稀有的遊戲屬於3D作品。不過因為當時技術限制的關係,那些3D遊戲並沒什麼好成果,除了畫面糟糕之外,效能也是一等一的差。

另外也由於硬體設備不夠強力,家用機基本不支持3D,所以3D遊戲一直是一塊未被開發的領域。畢竟當時人們都在玩家用機,在PC上開發3D遊戲實在是沒什麼賺頭,所以沒什麼廠商想參一腳。

直到1992年,ID software運用前所未見的圖學技術帶來了德軍總部3D以及之後毀滅戰士3D,遊戲業才算正式進入了所謂的3D領域。也從這時開始,PC擁有了與家用機的一戰之力。

在之前的篇幅中,聊了許久的ID Software與他們家的遊戲,以及給世界帶來的影響力。而這次,我想來好好聊一下這個曾經讓世界為之瘋狂的偽3D技術。

其實現在就算不知道也沒差,因為真正的3D引擎滿街跑,這技術早就沒人用了,就當看個冷知識或興趣吧;我也只是覺得這技術很有趣,寫個樂子來著。


------光線投射演算


要講偽3D,就要先講ID software那款經典的德軍總部3D。

德軍總部3D的遊戲畫面看起來是這樣子的:

你會認為他是3D的對吧? 他有牆壁、移動有前後,這看起來就是3D阿! 但這其實是遊戲在騙你,他並不是一款3D遊戲,而是一款2D的上視角射擊遊戲。

怎麼說呢? 要知道,那時3D技術簡直弱爆了,要像德軍總部這麼流暢的移動根本是不可能的任務,所以這絕對不會是真正的3D技術。那若要做到3D,當然只能用2D的邏輯走邪魔歪道來騙你。

其實就像2D RPG,雖然視覺跟系統上看起來好像有高低差,但真的空間概念終究只有X軸與Y軸,那所謂的高低差只是系統上不讓你過去的障礙物而已。

▲這類2D RPG雖然有陡坡之類的讓你看起來好像有高低差。但實際上那只是在畫面上的X、Y軸位置不同而已,並不是真正多一Z軸有所謂的高度。

而這個很會騙的技術就是 RayCasting(光線投射演算法),其實RayCasting很早年就有了,但一直到了卡馬克手中開發優化,才正式被運用進了遊戲中。

RayCasting概念很簡單。就是從玩家的前方射出一條射線順時鐘掃描一遍,然後把掃描到的牆壁跟敵人運用演算法畫在螢幕上。遠一點就畫小一點,近一點就畫大一點,這就形成了一個完全不用3D模型,只靠圖片的大小跟位置的偽3D空間。

▲遊戲系統運算完全是2D(右側),而畫面呈現則是用演算法讓你看起來像3D(左側)

這讓遊戲分成了兩個部分,一個是遊戲系統、另一個則是畫面。任何子彈、敵人、碰撞都只是用2D運算(右側)。而畫面則透過另一個演算法呈現,兩者其實不相干。故在玩德軍總部3D時,其實就是在玩2D上視角的射擊遊戲。

▲德軍總部3D實際上的是一個2D上視角射擊(右側) ,但畫面呈現上則是偽3D(左側)

但這種算法有硬傷,因為RayCasting只有換算在畫面上的大小和位置,故牆壁都是等高的,且地面也只能是平坦的,並無法有高低變化,更不可能有樓層之分。另外最重要的一點就是,由於無時無刻都在射線掃描,故這個技術非常非常耗效能,德軍總部就已經很極限了。

而卡馬克在僅僅一年之後,就研發出新的技術超越了極限……

------二元空間分割


要講這技術,則必須帶到毀滅戰士3D。

毀滅戰士3D的畫面是這樣子的:

毀滅戰士3D的畫面比德軍總部3D還要豐富,有光影變化、有高低差、有斜面,甚至還有樓梯。這肯定是3D吧? 這怎麼看都是3D的阿! 你又被卡馬克騙了,他依然還是一款2D的作品,他還是沒有用到任何3D該有的玩意,只是這次他騙你騙得更兇、更誇張。

而這個騙更兇的技術就叫做:二元空間分割。他比前作德軍總部3D的RayCasting更加地有效率、彈性及變化性。並且這個技術改變了從此之後的遊戲跟電腦技術界。

二元空間分割技術比射線要複雜一些。當你設計毀滅戰士地圖的時候,你可以給每個部份設定"高度"參數,然後引擎會自動把地圖不斷分割直到引擎能接受的大小,再用二元樹的方式記錄。

▲毀滅戰士引擎把一張2D的地圖運用切割的方式切成小塊小塊的區域
▲然後把這些切碎的區塊資料用二元樹的方式連接起來,形成一個巨大的二元樹

之後,要呈現在畫面上時,二元樹先找到玩家所在的區塊和面向,然後將玩家面向的區域從二元樹中有相連的區域左到右開始畫。一塊一塊的將玩家視野中會看到的部份畫出來。

▲趟若這塊地圖被分割成以上細塊,玩家站在1的位置,系統就用二元樹找到玩家的區域節點,然後照順序將相鄰的節點從左至右一一畫出。

至於為什麼這樣行得通,這裡面的技術層面就比較複雜,我就不解釋了。(我才不會說其實是因為我也看不懂咧)

這技術就直接海放德軍總部了,德軍總部受限於他的RayCasting。牆壁只是2D地圖上的Pixel,這處理方式無法接受不同的數值,所以他的牆只能是等高的。而且因為RayCasting很耗效能,在運算上無法承受除了正方形以外的形狀,故德軍總部的牆面都只能是正方形。

但這個二元分割技術不再運用RayCasting,所以他有更多空間可以發揮,牆面不再是方形、遊戲也有高地差。因為他是一塊一塊處理的,地圖就能有不同的天花板和地板等等……直接讓畫面放飛自我。

但還是一樣,儘管畫面再怎麼像3D,他依然不是3D。你在視覺上看到的高低差,只是平面地圖上每塊紀錄的"高度"參數。他用二元運算方式先將看到的區塊畫出來,然後透過區塊上記錄的"高度"參數來決定在螢幕上要畫多高,而這就模擬出了高低差。

毀滅戰士3D的地圖運算還是使用2D的邏輯,所以他的地圖設計依然是平面的。因此在毀滅戰士的地圖中,你看不到任何的樓中樓,因為他的地圖就只是一張平面圖而已,平面圖是無法畫出樓中樓的。

▲每塊區域都有自己的"高度"參數,透過這個參數來決定他要在畫面上畫多高。
▲但對於電腦來說,他實際上處理的則是這張2D平面圖


而這也是為什麼原始的毀滅戰士3D無法往上或往下看的原因,並不是辦不到,而是因2D平面無法正常模擬向上看與向下看,所以若你往上或往下看,會因為他的2D運算導致畫面拉扯而看起來非常詭異,故Id software不讓玩家這麼做。

不過他厲害的一點是,因為他在地圖和敵人上加入了"高度"參數,也就模擬出了第3個軸向,因此地板和敵人會真的上升和下降。遊戲的攻擊判斷也會受到高度影響。在PVP時子彈是會飛越一個人頭上的,所以毀滅戰士3D的戰鬥系統有明確地模擬出3D邏輯。(喔!對了,單機時不會,因為單機時有自動瞄準讓你能直接打中高處或低處的怪)

由於毀滅戰士3D的地圖運用的是2D邏輯運算,但戰鬥系統是明確模擬出了3D概念,所以毀滅戰士3D有個非官方的稱呼,也就是所謂的2.5D。

▲如果開放向上或向下看,模擬的畫面會變得非常詭異,貼圖會有不正常的拉扯。
▲在PVP戰鬥中,遊戲有成功模擬出高度,所以玩家的子彈可以飛越頭頂。
▲但在單機遊戲中,為求玩家的操作便利,所以加入了自動瞄準讓你可以直接射到不同高度的敵人。

儘管這個偽3D技術還是運用騙人的方式讓你認為他是3D,但不得不說這真的非常驚豔。他視覺上看起來就像是真正的3D遊戲,但在背後實際上的運算卻跟2D上視角射擊遊戲幾乎一模一樣。

而這也是這遊戲為何會讓全球如同宗教狂熱一般熱愛的原因,因為當時硬體很弱,而這個模擬3D的演算法對當時的處理器來說非常簡單,所以你不必為了這個而買台夢幻的電腦,只要你有遊戲,就可以在任何電腦上跑,而且畫面非常驚人。

理解這點,大概就能理解為何ID software研發的這個技術被稱為革命性了。

儘管這種偽3D技術已老早被真正的3D取代,但畫面與效能之間的戰爭從未停止過。像這種欺騙玩家視覺的概念,如今在各種遊戲中都存在著,只是透過不同的技術罷了。

▲像最近的FF7 RE遠景的造景也只是用一張貼圖偽裝3D場景,不過這個偽裝比較失敗就是了。

開發者無時無刻都努力地在硬體規格限制內找方式解決效能問題,就為了能夠運用僅有的設備來模擬出最好的畫面。所以下次有幸玩這些遊戲時,給那些努力的開發者們一些肯定吧。

參考資料來源:


6/15號補充:
欸! 靠北! 怎麼這種技術文章的讚比心得多這麼多!?
送禮物贊助創作者 !
0
留言

創作回應

ㄅㄅ(想吃麻糬 mode
這文我收藏ㄌ
2020-06-15 10:07:01
靈巧
謝謝支持ㄌ
2020-06-15 10:31:16
我只是路過的蘿莉控
現在都硬幹(X
2020-06-15 12:04:15
靈巧
能硬幹還算不錯的,有些問題連硬幹都解決不了XD
2020-06-15 17:26:32
夫風若雪
只知道初期的3d遊戲,其背景大多是2d貼圖~長知識了
2020-06-15 17:06:50
靈巧
以前這些技術還滿有趣的
2020-06-15 21:46:56
傑克
早期還有一種像《迷霧之島三》,不過那是QuickTime VR,把一張圖片球體化成3D
2020-06-15 18:28:43
靈巧
這技術現在也還在用,例如某些線上看屋之類的
2020-06-15 21:50:19
狠心先生
FF7那個連我這個大外行都看得出來只是一張圖貼上去偽裝⋯⋯是說時鐘塔這樣的遊戲算不算偽3D?
麻煩大大幫我看了

https://youtu.be/cgnldTgRBEA
2020-06-15 21:09:29
靈巧
這應該是全3D了,因為他角色有明顯的陰影,桌上還可以擺物件。偽3D講白只是2D平面圖模擬,是沒辦法在桌上擺出不同大小的物件的。
2020-06-16 01:00:09
追蹤 創作集

作者相關創作

更多創作