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

王澤發表於2020-12-11
堅守初心,白鷺引擎七年之癢

作者:王澤
本文轉載出自知乎:https://zhuanlan.zhihu.com/p/335604641

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

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

這兩年經常有一些朋友來找我關心白鷺的動向,因為行業環境的原因我們市場發聲變少了,產品釋出節奏也慢了下來,人無名則安心練劍,年關將近,作為白鷺引擎的作者,我來和大家聊一聊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號員工和白鷺引擎的作者,我仍然堅定的為我和我的團隊感到自豪,因為前面還有更多的挑戰和開創性的工作等著我們去探索。

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

王澤

相關文章