您在這裡

[GDC 2015] Scroll Back - 2D 捲軸遊戲的攝影機理論與實務

2 篇文章 / 0 新
最新文章
[GDC 2015] Scroll Back - 2D 捲軸遊戲的攝影機理論與實務

直接開門見山地說,這場演講是我在 GDC 的獨立遊戲峰會(Independent Games Summit)之中,聽過最實用且令人敬佩的一場演講。請不要被你畫面右側的捲軸給嚇到,沒錯,這篇文章就是這麼長。

講者是 Untame 工作室的 Itay Keren,他目前正在開發的《Mushroom 11》,源自於他參加 2012 年的 Global Game Jam 所製作的成果。當年度的創作主題是一張「銜尾蛇」的圖案,而《Mushroom 11》的基本玩法,就是玩家操縱一隻由許多細胞組成,可變形的「香菇」(本文後面都稱「菌體」),用遊標或手指將自己的細胞清除時,同步會在身體的其他部位長出來,甚至可以切斷身體來通關。而唯一的資源就是細胞總數是固定的,還有細胞重生的速度仍有一定限制。

若稍微想一下,就會發覺玩家角色時而合體、時而分裂、有大有小、有長有短。自然在攝影機系統的控制上,就會是相當棘手的一件事情。也因此,Itay 才投入大量時間來研究 2D 遊戲攝影機系統的沿革。

實際上,早在我從 GDC 回來之時就有打算著手撰寫聽講心得,不過後來各種拖延症併發。直到 Itay 兩週前發公佈了他演講的文字版內容,我這邊可說是沒有任何理由可以拖稿了,於是直接徵得他的同意,進行全文翻譯。過程中重新體會了不少曾經玩過或不曾玩過的老遊戲,收益良多,發現以前根本沒注意過這些細節;而且還順道幫他勘了幾個誤,也算是做出一點回饋吧。

希望讀者在一面閱覽的同時,可以花些時間去找文中提到的遊戲來試試,也許也會發現到你以往玩過或聽過的遊戲,原來在這些小地方還有這樣的設計差異。OK,譯者前言結束,底下正文開始。

 

※ ※ ※(正文開始)※ ※ ※

Scroll Back - 2D 捲軸遊戲的攝影機理論與實務

原文 Google Doc 網址請點此

撰文/Itay Keren,Untame 遊戲工作室負責人,Mushroom 11 遊戲開發者
翻譯/Johnson Lin(正體中文,本文全文翻譯已獲得 Itay Keren 本人授權同意)

這是我在 GDC 2015 獨立遊戲峰會中演講內容的修訂版。它包含了一些畫面捲動相關的背景知識,以及大量的經典懷舊遊戲案例。我希望能對你有幫助,祝你讀得愉快!

目次

概要
畫面捲動
視覺神經相關知識
注意力、互動性、舒適感
重溫經典
跟著操作走
抑制攝影機動態
歸位
柔化
構圖
導演工作
多焦點攝影機
手動操控
畫面晃動效果
量身打造
《Mushroom 11》
詞彙

 

概要

我在設計《Mushroom 11》時,遇上了很多不同的設計與技術上的挑戰。當然,我並不指望可以找到太多關於處理動態改變的形狀,或頂點動畫的參考資料。但令我意外的是,連遊戲中攝影機該怎麼處理,這件在遊戲開發上至少已存在 30 年的老問題,都幾乎沒有什麼詳細的討論。

我決定來做個 2D 遊戲大考古,紀錄它們設計上曾遭遇的困難,以及解決方式的演進。另外,因為這方面在很多細節上缺乏適當的術語,我把它們分門別類後,就自行定義了些標籤,就算只是讓我自己方便參考也好。

 

畫面捲動

畫面捲動或平移,簡單來說就是想辦法把一個比螢幕還大的場景呈現出來的手法。這有許多細節須要注意,譬如說抉擇玩家該看到什麼,設計者希望玩家聚焦在哪,以及要怎麼讓玩家覺得流暢與舒適。雖然我主要只討論 2D 的攝影機系統,但許多後面會提到的概念也可延伸到 3D 遊戲。

 

視覺神經相關知識

在我們開始一一檢視這些遊戲之前,先來講視覺神經對於畫面捲動時的接收處理概念。有了這個背景知識,我們才知道有哪些地方可能造成問題。

 

眼球的主要接收帶「中央小窩」負責處理銳利與精細的中央視覺;而第二與第三接收帶「中央小窩外圍」及「黃斑周邊」,則是專門讓圖像與動態化約成特定模式,讓週遭改變能被快速察覺,譬如說,辨識已熟悉但危險的形狀、或是速度與方向上的改變等。

 

 

 

這部分資訊有快速連通到大腦杏仁核的管道,使得視覺中樞還在處理畫面時,仍保有警覺和隨時應變能力。而這項能力是可以被訓練的,大腦可以漸漸習慣遊戲操作時,畫面周邊所產生的位移變化。

 

前庭系統位於人體內耳,是掌管平衡以及空間方向感的器官。它所送出的訊號,讓你可以在聚焦於特定視覺細節上時,還能保持身體平衡。

對某些人來說(譬如說我),在車內專注看書的時候,因為缺乏周遭視覺回饋,再加上速度上的改變,可能就會造成暈眩和噁心感。

 

 

在相反情況下這也會發生:當周邊視覺很快地注意到背景中的改變時,大腦也會預期前庭系統告訴它相關改變的資訊。當前庭沒有送出任何訊號時(因為你只是杵在電腦螢幕前),也可能會造成一樣的結果。

是故,只要視覺與前庭系統回傳互相衝突的訊號,就有可能導致不舒服與噁心感。就算這個問題在 3D 遊戲(特別是 VR 遊戲中)才更顯著,但在 2D 遊戲中這個問題仍確實存在。

 

注意力、互動性、舒適感

為了更進一步瞭解畫面捲動造成的問題,我將需要克服的困難分成三大類:

 

注意力:使用攝影機來提供充份的遊戲資訊與回饋(玩家需要看到的東西)

互動性:讓玩家對於什麼要顯示在畫面上有明確的控制,使背景的變化與遊戲操作緊密連動並可預測(玩家想要看到的東西)

舒適感:舒緩背景變化,使其盡量連貫與流暢(如何柔和地達成前述兩項需求)

 

 

重溫經典

讓我們先回到 1980 年代吧!當時的設計者在各種 30 年後的我們很難想像的技術限制之下,仍提出了許多嶄新的解決方案。你會發覺我也參考了很多近十年來的知名獨立遊戲作品,因為這些作品呈現出了獨立開發者應有的創造力與細心程度,而在它們的攝影機設計上,也反映出了這樣的結果。

 

跟著操作走

將注意力留在你操作的主角上

先從基礎的開始。一般來說,玩家擁有主角的控制權,而這代表應讓攝影機緊緊跟著主角,使得注意力得以導向該角色。

在 80 年代早期,捲動畫面是一件很艱困的任務。開發者面對的限制有 CPU、記憶體的容量與分段問題。在這些挑戰下,仍有不少經典 2D 捲軸遊戲面市,巧妙地克服了這些困難。當然,在很多情況下,我們能想像這些動態其實都很簡單或精度偏低。

像《迷魂車》(Rally-X)這樣的一款 1980 年出品的遊戲,居然可以解決各種技術問題,而實作了完整的雙軸向捲軸攝影機,確實讓人覺得驚豔。它使用了最基礎的 position-locking 機制,讓車子保持在正中央,並有完全可預期的攝影機動態。

Rally-X © 1980 Namco position-locking - 攝影機鎖定在玩家角色的位置
 

     

注意:這邊所使用的術語只是為了我自己參考方便,但如果其他人也認為這些術語有用,並能提供改進意見的話,我會很高興的。

 

西山隆志所設計的《成龍踢館》(Suparutan X / Kung-Fu Master)是另外一個 position-locking 的好例子。他的其他作品包括《Moon Patrol》,以及後來的《快打旋風》。

這款作品另外使用了一個很基本的機制:edge-snapping。簡單說,當到達關卡盡頭時,攝影機會貼齊場景邊緣,讓玩家可以離開原本所在的錨點。

Kung-Fu Master © 1984 Irem [edge-snapping* - 對攝影機可移動的範圍設下硬性的邊界]
* edge-snapping 太基本了,每款遊戲都提的話實在太重複,故之後將忽略不提。
   

 

Position-locking 雖基本但還是相當好用。對於像《Terraria》這樣的生存冒險遊戲,它視覺上的角色大小、跳躍高度,相對整體畫面來說都很小,因此這方法的效果良好,並能在各方向上提供充足的視野。


Terraria © 2011 Re-Logic
position-locking
   

 

抑制攝影機動態

避免不必要或難以預測的顛簸

我們如何避免在非必要情形下的攝影機位移?30 年前,捲動畫面帶來了幾個問題:這是很吃 CPU 的運算,因為幾乎整個畫面都要重畫。就算解決了這個問題,巨大的像素顆粒也會讓人覺得捲動很突然。最好的做法就是盡可能不要去捲動畫面。其中一個方法是,讓角色在一特定框框內移動,只有當角色已經推擠到了框框邊緣,才開始捲動畫面。

《Jump Bug》這款遊戲被很多人視為最早的 platformer,雖然實際上主角會不斷自行跳躍,玩家能操作的只有跳躍高度,以及左右移動。實際上這款遊戲多數的關卡,都是攝影機強制位移,來迫使玩家跟上腳步並閃避障礙,就如同當時大多數的 2D 捲軸遊戲一樣。


Jump Bug © 1981 Hoei/Coreland (Alpha Denshi)
camera-window - 當玩家碰到隱形框框的邊緣時,就移動攝影機位置
   

但是這個運用於本作最後一關的 camera-window 技巧(譯註:《Jump Bug》這款遊戲不同關卡間有不一樣的攝影機模式,在最後一關變成不是強制移動,如上面 gif 動畫所示),解決了一個當時許多設計者其實根本還沒意識到的問題,而且也為往後數以千計的 platformer 定下了一個標準。但是 camera-window 技巧也引入了一些其他問題,譬如在玩家向著目標前進時,距離螢幕邊緣過近,很難處理突發狀況。

 

我很喜歡《王者之劍》(Rastan Saga)這款作品,它具備雙軸向的角色移動,且有不止一條前進路徑。本作也算是最早將攝影機動態,與遊戲機制進一步整合的遊戲之一。此處所示的 camera-window 高度正好與角色跳躍同高,所以正常跳躍時不會造成畫面垂直位移,除非主角已經推著框框前進。這排除了攝影機快速上下移動的狀況。

不過一個很大的問題是,這個方法使得從上方來的敵人很難被注意到,特別是當主角已垂直移動到貼著框框頂部時。另外當向左移動時(在城堡關卡中很常發生),它所預留的視野範圍也很小。


Rastan Saga © 1987 Taito
camera-window
   

 

在近期的遊戲中我們也還能看到 camera-window 的技巧運用。以《Fez》為例,當玩家旋轉場景時,水平的 camera-window 位置會維持住,因為它會特意挑一個讓玩家在旋轉後,仍能保持在框框內的軸心,來進行場景旋轉。《Fez》中的 camera-window 運作方式,算是很少見的,因為要配合如此特殊的遊戲機制,來設計最理想的攝影機方案,這部分我們後面會再提到。垂直向來說,它的攝影機混合了基本的 position-locking,以及 lerp-smoothing 來柔化動態,後者我們也是後面會再描述。


Fez © 2012 Polytron Corporation
camera-window*(水平方向)
* 在場景立體旋轉時,也會維持住框框位置
position-locking(垂直方向)
lerp-smoothing
region-based-anchors
manual-control*

* 右類比搖桿可進行額外的畫面平移

 
注意灰色字樣表示這是我們後面才會陸續提到的攝影機控制技巧

 

歸位

在框框範圍內修正攝影機的偏移

我們前面討論了如何利用 camera-window 來降低不必要的攝影機移動,但我們也在《Jump Bug》與《王者之劍》兩款遊戲中看到,在玩家偏向假想框框的某側時,這辦法就有一些缺陷。這邊就要來講幾個可以修正它的方式。

《忍》(Shinobi)大概是我最愛的經典遊戲。在本作中,玩家須要在很多高低差很大的平台間跳躍。它的設計者們想出了一個獨特的攝影機系統:因為角色要在很多平台間上下跳躍,所以垂直方向上的 camera-window 距離很高,而攝影機會被這個垂直向的框框拉著走。在假想框框很高時,產生的問題就是在跳躍之後,角色會被卡在畫面的上緣,使得上方視野狹窄,造成之前《王者之劍》中那樣的問題。在《忍》中,攝影機會慢慢地對齊回主角身上,讓畫面可以聚焦於角色的行動,並將攝影機快速抖動的情況降到最低。


Shinobi © 1987 Sega
position-snapping(垂直方向)- 不斷地調整框框偏移,讓角色可以慢慢回到攝影機中央
camera-window(垂直方向)
position-locking(水平方向)
static-forward-focus

   

 

Platform-snapping 是《超級瑪利歐世界》(Super Mario World)所引入許多技巧中的一項。跟 camera-window 搭配起來的結果就是,當主角還沒碰到框框邊緣以前,攝影機是靜止不動的,但因為瑪利歐終究會跳到下一個平台上,一旦他著地,攝影機會馬上貼齊到他的所在的高度。


Super Mario World © 1990 Nintendo
region-based-anchors
platform-snapping* - 玩家角色著地時,攝影機會貼齊到角色所在高度
camera-window*(垂直方向)
* 在適用的場合下才會發生
dual-forward-focus*
* 到達一定臨界才觸發
manual-control*(水平方向)
* 玩家可手動進行額外的畫面平移

   

本文至此第一次提到宮本茂先生的作品,但後面還會提到很多次。在各種細節上所投注的心血才是成就偉大設計者的關鍵,而不僅僅是有趣的遊戲規則而已。

 

在初代《雷射超人》(Rayman)裡你也能看到類似的做法。它的 camera-window 幾乎跟畫面高度一樣,所以跳躍時攝影機並沒有上下移動,不過一旦 Rayman 著地,攝影機就會平順地移動過去。將 camera-window 上緣設定成剛剛好超過主角的跳躍高度,這做法就如前面提過的,將攝影機系統整合進遊戲規則的一部分。


Rayman © 1995 Ubisoft
platform-snapping*
camera-window*(垂直方向)
region-based-anchors
dual-forward-focus*
lerp-smoothing

* 在適用的場合下才會發生
   

 

這個技巧在現在也仍然非常管用,在角色跳躍時,攝影機可以保持穩定順暢,僅在跳躍動作結束後,或者 camera-window 被推動時,才去重新定位攝影機。譬如對於近期的《Awesomenauts》 一作中有噴射背包的角色也是一樣,在飛行中時,攝影機只在角色碰到框框上下緣時才移動,並在角色著地後將攝影機歸位。


Awesomenauts © 2012 Ronimo Games
camera-window(垂直方向)
platform-snapping
position-locking(水平方向)

   

 

柔化

避免突然改變攝影機移動的速度與方向

我們前面提到過周邊視覺的功用,還有它跟舒適感間的關聯性。在古早的年代,因為像素顆粒很大,就算只是很單純的漸進式移動都會看起來像抖動。


80 年代的像素
(任天堂主機標準解析度 256x240)

現在獨立開發者在用的「像素」
(當中包含複數的實際螢幕像素)

在現代,我們可以設計漂亮的點繪風格美術,但動態上它們能夠在更為細緻的螢幕像素上移動。而如果你願意不去堅持永遠切齊螢幕像素(pixel-perfect),現代的引擎甚至提供你「次像素」層級的操作。但早年我們被這些粗糙的格子所限時,還能怎樣讓攝影機動起來比較平滑?

利用(假)物理特性

(假)物理特性能使 position-locking 攝影機在移動時更為柔和(當然,你可以說所有遊戲引擎算出來的還不都是假的)。

《小精靈探險》(Pac-Land)應該算得上是第一款比較像現代的 platformer 遊戲,擁有許多後人用以定義此類遊戲的要素,譬如說,在平台間跳躍、避開各式各樣的敵人、撿拾加分物品等等。跟柔化攝影機動態有關的是,主角的速度從每幅 0 格像素,到每幅 1、2、3... 格一路加速,直到角色的最高速度,減速亦同。因為攝影機完全鎖定在角色的位置上,結果就是攝影機的移動也很平順。不過《小精靈探險》不會有畫面垂直捲動的情形,這才是困難的部分,因為角色跳躍與著地時,都是一個很突然的加/減速。


Pac-Land © 1984 Namco
position-locking
static-forward-focus

 

 

宮本茂的作品

在這邊我想向宮本茂先生致敬,並提出一些他的早期作品。他對於遊戲產業的貢獻之大,還有對細節投注的心力之多,絕無誇大。

1984 年時,他開始嘗試一些 2D 捲軸設計,做出了兩款運用方式截然不同的作品。這兩作中,玩家對於畫面的捲動都沒有什麼控制能力,玩起來更像是前景不動,只是背景不斷平移。


Excitebike © 1984 Nintendo

Devil World © 1984 Nintendo
(denied release in North America)

《越野機車》有著我們熟知的捲軸動態,受機車前進的速度所控制。不過雖然捲動相當流暢,但基本上對遊戲本身沒有實質作用。

另一方面,《惡魔世界》(Devil World)的遊戲過程就跟畫面捲動很有關係。在這個與《小精靈》雷同的遊戲中,玩家操縱一隻有基督徒身份的龍,對抗會藉著改變畫面捲動方向來壓扁你的惡魔。因為遊戲中信仰符號的運用方式,使得這成為宮本茂唯一一款被禁止在北美上市的作品。雖然說,比起他後來的數多作品,這款被禁應該損失不大吧。然而,多去認識這些大師們成名前的早期作品是很重要的,這更能鼓勵我們多方嘗試──就算是最偉大的藝術家,也是從實驗與不斷失敗中走過來的。

 

前進一年,《超級瑪利歐兄弟》的傑出表現再怎麼誇大也不為過。遊戲過程上是很簡潔的由左至右單向、水平的前進。另外,遊戲中不允許往回走,套用前面術語的話,可看成是單邊作用的 camera-window。


Super Mario Bros. © 1985 Nintendo
speedup-push-zone - 當在此區間內時,漸漸讓攝影機跟上玩家角色的速度
camera-window*
* 單邊作用
static-forward-focus
 

如果瑪利歐從畫面最左邊就一路全速前進,在撞到 camera-window 邊線時,攝影機會在單次畫面更新之間從靜止不動,也變成全速前進,導致整個背景瞬間大幅度捲動,使玩家感到很不舒服。遊戲設計者於是在離 camera-window 邊線約 25% 距離處(譯註:此處距離自畫面左側起算,到 camera-window 線上),訂出另一個假想線,瑪利歐一過此線,攝影機就會開始漸漸加速,而當他碰到 camera-window 邊線同時,攝影機也已跟上速度。

 

《銀河戰士》也是款奠定一整個遊戲類型基礎的作品,它將 platformer 與大場景探索要素結合在一起。(同期的類似作品《惡魔城》僅有最單純的水平向 position-locking 攝影機)

《銀河戰士》中包含了垂直與水平方向的關卡(不會同時發生),它也有另一種讓攝影機移動平滑的方式,就是讓主角可以暫時性地跨出假想框框的範圍,同時讓攝影機漸漸加速跟上。主角可以跨出邊線多遠取決於當下的瞬間速度(譯註:是故這個特性在水平方向移動幾乎無法注意到,但是垂直移動時,因為跳躍高度高,落下的坑也深,遊戲也有比較貼近真實的重力加速度,前述的特性才容易觀察到),這個結果也是讓攝影機動態流暢。



Metroid © 1986 Nintendo
camera-window(水平與垂直方向皆有,但不會同時存在)
speedup-pull-zone - 在玩家跨過 camera-window 邊界時,讓攝影機漸漸加速跟上
 

 

科技的進步,使像素更細、CPU 更強,也對攝影機設計造成了直接的影響。以前攝影機低速移動時特別明顯,每幾幅畫面可能就會抖動一次。而現今,攝影機移動時,不會再因為低解析度而造成這樣的抖動。

《超級大金剛》(Donkey Kong Country)也有著不少新穎的攝影機特色,也是以「線性內插法」(簡稱 lerp)來柔化攝影機動態的始祖之一,使得角色跳躍時畫面更流暢,以及 forward-focus 技巧得以派上用場(這點容後再提)。


Donkey Kong Country © 1994 Nintendo (Rare Ltd)
lerp-smoothing - 以線性內插法不斷縮短攝影機與行動中角色間的距離
position-locking(垂直方向)
region-based-anchors
dual-forward-focus

 

 

Lerp-smoothing 聽起來不是什麼了不起的事,但它現在已經變成柔化攝影機動態(特別是角色跳躍相關)的標準手法。

float lerp (float a, float b, float t)
{
  return a + t * (b - a);
}

這大概是最有效且普及的動態柔化技巧,不論對緩慢或快速移動的角色(如 Super Meat Boy)都很有用。然而,對於特別大隻又移動很快速的角色,這方法有可能會讓攝影機無法在角色碰到畫面邊緣前跟上,同樣造成反應時間過短的問題。


Super Meat Boy © 2010 Team Meat
lerp-smoothing
position-locking

 

 

《Never Alone》於 2014 年推出,是一款很美妙的作品。主要來說,它的柔化技巧同時考慮到了攝影機的既有速度,雖然意味著它的動態起步略慢,偶爾也會超過原本的目標位置,但這樣的結果是一種舒緩而且有機的動態,只是對於快速的玩家操作會顯得遲鈍一些。本作所用到的很多其他技巧,後文也會再陸續介紹。


Never Alone © 2014 Upper One Games
physics-smoothing - 攝影機具有物理特性,不斷追蹤目標物移動
position-averaging
cinematic-paths
region-based-anchors
cue-focus

 

用程式術語來講,線性內插代表的意義是「漸出」(EaseOut),而 physics-smoothing 則是「漸入再漸出」(EaseInOut)。可以的話,請自行查查 SmoothDamp 程式方法的細節(譯註:此指 Unity API),或自己刻一個同時考量目標物距離與既有速度的實作方式。

 

另外,如果你正使用切齊像素為考量的 shader,你會發現你的 2D 貼圖偶爾會位移了 1 格像素,而與其他貼圖或背景產生預料外的偏差,肇因來自程式除法的不一致性。

《Hyper Light Drifter》使用了巧妙的方法,讓它在低解析度點繪風格狀況下,還能很平順地捲動畫面。它將打算呈現的內容,先畫到一張「切齊遊戲內像素的畫布」上,然後再以「切齊螢幕像素」的方式來調整畫布偏移,也就是用實際座標除以遊戲像素大小後所剩的餘數,來決定要偏移多少螢幕像素。本作還實作了其他我們後面會再講到的有趣技巧。


Hyper Light Drifter © [Release TBA] Heart Machine
physics-smoothing*
* 遊戲邏輯上的解析度僅有 480x270,但攝影機畫面捲動則使用完整的螢幕解析度
region-based-anchors
target-focus
cue-focus
gesture-focus

 

 

構圖

將重要的東西保留在畫面上

自動捲軸的做法不在本文討論範圍,因為按照定義,玩家完全對畫面捲動沒有決定權。但是,我們可以參考這類作品中玩家角色的位置,以及如何做到對來自前方的危險,與來自後方的危險都能保留適度反應時間的平衡。


Scramble © 1981 Konami
auto-scroll - 玩家無法控制畫面的捲動(但擁有角色在畫面中移動的完全控制權)
 

 

如同我們在《小精靈探險》中看到的,將攝影機與主角動態綁定同時,你也可以將攝影機聚焦於主角前方一段距離。這讓玩家有足夠的前方視野,而在後方也還有一小段反應的空間,更重要的,它也對前進方向有指引的作用,因為前進時,我們慣於朝畫面中央來集中注意力。


Pac-Land © 1984 Namco
position-locking
static-forward-focus
- 對遊戲主要的前進方向分配比較大的視野空間
 

 

再講更早期一些,1981 年所推出的《Defender》領先時代許多,可說是一款啟發了後世整個遊戲類別的射擊遊戲。它所呈現出的雙向 forward-focus 系統,幾乎沒有被人注意到。在遊戲中,攝影機總是會試著聚焦於距離主角機前方約 25% 螢幕寬的一個假想點上。這個系統很適用於快節奏,且隨著玩家面向方向改變,敵人有可能從任一側出現的遊戲。


Defender © 1981 Williams Electronics
dual-forward-focus - 玩家面向的方向會改變攝影機焦點,讓前進方向上一直保有足夠的視野
 

 

《龍鳳神偷》(Bonanza Bros.)是一款 Sega 在 1990 年推出於大型機台上的歡樂向 2D 捲軸遊戲。遊戲中有分割畫面的系統,讓玩家可以雙人合作搶銀行。

在這樣的遊戲中,提供清楚的前方視野相當重要,所以它也有實作了 dual-forward-focus 系統。但是,它的攝影機會以比較緩慢的方式切換到新的焦點上,使得整體動態更柔和。切換焦點的速度大約是玩家角色速度的兩倍,而且當玩家角色有移動時,攝影機才移動,如下圖中紅色角色的行動。


Bonanza Bros. © 1990 Sega
dual-forward-focus*
* 焦點切換的速度是基於玩家移動的速度
 

 

接下來這個《超級瑪利歐世界》中的攝影機技巧,是我最喜歡的 2D 攝影機運用之一,因為它與特定的遊戲規則細節配合得相當細膩。


Super Mario World © 1990 Nintendo
region-based-anchors
platform-snapping*
- 玩家角色著地時,攝影機會聚焦到角色所在位置
camera-window*(垂直方向)
* 在適用的場合下才會發生
dual-forward-focus*
* 到達一定臨界才觸發
manual-control*(水平方向)
* 玩家可手動進行額外的畫面平移
 

如同前面,畫面上有兩個錨點,讓玩家不論面向哪方,都可以有足夠多的前方視野。但,當玩家開始回頭走的時候(在《超級瑪利歐世界》中非常容易發生),攝影機仍會保留原先的焦點,直到瑪莉歐回頭走到一定的臨界位置,攝影機才會切換焦點。這在本作中時常左右來回移動的情況下,可以降低需要突然切換攝影機方向的頻率。

 

更近期,《洞窟物語》一作中使用的 dual-forward-focus 技巧,是依照角色移動速度,將焦點慢慢移動到另一側。與《龍鳳神偷》雷同,但是這邊的攝影機是不論玩家有沒有在動,它都會移向新的錨點,不過玩家移動時,攝影機跟上的速度也會加快。


Cave Story © 2004 Studio Pixel
position-locking(垂直方向)
dual-forward-focus
physics-smoothing

manual-control*
* 玩家可手動進行額外的畫面垂直移動

 

 

《光速兔崽子2》(Jazz Jackrabbit 2)是 Epic Games 早期所做的一款傑出 platformer。本作有一個很獨特的攝影機要素:基於玩家輸入的方向(不論垂直或水平方向),遊戲會沿著該方向將攝影機從主角身上移開。

我將這種表現方式稱為 target-focus,也就是玩家的輸入,會使得攝影機直接往他們所期望的目標或方向進行偏移。例如,當你往左走的時候,你會希望看到更多左側視野。當玩家放開方向鍵同時,焦點才移回主角身上。


Jazz Jackrabbit 2 © 1998 Epic Games
lerp-smoothing(垂直方向)
target-focus - 攝影機會依照玩家操作的方向,直接聚焦於前方視野
* 搖桿或方向鍵會將焦點推往所期望的方向
[manual-control*]
* 本作中的垂直向 manual-control 屬於 target-focus 的延伸

 

 

更直白的視覺目標物當然也可以用 target-focus 手法來呈現,譬如說那些也需要游標操作遊戲。在《Snapshot》中,你用滑鼠來對場景上的一小部分進行快照,並把這些拍下來的畫面用在其他地方來解謎。游標本身就是你的視線方向,所以攝影機的焦點就設定在游標跟玩家角色之間的中點。


Snapshot © 2012 Retro Affect
target-focus*
* 焦點位於主角與游標之間的中點
lerp-smoothing
 

 

《The Swapper》的 target-focus 運用中,主角的瞄準點即代表了玩家的視線方向,可以用做攝影機焦點。這對所有須要額外進行武器瞄準的遊戲都很有用。玩家甚至可以一邊瞄準一邊後退,這帶出了更多變化的攝影機行為,當然也就須要更多的攝影機操作機制。本作有更多先進的攝影機運用,我們之後會再講到。


The Swapper © 2013 Facepalm Games
target-focus
physics-smoothing
region-based-anchors
cue-focus
cinematic-paths

 

 

遊戲《Secrets of Rætikon》中的攝影機也有許多特別的功能。從基本的畫面構圖角度來看,他使用了 projected-focus 技巧,基於主角移動的方向與速度,來對角色接下來可能的位置做簡單的預測。

要注意這個技巧並不適用於 platformer 遊戲,特別在垂直方向上。因為外插法無法預期跳躍與著地瞬間的狀況。


Secrets of Rætikon © 2014 Broken Rules
projected-focus - 攝影機跟隨主角的預期位置(用外插法求得)來移動
physics-smoothing
cue-focus*
* 根據吸引子(attractor)來調整位置與縮放程度
gesture-focus*
* 特定操作會觸發預設的攝影機行為,例如飛行時畫面會拉遠
cinematic-paths

 

 

《Luftrausers》整合了數個很有趣的攝影機特色,包括主角機指向的方向(target-focus),主角機實際漂移的方向(projected-focus),還有一些其他畫面提示,譬如說水面、戰艦、子彈等等會在近距離時吸引攝影機焦點的東西(cue-focus,詳後述)。


Luftrausers © 2014 Vlambeer
target-focus / projected-focus
physics-smoothing
cue-focus

 

 

導演工作

設定場景上的提示物、提供遊戲背景與進展方向

到目前為止,我們討論了如何呈現視野、適合的操作方式,以及大體上來說,玩家想看的東西(最前面提過的「互動性」)。我們也提到了各種讓畫面看起來順暢的不同方法(舒適感)。

但是我們身為遊戲的導演,為了連貫性、遊戲進展、戲劇張力以及敘事手法等等,當然也需要讓玩家的注意力,放在我們要給他們看的重要事物上。

《神奇男孩》(Wonder Boy)是另一款我很喜歡的遊戲,他是一款快節奏的 platformer,遊戲只使用很單純的單邊 camera-window 讓玩家不斷前進。它雖然沒有用上《超級瑪利歐兄弟》中使用的 speedup-push-zone 來柔化攝影機的加速,但是他用到了另一個我稱之為 camera-path 的技巧。攝影機的移動方向會提供玩家對於關卡或接下來的挑戰的暗示。


Wonder Boy © 1986 Sega
camera-path - 在關卡中使用預設好的攝影機前進路徑
camera-window*
* 單邊作用
static-forward-focus
 

 

第五世代的家用主機們,如 Playstation 與 N64 等(註),因更強大的硬體與真 3D 概念的出現而帶來新的表現能力。3D 攝影機技巧是一個得另闢專題討論的龐大主題,但 3D 技術也對 2D 遊戲設計產生很重大的影響。設計者可以運用縮放、傾斜,或者將 2D 與 3D 結合而成我們現在所說的「2.5D」,也就是遊戲在三維空間中的二維平面上進行。

PS 遊戲《風之少年》(Klonoa)就是這類遊戲其中之一。玩家有基本的 2D 操作,但是遊戲實際上是在一個精心設計過的 3D 世界當中。本作中的攝影機跟隨 3D 的 camera-path 前進,提供方向指引與遊戲敘事的細節。攝影機會在所有關卡中適時定位、傾斜、縮放與 forward-focus,以及跳躍時機的提示等等。


Klonoa: Door to Phantomile © 1997 Namco
camera-path*
* 路徑指引。包括縮放與傾斜效果。
camera-window(垂直方向)
lerp-smoothing
dual-forward-focus

 

這些攝影機操作給了我們豐富的手法來進行遊戲中的暗示、驚喜與警告。在《風之少年》中,當攝影機拉遠來讓魔王登場的時候,你就清楚接下來該做什麼了。

(註)Odyssey 為初代、Atari 2600 同期為二代、任天堂同期為三代、超任等 16bit 主機為四代、32bit/64bit 與 3D 遊戲主機的初始世代為第五代。2013 年起推出的 PS4、Xbox One 等被歸類為第八世代。

 

《超級大金剛》引入了一個後來被各 platformer 大量使用的特色:遊戲設計者會根據各個關卡,甚至是關卡中特定區域的內容不同,來改變攝影機的行為。在快節奏、跑酷風格的區域,會需很寬敞的前方視野,必須犧牲後方空間;但一些以探索為主的區域,就須要兩側都有足夠的視野。



Donkey Kong Country © 1994 Nintendo (Rare Ltd)
lerp-smoothing
position-locking(垂直方向)

region-based-anchors - 不同區域(甚至同一關卡中)攝影機位置與焦點的錨點也會不同
dual-forward-focus
 

 

如《風之少年》中所見的,用來呈現 3D 場景的技術,也是我們用以指引玩家的工具,譬如縮放或推拉的運鏡。縮放是改變攝影機視角(Field of View),推拉則是攝影機對著目標物前後移動的術語。雖然實際操作不同,譬如說推拉一般會提供更強烈的身歷其境的感覺,但他們都達到畫面重新構圖的效果。要瞭解更多的話,可以自行去查詢攝影運鏡的知識,但在此為了簡化說明,我們後面會統稱這兩個技巧都叫 zoom-to-fit。

以《耀西的故事》(Yoshi's Story)為例,畫面構圖上將耀西、魔王跟柱子都做了適當的呈現,讓目標與場景盡頭等要素都能被玩家注意到。攝影機不單純只是跟隨這些物體移動,甚至也會拉遠鏡頭來提供玩家必要的資訊。


Yoshi’s Story © 1997 Nintendo (N64)
zoom-to-fit - 改變縮放或前後移動攝影機來呈現重要的物件
dual-forward-focus
camera-window(垂直方向)
platform-snapping
manual-control

 

 

《Insanely Twisted Shadow Planet》裡面的攝影機系統後來也影響了很多其他遊戲,它會參考玩家的速度(projected-focus)、目標的位置(target-focus),及更重要的,大概也是首批使用吸引子(attractor)來使玩家聚焦於特定物體的遊戲之一。你可以查閱本作的開發紀錄文章來瞭解更多細節。


Insanely Twisted Shadow Planet © 2011
Shadow Planet Productions

以上畫面截自 Shadow Planet Productions 的部落格文章:ITSP Camera Explained
cue-focus* - 畫面焦點會受遊戲世界中的提示物(吸引子)影響
* 攝影機位置與縮放是根據雙環吸引子來設定,這些吸引子包括敵人或檢查點等等
projected-focus
target-focus
physics-smoothing

 

 

本作的雙環吸引子作用於敵人或檢查點週遭。在外環時,攝影機會漸漸被拉到物體上,拉動的程度以權重平均計算後得知。當進到內環時,主角的權重會被完全忽略,攝影機會單獨鎖定在提示物身上。不同的物體的內外環設定也不盡相同,甚至可以互相重疊,讓焦點可以從前一個吸引子,順暢地轉移到另一個吸引子上。

 

 

我們有各種的手法可以吸引注意力,但環狀吸引子是當中一個很好的做法。這也可以用來反向操作:使用排斥子(detractor)讓攝影機從某遊戲物件上移開。這可能是帶來懸疑感,或隱藏秘密要素時可善加利用的手法。

 

《Aether》是 Edmund McMillen 與 Tyler Glaiel 在 2008 年所製作的一款 Flash 遊戲,它也引入了一個特殊的提示手法:在玩家漂流在太空中時若接觸到星球的重力場,畫面會漸漸轉向那個重力來源。這有提供安全感與方向指引的效果,因為「往下走」終究可以碰到地表。


Aether © 2008 Armor Games
(Edmund McMillen, Tyler Glaiel)
cue-focus*
* 攝影機會漸漸旋轉到朝向重力來源
position-locking
lerp-smoothing

 

 

針對攝影機系統的討論,若沒有提到《Limbo》就不能算得上完整。透過控制曝光程度、攝影機位置與縮放,本作呈現出的整體氣氛非常獨特。在《Limbo》中,每個區域都有個別的攝影機特徵、錨點等等,同時,特定物體,譬如說敵人身上,也會帶有吸引子等攝影機的提示。


Limbo © 2010 Playdead
region-based-anchors*
* 攝影機的縮放、位置以及曝光程度
position-locking*
* 每個區域不同
cue-focus*
* 特定動作會觸發提示物,譬如說敵人出現攻擊時等等。
physics-smoothing
 

 

另一個簡單但有效的做法是 region-focus,譬如說在《Geometry Wars》就有用上。它結合了主角機的位置,與關卡正中央的位置,這代表整個畫面會以一半的速度來跟著主角機的方向移動。玩家只須略為觀察主角機與畫面中心的偏移,就可以知道自己在關卡中的位置。這個系統對於封閉式的小型關卡非常有效,尤其是危險通常容易聚集在畫面中央的時候。


Geometry Wars © 2003 Bizarre Creations
region-focus* - 聚焦於區域錨點(譬如關卡正中央),同時也參考玩家的位置
* 攝影機位置是主角機位置與關卡正中央的平均
 

 

《Vessel》是一個經典的解謎遊戲,玩家同時需要注意到場景上的好幾個元素,來解開以流體為主的謎題,因此攝影機區域的設定就相當重要。就像在《Geometry Wars》中那樣,本作的設計者將區域錨點的權重增加,讓玩家解謎時攝影機接近靜止。這是一個古早時期單房間解謎遊戲的重新詮釋,只是在《Vessel》一作中,房間的概念更為彈性,有著更多變的大小與特徵。


Vessel © 2012 Strange Loop Games
region-focus*
* 攝影機位置大體上會停在區域錨點,但隨著玩家移動會有一點點偏移
region-based-anchors*
* 不同的區域有著不同的錨點位置與縮放程度
cue-focus
physics-smoothing
cinematic-paths

 

在《Vessel》中最巧妙的概念就是,就算被限制在一個區域中,攝影機還是可以跟著玩家移動少許。這在一個封閉空間中,仍提供了很強的主控感。再者,當玩家解開謎題,離開區域之前,攝影機已朝著下一區域開始移動,降低切換區域時,攝影機突然加速的感覺。

 

另一個讓攝影機產生畫面張力、吸引目光的手法,是讓玩家的行為去觸發既定的攝影機運鏡。《野生兒大冒險》(Tomba)是早期 Playstation 的 2.5D 作品中還蠻有趣的一款,通常攝影機是筆直向前拍攝,但在玩家進行某些動作,譬如說攀爬,或玩家在不同深度間切換時,它會稍為偏到另一個角度。當攝影機角度偏移時,會帶來特殊的操作體驗,同時也可以讓玩家看到更多的前方視野。


Tomba! © 1997 Whoopee Camp
gesture-focus* - 遊戲機制上所觸發的攝影機運鏡
* 攝影機角度偏移以更清楚反應玩家狀態
dual-forward-focus(水平方向)
platform-snapping
camera-window(垂直方向)

 

遊戲機制所觸發的攝影機運鏡可以有很多運用的方式──不同的移動方式跟軸向、反應式或預測式的等等。對於玩家與攝影機間行為的互動關係,我相信我們現今也只碰到了皮毛而已。

 

在即將推出的動作遊戲《Aztez》中,我們可以看到 gesture-focus 技巧的潛力。它運用了不同的攝影機運鏡技巧,例如縮放(推拉)或傾斜,來強化畫面張力,並提示如近身戰或者終結技等特定事件。


Aztez © [Release TBA] Team Colorblind
gesture-focus*
* 遊戲中的行動會觸發攝影機縮放(推拉)或傾斜
position-locking(垂直方向)
lerp-smoothing
zoom-to-fit

 

 

在 Sega 推出的經典動作遊戲《格鬥三人組》(Streets of Rage,又譯《怒之鐵拳》)中,攝影機是用單邊 camera-window 的方式跟著玩家前進,這在 2D 橫向動作遊戲中算很基礎。但是,攝影機在許多特定狀況下,會移到原本的畫面外(離開玩家所在),來呈現額外的敘事表現及戲劇要素。


Streets of Rage © 1991 Sega
cinematic-paths - 攝影機暫停平常的功能,來呈現「畫面外」的背景敘事
region-based-anchors
camera-window*

* 標準的 2D 橫向動作遊戲行為:單邊作用的 camera-window,且只在非戰鬥狀態有效
 

這個系統很強而有力,讓設計者可以在不切換畫面的情況下,提供電影式的停頓點,如同融入在遊體本體內的過場動畫。

 

Cinematic-path 手法在 The Behemoth 所推出的《Alien Hominid》與《城堡毀滅者》中被運用得很好。在遊戲中的很多地方,操作會暫時失效,讓攝影機可以移動到登場魔王或其他劇情要素上。這達到了兩個目的──在不讓玩家失去遊玩焦點的前題下,提供敘事內容,以及指引前進的方向。


Alien Hominid © 2004 The Behemoth
region-based-anchors
cinematic-paths
camera-window*

* 標準的 2D 橫向動作遊戲行為:單邊作用的 camera-window,且只在非戰鬥狀態有效
 

 

多焦點攝影機

同時聚焦在數個物體之上

如前面所見,就算焦點物體只有一個,要做好都已相當不容易。那當玩家或目標不只一個的情況下,我們要怎樣處理?

《聖鎧傳說》(Gauntlet)是一款具突破性的爬地城遊戲,在當時來說,不論是遊戲設計或運用的技術方面都相當先進。在畫面上同時有多位玩家的情況下,遊戲會將攝影機位置放在所有人的平均點上。然而,除非所有玩家都往同個方向走,當玩家之間的距離跟畫面大小一樣時,就沒有人可以移動了。如果某個玩家離開時,他的角色沒有退出遊戲,其他人就會因為無法推動畫面邊界而被卡死。


Gauntlet © 1985 Atari Games
position-averaging - 聚焦在所有目標物的位置平均處
 

 

《Samurai Gunn》使用了類似的技法,但是為了製造場上的混亂感,遊戲中採取了幾點極端手法。譬如,故意加上畫面暫停與瞬間黑邊來強化視覺效果。當玩家很頻繁地重生或傳送時,平均位置也馬上會偏移,導致畫面焦點隨時都在變。甚至,連最基本的 edge-snapping 都拿掉了,讓畫面可以超過場景邊界。這些對營造遊戲氣氛很有用,但是也容易造成視覺舒適感下降,特別是針對遊戲的圍觀者而言。對於本作的遊戲操作來說,很自然地必須要讓玩家可以穿過畫面邊界(從另一邊出現),而不會被卡住,雖然這個做法並不常見。


Samurai Gunn © 2013 Teknopants
position-averaging
lerp-smoothing
edge-snapping*

* 為了達到大混戰的氛圍,甚至將 edge-snapping 特性給拿掉了,所以畫面幾乎無時無刻都在晃動
 

 

另一個做法可以在古早的《快打旋風》(以及後來相關系列作)中找到。基本上遊戲使用水平的 camera-window 系統,讓畫面盡可能穩定。就如同每個 camera-window 案例一樣,撞到框框邊線的玩家會一併推動攝影機。當攝影機移動時,可能會連帶一起推著另一個玩家移動,讓兩者都能保持在框框內。攝影機(跟兩個玩家)只有在兩個人同時相反方向推動 camera-window 時,才會被卡住。


Street Fighter © 1987 Capcom
camera-window*(水平方向)
* 撞到框框邊線會推動攝影機,也可能同時一起推動另一個角色
 

 

另一款重新定義多人同樂的系列作品,就是任天堂的《明星大亂鬥》。就算是該系列中的第一款遊戲,都有非常傑出的攝影機系統。遊戲中畫面會以所有人的平均位置為中心,當玩家距離越遠時,就將畫面拉遠來容納所有角色。


Super Smash Bros. © 1999 Nintendo (HAL Laboratory)
zoom-to-fit
position-averaging*

* 嚴格上來說是「看向」所有人的平均點,因為遊戲為 3D 場景,又攝影機本身沒有移動而是轉向
lerp-smoothing
 

 

現今這個作法仍然相當好用,在《ROCKETSROCKETSROCKETS》一作中,它還有著雙重目的:其一當然是讓玩家們都出現在畫面上,其二則是將玩家們導向畫面中心,鼓勵玩家進行近身作戰。


ROCKETSROCKETSROCKETS © 2014 Radial Games
zoom-to-fit
position-averaging

 

 

如同在前面提過的《Never Alone》,不論是單人遊戲或多人遊戲,你都可以對任一組角色的位置計算平均點,有時也能加上不同的權重。


Never Alone © 2014 Upper One Games
physics-smoothing
position-averaging
cinematic-paths
region-based-anchors
cue-focus

 

 

《Spelunky》採取了不一樣的手法來處理不同目標物位置上的衝突。遊戲同一時間只會聚焦在一個角色身上。如果玩家死亡,掌旗者就會換人。這其實也變成了遊戲規則中的一個要素,對掉出畫面外的玩家進行死亡倒數。


Spelunky © 2008-2012 Mossmouth (Derek Yu)
position-locking
lerp-smoothing

[manual-control*]
* 上/下鍵可以垂直移動攝影機  

 

手動操控

讓玩家有別的方法來控制攝影機

在某些狀況下,設計者可能得要視玩家需求來提供額外的攝影機控制能力。直白的做法就是將攝影機綁定到玩家操作上。

《超級瑪利歐世界》又是最早加入這類攝影機操作的遊戲之一。LR鍵各自可以讓攝影機往不同方向移動,但是雖然這感覺好像很有用,不過實際上的評價是這還蠻雞肋的,甚至大部分玩家根本就不知道有這個功能。


Super Mario World © 1990 Nintendo
region-based-anchors
platform-snapping* 
camera-window*(垂直方向)

* 在適用的場合下才會發生
dual-forward-focus*
* 到達一定臨界才觸發
manual-control*(水平方向)
* 玩家可手動進行額外的畫面平移
 

本作中攝影機手動操作的問題,原因正是它一點也不直覺。基礎的角色移動操作與LR鍵之間沒有任何關聯性。

 

攝影機手動操作比較直覺的例子,可以來看看《Osmos》。當然這通常不被歸類為 2D 捲軸遊戲,但《Osmos》用了很自然的方式來控制攝影機。不論是桌機版本的滑鼠滾輪,或是平板電腦上使用縮放手勢,都提供了操作方式與攝影機間更清楚的聯結。


Osmos © 2009 Hemisphere Games
position-locking
manual-control*

* 滑鼠滾輪 / 觸控縮放手勢可以改變攝影機縮放
 

 

前面也提過的《光速兔崽子2》當中,遊戲所提供的攝影機垂直位移操作,與攝影機在角色快速橫向移動時的行為可以類比,因此這樣的操作也更容易被聯想到。


Jazz Jackrabbit 2 © 1998 Epic Games
lerp-smoothing(垂直方向)
target-focus 

* 搖桿或方向鍵會將焦點推往所期望的方向
[manual-control*]
* 本作中的垂直向 manual-control 屬於 target-focus 的延伸
 

 

如果手動操作是必要的狀況下,記得重複利用意義類似的按鍵,譬如說《Spelunky》中,蹲下跟抬頭就會改變攝影機的位置。


Spelunky © 2008-2012 Mossmouth (Derek Yu)
position-locking
lerp-smoothing
[manual-control*]

* 上/下鍵可以垂直移動攝影機
 

 

畫面晃動效果

象徵玩家失去主控權的戲劇效果

在前面這些案例研究中我們可以發現到,提供一個清楚明白的攝影機操作,會帶給玩家一種與畫面中虛擬世界結合的同步感。反向操作亦然:利用攝影機與畫面的晃動,來暫時打斷攝影機與玩家操作的關聯,可以提供一種畫面張力,代表存在著比玩家還強而有力的事物。

在我調查到底是哪一款作品最先開始引入畫面晃動時,很不意外地,線索又指向了一款宮本茂大師的作品,也就是 1983 年最早的《瑪利歐兄弟》(譯註:俗稱《水管瑪利歐》)。不過可能是因為硬體規格或製作時程上的問題,這個晃動效果似乎並非所有版本中都有。(註)


Mario Bros. © 1983 Nintendo

(註)在翻譯文本發佈的前夕,我仍在與 Itay 討論這點,因為在與 Kun-Wei 校稿時發現,水管老馬的各種版本(or 可能單純是關卡不同?)晃動效果不太一樣,有看起來畫面有兩層的,有看起來畫面只有一層的,撞 POW 時有會上下晃的,甚至有會左右晃的... 但 Itay 很確定他有看過撞 POW 時不會晃的版本。

畫面晃動(或是暫停,也有類似的意思)已被用於無數款遊戲作品,特別是所有 Vlambeer 所推出的遊戲上頭。請參考 Vlambeer 的遊戲設計者 JW(Jan Willem Nijman)對此侃侃而談的影片


Super Crate Box © 2010 Vlambeer

 

量身打造

綜各家之長,為你的遊戲調校最適合的攝影機系統

要做出一款遊戲所需的專注力與細節相當可觀。就如其他所有要素一般的,攝影機系統也值得你花下功夫去設計。在你想著使用預設的攝影機就好之前,先試著描述一下你覺得你遊戲中的攝影機到底該怎麼運作。

在我製作我自己的遊戲時(最後也導致我進行了這一大堆調查),認知到以下幾點是蠻有用的基本原則:

  • 找到你遊戲中獨特、顯著的特色
  • 試著找出其他面臨過類似設計挑戰的作品
  • 想辦法內化你所參考的設計

當然,這些原則不僅限於攝影機的製作,這可以適用於你遊戲的各種面向,不管是美術、聲效、程式技術等等。以下是一個將攝影機與遊戲機制整合做得很好的例子。Taito 推出的《影子傳說》是最早期的雙軸向 platformer 遊戲之一(小知識:本作也是極少數由右向左前進的遊戲)。留意它的水平向 camera-window 運用方式。因為很多激烈的戰鬥是發生在樹幹上,所以 camera-window 的寬度正好與樹幹同寬,讓打鬥時攝影機可以免於不斷的左右晃動。


The Legend of Kage © 1985 Taito
position-locking(垂直方向)
camera-window*(水平方向)

* 框框寬度正好與樹幹同寬
 

 

另一個將既有系統調整到配合遊戲設計的例子是《忍》。因角色跳躍高度甚高之故,遊戲中使用了一個很高的 camera-window,幾乎跟整個畫面同高。然後,利用緩慢的 position-snapping 來持續讓角色回到畫面中央。


Shinobi © 1987 Sega
position-snapping(垂直方向)
camera-window(垂直方向)
position-locking(水平方向)
static-forward-focus

 

 

《音速小子》是一款高速的雙軸向 platformer。狹小的 camera-window 是為了讓主角盡可能處於畫面中間,因為玩家得對快速迎面而來的東西保持足夠的視野。框框的高度稍高,則是為了降低小跳躍所造成的畫面晃動。因為也運用了 platform-snapping 手法,所以主角只要雙腳有著地,垂直方向的畫面位置就可以保持住。

在高速下撞到框框的邊界,仍會使畫面看起來動得有點突然,特別是在環狀跑道,或向下快速墜落的時候。不過,狹小框框的好處就是,在攝影機原本靜止的狀態下,主角在碰到框框邊緣前能獲得的速度也比較有限,多少可以減低畫面動態過於突然的問題。


Sonic the Hedgehog © 1991 Sega
platform-snapping
camera-window
static-forward-focus
manual-control

 

 

當你可以往任意方向移動,但是又需要足夠的前方視野時,dual-forward-view 手法是很自然的選擇。在角色轉身時,有數種不同的方式可以讓攝影機被吸到預想的錨點上。《洞窟物語》在這方面做得很出色,讓攝影機重新定位的速度,等於攝影機的基本移動速度,加上角色的移動速度。《龍鳳神偷》的手法則略有不同,限制只有在角色移動時,攝影機才會移動。相對靜態的匿蹤遊戲可以使用這種手法,但是像《洞窟物語》這類滿坑滿谷敵人的 platformer 就不適合。


Cave Story © 2004 Studio Pixel
position-locking(垂直方向)
dual-forward-focus
physics-smoothing
manual-control*

* 玩家可手動進行額外的畫面垂直移動
 

 

《Fez》中沒有一堆敵人從前方朝你衝過來,所以最基本的 camera-window 手法是合理的。但設計者巧妙地結合遊戲機制,在《Fez》中賦予它不一樣的設計價值。也因為玩家最常旋轉場景的時機都是在平台的邊角,在主角身後的東西其實比在主角前方的東西來得重要。另外,在旋轉場景後,攝影機會停在一個讓玩家有盡可能大的前方視野的位置。


Fez © 2012 Polytron Corporation
camera-window*(水平方向)
* 在場景立體旋轉時,也會維持住框框位置
position-locking(垂直方向)
lerp-smoothing
region-based-anchors
manual-control*

* 右類比搖桿可進行額外的畫面平移
 

 

在《Vessel》一作中的做法,對單房間式的解謎遊戲來說算是相當完美的。遊戲中運用了 region-focus 手法,來讓所有必要的謎題元素都清楚地呈現在同一個畫面上;玩家所造成額外的畫面小幅移動,也提供了更好的主控感受;攝影機會緩慢平順地在謎題區域間移動。整體來說,將預設的畫面構圖與實在的操作感結合得很好。


Vessel © 2012 Strange Loop Games
region-focus*
* 攝影機位置大體上會停在區域錨點,但隨著玩家移動會有一點點偏移
region-based-anchors*
* 不同的區域有著不同的錨點位置與縮放程度
cue-focus
physics-smoothing
cinematic-paths

 

 

《The Swapper》利用了許多不同的 cinematic-path,來達到傳遞故事與獨特氣氛的效果。這個手法讓玩家在體驗戲劇張力的同時,不會因為制式的過場動畫影響,而導致遊戲體驗突然被中斷。


The Swapper © 2013 Facepalm Games
target-focus
physics-smoothing
region-based-anchors
cue-focus
cinematic-paths

 

 

《Mushroom 11》

我正在製作中的攝影機系統

《Mushroom 11》中的攝影機系統要做到的是很精細的個別區域指引。每個關卡皆內含數十個區域,每個區域又有獨自的攝影機移動範圍,以及縮放程度(視角 FOV 設定)。


Mushroom 11 © [Release TBA] Untame
region-based-anchors*
* 每個區域有事先設定的攝影機移動範圍與縮放程度
position-averaging*
static-forward-focus*
cue-focus*

* 只有在特定有設定這些功能的區域使用
projected-focus
physics-smoothing*

* 移動緩和的程度依角色速度變化
 

每個區域都很小心地加上了順序編號,而攝影機是被最優先區域中的菌體塊所主控。只要任何一塊菌體,就算只有一格細胞,進入了比現在更優先的區域中,攝影機就會轉移目標到那塊菌體上。


Mushroom 11 © [Release TBA] Untame
region-based-anchors*
* 每個區域有事先設定的攝影機移動範圍與縮放程度

position-averaging*
static-forward-focus*
cue-focus*

* 只有在特定有設定這些功能的區域使用
projected-focus
physics-smoothing*

* 移動緩和的程度依角色速度變化
 

留意到畫面邊緣其實是會清除菌體細胞的,這讓攝影機的準確控制愈加重要。在上圖中很清楚可以看到,畫面上留下了足夠的空間來弄出解法,然後當前方菌體碰到新區域時,再快速地讓攝影機跟上。這個攝影機移動的速度與時機,得要讓前進中的菌體不會被邊界卡到而遭清除。

區域主要有分兩大類:以平均位置為主的區域,和以前進為主的區域。這個類別主宰了攝影機的焦點該放在哪裡。當焦點決定後,攝影機就會試著往該處移動,但同時也須遵守區域範圍限制。

平均位置為主的區域

某些區域會使用所有細胞的平均位置,自然會讓攝影機靠向較大塊的菌體。這在玩家需要同時控制多塊菌體,或前進方向非單一的情形下很有用。這類區域設定會被用在封閉式的謎題上,也就是所有菌體塊都相距不遠時(不然它就會被畫面邊緣清除掉了)。


Mushroom 11 © [Release TBA] Untame
region-based-anchors*
* 每個區域有事先設定的攝影機移動範圍與縮放程度
position-averaging*
static-forward-focus*
cue-focus*

* 只有在特定有設定這些功能的區域使用
projected-focus
physics-smoothing*

* 移動緩和的程度依角色速度變化
 

以前進為主的區域

比較線性前進的區域,就會需要聚焦在最前方的菌體塊上。不論何時,最前方的那一塊(前方在哪是看各別的區域路線設定)會主控攝影機,而忽略被遺留在後的。這邊也會加上一個 static-forward-focus 的距離,因為這也很適用於這類的區域。


Mushroom 11 © [Release TBA] Untame
region-based-anchors*
* 每個區域有事先設定的攝影機移動範圍與縮放程度
position-averaging*
static-forward-focus*
cue-focus*

* 只有在特定有設定這些功能的區域使用
projected-focus
physics-smoothing*

* 移動緩和的程度依角色速度變化
 

提示物

前述兩種提到的區域都可以與 cue-focus 配合使用。當攝影機位於這類區域時,特定物體或是角色可以做為吸引子,並有指定或動態的吸引參數。如下圖所示,魔王戰即是使用這種手法的好地方。


Mushroom 11 © [Release TBA] Untame
region-based-anchors*
* 每個區域有事先設定的攝影機移動範圍與縮放程度
position-averaging*
static-forward-focus*

cue-focus*
* 只有在特定有設定這些功能的區域使用

projected-focus
physics-smoothing*

* 移動緩和的程度依角色速度變化
 

柔化攝影機動態

本作的柔化動態是結合了 projected-focus 與 physics-smoothing 兩個手法。基於菌體塊的移動速度來決定柔化參數,效果很不錯:如果玩家動得很快,攝影機動態會相對比較準確與銳利,如果玩家優雅地在刷菌體,那攝影機也會很優雅地慢慢飄。

因為遊戲中基本上沒有跳躍能力(造成瞬動或瞬停等難以預測的動態),使用 projected-focus 手法就很恰當。讓攝影機瞄準單一菌體塊(或所有的平均)在未來數毫秒時的位置,就能達到更準確也可預期的攝影機行為。


Mushroom 11 © [Release TBA] Untame
region-based-anchors*
* 每個區域有事先設定的攝影機移動範圍與縮放程度
position-averaging*
static-forward-focus*
cue-focus*

* 只有在特定有設定這些功能的區域使用
projected-focus
physics-smoothing*

* 移動緩和的程度依角色速度變化
 

在所有這些的攝影機行為都定義好後,這個系統就可以同時處理多塊動態改變、大小速度不一、會在區域間快速移動的菌體生物。


Mushroom 11 © [Release TBA] Untame
region-based-anchors*
* 每個區域有事先設定的攝影機移動範圍與縮放程度
position-averaging*
static-forward-focus*
cue-focus*

* 只有在特定有設定這些功能的區域使用
projected-focus
physics-smoothing*

* 移動緩和的程度依角色速度變化
 

 

詞彙

auto-scroll 玩家無法控制畫面的捲動
camera-path 在關卡中使用預設好的攝影機前進路徑
camera-window 當玩家碰到隱形框框的邊緣時,就移動攝影機位置
cinematic-paths 攝影機暫停平常的功能,來呈現「畫面外」的背景敘事
cue-focus 畫面焦點會受遊戲世界中的提示物(吸引子)影響
dual-forward-focus 玩家面向的方向會改變攝影機焦點,讓前進方向上一直保有足夠的視野
edge-snapping 對攝影機可移動的範圍設下硬性的邊界
gesture-focus 遊戲機制上所觸發的攝影機運鏡
lerp-smoothing 以線性內插法不斷縮短攝影機與行動中角色間的距離
physics-smoothing 攝影機具有物理特性,不斷追蹤目標物移動
platform-snapping 玩家角色著地時,攝影機會貼齊到角色所在高度
position-averaging 聚焦在所有相關目標物的位置平均處
position-locking 攝影機鎖定在玩家角色的位置
position-snapping 不斷地調整框框偏移,讓角色可以慢慢回到攝影機中央
projected-focus 攝影機跟隨主角的預期位置(用外插法求得)來移動
region-based-anchors 不同區域(甚至同一關卡中)攝影機位置與焦點的錨點也會不同
region-focus 聚焦於區域錨點,同時也參考玩家的位置
speedup-pull-zone 在玩家跨過 camera-window 邊界時,讓攝影機漸漸加速跟上
speedup-push-zone 當在此區間內時,漸漸讓攝影機跟上玩家角色的速度
static-forward-focus 對遊戲主要的前進方向分配比較大的視野空間
target-focus 攝影機會依照玩家操作的方向,聚焦於前方視野
zoom-to-fit 改變縮放或前後移動攝影機來呈現重要的物件

 

誌謝

我在此要感謝獨立遊戲開發社群的朋友們,在這次研究中給我的許多幫助,也特別感謝 NYU Game Center 的大力支持。

 

※ ※ ※(正文結束)※ ※ ※

 

我自己在翻譯的過程中,因為必須要細究某些詞句如何翻譯才能盡可能正確,畢竟文中多是技術細節與術語,若譯錯,或原文其實有疑議處,一般快速瀏覽只會覺得「幹好想按 END」(你按 END 了嗎?回去重讀!),其實很難發現錯誤。如果對於正文細節有任何問題,請盡量提出,讓這份資料可以更加完整正確。

感謝,沒想到原作者想出的結論是隨機應變,多用幾種都沒問題.....太猛了