近期在Reddit的獨立遊戲版塊,一個開發者發了一段8秒的影片獲得大量圍觀點贊。

這是一段風馳電掣的流程長鏡頭:從競技場中鐵甲戰士的決鬥開始,然後就像俯視的鳥兒一樣掠過圍觀的人群、戰士的方針,直到鏡頭的國王。
然後這一段影片是分了上下兩段,如果你盯著下半部分,第一時間會感覺:鏡頭裡流暢的世界移動,實際是整個世界在對著鏡頭演,而世界本身是靜止的。

可能你會覺得:這有啥稀奇的?電影運鏡不是很常見麼
不過如果仔細回看影片,會發現流暢的鏡頭包含了順著樓梯角度的“仰視”,最終呈現的效果就像是有個人一路從決鬥場地跑到國王面前。

然後再回看對比圖,會發現“世界”的建模發生很不符合物理學規律的偏轉。
其實在遊戲開發裡,“移動鏡頭”和“移動世界”在數學上是一回事。
3D圖形API(比如OpenGL和Direct3D)有一個底層設定:攝像機永遠固定在座標原點,永遠朝向Z軸負方向。
你沒有辦法“移動攝像機”——你只能把整個世界往反方向挪。
所以當你在遊戲裡“向前跑”的時候,引擎實際上在做的事是:把整個場景往後推。攝像機根本沒動過。

這叫做檢視矩陣(View Matrix):所有3D遊戲都在用這套邏輯,只是大多數玩家永遠不會意識到。
那個8秒影片之所以讓老外驚歎,是因為它把這件事視覺化了。
平時你只能從“玩家視角”看到結果,影片切到側面,你才看到“引擎在做什麼——你一直以為自己在跑步,結果發現是跑步機在轉,這就像是地球自轉——你感覺不到,但它一直在動。
遊戲開發者用這種“視覺欺騙”的歷史,比很多人想象的要長。
《神秘海域2》的火車關,是遊戲史上最著名的“鏡頭騙局”之一。


那一關裡,德雷克在飛馳的火車上戰鬥,穿過森林、隧道、雪山,看起來火車真的在“前進”。


但真相是:火車從來沒有離開過原地。它在一條環形軌道上不斷迴圈,整個場景——森林、隧道、雪山——被設計成沿著這條環線排列,火車轉到哪裡,就“經過”哪裡。
玩家以為火車在穿過一片廣闊的世界。實際上世界很小,只是在原地轉圈。

《超級馬里奧64》 則給出了另一種解法:遊戲裡有一個角色叫“Lakitu兄弟”,一個坐在雲上、手持攝像機鏡頭的烏龜。當你轉動視角的時候,Lakitu的鏡頭也跟著轉。
任天堂把這個“攝像機”做成了一個遊戲裡的角色,讓玩家接受“有人在拍我”這個設定。你操作的是馬里奧,但你的眼睛在Lakitu手裡。

這種方式後來被無數遊戲借鑑,在第三人稱遊戲裡,鏡頭總是跟在角色背後,但是並沒有更多解釋,它慢慢併成了一種約定俗成。

不過看看這種開發者小故事還挺有意思的——你會知道,那些喜愛的遊戲都是怎麼實現的,也更加容易領略到製作者為了那些優秀遊戲付出的心血和努力。