Dev snapshot: Godot 3.4 beta 2

By: Rémi Verschelde 27 July 2021

It's finally time for some extensive testing of the upcoming Godot 3.4 release, which is already quite feature-packed a mere 3 months after the 3.3 release!

And you read correctly, this is 3.4 beta 2, even though we never had a formal beta 1 announcement on this blog. 3.4 beta 1 is available for download for comparison purposes, but since it had a major regression on C# support on Windows, I skipped its blog post...

... which gave me some more time to go through the huge changelog and list some of the main changes below! There's still more I want to add over coming days, but there's no reason to delay the publication of the beta 2 builds.

As usual, you can try it live with the online version of the Godot editor updated for this release.

Highlights

The main changes coming in Godot 3.4 and included in this beta are:

  • Animation: Add animation "reset" track feature (GH-44558).
  • C#: iOS and Apple Silicon fixes (GH-49248).
    • iOS: Fix P/Invoke symbols being stripped by the linker. This would often result in a EntryPointNotFoundException crash at runtime.
    • macOS: Mono builds are now universal builds with support for both x86_64 and arm64 architectures.
  • Core: Make all file access 64-bit (uint64_t) (GH-47254).
    • This adds support for handling files bigger than 2.1 GiB, including on 32-bit OSes.
  • Core: Add frame delta smoothing option (GH-48390).
    • This option is enabled by default (application/run/delta_smoothing). Please report any issue.
  • Crypto: Add AESContext, HMACContext, RSA public keys, encryption, decryption, sign, and verify (GH-48144, GH-48869).
  • Editor: Overhaul the theme editor and improve user experience (GH-49774).
  • HTML5: Export as Progressive Web App (PWA) (GH-48250).
  • HTML5: Implement Godot <-> JavaScript interface (GH-48691).
  • Import: Implement lossless WebP encoding (GH-47854).
  • Import: Backport improved glTF module with scene export support (GH-49120).
  • macOS: Add GDNative Framework support, and minimal support for handling Unix symlinks (GH-46860).
  • macOS: Add notarization support when exporting for macOS on a macOS host (GH-49276).
  • Mesh: Options to clean/simplify convex hull generated from mesh (GH-50328).
  • Particles: Add ring emitter for 3D particles (GH-47801).
  • Physics: Fixing 2D moving platform logic (GH-50166).
  • Physics: Various fixes to 2D and 3D KinematicBody move_and_slide and move_and_collide (GH-50495).
  • Rendering: Rooms and portals-based occlusion culling (GH-46130).
    • Extensive documentation will be available soon. In the meantime, you can read the work in progress on the godot-docs repository.
  • Rendering: Fixes depth sorting of meshes with transparent textures (GH-50721).
  • Rendering: Add soft shadows to the CPU lightmapper (GH-50184).
  • Rendering: Combined the DOF far and DOF near passes (GH-50723).
  • Rendering: Import option to split vertex buffer stream in positions and attributes (GH-46574).
  • RichTextLabel: Fix auto-wrapping on CJK texts (GH-49280).
  • Shaders: Add support for structs and fragment-to-light varyings (GH-48075).
  • VisualScript: Improve and streamline VisualScriptFuncNodes Call Set Get (GH-50709).

All these need to be thoroughly tested to ensure that they work as intended in the upcoming 3.4-stable.

Changes

Here's a curated changelog with links to the relevant pull requests for details. The list is not exhaustive and will be completed in the future to include more noteworthy changes.

Note that some of the changes in 3.4 have already been backported and published in Godot 3.2.1 and 3.2.2, and therefore they were not listed here again. You can refer to the changelogs of those maintenance releases for details on what you might have missed since 3.3-stable.

  • Android: Add basic user data backup option (GH-49070).
  • Android: Add GDNative libraries to Android custom Gradle builds (GH-49912).
  • Android: Remove non-functional native video OS methods (GH-48537).
  • Animation: Add animation "reset" track feature (GH-44558).
  • Animation: Fix Tween active state and repeat after stop() and then start() (GH-47142).
  • Animation: Allow renaming bones and blend shapes (GH-42827).
  • Animation: Fix issues with BlendSpace2D BLEND_MODE_DISCRETE_CARRY (GH-48375).
  • Animation: Fixed issue where bones become detached if multiple SkeletonIK nodes are used (GH-49031).
  • Buildsystem: Refactor module defines into a generated header (GH-50466).
  • ButtonGroup: Add a pressedsignal (GH-48500).
  • Debugger: Automatic remote debugger port assignment (GH-37067).
  • C#: iOS and Apple Silicon fixes (GH-49248).
    • iOS: Fix P/Invoke symbols being stripped by the linker. This would often result in a EntryPointNotFoundException crash at runtime.
    • macOS: Mono builds are now universal builds with support for both x86_64 and arm64 architectures.
  • Camera2D: Make the most recently added current Camera2D take precedence (GH-50112).
  • CheckBox: Add disabled theme icons (GH-37755).
  • ColorPicker: Display previous color and allow selecting it back (GH-48611, GH-48623).
  • Core: Make all file access 64-bit (uint64_t) (GH-47254).
    • This adds support for handling files bigger than 2.1 GiB, including on 32-bit OSes.
  • Core: Add frame delta smoothing option (GH-48390).
    • This option is enabled by default (application/run/delta_smoothing). Please report any issue.
  • Core: Add option to sync frame delta after draw (GH-48555).
    • This option is experimental and disabled by default (application/run/delta_sync_after_draw). Please try it out and report any issue.
  • Core: Thread callbacks can now take optional parameters (GH-38078).
  • Core: Add support for numeric XML entities to XMLParser (GH-47978).
  • Core: Add option for BVH thread safety (GH-48892).
  • Core: Fix sub-resource storing the wrong index in cache (GH-49625).
  • Core: Improve the console error logging appearance: (GH-49577).
  • Core: Add Engine.print_error_messages property to disable printing errors (GH-50640).
  • Core: Added Node name to print() of all nodes, makes Object::to_string() virtual (GH-38819).
  • Crypto: Add AESContext, RSA public keys, encryption, decryption, sign, and verify (GH-48144).
  • Crypto: Add HMACContext (GH-48869).
  • Editor: Add zoom support to SpriteFrames editor plugin (GH-48977).
  • Editor: Fix logic for showing tilemap debug collision shapes (GH-49075).
  • Editor: Add EditorResourcePicker and EditorScriptPicker classes for plugins (and internal editor use) (GH-49491).
  • Editor: Refactor Theme item management in the theme editor (GH-49512).
  • Editor: Overhaul the theme editor and improve user experience (GH-49774).
  • Editor: Allow to create a node at specific position (GH-50242).
  • Editor: Implement a %command% placeholder in the Main Run Args setting (GH-35992).
  • Editor: Add keyboard shortcuts to the project manager (GH-47894).
  • Editor: Handle portrait mode monitors in the automatic editor scale detection (GH-48597).
  • Editor: Add custom debug shape thickness and color options to RayCast (GH-49726).
  • Editor: Properly update NodePaths in the editor in more cases when nodes are moved or renamed (GH-49812).
  • Editor: Improve 2D editor zoom logic (GH-50490, GH-50499).
  • Editor: Make several actions in the Inspector dock more obvious (GH-50528).
  • Editor: Improve the editor feature profiles UX (GH-49643).
  • Editor: Improve the UI/UX of the Export Template Manager dialog (GH-50531).
  • Editor: Improve FileSystem dock sorting (GH-50565).
  • Editor: Add the ability to reorder array elements from the inspector (GH-50651).
  • Editor: Assign value to property by dropping to scene tree (GH-50700).
  • Font: Re-add support for kerning in DynamicFont (GH-49377).
  • GLES2: Add basic support for CPU blendshapes (GH-48480).
  • GLES3: Allow repeat flag in viewport textures (GH-34008).
  • GLES3: Fix draw order of transparent materials with multiple directional lights (GH-47129).
  • GLES3: Fix multimesh being colored by other nodes GLES3 (GH-47582).
  • GraphEdit: Enable zooming with Ctrl + Scroll wheel and related fixes to zoom handling (GH-47173).
  • GraphEdit: Make zoom limits and step adjustable (GH-50526).
  • GraphNode: Properly handle children with "Expand" flag (GH-39810).
  • HTML5: Debug HTTP server refactor with SSL support (GH-48250).
  • HTML5: Export as Progressive Web App (PWA) (GH-48250).
  • HTML5: Implement Godot <-> JavaScript interface (GH-48691).
  • HTML5: Add easy to use download API (GH-48929).
  • Import: Implement lossless WebP encoding (GH-47854).
  • Import: Add "Normal Map Invert Y" import option for normal maps (GH-48693).
  • Import: Backport improved glTF module with scene export support (GH-49120).
  • Import: Optimize image channel detection (GH-47396).
  • Import: Fix loading RLE compressed TGA files (GH-49603).
  • Input: Add support for physical scancodes, fixes non-latin layout scancodes on Linux (GH-46764).
  • Input: Fix game controllers ignoring the last listed button (GH-48934).
    • Breaks compat slightly by changing the value of some of the JoystickList enum constants.
  • Input: Allow getting axis/vector values from multiple actions (GH-50788).
  • iOS: Add pen pressure support for Apple Pencil (GH-47469).
  • iOS: Add option to automatically generate icons and launch screens (GH-49464).
  • iOS: Support multiple plist types in plugin (GH-49802).
  • iOS: Remove duplicate orientation setting in the export preset (GH-48943).
  • Label: Fix valign with stylebox borders (GH-50478).
  • LineEdit: Double click selects words, triple click selects all the content (GH-46527).
  • Linux: Fix implementation of move_to_trash (GH-44021).
  • Linux: Fix Directory::get_space_left() result (GH-49222).
  • macOS: Add GDNative Framework support, and minimal support for handling Unix symlinks (GH-46860).
  • macOS: Allow "on top" windows to enter fullscreen mode (GH-49017).
  • macOS: Add notarization support when exporting for macOS on a macOS host (GH-49276).
  • macOS: Fix Directory::get_space_left() result (GH-49222).
  • Mesh: Add a center_offset property to both plane primitive and quad primitive (GH-48763).
  • Mesh: Fix UV mapping on CSGSphere (GH-49195).
  • Mesh: Options to clean/simplify convex hull generated from mesh (GH-50328).
  • Networking: Add support for gzip compression in HTTPRequest (GH-48651).
  • Networking: Add support for multiple address resolution in DNS requests (GH-49020).
  • Networking: Implement String::parse_url() for parsing URLs (GH-48205).
  • Networking: Add get_buffered_amount() to WebRTCDataChannel (GH-50659).
  • OpenSimplexNoise: Fix swapped axes in get_image() (GH-30424).
    • Breaks compat. If you need to preserve the 3.2 behavior, swap your first and second arguments in get_image().
  • OpenSimplexNoise: Add support for generating noise images with an offset (GH-48805).
  • OS: Expose OS data directory getter methods (GH-49732).
  • Particles: Add ring emitter for 3D particles (GH-47801).
  • Particles: Fixed rotate_y property of particle shaders (GH-46687).
  • Particles: Fixed behavior of velocity spread (GH-47310).
  • Physics: Fixing 2D moving platform logic (GH-50166).
  • Physics: Various fixes to 2D and 3D KinematicBody move_and_slide and move_and_collide (GH-50495).
  • Physics: Enable setting the number of physics solver iterations (GH-38387, GH-50257).
  • Physics: Apply infinite inertia checks to Godot Physics 3D (GH-42637).
  • Physics: Return RID instead of Object ID in area-body_shape_entered-exited signals (GH-42743).
  • Physics: Heightmap collision shape support in Godot Physics 3D (GH-47349).
  • Physics: Add support for Dynamic BVH as 2D physics broadphase (GH-48314).
  • Physics: Port Bullet's convex hull computer to replace QuickHull (GH-48533).
  • Physics: Expose body_test_motion in 3D physics server (GH-50103).
  • Physics: Add option to sync motion to physics in 3D KinematicBody (GH-49446).
  • Physics: Expose collider RID in 2D/3D kinematic collision (GH-49476).
  • Physics: Support for disabling physics on SoftBody (GH-49835).
  • Physics: Fix and clean disabled shapes handling in Godot physics servers (GH-49845).
  • Rendering: Rooms and portals-based occlusion culling (GH-46130).
  • Rendering: VisualServer now sorts based on AABB position (GH-43506).
  • Rendering: Fixes depth sorting of meshes with transparent textures (GH-50721).
  • Rendering: Add soft shadows to the CPU lightmapper (GH-50184).
  • Rendering: Combined the DOF far and DOF near passes (GH-50723).
    • Breaks compat slightly if you used both far and near DOF passes with different amount and quality settings. With the changed API, the "far" amount and quality settings will take precedence and also affect the "near" DOF.
  • Rendering: Import option to split vertex buffer stream in positions and attributes (GH-46574).
  • Rendering: Fix flipped binormal in SpatialMaterial triplanar mapping (GH-49950).
  • Rendering: Fix CanvasItem bounding rect calculation in some cases (GH-49160).
  • RichTextLabel: Fix auto-wrapping on CJK texts (GH-49280).
  • Shaders: Add support for structs and fragment-to-light varyings (GH-48075).
  • TextureButton: Add flip_h and flip_v properties (GH-30424).
  • TextureProgress: Improve behavior with nine patch (GH-45815).
  • Theme: Various improvements to the Theme API (GH-49487).
  • TileSet: Fix selection of spaced atlas tile when using priority (GH-50886).
  • Viewport: Allow input echo when changing UI focus (GH-44456).
  • VisualScript: Allow dropping custom node scripts in VisualScript editor (GH-50696).
  • VisualScript: Expose visual script custom node type hints (GH-50705).
  • VisualScript: Improve and streamline VisualScriptFuncNodes Call Set Get (GH-50709).
  • Windows: Send error logs to stderr instead of stdout, like done on other OSes (GH-39139).
  • XR: Add VIEW_INDEX variable in shader to know which eye/view we're rendering for (GH-48011).
  • Thirdparty library updates: embree 3.13.0, mbedtls 2.16.11.
  • API documentation updates.
  • Editor translation updates.
  • And many more bug fixes and usability enhancements all around the engine!

See the full changelog since 3.3-stable (chronological, or for each contributor).

This release is built from commit a71169c0e0ed7644b959189522535337bdb6cb2b.

Downloads

The download links for dev snapshots are not featured on the Download page to avoid confusion for new users. Instead, browse our download repository and fetch the editor binary that matches your platform:

  • Standard build (GDScript, GDNative, VisualScript).
  • Mono build (C# support + all the above). You need to have dotnet CLI or MSBuild installed to use the Mono build. Relevant parts of Mono 6.12.0.147 are included in this build.

Bug reports

As a tester, you are encouraged to open bug reports if you experience issues with 3.4 beta 2. Please check first the existing issues on GitHub, using the search function with relevant keywords, to ensure that the bug you experience is not known already.

In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in 3.3.2 or earlier no longer works in 3.4 beta 2).

Support

Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, and a handful of part or full-time developers, hired thanks to donations from the Godot community. A big thankyou to everyone who has contributed their time or financial support to the project!

If you'd like to support the project financially and help us secure our future hires, you can do so on Patreon or PayPal.