The upcoming Godot 3.5 is now considered feature complete, and has received a lot of bugfixes and improvements over the past weeks thanks to all the testers and developers who reported and fixed issues. We are now at the Release Candidate stage, finalizing everything so that we can release 3.5-stable for all users.

At this stage it’s really close to stable, we just had a few more regression fixes merged since the previous build that warrant another build for testing:

  • Android: Address remaining scoped storage regressions (GH-63480).
  • UWP: Flush buffered input events (GH-63341).

Jump to the Downloads section.

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.5 and included in this release candidate are:

Asynchronous shader compilation + caching (ubershader) (GH-53411)

A long awaited solution to shader compilation stuttering on OpenGL, courtesy Pedro J. Estébanez (RandomShaper)!

This new system uses an “ubershader” (big shader supporting all features, slow but compiled on startup) to fill in for all shaders initially while the more efficient and material-specific shaders get compiled asynchronously, and cached for future runs.

This means that the first time a material is used under certain conditions (types of lights, shadowing enabled or not, etc.) rendering may be slower for a second or two, but the slowdown will not be nearly as bad as the typical hiccup caused by classic synchronous compilation. On the most powerful devices it may be even unnoticeable. Please test this thoroughly and let us know how it performs on your projects.

This feature is disabled by default, and can be enabled in the Project Settings.

Add NavigationServer with obstacle avoidance using RVO2 (GH-48395)

Jake Young (Duroxxigar) backported the refactored and much improved navigation system that Andrea Catania (AndreaCatania) implemented for Godot 4.0 back in 2020! Then smix8 took over the custody of this area, fixing a lot of bugs and improving the feature set greatly, with the help of Pawel Lampe (Scony).

The new NavigationServer adds support for obstacle avoidance using the RVO2 library, and navigation meshes can now be baked at runtime. The whole API is now a lot more flexible than it used to be.

The backport was done while attempting to preserve API compatibility within reason, but the underlying behavior will change, mainly to provide a lot more features and flexibility. We expect that all users will happily move to the new NavigationServer, but please report issues if you see behavior changes for the worse when upgrading from 3.4.

Physics interpolation (3D) (GH-52846)

In Godot, while physics runs at a fixed tick rate, frames can actually display at a wide variety of frame rates, depending on the player’s hardware. This can lead to a problem, when the movement of objects (which tends to occur on physics ticks) does not line up with the rendered frames, giving unsightly jitter.

Thanks to lawnjelly’s expertise, you will now find a sweet new option hidden in the project settings. Switch on physics/common/physics_interpolation, and Godot will now automatically interpolate objects on rendered frames so they look super smooth.

In order to benefit you should be moving your objects and running your game logic in _physics_process(). This ensures your game will run the same on all machines. Full details are available in the updated docs.

Fixed timestep interpolation is 3D only for now, but watch this space as we plan to add 2D support after initial feedback and bugfixing on the 3D version.

OccluderShapePolygon (3D) (GH-57361)

Following on from the addition of OccluderShapeSphere in 3.4, lawnjelly now brings us a more adaptable and easy way to add basic occlusion culling in the form of the OccluderShapePolygon. Add an Occluder node to your scene, and choose to create an OccluderShapePolygon. This should show up initially as a quad.

You can move the polygon with the node transform, drag the corners to reshape it, add delete points. Anything behind the polygon will be culled from view.

It is really as simple as that to get started, place them wherever you like in your game level. Read the updated docs for details.

Android editor port (GH-57747)

Two years ago (!), thebestnom started working on an Android port of the Godot editor (GH-36776). Since the Godot editor is built with Godot itself, it wasn’t too difficult to imagine compiling the editor for Android with some buildsystem changes. But a lot of work was needed to actually make this compiled version work decently on an Android device, with improved mouse and keyboard support, better touch input, as well as being able to run the project on top of the editor like on desktop.

With a lot of testing from interested users, things progressed slowly but steadily, and our Android maintainer Fredia Huya-Kouadio (m4gr3d) put the finishing touches to get this work merged for Godot 3.5 (GH-57747). The current version doesn’t have a lot of mobile specific changes, so it’s only really usable on a tablet with keyboard and mouse - but the foundation is there to improve upon, and we’re interested in your feedback and ideas son how to make the Godot experience more mobile friendly!

From now on you’ll find builds of the Android editor as <godot_version>_android_editor.apk in the download repository. Note that builds are currently not signed, so you will get a warning on install. Give it a try!

With helpful input from contributors Dan Edwards (Gromph) and Péter Magyar (Relintai), Fredia was also able to fix the low processor usage mode on Android (GH-59606), which the editor port uses. It should now work fine for users who make non-game applications or non real-time games on Android and want to preserve battery life.

New Label3D and TextMesh backported from Godot 4.0 (GH-61276, GH-61281)

Long awaited, Godot now provides a Label3D node out of the box to display text in 3D scenes. And for more advanced use cases, there is now also TextMesh to generate 3D meshes from font glyphs, so you can add Word Art to your scenes ;)

Both features were implemented by our text rendering expert bruvzg in the master branch for Godot 4.0, and backported to 3.5.

New SceneTreeTween backported from Godot 4.0 (GH-60581)

Tomasz Chabora (KoBeWi) completely overhauled the Tween class in Godot 4.0 to make it a lot more powerful and flexible. Early testers so far seemed to like, and Haoyu Qiu (timothyqiu) decided to backport the feature to Godot 3.5 as SceneTreeTween (to keep the pre-existing Tween and thus preserve compatibility). So you now have two separate Tween implementations and can use to keep using the original 3.x one, or adopt the new API from 4.0.

Scene unique nodes (GH-60527)

To help with the common task of accessing specific nodes from scripts, Juan Linietsky (reduz) added the concept of “scene unique names” for nodes in the master branch (GH-60298), and Tomasz backported it for 3.5. Nodes with a scene unique name can be referenced easily within their scene using a new % name prefix, like so: get_node("%MyUniqueNode"). This is particularly useful for GUI if you need to locate a specific Control node which might move in the scene tree as you refactor things.

Add push, pull, fetch and improved diff view to VCS UI (GH-53900)

Aged like fine wine, Meru Patel (Janglee123)’s work from Google Summer of Code 2020 has been continued and updated by GSoC 2019 alumni Twarit Waikar (ChronicallySerious)!

What is it? A lot of new features for Version Control Systems (VCS) integration in the Godot editor, such as push, pull, and fetch operations, as well as a very nice diff view UI. All these features have been implemented in the official Git integration plugin. Check out the Releases page for the latest 2.x plugin release supporting Godot 3.5.

And more!

  • 2D: Fix Camera2D position not updating correctly (GH-63084).
  • 2D: Fix CanvasItem not exiting its canvas group on canvas exit (GH-63234).
  • 3D: Add Label3D node and Sprite3D material render priority (GH-61276).
  • 3D: Add TextMesh and expose dynamic font vector outlines (GH-61281).
  • 3D: Add process_mode property to InterpolatedCamera (GH-41402).
  • 3D: Add global_translation and global_rotation to Spatial (GH-63058).
  • Android: Initial port of the Godot editor (GH-57747).
  • Android: Add full support for Android scoped storage (GH-51815).
  • Android: Upgrade Android NDK to r23 LTS (GH-61692).
  • Android: Fix flickering issues with low processor mode (GH-59606).
  • Android: Update editor default display scale, allow resizing windows (GH-59868, GH-59861, GH-59880).
  • Android: Fix the logic to restart the Godot application (GH-61332).
  • Android: Fix broken scroll gesture on UI (GH-62290).
  • Animation: Add option to paste animation as duplicate (GH-60226).
  • Animation: New SceneTreeTween backported from Godot 4.0 (GH-60581).
  • Animation: Fix AnimatedSprite doesn’t emit animation_finished when changing playback direction (GH-61085).
  • Audio: Allow configuring loop mode on WAV import (GH-59170).
  • Audio: Add support for 64-bit IEEE float WAV encoding (GH-61169).
  • Audio: Instance audio streams before AudioServer::lock call (GH-59413).
  • Audio: Fix crash in AudioServer when switching audio devices with different audio channels count (GH-59778).
  • Buildsystem: Default num_jobs to max CPUs minus 1 if not specified (GH-63087).
  • Buildsystem: Refactor Linux linker options with linker=<bfd|gold|lld|mold> (GH-63283).
  • C#: Fix Android AAB export failing to load native libs (GH-57420).
  • Core: Add scene unique nodes (GH-60527).
  • Core: Add GradientTexture2D (GH-54824).
  • Core: Allow pinning property values + Consistent property defaults (GH-52943).
  • Core: Support deep comparison of Array and Dictionary (GH-42625).
  • Core: Add visibility to CanvasLayer (GH-57900).
  • Core: Add a signal to notify when children nodes enter or exit tree (GH-57541).
  • Core: Add fill method to Array and Pool*Array (GH-60426).
  • Core: Expose OS.move_to_trash() (GH-60542).
  • Core: Crash handler: Use print_error to include backtrace in logs (GH-60782).
  • Core: Allow AStar/AStar2D with zero point weight (GH-60812).
  • Core: Add search methods for pool arrays (GH-60856).
  • Core: Add interpolation modes to Gradient (GH-60982).
  • Core: Fix platform-specific issues with OS.set_current_screen() (GH-63192).
  • Debugger: Fix inspecting nested dictionaries/arrays (GH-60737).
  • Debugger: Add --debug-server command line option to listen for incoming connections (GH-60819).
  • Editor: Add push, pull, fetch and improved diff view to VCS UI (GH-53900).
  • Editor: Improve ColorPicker presets (GH-54439).
  • Editor: Add option to only redraw vital updates (GH-53463).
  • Editor: Improved region-select in the 3D editor viewport (GH-58252).
  • Editor: Make property paths and categories translatable (GH-58634).
  • Editor: Add property name style toggle to Inspector (GH-59313).
  • Editor: Add an inspector preview for BitMap (GH-60700).
  • Editor: Create onready variables when dropping nodes and holding Ctrl (GH-60879).
  • Editor: Only switch to node when node dragging it (GH-61162).
  • Editor: Fix editor-only visibility for lights (GH-62335).
  • Editor: Don’t switch to 2D/3D viewports when selecting nodes while in Script Editor (GH-63344).
  • Export: Improve embedded PCK loading and exporting (GH-60580).
  • Export: Add readable export errors (GH-61624).
  • Export: Return 0 exit code when command line export succeeds with warnings (GH-62907).
  • GDNative: Add Core API 1.3 with methods: Dictionary.merge(), Pool*Array has() and sort(), PoolStringArray.join(), String join(), num_uint64() and num_uint64_capitalized().
  • GDScript: Fix variable type inference on release (GH-57851).
  • GDScript: Don’t coerce default values to the export hint type (GH-58686).
  • GDScript: Enable method type information on release builds (GH-59793).
  • GDScript: Fix autocompletion showing core class names with an underscore (GH-62731).
  • GDScript: LSP: Fix wrong parentheses for function call autocompletion (GH-59482).
  • GUI: Add FlowContainer (GH-57960).
  • GUI: Add alignment options to Button icons (GH-57771).
  • GUI: Add type variations to Theme (GH-57942).
  • GUI: Add WOFF2 font support and brotli decoder (GH-59522).
  • GUI: Add a Skew property to StyleBoxFlat (GH-60592).
  • GUI: Make various improvements to OptionButton (GH-61102).
  • GUI: Improve RichTextLabel table filling (GH-61904).
  • HTML5: Enable mbedTLS module for Crypto object (GH-61402).
  • HTML5: Add preliminary support for GDNative+Threads build (GH-61989).
    • Depends on cutting edge Emscripten 3.1.14, no templates provided for this export type for now.
  • Import: glTF: Fix light intensity and attenuation import (GH-62747).
  • Input: Re-enable input accumulation disabled by error in 3.4 (GH-62826).
  • Input: Allow for mapping scancodes to current layout (GH-56015).
  • Internationalization: Add binary MO translation file support (GH-59522).
  • iOS: Flush accumulated input events (GH-62842).
  • Linux: Fix window_maximized not working reliably (GH-59767).
  • Linux: Read and store joypad events in a separate thread (GH-56126).
  • macOS: Implements ad-hoc signing from Linux/Windows (GH-51550).
  • Navigation: Add NavigationServer with obstacle avoidance using RVO2 (GH-48395).
  • Navigation: Lots of fixes and improvements to the new NavigationServer (topic:navigation PRs).
  • Navigation: Backport more NavigationServer features to make it more flexible (GH-61996).
  • Networking: Add proxy support for HTTPClient and the editor (GH-55988).
  • Networking: Add NetworkedMultiplayerCustom so high-level multiplayer backends can be added from scripts (GH-63163).
  • Physics: Add fixed timestep interpolation for 3D (GH-52846).
    • The 2D equivalent will be added later on.
  • Physics: Bullet: KinematicBody compound shape collision fix (GH-56801).
    • Fixes a lot of issues with KinematicBody collisions at the intersection between meshes when using Bullet. This was merged fairly late (3.5 RC 2), please make sure to test it.
  • Physics: Bullet: Do not set gravity and damping when Custom Integrator is enabled (GH-62708).
  • Physics: Fix the calculation of the angular velocity (GH-63190).
  • Rendering: Asynchronous shader compilation + caching (ubershader) (GH-53411).
  • Rendering: Add material_overlay property to MeshInstance (GH-50823).
  • Rendering: Faster editor line drawing - Path2D and draw_line (GH-54377).
  • Rendering: Add OccluderShapePolygon (GH-57361).
  • Rendering: Add support for saving multiple Images in BakedLightmap (GH-58102).
  • Rendering: Bind mesh merging functionality in MeshInstance (GH-57661).
  • Rendering: GLES2: Unpack blend shape arrays when necessary (GH-60829).
  • Rendering: GLES3: Ignore support for S3TC texture compression on Android and iOS devices (GH-62909).
    • Few devices support this compression while they all support ETC2. Godot exports ETC2 by default and doesn’t take into account that mobile devices could need S3TC.
  • Rendering: GLES3: Unbind vertex buffer before calculating blend shapes (GH-60832).
  • Rendering: Portals: Show gridmaps using global mode (GH-60851).
  • Rendering: Fix viewport with transparent background changed to solid black if enabling FXAA or debanding (GH-54585).
  • Rendering: VisibilityNotifier: Add max_distance feature (GH-61544).
  • Rendering: CPU lightmapper: Account for ambient light settings when baking lights (GH-62260).
  • Shaders: Many improvements backported from master (GH-56794).
  • UWP: Fix exporting GDNative DLLs (GH-61262).
  • UWP: Flush buffered input events (GH-63341).
  • VisualShader: Add hints and default values to the uniform nodes (GH-56466).
  • Windows: Improve console handling and execute (GH-55987).
    • This changes the editor console handling to be like on Unix systems (Linux and macOS). So Godot doesn’t open with a console by default, but you can see console output if you start it from a console yourself. You can create a batch script or shortcut to automatically start Godot from a console as in previous releases.
  • Windows: Implement limited surrogate pairs support (better UTF-8 support, emoji fonts) (GH-54625).
  • Windows: Try to convert OS::execute() output to Unicode (GH-60920).
  • Windows: Add support for handling network share paths (GH-61985).
  • Thirdparty library updates: bullet 3.24, freetype 2.12.1, mbedtls 2.28.1, pcre2 10.40, CA certificates (2022-03-31), SDL GameControllerDB from 2022-07-15.
  • Toolchains update for official builds.
  • Class reference and translations updates.

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

Changelog

You can check the full changelog since 3.4-stable (chronological, or for each contributor).

You can also review the changes between RC 7 and RC 8.

This release is built from commit 516d6b6ba.

Downloads

The downloads for this dev snapshot can be found directly on our repository:

  • 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.182 are included in this build.

Bug reports

As a tester, you are encouraged to open bug reports if you experience issues with this release candidate. 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.4.x no longer works in this 3.5 RC).

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.