獨立開發的獨特魅力。
作為去年獨立游戲屆的“雙璧”,《動物井》和《小丑牌》兩款游戲有一個共同之處,那就是都是由一人開發者獨立完成的優秀作品,兩位開發者之間也多次“商業互吹”。
前幾天《小丑牌》的開發者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成功地完成了這樣一個獨特且充滿創意的游戲,而從最初對熟悉技術的堅持,到后期對復雜效果的探索和對游戲體積的極致優化,也都體現了獨立開發的獨特魅力。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.