Cocos Creator 3.7.0 是我們在不斷挑戰和提升自我路徑上的又一力作。為了應對爆發的元宇宙需求以及支持更流暢更真實的 3D 世界,我們在渲染效果、GI 全局光照、LOD、動畫系統、物理系統、易用性以及性能方面進行了眾多提升。由于 3.7 版本更新眾多,包含了大量的體驗優化和缺陷修復,在此只列出重要更新,其余更新可以參考我們 GitHub 上的更新列表。
場景渲染
光照探針
GI 全局光照是提升 3D 渲染真實感的關鍵基礎設施。在此之前, Lightmap 可以用來烘焙靜態物體的間接光照,但是對場景中的動態物體則無能為力,如角色和場景中移動的物體,這樣容易造成視覺效果不統一的問題。光照探針可以提前通過烘焙記錄空間中各點的光照信息,然后在物體運動時根據記錄在探針中的結果模擬間接光照,對場景中的動態物體也提供高質量的全局光照支持。同時,光照探針還具備良好的運行時的處理性能,預計算也相當快。更多介紹詳見《光照探針》。
應用光照探針的角色:
使用光照探針實例化繪制的球體:
光照探針編輯:
反射探針
為了進一步提升渲染效果以及提升 3D 項目的沉浸感,我們加入了反射探針支持。它可以在場景中帶有反射性質的材質上,渲染出真實的對周邊環境的反射,此功能對畫面的真實感提升是非常巨大的。它通過空間內某一點對附近區域的環境進行烘焙,在把周圍環境信息儲存后,應用在范圍內有反射材質的物體上以實現真實環境反射的一種手段。在 3.7中,我們加入了具有兩種模式的反射探針:Cube 烘焙模式用來烘焙一定空間范圍內的立體環境。Planar 平面實時反射模式主要用來模擬平面上的反射,如光滑地面、水面等。更多介紹詳見《反射探針》。
模型 LOD
LOD(Level of Details)是常用的一種大型場景優化手段,核心在于對遠處或者不重要的物體,降低其顯示細節,以達到提升渲染效率的目的。3.7 加入了模型 LOD 支持,可根據物體顯示在屏幕上的尺寸比例,動態切換合適的模型精度,節省渲染資源。更多介紹詳見《多層次細節》。
CSM 陰影層過渡
CSM 層級陰影最明顯的一個效果問題就是在不同層級之間的陰影精度不同,導致在接縫處可能產生比較違和的割裂感,尤其是隨著相機的移動,不同層級的拼接位置也在不斷變化,導致很容易被發現的接縫移動現象。在 3.7 中,我們新增了 CSM 層過渡的支持,混合不同層級的渲染效果,使兩個 CSM 陰影層級間過渡更加平滑。
后處理流程:Bloom & FXAA
基于 RenderGraph 的 自定義管線 中新增了 Bloom 后處理特效和 FXAA,將作為后處理定制的標準方案供大家參考。與舊的渲染管線難以擴展與配置不同,新的基于 RenderGraph 的自定義管線的可插拔結構使擴展管線的功能更加容易,同時對于 Forward/Deferred 渲染的輸出結果進行后處理特效(如:Bloom 等)的新增也會更加便捷。
編輯器
原生場景編輯器(實驗性)
3.7 的場景編輯器可以運行在以 C++ 為基礎的 Windows/Mac 原生 Cocos 引擎之上,而不是原先以 JS/WebGL 為基礎 HTML5 引擎。這意味著編輯器有潛力充分發揮 Cocos 引擎在原生端的性能優勢,為各類元宇宙場景、3D 開放世界做好準備。此功能目前處于實驗性狀態,需在偏好設置 - 實驗室開啟 Use native engine for scene editor 開啟試用。開啟后,編輯器支持打開一個與 Scene 并存的獨立 Game 面板,用于多窗口項目預覽以及調試。
全新擴展管理器
3.7 升級了擴展管理器,采用了全新的 UI 并且支持一鍵安裝和更新擴展插件,還支持記錄和安裝項目所依賴的擴展,讓項目的分發更加方便。
為了實現更好的版本管理,提高擴展穩定性,新版擴展管理器也調整了一些管理機制:
-
3.7 開始編輯器將不再讀取全局目錄下的擴展,老項目升級到 3.7 時將會自動復制全局插件到項目中。此功能通過配套的 Dashboard 1.2.4 實現,請先確保本地 Dashboard 已自動更新至 1.2.4 版本。
-
從擴展管理器中安裝的擴展將記錄依賴關系,通過 Dashbord 1.2.4 以上版本打開項目時會自動檢查并安裝依賴的擴展。此功能目前還不支持 Store 中的插件,我們將在之后的版本中繼續完善。
-
開發中的插件可以通過點開擴展管理器上方的導入按鈕小箭頭,選擇開發者導入(Developer Import),此功能將為外部插件創建軟鏈接到項目中,避免了插件同步問題。
-
Store 中的插件如需共用,在 3.7.0 仍與之前一致,需要在各臺電腦上分別手動安裝,或者將插件內容上傳到 Git 版本庫。
插屏設置功能更新
插屏設置用于在游戲啟動時對 Cocos 或您的品牌進行露出,同時加速首屏啟動時間,給用戶更好的體驗。在 3.7 我們開始著手對此前維護力度不足的插屏設置功能進行翻新,在收集了不少用戶反饋,結合 Cocos 自身的業務需要后,插屏設置功能得到了初步重構。目前做出的主要調整如下:
-
暫時移除問卷調查界面,可以自由開關插屏顯示(將來問卷仍會是必要的)。
-
移除背景顏色設置功能,目前僅支持黑色。
-
最小插屏顯示時間修改為 500 毫秒。
項目設置:
構建面板:
資源管理
-
支持壓縮紋理啟用 Mipmaps,啟用后編輯器會將壓縮紋理的 Mipmaps 預先生成并一同導出。
-
新增 .exr 圖片格式支持。
-
支持翻轉圖片綠色通道:
-
在編輯器的資源管理器移動或者重命名 ts 腳本時將自動更新 ts 中的導入路徑,如需開啟此功能請在偏好設置中的實驗室開啟此項開關:
-
新增了 Mesh Optimizer 的 simplify 減面算法,新的算法不再改變 Prefab 結構,并且 fbx 減面效果更穩定,不易丟失材質。
網格體 UV 檢查
3.7 支持在 Mesh 的屬性檢查器中顯示各個通道的 UV,方便用戶快速確認導入模型的 UV 或者 Lightmap 的 UV 是否正確,是否在(0,1)的區間內,是否有重疊等信息:
框架能力
Marionette 動畫系統
-
支持動畫圖變體。動畫圖變體是一種新的動畫資產類型,允許用戶在一個動畫圖的基礎上創建變體,使其有可能在不同的角色上重復使用同一個動畫圖:
-
動畫狀態機混合預覽面板更新,支持用戶更直觀方便的在動畫圖中預覽混合的結果:
-
動畫圖支持節點拷貝粘貼功能
-
Class AnimationController 增加了動態覆蓋動畫圖譜中的動畫片段的方法
-
Class AnimationController 增加了查詢動畫圖譜中層數的方法
-
動畫圖編輯器:增加了一個右鍵菜單,可以把運動狀態變成 sub-statemachine 狀態
-
優化了狀態讀取方法
優化粒子系統性能
調整 CurveRange 的構造邏輯,延遲構造底層曲線數據,同時優化了內部裝飾器,加快粒子系統初始化速度。在不同復雜度的粒子下均有可觀的性能提升。
和 3.6.2 粒子加載速度對比(加載時間越小,加載速度越快,粒子使用的功能模塊越多,提升越明顯):
其他性能優化
除了粒子加載速度以外,其他不少模塊也有了不同程度的性能優化,其中包括以下幾個比較顯著的方面:
注:圖示中每個平臺下都會不斷增加負載進行性能測試數據采集,不同平臺之間負載并不一致,統一在幀率上進行差異展示,所以數值越高越好
- Frame Animation 幀動畫
-
3D 模型渲染
-
3D 物理
3D 物理系統
-
在物理系統中添加固定約束 FixedConstraint。
-
Point2Point 約束在 PhysX 物理物理后端使用 SphericalJoint 實現。
-
物理系統支持 lineStripCast, 用于近似曲線檢測 :
-
默認物理材質支持在項目設置中通過文件配置。
-
修復了 bullet 剛體無法休眠 sleep 的問題
-
對 Bullet MeshCollider 設置 mesh 的時間提升了大約 100 倍運行速度。
-
修復了 bullet 內存釋放的功能。
-
修復 PhysX 后端在剛體生成后動態設置 Mesh Collider 的 convex 屬性失效的問題。
-
統一各個物理后端在節點縮放時 cylinder collider 和 cone collider 的表現。
-
修復 PhysX 原生后端(C++)發送大量錯誤事件的問題。
2D 物理系統
-
修復 box2d shape2d中apply() 方法沒有對 node 以及碰撞體狀態進行判斷的問題。
-
修復 box2d 中 syncRotationToPhysics() 沒有使用場景節點的世界旋轉的問題。
-
修復 box2d 中 aabb 準確度的問題。
-
修復 box2d joint2D anglelimit 中角度轉化問題問題。
-
修復 physics2d-builtin shape 編組時的沒有檢查 Collider 狀態的問題。
-
新的 Physics2d Box2d::syncSceneToPhysics() 方法。
-
修復 builtin-2d-physics removeShape() 速度慢的問題。
-
添加了新的多邊形切分算法:Hertel Mehlhorn。
-
優化 physics-2d 中沒有 connectedBody 時的設置。
-
支持在編輯器中切換 physics-2d 后端。
更多
-
【場景渲染】增加 Sorting 渲染排序組件,并提供排序層順序編輯接口,用戶可以使用此組件控制 MeshRenderer 或者 SpriteRenderer 的渲染順序。
-
【場景渲染】增加 FXAA HQ 以修正某些場景下物體邊緣的虛影。
-
【場景渲染】優化各類與渲染相關的默認值,如默認的 PBR 材質參數、默認天空盒、太陽方向等。
-
【新建項目】添加了一個新的高質量 3D HQ 模板,默認開啟陰影與光照等相關設置以達到更高質量的渲染效果,省去了手動開啟場景、物體、燈光等多重陰影和光照的設置過程:
-
【構建發布】支持 Facebook Instant Games 發布平臺,詳見《發布游戲到 Facebook Instant Games》。
-
【構建發布】集成微信小游戲高性能模式開關:
-
【構建發布】支持在構建過程中通過點擊 “x” 按鈕中斷構建任務。
-
【構建發布】支持構建任務排隊,多平臺構建時會更加方便。
-
【場景編輯】為參考圖像添加縮放屬性。
-
【場景編輯】場景攝像機添加曝光相關屬性:
-
【編輯器】對動畫編輯器的顯示布局以及操作進行了優化,提升易用性以及用戶體驗:
-
【編輯器】資源管理器支持文件夾多選編輯。
-
【編輯器】將項目設置中的物理配置調整為物理材質,舊項目的配置將自動遷移為物理材質。
-
【編輯器】移動 Joint Texture Layout 到項目設置中。
-
【編輯器】移動創建構建擴展到創建擴展面板。點擊“創建擴展”后會跳轉到創建擴展面板,然后在創建面板中選擇模板,完成詳細設置,創建成功會自動打開插件所在目錄:
-
【框架能力】節點提供了新的 Mobility 屬性用于 Lightmap 烘焙設置:
- Static:視當前節點為不可移動物體或光源,烘培 lightmap 的直接和間接光。
- Stationary:視當前節點為不可移動高光光源,只烘培 lightmap 的間接光照和遮擋,直接光(高光等)仍實時計算。
- Movable:視當前節點為可移動物體或光源,不參與烘培 lightmap。
-
【框架能力】優化了刷新 layout 布局的機制,刪除了 layout 布局必須有子節點才會更新的限制。
-
【原生框架】切換到 swig 來生成 JS 綁定代碼,舊的 bindings-generator 工具現在已經廢棄,生成所有 JS 綁定代碼的時間成本減少到 3~5 秒。
-
【原生框架】優化了 se::Object 的構造和銷毀,刪除了不使用的哈希操作。
-
【原生框架】增加 se::Object:createObjectWithConstructor 方法,在 CPP 代碼中通過 JS 構造器創建 JS 對象。
-
【原生框架】支持在本地桌面平臺(Windows、Linux、macOS)上向執行文件傳遞命令行參數。
-
【原生框架】增加對 se::Object 創建、修改、檢查 ES6 Map/Set 的支持。
-
【原生框架】提供 cc::event::EventBus 和 cc::event::EventTarget,以簡化引擎內的事件調度。
-
【原生框架】刪除 BaseNode 類,使用 Node 類來代替。
-
【原生框架】native.Downloader 支持中止功能。
-
【原生框架】支持 ios websocketServer。
-
【原生框架】在 function-corpping 中添加網絡模塊。
-
【原生框架】為 setUniform 添加預類型驗證器。
-
【原生框架】優化引擎包體。
-
【文檔】補全部分缺失的 API 文檔,優化 API 文檔內容。
點擊下載最新版本,也期待能在論壇聽到大家的聲音,告訴我們你對 3.7 的建議和反饋,感謝各位開發者的支持!