Creator 3D v1.2 版本是 2D 和 3D 引擎融合前最后也是最重要的一次大版本更新,Cocos Creator 3D 這條支線也將停止在 v1.2.x 版本上。在 2020 最后的幾個月內,我們將盡全力帶給大家 2D 和 3D 融合后的 Cocos Creator v3.0 版本。在保障 3D 引擎平滑升級和原生性能大幅度提升的前提下,還會延續 Creator v2.x 在 2D 游戲領域的既有優勢。屆時 Creator 引擎將涅槃重生,開啟我們最為重要的新旅程:將 Cocos Creator 打造為世界級游戲引擎。
重大功能更新
編輯器插件系統
Cocos Creator 3D 的編輯器在 Creator 2.x 的基礎上做了大幅度的升級,其中最重要的升級就是編輯器框架重構為更徹底的微內核模式,幾乎所有功能模塊都是以插件形式存在于編輯器中。所以 3D 引擎從誕生之初就是天然支持插件擴展的,只是由于各個模塊消息和插件機制的整理進度,所以之前版本中一直都沒有開放插件體系給開發者。在最新的 v1.2 版本中,我們完成了基礎的插件機制文檔和各個模塊的插件接口、消息等,所以終于可以開放給開發者們,滿足大家定制工作流的需求。
新建一個插件非常簡單,只需要在擴展菜單中創建即可。擴展管理器中則可以管理所有擴展插件,你可以將擴展插件設置為全局或者是僅當前項目生效。


對插件開發感興趣的開發者可以關注下面兩個文檔鏈接:
在 v3.0 版本中,我們的插件商店也將迎來升級,同時包含 2.x 和 3.x 版本的插件,也會投注更大的努力在插件生態體系上,幫助開發者通過插件獲得收入。
光影增強
在之前的 Creator 3D 版本中,我們對光影的支持還不夠完善,僅能夠支撐一些較簡單的項目需求,具體限制是有兩點:
- 同一視角下,動態光源只允許兩盞
- 陰影只支持 Planar Shadow 平面投影
而在 v1.2 中,引擎對光源和陰影都做了重構和升級,目前已完成
- 基于多 Pass 的多光源支持,不過主方向光仍然只支持一盞
- 基于 Shadow Map 的方向光動態陰影,使用方式和之前的 Planar Shadow 平面陰影保持一致
- Shadow Map 支持 pcf 軟陰影
- 光源和陰影的渲染都支持 GPU Instancing 合批


Shadow Map 陰影功能和之前版本中的 Planar Shadow 功能合并在場景的全局陰影選項中,開發者可以自由選擇使用何種陰影,Planar Shadow 性能更好但只支持平面,Shadow Map 支持向所有物體上投射陰影。在 v1.2 的未來小版本還會對聚光燈支持 Shadow Map 動態陰影,也會加強陰影計算的范圍自適應等功能。
編輯器內游戲預覽
v1.2 新增了 Game View 預覽視圖,支持在編輯器內直接運行游戲。開發者在頂部主工具欄的預覽按鈕左側可以找到一個新的預覽模式選擇下拉框,可以選擇使用瀏覽器或 Game View 進行預覽。在 Game View 預覽的狀態下,場景編輯器、屬性面板下的所有操作都會被實時更新到 Game View 窗口中。

也可以使用暫停按鈕進行實時調試,使用步進按鈕逐幀執行。

物理模塊增強
與動畫模塊一樣,物理模塊的功能也在不斷的增強之中,v1.2 之中我們基本補全了游戲中需要的剛體碰撞體,并且開始添加各種約束組件的支持,對物理類游戲的支持得到了極大地增強。下面是具體的新功能:
- 物理碰撞組獨立使用 PhysicsSystem.PhysicsGroup 類型,不再與 Node.Layers 共享分組配置
- 項目配置中添加物理碰撞組設置面板
- 添加單形、圓錐、平面、地形等碰撞體
- 添加點到點、鉸鏈約束組件
- 網格碰撞器添加凸包近似功能
- 碰撞體添加獲取包圍盒和包圍球的接口
- 優化物理事件
- 重構碰撞點數據

以下為控制人物在地形上行走的演示:

構建系統優化
構建系統的優化項主要是以下幾點:
- 開放自定義構建插件,可以參考插件系統中的構建插件文檔
- 引擎支持構建成文件分離的多模塊結果,這將帶來以下多個好處:引擎多模塊并發加載、動態加載模塊、微信引擎插件支持選擇不同物理引擎后端
- 構建結果的 settings.js 改為 settings.json,并放置在 res 下,允許作為資源上傳服務器
- 構建任務原來的查看構建配置已經換為修改構建配置,直接修改就會保存記錄
- 構建平臺選擇上拆分了原有的 Native 平臺,方便定制構建流程,輸出結果與之前一致
動畫編輯器體驗優化
動畫編輯器是我們一直在持續優化的重要模塊,本次 v1.2 又完成了新一輪體驗上的優化,具體優化如:
- 支持節點樹面板中節點的搜索與顯示過濾
- 支持復制粘貼節點上的所有動畫數據
- 動畫編輯器的復制粘貼改為使用系統剪貼板,支持跨編輯器的復制粘貼動畫數據(節點、軌道以及關鍵幀)
- 支持多選節點后批量添加屬性軌道
- 關鍵幀選取和取消選取操作優化(Ctrl + 鼠標點擊選中關鍵幀可取消選中)
- 動畫編輯器支持多選關鍵幀后繼續點擊編輯曲線或者選中未選中關鍵幀

在這些優化基礎上,動畫編輯工作的效率將得到更大的提升,比如多選節點后,批量添加關鍵幀,在 Inspector 中批量編輯關鍵幀動畫數據,可以輕松同步屬性的修改到不同節點上;再比如從某個編輯好的節點上復制粘貼完整動畫數據到另一個節點上。

具體動畫編輯器的所有使用細節可以參考使用文檔。
腳本系統優化
在腳本系統方面,v1.2 完成了引擎分模塊導出,這樣做的好處主要有兩個:第一,提高加載引擎過程中的并發數量,優化加載時間;第二,支持子模塊的動態導入,以物理模塊為例,目前已支持 wasm 和 asm.js 版本的動態選擇,在支持 WebAssembly 的環境中直接加載 wasm 格式的 ammo 庫(bullet),其他環境下自動加載兼容性更好的 asm.js 格式 ammo 庫(bullet)。
除此之外,我們也優化了編輯器中腳本編譯的性能,尤其是對存在大量腳本的項目,可以大幅度提高腳本更改時的效率。同時,預覽項目也會應用項目設置中的引擎模塊選擇,加強了預覽和構建體驗的統一性。
支持 ASTC 壓縮紋理
v1.2 新增 ASTC 壓縮紋理支持,相比于 ETC 和 PVR 等傳統壓縮紋理格式,ASTC 是功能和性能都更優秀的下一代移動端壓縮紋理統一標準。在 v1.2 中,我們還優化了壓縮紋理的配置方式,在項目配置中開發者可以建立壓縮紋理的預設配置,貼圖的配置中只需要選擇預設即可,大大節省了之前需要逐貼圖配置的時間。

此外,在不支持 ASTC 和 ETC2 這類先進壓縮紋理的環境下,我們也專門為 2D 和 UI 的半透明貼圖支持了透明通道分離的壓縮紋理格式。參考壓縮紋理使用文檔。
全局霧效
這是一個本來計劃在 v1.1.1 中添加的功能,但引擎組出于對穩定性的負責任態度,我們決定未來不在第三位小版本中添加功能,所以被延期到 v1.2 中。目前的霧效功能是采用頂點著色器來計算混合因子并用于片元著色器中的顏色混合,除了支持常規的 Linear、Exponential、Exponential Square 霧化處理算子以外,還支持了 Layered 處理算子。使用上只需要在場景節點上,進行全局霧效的配置即可。


具體使用請參考全局霧使用文檔。
合并部分 Creator 主版本功能
我們已經開始合并部分 Creator v2.x 主版本的功能,為 v3.0 做準備,下面是 v1.2 階段已經完成的功能合并:
- 統一組件命名風格,請參考 API 變動章節
- ScrollView 和 PageView 組件的修復和功能
- Toggle 和 ToggleContainer 組件的修復和功能
- RichText 組件的修復和功能
- EditBox 組件的修復和優化
- Graphics 組件優化
- Tween 模塊功能和行為同步
可視化 Macro 配置
很多開發者可能用過引擎中的內置宏配置:cc.macro
,之前的使用仍然有諸多不便,比如有一部分需要在引擎啟動前設置才能夠生效;引擎的啟動流程修改也偶爾會改變設置時機和行為。為了解決設置宏配置的麻煩,我們在編輯器的項目配置中直接支持了可視化配置,參考項目設置文檔的引擎宏配置章節。

模型資源預覽
編輯器中選中模型后可以對模型資源進行全方位預覽,也可以查看默認材質中使用的各種貼圖。

在未來的版本中我們還會支持骨骼動畫的預覽方便做裁切。
渲染層重構
從今年年初開始,我們已經加大了對原生渲染器的研發投入,即將在 v3.0 中推出高性能的多后端渲染器。不僅兼容 Vulkan、Metal 等現代渲染后端,在渲染管線層面也盡可能為了發揮現代渲染后端的性能做了大量重構,這些重構也在 v1.2 中落地了一部分,比如多層 Descriptor Set 抽象取代 BindingLayout;支持 Dynamic uniform buffer 機制;Pipeline State Object 的底層復用;資源化渲染管線。這些重構讓渲染層更加健壯,也為高性能的原生渲染器做好了準備,敬請期待今年底即將發布的 v3.0。
暴露地形和 2D 組件材質選項
從 v1.2 開始,我們開放了地形組件和 2D 渲染組件的材質屬性,所以大家可以自己制作材質并替換。對于地形,只需要在 Terrain 組件上設置 effect 資源。而對于 Sprite 等 2D 渲染組件,也只需要在組件屬性面板上設置默認的 Material 資源。
API 變動和 Breaking changes
1. 組件類名大規模重構
為了符合 Cocos Creator v2.x 的 API 規范,我們將 3D 中組件類名包含 Component 后綴這樣的命名方式舍棄了,并做了數據的自動升級和代碼的兼容,請放心升級。不過建議開發者還是要在代碼中搜索所有類似命名方式的使用,并盡快更改為無 Component 后綴的類名??梢允褂孟旅嬲齽t表達式進行全局搜索(打開大小寫敏感和正則匹配)
([A-Z]\w+)Component
比對照下面的表格進行重命名:
< v1.2 | v1.2 |
---|---|
ModelComponent | MeshRenderer |
SkinningModelComponent | SkinnedMeshRenderer |
BatchedSkinningModelComponent | SkinnedMeshBatchRenderer |
CameraComponent | Camera |
AudioSourceComponent | AudioSource |
DirectionalLightComponent | DirectionalLight |
SphereLightComponent | SphereLight |
SpotLightComponent | SpotLight |
LightComponent | Light |
AnimationComponent | Animation |
SkeletalAnimationComponent | SkeletalAnimation |
ParticleSystemComponent | ParticleSystem |
BillboardComponent | Billboard |
LineComponent | Line |
RigidBodyComponent | RigidBody |
BoxColliderComponent | BoxCollider |
SphereColliderComponent | SphereCollider |
CapsuleColliderComponent | CapsuleCollider |
CylinderColliderComponent | CylinderCollider |
ConeColliderComponent | ConeCollider |
PlaneColliderComponent | PlaneCollider |
TerrainColliderComponent | TerrainCollider |
MeshColliderComponent | MeshCollider |
UITransformComponent | UITransform |
UIModelComponent | UIMeshRenderer |
CanvasComponent | Canvas |
SpriteComponent | Sprite |
LabelComponent | Label |
GraphicsComponent | Graphics |
WidgetComponent | Widget |
ButtonComponent | Button |
MaskComponent | Mask |
ScrollViewComponent | ScrollView |
ScrollBarComponent | ScrollBar |
PageViewComponent | PageView |
PageViewIndicatorComponent | PageViewIndicator |
SliderComponent | Slider |
ToggleContainerComponent | ToggleContainer |
ToggleComponent | Toggle |
RichTextComponent | RichText |
LayoutComponent | Layout |
UIStaticBatchComponent | UIStaticBatch |
UIOpacityComponent | UIOpacity |
LabelOutlineComponent | LabelOutline |
ProgressBarComponent | ProgressBar |
EditBoxComponent | EditBox |
BlockInputEventsComponent | BlockInputEvents |
UICoordinateTrackerComponent | UICoordinateTracker |
SafeAreaComponent | SafeArea |
ViewGroupComponent | ViewGroup |
RenderComponent | UIRenderable |
與此同時,原本在根命名空間下的一些內部類被遷移到子命名空間下:
< v1.2 | v1.2 |
---|---|
Model | scene.Model |
SubModel | scene.SubModel |
DirectionalLight | scene.DirectionalLight |
SphereLight | scene.SphereLight |
SpotLight | scene.SpotLight |
Light | scene.Light |
Camera | scene.Camera |
SkinningModel | models.SkinningModel |
BakedSkinningModel | models.BakedSkinningModel |
MorphModel | models.MorphModel |
2. 廢棄節點上 UI 相關接口
被廢棄的接口如下:
- 屬性:width、height、anchorX、anchorY
- 方法:getAnchorPoint、setAnchorPoint、getContentSize、setContentSize
請先獲取節點上的 UITransform 組件,再使用對應的接口,比如
node.getComponent(UITransform).setContentSize(size);
3. 標準材質小修改
標準材質中刪除 PBR 貼圖自定義通道的功能,只接受 glTF 標準定義的通道排布,即 RGB 分別對應 occlusion、roughness、metallic。如有使用其他排布組合請升級貼圖資源。
部分重要更新
由于 v1.2 開發周期較長,包含了數百個大小不同的修改記錄,所以在此僅簡要列出部分較重要的修改列表供參考。
編輯器更新
- 增加小秘書入口
- 新增模型線框功能,在場景窗口右上角有一個工具按鈕,點擊后可以開啟線框顯示
- 立方體貼圖現在將支持從一張包含了 6 面的圖像中導入(按特定順序排列)
- 插件化 preferences,支持插件內定義數據,自動渲染到 preferences 面板
- 新增設備管理器,可以自定義預覽設備的分辨率(在 preferences 里)
- 插件化 project,支持插件內定義數據,自動渲染到 project 面板
- 新增 Message List,顯示插件對外開放的消息列表,點擊“開發者”菜單項的“消息列表”即可打開
- 新增 Shortcuts 功能,允許自定義快捷鍵,點擊“Cocos Creator”主菜單項的“快捷鍵”即可打開
- Inspector 增加離開時自動保存配置,離開正在編輯的資源的時候自動保存(不配置的時候會彈窗)
- 腳本導入之前按字典序排序,不再是隨機順序
- 當構建到原生類平臺時,將匹配目標 JavaScript 運行環境來編譯腳本,比如 ES6
- 內置 Mesh Optimizer 工具到模型資源界面
- 支持導入包含空 Mesh 的模型
- 減少烘焙庫運行的內存占用
- 內置 primitives 模型支持烘焙 Light map 接受烘焙陰影
引擎更新
- 渲染管線資源化重構,優化序列化數據結構
- 在 instantiate 和 addComponent 失敗的時候不再返回 null,而是直接報錯給用戶處理
- 修復多點觸摸時不會派發所有觸摸點的問題
- 增加 sys.getSafeAreaRect 方法,用來獲取手機屏幕的安全顯示區域
- 補充 Morph target 在快游戲等平臺上的實現(除支付寶小游戲)
- 優化 Light map 接縫處的漏光現象
- Light map 支持 instancing 合批
注意事項
Xcode 12 更新后,我們臨時發現工程上有一些小問題,在 iOS 模擬器上運行會報錯,主要是因為架構選擇中沒有包含 X86 架構,大家可以在 Xcode iOS 工程配置中刪除 VALID_ARCHS(在 Xcode 12 中已被棄用)。