直接開門見山地說,這場演講是我在 GDC 的獨立遊戲峰會(Independent Games Summit)之中,聽過最實用且令人敬佩的一場演講。請不要被你畫面右側的捲軸給嚇到,沒錯,這篇文章就是這麼長。
講者是 Untame 工作室的 Itay Keren,他目前正在開發的《Mushroom 11》,源自於他參加 2012 年的 Global Game Jam 所製作的成果。當年度的創作主題是一張「銜尾蛇」的圖案,而《Mushroom 11》的基本玩法,就是玩家操縱一隻由許多細胞組成,可變形的「香菇」(本文後面都稱「菌體」),用遊標或手指將自己的細胞清除時,同步會在身體的其他部位長出來,甚至可以切斷身體來通關。而唯一的資源就是細胞總數是固定的,還有細胞重生的速度仍有一定限制。
若稍微想一下,就會發覺玩家角色時而合體、時而分裂、有大有小、有長有短。自然在攝影機系統的控制上,就會是相當棘手的一件事情。也因此,Itay 才投入大量時間來研究 2D 遊戲攝影機系統的沿革。
實際上,早在我從 GDC 回來之時就有打算著手撰寫聽講心得,不過後來各種拖延症併發。直到 Itay 兩週前發公佈了他演講的文字版內容,我這邊可說是沒有任何理由可以拖稿了,於是直接徵得他的同意,進行全文翻譯。過程中重新體會了不少曾經玩過或不曾玩過的老遊戲,收益良多,發現以前根本沒注意過這些細節;而且還順道幫他勘了幾個誤,也算是做出一點回饋吧。
希望讀者在一面閱覽的同時,可以花些時間去找文中提到的遊戲來試試,也許也會發現到你以往玩過或聽過的遊戲,原來在這些小地方還有這樣的設計差異。OK,譯者前言結束,底下正文開始。
※ ※ ※(正文開始)※ ※ ※
Scroll Back - 2D 捲軸遊戲的攝影機理論與實務
撰文/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 特性給拿掉了,所以畫面幾乎無時無刻都在晃動 |
另一個做法可以在古早的《快打旋風》(以及後來相關系列作)中找到。基本上遊戲使用水平的 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 了嗎?回去重讀!),其實很難發現錯誤。如果對於正文細節有任何問題,請盡量提出,讓這份資料可以更加完整正確。
感謝,沒想到原作者想出的結論是隨機應變,多用幾種都沒問題.....太猛了