獨立開發的獨特魅力。
作爲去年獨立遊戲屆的“雙璧”,《動物井》和《小丑牌》兩款遊戲有一個共同之處,那就是都是由一人開發者獨立完成的優秀作品,兩位開發者之間也多次“商業互吹”。
前幾天《小丑牌》的開發者Localthunk,回顧了遊戲開發的過程,而在近日的GDC遊戲開發者大會上,《動物井》開發者Billy Basso也做了一場有關遊戲開發背後的分享。
在《動物井》開發過程中,Billy Basso曾在Blog上記錄過一些遊戲開發的過程,上線之後也接受過一些採訪,所以這次的GDC分享並沒有太多關於開發理念的內容,而是更專注於技術層面的探討,他的主題是:《Developing at 5MB/Year——The Making Of ANIMAL WELL》。
相信每個玩家都對這款現代遊戲(PC版本)只有33M感到驚訝,Billy Basso的這個分享就對此進行了揭祕。
《動物井》於2017年開始開發,最初的計劃只是一個時長1小時、耗時6個月完成的小型遊戲,不過最後耗費了Billy Basso 7年的時間,內容豐富度自然也大大提升。在遊戲開發的前4年裏,Billy Basso還有一份開發醫療模擬軟件的全職工作,直到2022年1月,Basso辭去了這份工作專注於開發《動物井》。
結語
在演講的開始,Billy Basso坦言過去曾參與過多個大型遊戲團隊的項目,但始終未能擁有“屬於自己的遊戲”並最終完成,因此開發《動物井》的首要目標是選擇一個他“100%確定能夠發佈”的項目。爲了順利完成這個目標,他在開發過程中做了很多的自我限制,只使用自己熟悉的技術,比如爲了確保項目能夠完成,他決定不採用新技術或複雜的3D建模,而是專注於自己熟悉的2D像素藝術,在引擎和開發工具上也是如此。
《動物井》的一個獨特之處就是沒有使用Unity或虛幻等常見的商業引擎進行開發,而是Basso基於C++自行開發的遊戲引擎,這需要自行處理大量底層工作,包括內存管理和資源加載等,但是也讓他能夠完全掌控遊戲的各個方面,避免了與第三方合作的麻煩,同時也滿足了他構建和理解底層系統的樂趣。
Billy Basso介紹了自己使用的開發工具,沒有任何複雜的技術工具:
使用Visual Studio 2019用於代碼開發:
構建了自定義關卡編輯器,支持類似《超級馬里奧製造》的瓦片繪製模式和世界地圖的拖拽式構建。
使用Sprite進行像素藝術創作,並對其進行了修改,以支持自定義的動畫格式和導出。
使用Reaper進行音頻處理。
使用Notepad做文本設計與任務追蹤。
自定義關卡編輯器有三種主要模式:
屏幕編輯模式
:類似於《超級馬里奧製造》的風格,可以在調色板中選擇遊戲中的精靈並進行繪製,創建遊戲中的一個個屏幕。每個圖塊可以代表一種實體類型,從而在屏幕中生成可移動和更新的遊戲對象。
世界構建模式
:允許開發者將創建好的一個個“屏幕”拖拽組合成遊戲的世界地圖。最初,世界被限制爲16x16的網格,因爲每個房間都有一個單字節的ID,最多隻能有256個不同的房間。這個限制其實也是Basso有意爲之,他希望通過約束來推動更具創意的設計,最終儘可能地使每個房間都內容豐富。
精靈圖集編輯模式
:最初Basso是直接在C++文件中硬編碼精靈在圖集中的UV座標,後來他創建了一個自定義的精靈編輯器,可以直接在精靈周圍繪製選框,並設置如碰撞、是否爲泥土等標記。儘管如此,他最終還是實現了一個自定義的精靈打包工具(Sprite Packer),這是行業標準的解決方案,可以將文件夾中的所有精靈自動打包成圖集,但他最初的硬編碼方式仍然保留了一部分。
在動畫方面,Basso表示他使用軟件Aseprite
進行像素動畫的製作,並且修改了Aseprite程序本身以便導出他自定義的二進制動畫格式。他不希望在遊戲中使用任何文本字符串,以防止數據挖掘,並且認爲解析JSON會涉及動態內存分配,這也是他想要避免的。他的動畫格式是以幀和圖層的數組形式存儲,可以在運行時快速循環播放並根據畫布偏移量進行繪製。此外,他還編寫了大量的過程化動畫函數庫,用於創建各種形狀和效果,應用於遊戲中的許多生物。
對於遊戲中讓玩家印象深刻的視覺效果和光照,Basso表示沒有采用單一的着色器,而是使用了約
50個小的獨立技術,在演講中介紹了他以其中幾個技術舉例進行了介紹。
動態陰影:
通過在屏幕空間中使用光點數組,並對周圍的圖塊進行相交測試,然後將生成的陰影遮罩渲染到大的精靈調色板上,再進行模糊和抖動處理,最終與場景進行疊加。他還實現了不同圖層之間投射陰影的效果,通過將不同的遊戲圖層渲染到單個渲染目標的不同顏色通道中,然後在渲染背景時採樣前景或中景來判斷是否需要投射陰影。
邊緣光照:
通過對前景圖層進行簡單着色並模糊處理,然後根據設定的閾值來決定哪些部分需要着色,從而增強了平臺和牆壁的對比度。同時雖然是2D遊戲,但Basso後期爲背景添加了手工繪製的
法線貼圖,以提供更具方向性的光照效果。
水體效果:
每個屏幕都有一個定義水位線的單字節變量。渲染時,先正常渲染屏幕,然後進行第二次渲染,將相同的內容顛倒並扭曲(使用正弦波數學),並在底部逐漸淡化。
流體系統:
《動物井》實現了一個複雜的2D Navier-Stokes流體模擬,用於煙霧、水花等效果。Basso表示這個技術所採用的算法原理和實現方法並不是什麼前沿技術,而是可以追溯到2004年出版的技術書籍《GPU Gems》上,需要多個渲染目標和着色器,通過速度和壓力的相互作用來模擬流體運動。
而在資產管線方面,《動物井》的所有遊戲資產在離線狀態下都被轉換爲C++頭文件中的字節數組,並直接包含在代碼中,這意味着遊戲運行時不需要進行文件I/O,所有的內容都直接加載到內存中,從而實現了極快的加載速度。這種方式也方便了資產加密,Basso使用AES加密離線加密資產,而解密密鑰則與玩家在遊戲中解決的謎題相關聯。
Basso最後概括總結了遊戲爲什麼只有33MB這麼小的原因,並且表示還可以更小:“
如果我知道人們會如此印象深刻,我可能會更加努力地縮小它”。
自研引擎,所以沒有第三方庫冗餘。
低分辨率像素藝術,紋理尺寸極小。
音頻壓縮和稀疏的音樂使用。
大量動態生成內容,提高資源利用率。
無文本內容,儘可能使用二進制格式。
通過這個分享我們可以看出,33M的遊戲文件大小也並非是Basso刻意的追求,而是其技術選擇和資源管理策略的自然結果。通過限制範圍、專注於已知技術、自制工具和擁抱實驗性的方法,Bily Basso成功地完成了這樣一個獨特且充滿創意的遊戲,而從最初對熟悉技術的堅持,到後期對複雜效果的探索和對遊戲體積的極致優化,也都體現了獨立開發的獨特魅力。
更多遊戲資訊請關註:電玩幫遊戲資訊專區
電玩幫圖文攻略 www.vgover.com