Cocos Creator v3.4 is the final version we released this year for Creator. Stability is our most important goal! The development and testing cycle of this version is longer than any previous version, and it has been publicly tested in the community for a month. Thank you to all the developers who participated in the test!
In v3.4, not only important functions such as the Marionette animation system have been added, but also a lot of work has been done in terms of product experience, stability, performance optimization, and infrastructure levels. In addition, we listened to the community and fixed a number of problems that have received a lot of feedback. Our devoted engine team believe 3.4 version will become a great milestone in terms of game development user experience!
Animation System Marionette
The all new animation system is the most important feature in 3.4. We named it Marionette, which means 'puppet', which both captures the essence of the animation system and also by itself, a long-standing traditional Chinese art form. It has appeared since the Tang Dynasty and has been circulating for thousands of years, and it is still an important opera form till this day in the Minnan region (where our company is located!). With Marionette, we also hope that developers can precisely control the game characters and enhance the game’s narrative ability.
In version 3.4, Marionette supports the key features of an animation system, including state machines, sub-state machines, animation node graphs, trigger variables, multidimensional blending, etc. Of course, more new features are already under development, such as animation levels and masks, humanoid bones and IK support. To help you learn the Marionette animation system, we have also prepared detailed documents, a [Demo](https://github.com/cocos-creator/MarionetteDemo) and video tutorials.
Editor experience optimization
In terms of editor experience, we have done a lot of fixes and enhancement for user experience. Features and experience optimizations include:
- The animation editor supports Bezier curve presets now, select the curve segment and click on the curve preset to apply.
- Added smart alignment for Rect Gizmo
- Customized macros are supported now
- Added wrap mode and filter controls for RenderTexture
- Added Octree space accleration structure, optimized frustum culling performance that can be activate in the inspector
Lighting Model And Rendering Optimization
Starting from v3.0, Creator has been elevating and polishing its rendering capabilities. In v3.4, in order to improve the rendering quality of the engine, we brought a series of important upgrades. In particular, the enhancement of the lighting model will make the rendering more refined for our engine.
- Automatic generation of environment map for diffuse reflection
manually set ambient light vs automatically generate diffuse map
- upport HDR and LDR rendering switch (located in the scene node, under Skybox configuration).?
HDR on vs HDR off
- BL sampling noise reduction( USE REFLECTION DENOISE option under "stardard material")
Denoise on vs Denoise off
Render pipeline enhancement
In terms of rendering pipeline, FrameGraph is an infrastructure introduced in v3.1. After several iterations, in v3.4 we formally docked both the Forward and Deferred pipelines with FrameGraph. Below is a simplified deferred pipeline FrameGraph:
Currently, the engine’s deferred pipeline contains a total of 2 calculation passes and 7 rendering passes. Although it is not complicated, it can already highlight the role of FrameGraph. On the one hand, it simplifies the code organization of the pipeline layer and reduces maintenance costs; on the other hand, it also reduces the cost of developers when customizing pipelines. Based on FrameGraph, the Huawei HMS CG Kit team continued to contribute Clustered Light Culling to the deferred pipeline in v3.4 to optimize the calculation performance of dynamic light sources. It can support hundreds of dynamic light sources on the same screen on the mobile side (Kirin 990 chip in Sponza scene Running 1000 dynamic light sources can reach 40 fps).
In addition, the Subpass in the rendering pipeline is also implemented based on FrameGraph. The second major advantage of FrameGraph is the deferred mode for rendering (different from the deferred rendering pipeline). The engine can analyze the rendering process and optimize it before executing the complete rendering process. Currently, mobile GPUs share system memory with CPUs. One of the hotspots of power consumption is the reading and writing of video memory. Subpass optimization is to make full use of the GPU’s Tiled cache to reduce the power consumption of video memory read and write. When the write and read resources of two adjacent rendering Subpass are the same in-frame resource and will not be referenced by other passes, this Resources can be read and written directly through the Tiled cache without wasting any memory bandwidth, which can significantly reduce power consumption. This automatic derivation of resources and rendering processes is exactly the advantage that FrameGraph brings.
Important Fix and performance optimization
Stability is the primary goal of the v3.4 version, so we have also fixed some flaws that have been troubling for a long time, pushing the stability of the engine to a new height. Here are some of the more important fixes:
- Fixed the serious problem that using Active during animation editing may cause data loss.
- Fixed the problem that the MissingScript component will appear when some abnormal errors are reported in the scene, which causes the scene to fail to start.
- Fixed the crash caused by repeatedly exiting and entering iOS.
- Fixed the crash caused by material compilation on some chips in the back end of GLES3.
- Fixed the black screen problem of Vulkan backend on some low-end machines (by issuing barriers and image layout conversion more accurately).
- Fixed the crash of Vulkan backend on some low-end machines (by modifying some shader usages to workaround some problematic drivers).
- Fixed the problem of Vulkan backend crashing or incorrect resolution when rotating or splitting screens.
- Fixed a crash when using a large number of high-resolution textures in the Vulkan backend.
- Fixed the black screen issue on Chrome on a few devices.
- Fixed the problem that PrefabInstance in mountedChlidren may cause data errors.
- Fixed the fileId conflict that may occur when copying Prefab, which will cause data loss and error.
- Fixed the problem that the deleted element data is referenced in Prefab, which causes a lot of redundant data to be serialized.
- Fixed the issue that Undo may cause some override data in the prefab to be lost.
- Fixed the problem that data errors may occur when the terrain is restored.
- Fixed the problem that the GPU memory referenced by Label is not released after switching scenes at runtime.
- Fixed the memory leak problem of InstanceBuffer and BatchedBuffer due to holding aglobal Map.
- Fixed a large number of problems caused by the failure of global precision designation on some small game platforms, such as the shadow sampling problem.
- Fixed the problem that the native platform did not pass the correct baked parameter in the case of scene baking.
- Fixed the random model flickering issue under GLES (by using glMapBufferRange instead of glBufferSubData).
- Fixed the screen glitching issue on devices that do not support floating-point mapping when there are NaNs in the model's joint weights (by equally dividing all NaN weights in the importer).
- Fixed the crash of large-scale data synchronization after the native-side pre-baked animation Instancing is processed.
- Fixed the problem that multiple plugins with the same name and registered resources will cause script compilation to fail.
- Fixed the problem that the content of the remote resource package cannot be updated after the native platform is rebuilt feedback from the forum.
- Fixed the problem that the original code is still entered into the apk after the original selection encryption is built feedback from the forum.
- After repairing the automatic atlas using compressed textures, modify the atlas configuration to rebuild and still use the cache.
In addition to fixing important issues, the overall performance of the engine has also been improved, such as 2D rendering and batch efficiency, physical performance, iOS Web 3D scene performance, and Android partial scenes. Here are some test results of 2D rendering:
Known Defects and Potential Compatibility Issues
Build Template Upgrade
Due to the adjustment of the relevant logic of web platform screen adaptation, we have changed the web-related index.html template, which includes preview templates and building web platform templates. We have done related compatibility processing inside the engine?cocos-creator/engine#9830
This process will ensure that there is a fixed div structure inside index.html:
<div id="GameDiv"> <div id="Cocos3dGameContainer"> <canvas id="GameCanvas"></canvas> </div> </div>
If GameDiv/Cocos3dGameContainer is missing, it will be automatically filled during runtime.
Note: this div structure is a private structure managed internally by the engine. We hope to keep this structure intact and not customized. If other web tags are added to this structure, it may cause some uncertain compatibility issues.
IBL sampling noise reduction
The newly added IBL sampling noise reduction algorithm currently has some problems with the compatibility of the iOS Web environment. Since it was found that it was not merged in the version later, the support for iOS Web will be completed in the follow-up 3.4.1
Delayed pipeline defects
Currently, the deferred pipeline is still in the process of high-speed iteration, and there are still some problems with function and platform compatibility. It is not recommended to use it in actual projects for the time being. Some of the current known issues include some particle blending modes that cannot be rendered, builtin-toon materials are not supported temporarily, some low-end platforms and devices have compatibility issues, spotlight shadows are not supported, and 2D & 3D camera mixing issues.
- [Animation] Added Marionette animation system, supporting state switching, sub-state machine, Blend Tree and other necessary functions for character animation
- [Animation] The animation editor supports standard Bezier curve easing presets
- [Animation] Curve key frame supports Broken disconnection and separate control of left and right joysticks
- [Scene] Supports automatic generation of environment map convolution map for diffuse reflection calculation
- [Scene] Added smart alignment function of Rect Gizmo
- [Scene] Added Octree space management acceleration structure, optimized frustum culling performance, document
- [Scene] Added GPU Occlusion Query culling (default disabled), you can turn it on through root.pipeline.setOcclusionQueryEnabled(true); to support developer custom macro configuration, document
- [Scene] Newly added native platform memory leak detection system (closed by default), you can pass #define USE_MEMORY_LEAK_DETECTOR 1 to turned it on,document
- [Builder] Build support for external developers to register custom texture compression processing tools
- [Builder] Added “Skip Xcode project update” option for Mac / iOS platform building to avoid overwriting changes to project files
- [Builder] Combine the GLES options of Android and Windows, and it is not allowed to select GLES2 separately
- [Particle] Support particle emitter elimination, offline automatic calculation, and manual adjustment (RenderCulling module)
- [Particle] Support the unity of particle orientation and node orientation
- [Asset] Support RenderTexture’s wrap mode, filter and other parameters
- [Asset] RenderTexture adds readPixels interface
- [Prefab] supports batch disassociation
- [Asset] Added “Auto” option for animation baking rate of FBX importer
- [Asset] New option for FBX importer: give priority to file time range
- [Asset] The packable property on the SpriteFrame resource panel will affect the automatic atlas construction process in addition to the automatic image collection, and will not participate in the construction of the assembled image after it is closed
- [Asset] Terrain module supports automatic LOD
- [Graphics] Support IBL sampling and noise reduction (check USE REFLECTION DENOISE in standard material)
- [Graphics] More accurate Gamma Correction
- [Renderer] Support HDR and LDR rendering switch (in the scene node Skybox configuration)
- [Renderer] Both forward and deferred rendering pipelines are reconstructed based on FrameGraph and subpass
- [Renderer] gfx encapsulates the swapchain public interface and supports multi-window applications
- [Renderer] Deferred pipeline uses Clustered Light Culling to optimize dynamic light source calculation performance, Reference Demo
- [Renderer] Deferred pipeline supports setting off-screen FBO resolution scaling
- [Renderer] Deferred pipeline supports FXAA anti-aliasing
- [Renderer] Deferred pipeline supports simple Bloom post-processing effects
- [Scripting] Support @requireComponent to pass in array
- [Scripting] The newly added interface JsbBridge simplifies the use of calling Java code and ObjC code, refer to Display Use Case
- [PAL] Added input module, which will replace systemEvent in the future. For details, please refer to Event Input Documentation and Event Node Documentation
- [PAL] Support preventSwallow property on EventMouse and EventTouch, support event penetrating dispatch: event.preventSwallow = true
- [PAL] Support sys.hasFeature() interface to query whether platform features are supported
- [Scripting] Upgrade the v8 engine that the native depends on to v9.1.269
- [Renderer] Performance optimization of multi-light source collection
- [Renderer] Optimize the RT performance of GLES/WebGL
- [Renderer] Optimize the use of native memory/video memory (by calling framegraph gc periodically)
- [Graphics] Fixed the calculation of lighting and shadows of translucent objects
- [Graphics] Optimize the fog effect and transfer the calculation to Fragment Shader to ensure the correct fog effect transition
- [Graphics] Disable multi-light source lighting for translucent objects
- [Scene] Add axis text to the world axis
- [Scene] Terrain editor adds selection mode
- [Physics] Optimized the package of PhysX on the native platform
- [Physics] PhysX now supports M1 devices
- [PAL] Optimize the orientation adaptation of the web end, focusing on the direction selected by the construction panel, ignoring the browser direction
- [PAL] On the Web and small game terminals, immediately dispatch input events to solve some user interaction permissions issues
- [PAL] New App default icons have been replaced for all platforms and emulators
- [PAL] Now the iOS platform construction will introduce the corresponding default Launchscreen image according to the horizontal screen or vertical screen option (if the change does not take effect in time, you need to restart the device to clear the cache)
- [Asset] Fixed the problem that the last frame of FBX animation import is lost
- [Asset] Fixed the problem that the resource change notification may be lost when the extension is capitalized
- [Asset] Solve the problem that the add event may not be sent for newly added resources, which may cause the assets panel to wait all the time
- [Builder] The address of the build configuration server is changed to be recorded in settings.json to facilitate dynamic updates
- [Builder] When creating a new automatic atlas, the elimination option in the Bundle will be turned on by default (the optimization requirements are from this forum topic 1
- [Extension] The developer panel of the plug-in manager allows to import plug-ins other than the current project or global catalog.