里程碑級(jí)更新!全方位大幅進(jìn)化的 Cocos Creator 3.6,開(kāi)啟 3D/2D 創(chuàng)作新篇章
原創(chuàng)從 v3.0 的 2D 和 3D 融合開(kāi)始至今,開(kāi)發(fā)者陪伴我們一起經(jīng)歷了六個(gè)大版本。這其中加入重要的平臺(tái)伙伴,如HarmonyOS 全球首家和 Nintendo Switch 國(guó)內(nèi)首家支持;優(yōu)化了光照模型,支持了移動(dòng)端延遲渲染管線;增加了一些必要的 3D 功能特性如 Marionette 動(dòng)畫圖系統(tǒng);針對(duì) 2D 項(xiàng)目的開(kāi)發(fā)體驗(yàn)提升和性能優(yōu)化。積跬步、至千里,我們相信這一步一步的進(jìn)化將使引擎日益走向成熟與強(qiáng)大。
在 Cocos 團(tuán)隊(duì)內(nèi)部,我們一直將 Cocos Creator 3.6 視作 v3.0 合并版本之后最重要的里程碑版本。v3.6 是迄今為止迭代周期最長(zhǎng)的一個(gè)版本,在多個(gè)方面大幅進(jìn)化,讓 Cocos 引擎在 3D & 2D 開(kāi)發(fā)上體驗(yàn)更好、性能更高、效果更出眾。

去年 v3.3 發(fā)布之后,原生化團(tuán)隊(duì)就開(kāi)始了針對(duì) v3.6 版本目標(biāo)的開(kāi)發(fā)工作。商業(yè)引擎服務(wù)于全行業(yè)的特殊性,決定了它既要緊跟硬件發(fā)展,不斷挑戰(zhàn)最好的性能、最優(yōu)秀的畫面表現(xiàn)力,也要在生產(chǎn)端不斷提升生產(chǎn)效率,保持對(duì)項(xiàng)目的兼容性和對(duì)不同硬件環(huán)境的伸縮性適配。這些挑戰(zhàn)意味著引擎需要對(duì)底層框架進(jìn)行持續(xù)的迭代和重構(gòu),這個(gè)過(guò)程需要較長(zhǎng)的周期,有時(shí)候是破壞性的,比如從 2D 引擎進(jìn)化為 3D 引擎,而大多數(shù)時(shí)候這種迭代則是延續(xù)性的,比如我們?cè)?v3.6 的原生化進(jìn)展。
盡管花費(fèi)了一年時(shí)間,進(jìn)行了多個(gè)階段和多個(gè)模塊的重構(gòu),原生層代碼增加了兩倍多,但我們?nèi)匀辉诖蠓葍?yōu)化性能的基礎(chǔ)上做到了對(duì)老項(xiàng)目的兼容。這樣的底層重構(gòu)一方面帶來(lái)了可見(jiàn)的性能和表現(xiàn)力提升,另一方面,也為了未來(lái)的進(jìn)一步迭代掃清障礙、做好準(zhǔn)備。從 v3.6 的研發(fā)與誕生,大家也可以看到引擎開(kāi)發(fā)永恒的命題:持續(xù)不斷地自我變革,以適應(yīng)硬件的更新和用戶需求的變化。


v3.6 還有一個(gè)非常重要的、開(kāi)發(fā)者都很關(guān)心的提升,那就是 v3.6 在 2D 渲染性能上達(dá)到了和 v2.x 同樣的水準(zhǔn),這意味著 v2.x 用戶如果有 3D 或持續(xù)迭代的需求可以放心升級(jí)到 v3.x。
在底層原生化的基礎(chǔ)之上,我們進(jìn)一步將 2D 渲染數(shù)據(jù)結(jié)構(gòu)、2D 合批管理器和渲染流程都原生化了,讓 2D 合批和提交渲染的流程都在原生進(jìn)行,以達(dá)到類似 v2.x 的性能表現(xiàn)。當(dāng)然,現(xiàn)階段還有部分遺留工作沒(méi)有全部完成,比如 Spine 的合批支持,這也代表著在原生化的基礎(chǔ)之上,v3.x 的 2D 渲染性能還有更高的天花板等待我們?nèi)ネ黄啤?/span>

而在版本進(jìn)化方面,v3.6 帶來(lái)了新的界面設(shè)計(jì)、新的材質(zhì)API、新的導(dǎo)入體驗(yàn),以及動(dòng)畫嵌入播放器、粒子噪聲圖等新功能。從用戶角度來(lái)說(shuō),這些變化意味著什么呢?

首先是編輯器的 UI 和交互體驗(yàn)進(jìn)化,數(shù)百個(gè)細(xì)節(jié)修改后,開(kāi)發(fā)者一定能直觀地感受到編輯器看起來(lái)更舒適了,使用體驗(yàn)更好了;其次是光照模型和渲染算法上的一系列新特性將讓你的游戲畫面媲美現(xiàn)代移動(dòng)端游戲品質(zhì),尤其是下文將展示的級(jí)聯(lián)陰影和各向異性材質(zhì),一定會(huì)讓你眼前一亮。最后,v3.6 中有多項(xiàng)功能是產(chǎn)品驅(qū)動(dòng)開(kāi)發(fā),從用戶需求出發(fā)去拆解需求、設(shè)計(jì)功能,功能實(shí)現(xiàn)后還會(huì)進(jìn)行產(chǎn)品側(cè)的審核和驗(yàn)證。基于這一流程我們完成了多語(yǔ)言編輯器工具、動(dòng)畫嵌入播放器、編輯器預(yù)覽、粒子噪聲圖等功能,相信產(chǎn)品驅(qū)動(dòng)開(kāi)發(fā)的模式將會(huì)讓引擎未來(lái)提供的各項(xiàng)能力更加成熟易用。
以下是 v3.6 的部分重要更新,完整更新內(nèi)容請(qǐng)前往官網(wǎng)查看。
圖形渲染
Surface Shader 自定義材質(zhì)
Surface Shader 使用統(tǒng)一渲染流程和結(jié)構(gòu),可以讓用戶以簡(jiǎn)潔的代碼創(chuàng)建表面材質(zhì)信息,指定用于組合的光照和著色模型。相比舊版(Legacy Shader),它的優(yōu)點(diǎn)是更易書寫和維護(hù),有更好的版本兼容性,也更不容易產(chǎn)生渲染錯(cuò)誤,并且可以從統(tǒng)一流程中獲取很多公共特性,如統(tǒng)一的全場(chǎng)景光照和 Debug View 調(diào)試功能等。
基于此,Cocos Creator 將更易擴(kuò)展出多種常見(jiàn)的復(fù)雜材質(zhì)提供給用戶,未來(lái)還將支持 Shader Graph 自動(dòng)生成 Effect 代碼,大幅提高 Shader 開(kāi)發(fā)效率。
Rendering Debug View 模式
多種自定義的顯示模式,將幫助用戶更快定位各種材質(zhì)、光照、陰影顯示問(wèn)題,方便用戶查看更清晰的特定場(chǎng)景信息,幫助用戶做出優(yōu)化決定。
CSM 級(jí)聯(lián)陰影
普通的陰影貼圖有一個(gè)致命弱點(diǎn):當(dāng)投影面積較大時(shí),對(duì)陰影貼圖分辨率的需求會(huì)超出硬件承載極限。如果不提高分辨率會(huì)導(dǎo)致陰影鋸齒嚴(yán)重、形狀缺失、不清晰,但減小投影面積又會(huì)導(dǎo)致陰影可視距離非常短。陰影可視距離和陰影效果的平衡調(diào)整是一個(gè)非常令人頭痛的問(wèn)題。

CSM 級(jí)聯(lián)陰影將視錐按遠(yuǎn)近順序劃分為多塊,近處投影范圍更小而遠(yuǎn)處投影范圍更大,相當(dāng)于一個(gè)自適應(yīng)的陰影貼圖,從而數(shù)倍提高貼圖利用率。它可以在較大的陰影可視距離上依然具備精細(xì)的陰影效果,開(kāi)發(fā)者無(wú)需再把精力花費(fèi)在參數(shù)調(diào)校上。
GGX 環(huán)境反射卷積圖


AutoGen Mip(上)vs GGX Convolution(下)

GGX(左)vs dir(中)vs mip(右)
由于精確光源的高光都是使用 GGX 的 BRDF 分布,對(duì)于環(huán)境光源而言也必須使用同樣的 BRDF 做球面卷積才可以讓兩種光源的光照效果對(duì)應(yīng)。此外不同粗糙度的反射光照是存儲(chǔ)在對(duì)應(yīng)的 Mip 中,相比于自動(dòng)生成的 Mip 數(shù)據(jù),卷積計(jì)算可以修復(fù)以下問(wèn)題:
1. 環(huán)境高光的泛光和拖尾現(xiàn)象被極大削減;
2. 與 Substaince 的標(biāo)準(zhǔn) PBR 材質(zhì)工作流效果對(duì)不上;
3. 行光高光和環(huán)境光高光效果對(duì)不上。
各向異性光照模型

通過(guò) Surface Shader 帶來(lái)的好處,我們可以充分?jǐn)U展 PBR 光照模型。v3.6 完整支持了在精確光源和環(huán)境光源下,各向同性和各向異性的材質(zhì)與光照模型,我們可以對(duì)接 Substaince PBR 材質(zhì)庫(kù),制作拉絲紋路的金屬、頭發(fā)、絲綢等等。
編輯器 UI 全面升級(jí)

v3.6 啟用了全新的編輯器 UI,圍繞「更協(xié)調(diào)」的視覺(jué)系統(tǒng)、「更科學(xué)」的視覺(jué)反饋、「更沉浸」的交互感受,對(duì) UI 和交互進(jìn)行了一次全方位的梳理。我們希望通過(guò)交互來(lái)改善視覺(jué)感受,通過(guò)視覺(jué)來(lái)影響交互體驗(yàn),從這兩個(gè)層面進(jìn)一步提高用戶體驗(yàn)。
未來(lái)我們將繼續(xù)基于 Cocos 的設(shè)計(jì)目標(biāo)、設(shè)計(jì)系統(tǒng)、設(shè)計(jì)原則進(jìn)行規(guī)范化設(shè)計(jì),持續(xù)更新迭代,優(yōu)化核心交互和工作流程。
支持編輯器預(yù)覽模式
開(kāi)發(fā)效率是 Cocos Creator 非常重視的一項(xiàng)核心優(yōu)勢(shì),在 v3.6 中這項(xiàng)優(yōu)勢(shì)得到了進(jìn)一步提升。除了網(wǎng)頁(yè)預(yù)覽和模擬器預(yù)覽,現(xiàn)在開(kāi)發(fā)者還可以使用「編輯器預(yù)覽」來(lái)運(yùn)行游戲。「編輯器預(yù)覽」將在場(chǎng)景管理器中直接執(zhí)行游戲邏輯,并且可以實(shí)時(shí)調(diào)試游戲場(chǎng)景,帶來(lái)更無(wú)縫的預(yù)覽體驗(yàn),同時(shí)補(bǔ)足原先在調(diào)試方面的短板。
此功能目前處于實(shí)驗(yàn)性階段,歡迎大家在使用過(guò)程中給我們更多反饋。未來(lái)我們也將持續(xù)關(guān)注研發(fā)效率,在腳本編譯、項(xiàng)目調(diào)試、構(gòu)建發(fā)布環(huán)節(jié)持續(xù)提升用戶體驗(yàn)。
動(dòng)畫嵌入播放器

動(dòng)畫編輯器新增了嵌入播放器功能,支持在任意動(dòng)畫中嵌入其他粒子和動(dòng)畫,并用類似視頻剪輯軟件軌道的方式進(jìn)行編排,自由調(diào)整時(shí)長(zhǎng)和播放位置。
在完成編輯之后,嵌入播放器的內(nèi)容會(huì)伴隨此條動(dòng)畫剪輯(AnimationClip)一起播放,在 Animation 組件和動(dòng)畫圖系統(tǒng)中均有支持。此外,動(dòng)畫嵌入播放器支持添加到 FBX導(dǎo)入的動(dòng)畫上,可以實(shí)現(xiàn)更靈活的特效控制,解決了導(dǎo)入動(dòng)畫難以二次編輯的問(wèn)題。
目前 v3.6 提供了粒子和動(dòng)畫兩種播放器,可以在實(shí)驗(yàn)室設(shè)置中啟用。
集成多語(yǔ)言支持
為了更好地服務(wù)開(kāi)發(fā)者出海,v3.6 新增內(nèi)置多語(yǔ)言工具 Localization Editor(L10n),目前支持文本翻譯和資源替換。L10n 與 Cocos Creator 深度集成,通過(guò)高自動(dòng)化提高翻譯效率,并且以無(wú)代碼的方式降低使用門檻,實(shí)現(xiàn)「開(kāi)箱即用」。其核心功能包括:
- 支持機(jī)器翻譯,目前接入了 Google、有道翻譯。

- 支持一鍵提取各類需要翻譯的內(nèi)容。

- 支持 Excel、csv、po 文件批量導(dǎo)入導(dǎo)出。

- 支持多語(yǔ)言實(shí)時(shí)預(yù)覽及資源替換。

Localization Editor(L10n)目前處于實(shí)驗(yàn)性階段,未來(lái)將提供更豐富的游戲本地化能力,歡迎大家使用并提供反饋。
其他更新
動(dòng)畫圖(Marionette)
- 支持動(dòng)畫預(yù)覽。

- 支持變量和 Layer 重命名。
- 支持過(guò)渡線的排序。
- 增加了「終點(diǎn)起始時(shí)間」屬性,允許過(guò)渡的目標(biāo)動(dòng)畫從指定位置開(kāi)始播放。
- 動(dòng)畫圖現(xiàn)在可以將某個(gè)過(guò)渡配置為可中斷的,以允許指定的過(guò)渡被其它的過(guò)渡中斷。該功能可在實(shí)驗(yàn)室設(shè)置中啟用。
編輯器構(gòu)建
- 構(gòu)建面板可以在界面上自由組合相關(guān)任務(wù)一起執(zhí)行。
- 資源服務(wù)地址已作為全平臺(tái)共用參數(shù),支持一鍵使用構(gòu)建內(nèi)置服務(wù)器,方便本地開(kāi)發(fā)測(cè)試。

- 優(yōu)化了構(gòu)建內(nèi)編譯引擎與編譯腳本的任務(wù)調(diào)度,獨(dú)立進(jìn)程執(zhí)行,降低構(gòu)建進(jìn)程對(duì)內(nèi)存的占用。
- 允許在偏好設(shè)置里關(guān)閉構(gòu)建紋理壓縮、引擎、自動(dòng)圖集對(duì)緩存的使用。
粒子系統(tǒng)
- 支持粒子噪聲圖。v3.6 的粒子系統(tǒng)新增了 Noise 模組,為粒子帶來(lái)更自然、更可控的隨機(jī)運(yùn)動(dòng)效果。


- 支持 Instanced Mesh,提升發(fā)射器的性能。
- 修復(fù)粒子編輯面板不支持 Undo 的問(wèn)題,方便調(diào)試。
- 支持子節(jié)點(diǎn)樹(shù)的組合粒子預(yù)覽控制。

不再默認(rèn)拆分模型

由于 uniform 的限制,當(dāng)骨骼數(shù)量超過(guò)一定值后,無(wú)法一次性提交給顯卡渲染,此時(shí)就需要做特殊處理。
常見(jiàn)的處理方法有兩種:
1. 拆分模型和骨骼,分批提交。
2. 使用紋理傳輸骨骼動(dòng)畫數(shù)據(jù)。
在 v3.6 之前,模型拆分功能默認(rèn)是開(kāi)啟的。這是考慮到,當(dāng)模型骨骼未超出 uniform 限制時(shí),直接使用 uniform 傳遞骨骼動(dòng)畫數(shù)據(jù)所需的性能會(huì)高于使用紋理傳輸骨骼動(dòng)畫數(shù)據(jù)。很多用戶反饋說(shuō)自己的一個(gè)人物模型會(huì)占用多個(gè) DrawCall,主要原因就是這里被自動(dòng)拆分了,但開(kāi)發(fā)者并不知情。
v3.6 對(duì)這一問(wèn)題做了策略優(yōu)化:
1. 默認(rèn)情況下不再拆分模型,不對(duì)導(dǎo)入的模型數(shù)據(jù)做修改。
2. 如果骨骼數(shù)量未超過(guò)限制,直接使用 uniform 傳遞。
3. 如果骨骼數(shù)量超過(guò)限制,則使用紋理傳遞。
使用紋理傳遞骨骼動(dòng)畫數(shù)據(jù)的方式需要在頂點(diǎn)著色器中訪問(wèn)紋理,這一特性最低支持為 OpenGL ES 3.0,WebGL 2.0。但依靠 GL 擴(kuò)展,在僅支持 OpenGL ES 2.0 和 WebGL 1.0 設(shè)備上,幾乎已達(dá)到 100% 的覆蓋率,所以無(wú)需擔(dān)心兼容問(wèn)題。目前保留此選項(xiàng)應(yīng)該只是為了保持舊項(xiàng)目的兼容性,在適當(dāng)?shù)臅r(shí)候會(huì)考慮移除。
場(chǎng)景編輯器
- 支持表面吸附和頂點(diǎn)吸附。

表面吸附(Surface Snapping)

頂點(diǎn)吸附(Vertex Snapping)
- 支持框選功能,可以批量選中多個(gè)物體。

已知問(wèn)題與升級(jí)提示
- 移除 Win32 支持,僅保留 Win64 發(fā)布。
- iOS 最低版本支持從 iOS 10 變更為 iOS 11(為了使用 C++ 17)。
- 內(nèi)置材質(zhì)的命名和編輯器中的命名保持統(tǒng)一,因此
EffectAsset.get、Material.initialize 中使用內(nèi)置 Effect 時(shí)通常需要加上「builtin-」前綴。 - 構(gòu)建模板中 application.js,
game.js, index.js 等文件被更新了,如果有在項(xiàng)目或者構(gòu)建插件中自定義過(guò)模板,請(qǐng)重新生成并做相應(yīng)修改。詳見(jiàn)升級(jí)文檔[1]。 - settings.json 格式發(fā)生修改,對(duì)這個(gè)文件做了定制化處理的插件可能會(huì)無(wú)法使用。詳見(jiàn)升級(jí)文檔[1]。
- mask 下現(xiàn)在存在一個(gè)渲染 mask 內(nèi)容的子節(jié)點(diǎn),這會(huì)造成 mask
下的用戶子節(jié)點(diǎn)的索引與用戶可見(jiàn)的節(jié)點(diǎn)樹(shù)不一致,建議不直接使用硬編碼來(lái)獲取索引位置的子節(jié)點(diǎn)以免與預(yù)期不一致。
v3.6 還修復(fù)了引擎編輯器的一些已知問(wèn)題,優(yōu)化了用戶體驗(yàn)。歡迎點(diǎn)擊前往官網(wǎng)查看完整更新內(nèi)容,下載并體驗(yàn) Cocos Creator 3.6。再次感謝開(kāi)發(fā)者的支持!
鏈接:https://www.cocos.com/?media_source=51cto



























