里程碑級更新!全方位大幅進化的 Cocos Creator 3.6,開啟 3D/2D 創(chuàng)作新篇章
原創(chuàng)從 v3.0 的 2D 和 3D 融合開始至今,開發(fā)者陪伴我們一起經(jīng)歷了六個大版本。這其中加入重要的平臺伙伴,如HarmonyOS 全球首家和 Nintendo Switch 國內(nèi)首家支持;優(yōu)化了光照模型,支持了移動端延遲渲染管線;增加了一些必要的 3D 功能特性如 Marionette 動畫圖系統(tǒng);針對 2D 項目的開發(fā)體驗提升和性能優(yōu)化。積跬步、至千里,我們相信這一步一步的進化將使引擎日益走向成熟與強大。
在 Cocos 團隊內(nèi)部,我們一直將 Cocos Creator 3.6 視作 v3.0 合并版本之后最重要的里程碑版本。v3.6 是迄今為止迭代周期最長的一個版本,在多個方面大幅進化,讓 Cocos 引擎在 3D & 2D 開發(fā)上體驗更好、性能更高、效果更出眾。
去年 v3.3 發(fā)布之后,原生化團隊就開始了針對 v3.6 版本目標的開發(fā)工作。商業(yè)引擎服務于全行業(yè)的特殊性,決定了它既要緊跟硬件發(fā)展,不斷挑戰(zhàn)最好的性能、最優(yōu)秀的畫面表現(xiàn)力,也要在生產(chǎn)端不斷提升生產(chǎn)效率,保持對項目的兼容性和對不同硬件環(huán)境的伸縮性適配。這些挑戰(zhàn)意味著引擎需要對底層框架進行持續(xù)的迭代和重構(gòu),這個過程需要較長的周期,有時候是破壞性的,比如從 2D 引擎進化為 3D 引擎,而大多數(shù)時候這種迭代則是延續(xù)性的,比如我們在 v3.6 的原生化進展。
盡管花費了一年時間,進行了多個階段和多個模塊的重構(gòu),原生層代碼增加了兩倍多,但我們?nèi)匀辉诖蠓葍?yōu)化性能的基礎上做到了對老項目的兼容。這樣的底層重構(gòu)一方面帶來了可見的性能和表現(xiàn)力提升,另一方面,也為了未來的進一步迭代掃清障礙、做好準備。從 v3.6 的研發(fā)與誕生,大家也可以看到引擎開發(fā)永恒的命題:持續(xù)不斷地自我變革,以適應硬件的更新和用戶需求的變化。
v3.6 還有一個非常重要的、開發(fā)者都很關心的提升,那就是 v3.6 在 2D 渲染性能上達到了和 v2.x 同樣的水準,這意味著 v2.x 用戶如果有 3D 或持續(xù)迭代的需求可以放心升級到 v3.x。
在底層原生化的基礎之上,我們進一步將 2D 渲染數(shù)據(jù)結(jié)構(gòu)、2D 合批管理器和渲染流程都原生化了,讓 2D 合批和提交渲染的流程都在原生進行,以達到類似 v2.x 的性能表現(xiàn)。當然,現(xiàn)階段還有部分遺留工作沒有全部完成,比如 Spine 的合批支持,這也代表著在原生化的基礎之上,v3.x 的 2D 渲染性能還有更高的天花板等待我們?nèi)ネ黄啤?/span>
而在版本進化方面,v3.6 帶來了新的界面設計、新的材質(zhì)API、新的導入體驗,以及動畫嵌入播放器、粒子噪聲圖等新功能。從用戶角度來說,這些變化意味著什么呢?
首先是編輯器的 UI 和交互體驗進化,數(shù)百個細節(jié)修改后,開發(fā)者一定能直觀地感受到編輯器看起來更舒適了,使用體驗更好了;其次是光照模型和渲染算法上的一系列新特性將讓你的游戲畫面媲美現(xiàn)代移動端游戲品質(zhì),尤其是下文將展示的級聯(lián)陰影和各向異性材質(zhì),一定會讓你眼前一亮。最后,v3.6 中有多項功能是產(chǎn)品驅(qū)動開發(fā),從用戶需求出發(fā)去拆解需求、設計功能,功能實現(xiàn)后還會進行產(chǎn)品側(cè)的審核和驗證。基于這一流程我們完成了多語言編輯器工具、動畫嵌入播放器、編輯器預覽、粒子噪聲圖等功能,相信產(chǎn)品驅(qū)動開發(fā)的模式將會讓引擎未來提供的各項能力更加成熟易用。
以下是 v3.6 的部分重要更新,完整更新內(nèi)容請前往官網(wǎng)查看。
圖形渲染
Surface Shader 自定義材質(zhì)
Surface Shader 使用統(tǒng)一渲染流程和結(jié)構(gòu),可以讓用戶以簡潔的代碼創(chuàng)建表面材質(zhì)信息,指定用于組合的光照和著色模型。相比舊版(Legacy Shader),它的優(yōu)點是更易書寫和維護,有更好的版本兼容性,也更不容易產(chǎn)生渲染錯誤,并且可以從統(tǒng)一流程中獲取很多公共特性,如統(tǒng)一的全場景光照和 Debug View 調(diào)試功能等。
基于此,Cocos Creator 將更易擴展出多種常見的復雜材質(zhì)提供給用戶,未來還將支持 Shader Graph 自動生成 Effect 代碼,大幅提高 Shader 開發(fā)效率。
Rendering Debug View 模式
多種自定義的顯示模式,將幫助用戶更快定位各種材質(zhì)、光照、陰影顯示問題,方便用戶查看更清晰的特定場景信息,幫助用戶做出優(yōu)化決定。
CSM 級聯(lián)陰影
普通的陰影貼圖有一個致命弱點:當投影面積較大時,對陰影貼圖分辨率的需求會超出硬件承載極限。如果不提高分辨率會導致陰影鋸齒嚴重、形狀缺失、不清晰,但減小投影面積又會導致陰影可視距離非常短。陰影可視距離和陰影效果的平衡調(diào)整是一個非常令人頭痛的問題。
CSM 級聯(lián)陰影將視錐按遠近順序劃分為多塊,近處投影范圍更小而遠處投影范圍更大,相當于一個自適應的陰影貼圖,從而數(shù)倍提高貼圖利用率。它可以在較大的陰影可視距離上依然具備精細的陰影效果,開發(fā)者無需再把精力花費在參數(shù)調(diào)校上。
GGX 環(huán)境反射卷積圖
AutoGen Mip(上)vs GGX Convolution(下)
GGX(左)vs dir(中)vs mip(右)
由于精確光源的高光都是使用 GGX 的 BRDF 分布,對于環(huán)境光源而言也必須使用同樣的 BRDF 做球面卷積才可以讓兩種光源的光照效果對應。此外不同粗糙度的反射光照是存儲在對應的 Mip 中,相比于自動生成的 Mip 數(shù)據(jù),卷積計算可以修復以下問題:
1. 環(huán)境高光的泛光和拖尾現(xiàn)象被極大削減;
2. 與 Substaince 的標準 PBR 材質(zhì)工作流效果對不上;
3. 行光高光和環(huán)境光高光效果對不上。
各向異性光照模型
通過 Surface Shader 帶來的好處,我們可以充分擴展 PBR 光照模型。v3.6 完整支持了在精確光源和環(huán)境光源下,各向同性和各向異性的材質(zhì)與光照模型,我們可以對接 Substaince PBR 材質(zhì)庫,制作拉絲紋路的金屬、頭發(fā)、絲綢等等。
編輯器 UI 全面升級
v3.6 啟用了全新的編輯器 UI,圍繞「更協(xié)調(diào)」的視覺系統(tǒng)、「更科學」的視覺反饋、「更沉浸」的交互感受,對 UI 和交互進行了一次全方位的梳理。我們希望通過交互來改善視覺感受,通過視覺來影響交互體驗,從這兩個層面進一步提高用戶體驗。
未來我們將繼續(xù)基于 Cocos 的設計目標、設計系統(tǒng)、設計原則進行規(guī)范化設計,持續(xù)更新迭代,優(yōu)化核心交互和工作流程。
支持編輯器預覽模式
開發(fā)效率是 Cocos Creator 非常重視的一項核心優(yōu)勢,在 v3.6 中這項優(yōu)勢得到了進一步提升。除了網(wǎng)頁預覽和模擬器預覽,現(xiàn)在開發(fā)者還可以使用「編輯器預覽」來運行游戲。「編輯器預覽」將在場景管理器中直接執(zhí)行游戲邏輯,并且可以實時調(diào)試游戲場景,帶來更無縫的預覽體驗,同時補足原先在調(diào)試方面的短板。
此功能目前處于實驗性階段,歡迎大家在使用過程中給我們更多反饋。未來我們也將持續(xù)關注研發(fā)效率,在腳本編譯、項目調(diào)試、構(gòu)建發(fā)布環(huán)節(jié)持續(xù)提升用戶體驗。
動畫嵌入播放器
動畫編輯器新增了嵌入播放器功能,支持在任意動畫中嵌入其他粒子和動畫,并用類似視頻剪輯軟件軌道的方式進行編排,自由調(diào)整時長和播放位置。
在完成編輯之后,嵌入播放器的內(nèi)容會伴隨此條動畫剪輯(AnimationClip)一起播放,在 Animation 組件和動畫圖系統(tǒng)中均有支持。此外,動畫嵌入播放器支持添加到 FBX導入的動畫上,可以實現(xiàn)更靈活的特效控制,解決了導入動畫難以二次編輯的問題。
目前 v3.6 提供了粒子和動畫兩種播放器,可以在實驗室設置中啟用。
集成多語言支持
為了更好地服務開發(fā)者出海,v3.6 新增內(nèi)置多語言工具 Localization Editor(L10n),目前支持文本翻譯和資源替換。L10n 與 Cocos Creator 深度集成,通過高自動化提高翻譯效率,并且以無代碼的方式降低使用門檻,實現(xiàn)「開箱即用」。其核心功能包括:
- 支持機器翻譯,目前接入了 Google、有道翻譯。
- 支持一鍵提取各類需要翻譯的內(nèi)容。
- 支持 Excel、csv、po 文件批量導入導出。
- 支持多語言實時預覽及資源替換。
Localization Editor(L10n)目前處于實驗性階段,未來將提供更豐富的游戲本地化能力,歡迎大家使用并提供反饋。
其他更新
動畫圖(Marionette)
- 支持動畫預覽。
- 支持變量和 Layer 重命名。
- 支持過渡線的排序。
- 增加了「終點起始時間」屬性,允許過渡的目標動畫從指定位置開始播放。
- 動畫圖現(xiàn)在可以將某個過渡配置為可中斷的,以允許指定的過渡被其它的過渡中斷。該功能可在實驗室設置中啟用。
編輯器構(gòu)建
- 構(gòu)建面板可以在界面上自由組合相關任務一起執(zhí)行。
- 資源服務地址已作為全平臺共用參數(shù),支持一鍵使用構(gòu)建內(nèi)置服務器,方便本地開發(fā)測試。
- 優(yōu)化了構(gòu)建內(nèi)編譯引擎與編譯腳本的任務調(diào)度,獨立進程執(zhí)行,降低構(gòu)建進程對內(nèi)存的占用。
- 允許在偏好設置里關閉構(gòu)建紋理壓縮、引擎、自動圖集對緩存的使用。
粒子系統(tǒng)
- 支持粒子噪聲圖。v3.6 的粒子系統(tǒng)新增了 Noise 模組,為粒子帶來更自然、更可控的隨機運動效果。
- 支持 Instanced Mesh,提升發(fā)射器的性能。
- 修復粒子編輯面板不支持 Undo 的問題,方便調(diào)試。
- 支持子節(jié)點樹的組合粒子預覽控制。
不再默認拆分模型
由于 uniform 的限制,當骨骼數(shù)量超過一定值后,無法一次性提交給顯卡渲染,此時就需要做特殊處理。
常見的處理方法有兩種:
1. 拆分模型和骨骼,分批提交。
2. 使用紋理傳輸骨骼動畫數(shù)據(jù)。
在 v3.6 之前,模型拆分功能默認是開啟的。這是考慮到,當模型骨骼未超出 uniform 限制時,直接使用 uniform 傳遞骨骼動畫數(shù)據(jù)所需的性能會高于使用紋理傳輸骨骼動畫數(shù)據(jù)。很多用戶反饋說自己的一個人物模型會占用多個 DrawCall,主要原因就是這里被自動拆分了,但開發(fā)者并不知情。
v3.6 對這一問題做了策略優(yōu)化:
1. 默認情況下不再拆分模型,不對導入的模型數(shù)據(jù)做修改。
2. 如果骨骼數(shù)量未超過限制,直接使用 uniform 傳遞。
3. 如果骨骼數(shù)量超過限制,則使用紋理傳遞。
使用紋理傳遞骨骼動畫數(shù)據(jù)的方式需要在頂點著色器中訪問紋理,這一特性最低支持為 OpenGL ES 3.0,WebGL 2.0。但依靠 GL 擴展,在僅支持 OpenGL ES 2.0 和 WebGL 1.0 設備上,幾乎已達到 100% 的覆蓋率,所以無需擔心兼容問題。目前保留此選項應該只是為了保持舊項目的兼容性,在適當?shù)臅r候會考慮移除。
場景編輯器
- 支持表面吸附和頂點吸附。
表面吸附(Surface Snapping)
頂點吸附(Vertex Snapping)
- 支持框選功能,可以批量選中多個物體。
已知問題與升級提示
- 移除 Win32 支持,僅保留 Win64 發(fā)布。
- iOS 最低版本支持從 iOS 10 變更為 iOS 11(為了使用 C++ 17)。
- 內(nèi)置材質(zhì)的命名和編輯器中的命名保持統(tǒng)一,因此
EffectAsset.get、Material.initialize 中使用內(nèi)置 Effect 時通常需要加上「builtin-」前綴。 - 構(gòu)建模板中 application.js,
game.js, index.js 等文件被更新了,如果有在項目或者構(gòu)建插件中自定義過模板,請重新生成并做相應修改。詳見升級文檔[1]。 - settings.json 格式發(fā)生修改,對這個文件做了定制化處理的插件可能會無法使用。詳見升級文檔[1]。
- mask 下現(xiàn)在存在一個渲染 mask 內(nèi)容的子節(jié)點,這會造成 mask
下的用戶子節(jié)點的索引與用戶可見的節(jié)點樹不一致,建議不直接使用硬編碼來獲取索引位置的子節(jié)點以免與預期不一致。
v3.6 還修復了引擎編輯器的一些已知問題,優(yōu)化了用戶體驗。歡迎點擊前往官網(wǎng)查看完整更新內(nèi)容,下載并體驗 Cocos Creator 3.6。再次感謝開發(fā)者的支持!
鏈接:https://www.cocos.com/?media_source=51cto