今天小編(甄正浩)要和大家分享的是《動物井》為什麼只用33Mb?開發者在GDC上説,還可以更小,歡迎閲讀~
獨立開發的獨特魅力。
作為去年獨立遊戲屆的 " 雙璧 ",《動物井》和《小醜牌》兩款遊戲有一個共同之處,那就是都是由一人開發者獨立完成的優秀作品,兩位開發者之間也多次 " 商業互吹 "。
前幾天《小醜牌》的開發者 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 成功地完成了這樣一個獨特且充滿創意的遊戲,而從最初對熟悉技術的堅持,到後期對復雜效果的探索和對遊戲體積的極致優化,也都體現了獨立開發的獨特魅力。
>關于《動物井》為什麼只用33Mb?開發者在GDC上説,還可以更小就分享完了,您有什麼想法可以聯系小編(甄正浩)。