天天看點

堅守初心,白鹭引擎七年之癢

各位開發者好,我是白鹭引擎團隊的王澤。

七年前的今天,我敲下了白鹭引擎的第一行代碼,此時此刻我的孩子也終于要呱呱落地,即将成為一個父親,我也有很多感慨。

這兩年經常有一些朋友來找我關心白鹭的動向,因為行業環境的原因我們市場發聲變少了,産品釋出節奏也慢了下來,人無名則安心練劍,年關将近,作為白鹭引擎的作者,我來和大家聊一聊2020年白鹭引擎團隊專注在哪些工作上,以及我們2021年的産品重心會放在哪裡。

今年我們受疫情影響,取消了所有線下的開發者沙龍活動,并且也降低了市場費用,把相關人員和精力放在了針對開發者的技術支援和服務上。我們重點維護了多個核心開發者微信群,對整個文檔中心和論壇進行改版,提升了針對開發者問題的響應速度和服務品質,相信許多開發者能感受到我們這一點的變化。

接下來簡單和大家聊一聊今年白鹭引擎的研發團隊主要為開發者做了那些新的改進。

2D引擎穩定成為中重度手遊首選

首先和大家聊聊2D引擎部分。由于廣州是使用白鹭引擎開發中重度2D/2.5D手遊的大學營,是以我2019年有超過半年時間都在廣州各大廠商長期駐場,幫助這部分開發者解決他們在使用白鹭引擎開發重度遊戲時遇到的各種問題。然後在2020年的整個上半年我和團隊主要的工作就是将這部分工作成果進行不斷打磨,釋出至 Egret 5.3 版本系列中。

堅守初心,白鹭引擎七年之癢

在這其中最重要的改動就是完全重寫的白鹭編譯器。在和這些開發者溝通之後我發現,大部分開發者都在為編譯速度、生成包體積、子產品拆分等工程化問題困擾。這主要是因為白鹭引擎在2014年初編寫的指令行工具已經愈發無法适應動辄超過數十萬行代碼量規模的項目。是以我在 2020年為開發者重寫了新的編譯器,借助業界最流行的(也是2014年的時候還尚未出現的)Webpack 打包器以及針對白鹭項目定制的擴充,并進行了大量的向下相容處理工作以保證現有項目可以以盡可能低的成本遷移至最新的編譯器(特别感謝阿裡巴巴靈犀互娛的遊戲研發團隊為我們團隊貢獻的代碼以及十餘家遊戲開發團隊在内測階段提供的積極回報)。通過新的編譯器,這些重度遊戲的增量編譯速度平均從50秒降低至5秒。除此之外,我們提供的新編譯器不僅可以幫助開發者大幅提升編譯速度,也可以通過 tree-shaking , split-chunk 等技術改善開發者非常關心的代碼尺寸問題,後續我們還會通過 custom-typescript-minifier 來進行進一步的優化。

堅守初心,白鹭引擎七年之癢

除了編譯器之外,2020年我們和網易合作了網易自研的測試自動化測試工具 Airtest 的白鹭引擎側實作,并将其應用至網易采用白鹭引擎自研的《夢幻西遊網頁版》中。

通過上述工程化改進,使用白鹭引擎開發的2D重度遊戲可以承載更多的體量。并且随着行業的變化,在今年越來越多的開發者逐漸将原生管道作為遊戲的發行重點。而白鹭引擎團隊雖然2014年就釋出了支援将HTML5遊戲釋出到 iOS/Android 裝置上,但是其性能和穩定性一直廣受開發者的各種吐槽。我們在每年都在針對釋出原生遊戲這一項工作進行不斷優化。

白鹭引擎不再是一個H5小遊戲引擎,大步邁向全平台的遊戲引擎

今年初 Egret Native 正式邁入 1.0 正式版本。正式版本釋出之後的這一年中,我們從開發者回報的各種問題入手,逐個針對了包括 音頻系統、網絡系統、輸入法、文字渲染、原生渲染在内的多個子產品進行逐個漸進式重構,每個版本都為開發者帶來了更穩定和性能更好的新版本。除此之外,我們還緊跟蘋果AppStore 和 GooglePlay 商店的上架和釋出流程政策進行調整,并及時更新文檔、教程與技巧,以幫助開發者快速過審。而這些開發者除了将手遊釋出到國内市場外,多數都會有釋出到海外全球市場的需求。針對這種情況完善了多語言的支援,支援非utf-8檔案加載,完善了泰文、韓文等複合文字的輸入和顯示。

堅守初心,白鹭引擎七年之癢

根據工具端的統計,目前已有超過4000款白鹭引擎的遊戲被打包上傳到AppStore和Taptap管道發行。

通過 Egret2D 和 Egret Native 在這一年的 改善,我相信如果您想要開發一款包含大量複雜UI和動畫的2D/2.5D重度遊戲的話,白鹭引擎将是您的最佳選擇。

3D引擎日漸成熟且編輯器已穩定疊代

除了2D之外,我們今年對引擎的3D部分終于開始了穩定的疊代和進步,而不像前幾年那樣幾乎每一年半都推翻自己重來一次。

現在回想起來,如果說白鹭引擎在設計時最大的問題是什麼,我覺得就是他是一款以程式員為核心的開發工具,而非以遊戲設計師(策劃)為核心的創作工具。雖然白鹭引擎中也有可視化的工具,但是整體的産品設計思想都是圍繞着程式員這一工種進行的,當然這也和我們中國遊戲行業在特定年代工業化不成熟的局限性相關。

最近看了一篇文章,心動遊戲CEO黃一孟提到,心動聯合創始人戴雲傑的企業微信簽名是「2D遊戲的策劃用Excel做遊戲,3D遊戲的策劃用引擎做遊戲」。這篇文章看完之後我感到感慨萬千,Egret3D 經曆在2016年和2017年分别經曆了兩次失敗的研發過程。第一次是按照做2D渲染架構的思路去開發一款3D引擎,第二次則是參考 Unity 的API 設計,但是仍然僅僅是一套代碼庫而已,本質上都是圍繞着程式員為中心,把遊戲策劃作為一個“填excel表”的工種,而不是引擎的直接使用者。這種做法使得我們的之前開發的3D引擎雖然可以做出産品,但是使用者的使用門檻非常高,相比其他主流3D遊戲引擎(比如Unity,Unreal)在開發效率上存在巨大差距。這些慘痛的經曆對我們團隊也是很深刻的教訓,讓我意識到了一款優秀的3D引擎必須首先是運作時與可視化編輯器一體化的産品,并且其運作時在開發前就應充分考慮編輯器需求而去設計。

在 Egret3D 經曆了2016年和2017年連續兩次的失敗之後,我們第三次從頭出發,打磨三年,在2019年底釋出了可視化3D編輯器 EgretPro 。它代表着我們對一個真正的遊戲引擎該有的樣子的初步描繪,即采用了元件實體系統架構,這種架構強調以資料為中心,将業務邏輯和資料進行分離,而這也是近兩年國内外遊戲引擎設計方向上的一個趨勢。就實踐項目來看,使用這種元件實體系統架構存在幾個優勢,一是友善進行跨程式設計語言引擎的設計,二是關注點分離,友善資料在不同業務場景下的差異化進行橫向複用而非傳統的縱向複用。

堅守初心,白鹭引擎七年之癢

EgretPro作為白鹭新研發的3D編輯器,底層的包含了我們這兩年新研發的基于 WebGL 1.0 的渲染器。目前EgretPro比較适合開發兩種類型的遊戲,一類是輕度休閑3D遊戲,另一類是在現有重度2D遊戲中添加3D場景和人物等元素。我們今年針對這兩種場景分别做了詳細的視訊教程,不少開發者都表示看完教程之後直接下載下傳示例Demo就可以快速上手。

在EgretPro釋出之後有不少開發者向我詢問,什麼時候可以比肩Unity,Unreal這樣的畫質效果。我認為這一步對白鹭來說還需要很長的路要走,并且在2021年也不是白鹭的既定目标,我想借這個機會也和各位開發者說說我的想法。

Egret Pro 3D功能示範

首先,我認為一款優秀的遊戲引擎應該發揮其優勢,而不是盲目的去和市面上其他競品比較。白鹭引擎既然目前定位在 Web平台(包括小遊戲平台)并逐漸向原生手遊平台擴充這一目标,就應更務實的去設計這些平台所能承載的運作時功能。說的直白一些,如果隻是單純的去實作 Unity/Unreal有的而白鹭沒有的功能,那這樣的話開發者為何不直接使用Unity/Unreal呢?除此之外,一些進階光效渲染基本都需要WebGL 2.0 的支援,但是蘋果已經三年沒有在這項标準上有任何動作(反而搞了一個未必能成為Web标準的WebGPU接口),另一些功能(比如複雜3D實體)完全不是 JavaScript 可以承載的體量,目前來看必須采用 WebAssembly實作,但是 WebAssembly的現實問題又是 JS-WASM的調用過程開銷仍然巨大,是以HTML5遊戲的最終答案應該是所有邏輯均采用WebAssembly實作。是以我們後續實作 WebAssembly化而繼續努力,而不是把精力放在使用JavaScript 實作進階3D功能上。

關于2021年的研發方向

上面提到了一些白鹭引擎在2021年不會重點做的事,接下來我也想說一下我們2021年的重點會放在哪裡。

回顧2020年,整個引擎都是處于圍繞目前的核心開發者群體進行不斷完善的過程,并沒有跨越性的新功能,但這并不意味着我們内部沒有嘗試。我們接下來會圍繞着以下幾個問題進行進一步的完善:

  1. 将 Egret Engine(即 JavaScript運作時庫和編譯器)和 Egret Native 進行産品一體化,重點為原生遊戲開發帶來更強大的開發調試功能以及性能和穩定性提升,逐漸完成從HTML5遊戲引擎到全平台遊戲引擎的轉變。
  2. EgretPro 的ECS架構為白鹭引擎的後續計劃打下了一個非常優秀的基礎,明年我們會嘗試在白鹭引擎中充分利用 ECS 的資料與行為邏輯分離的特性,實作JS-WASM的跨語言調用架構,然後漸進式的将引擎部分功能逐漸從 JavaScript 向 WebAssembly 遷移,并探索解決如何讓 TypeScript 開發者可以直接開發 WebAssembly應用的編譯工具鍊。目前我們已經在一個實驗性項目中實作了 DragonBones 的WebAssebmly化,後續我們會在版本優化完善後逐漸釋出。
  3. 在今年我們發現目前在遊戲之外,白鹭引擎也存在着不少應用場景,比如經常有開發者向我詢問是否可以把白鹭引擎在微信小程式而非小遊戲容器中渲染,以解決他們需要在小程式中引入更多遊戲化内容的需求。雖然現在通過一些dirty-hack也可以實作這些功能,但我們明年準備将這些需求納入白鹭的直接支援目标。
  4. 同時我們也發現了其他行業的一些強烈需求,特别是線上教育領域,今年有超過20家創業公司來尋求技術支援,他們已經基于白鹭引擎做出了自己的産品,我們将深度支援這類客戶,并推出完整的解決方案。

寫在最後

七年前的這個時候,和我的搭檔與老闆陳書藝已經一起做了五六年的遊戲研發,從2008年我們在PC頁遊上采用JS開發出當年校内和51榜首的《新同居時代》,到11年3月我們孵化盤辰工作室探索HTML5遊戲的捕魚類産品,再到12年我們成為業内第一個采用Cocos2d-x JSB/H5完整開發出手遊《一二三國》和《鹿鼎遊》,2013年我也在Cocos開發者大會上做了關于FLash技術轉型和HTML5探索的公開分享,但很遺憾的是我們一直沒有找到可以讓自己滿意的超高效率開發解決方案。

老闆是一個理想化的人,在我和研發團隊不斷吐槽下,2013年底書藝問我,有沒有可能基于公司這些年在HTML5遊戲開發過程中積累下來的經驗自己開發一個遊戲引擎? 至少可以滿足跟我們一樣有需求的開發者,解決它們的痛點。當時的我正在沒日沒夜的與 iPhone 4和小米1的内置浏覽器搏鬥了半年,我并沒有信心能夠做出一個讓所有人滿意的作品,但基于現實的需求和痛點,我寫下了第一行代碼。

老闆為我們的引擎起了一個優雅的名字,白鹭引擎。寓意是像白鹭鳥一樣優美、輕便,又是完全屬于我們國産原創的作品。

在這很也許有些輕率的決定後,已經過了整整堅持七年的時間。現在回想起那個時刻,真的是感覺自己“初生牛犢不怕虎”,一腳踏入遊戲引擎開發這個“無底洞”,在這個過程中經曆了無數的波折,有位于事業頂峰的輕狂,也有被人質疑的困窘,在這七年裡我親眼見證了上百家公司使用白鹭引擎開發遊戲日進鬥金,也見證了許多研發同僚因為開發白鹭引擎不如用白鹭引擎做遊戲掙錢而被遊戲公司高薪挖走。

盡管如此,作為白鹭的003号員工和白鹭引擎的作者,我仍然堅定的為我和我的團隊感到自豪,因為前面還有更多的挑戰和開創性的工作等着我們去探索。

三十而立,我的孩子也将在這兩周出生,我相信再過十年後,我可以眉飛色舞的和他炫耀他老爸完成了一段令人羨慕的人生旅程。

繼續閱讀