With our first dev snapshot out of the way, the 4.6 development cycle is no longer constraining itself to the territory of bugfixes. Many long-awaited features and enhancements are seeing the light of day at long last, as this behemoth of a snapshot boasts over 300 improvements in all! This blog post will aim to highlight the heavy-hitters to the best of its ability, but the sheer number of changes may warrant users to check the interactive changelog for a more thorough dive. With new features comes the potential of new bugs, so early testing and reporting will be essential to catching regressions as quickly as possible.

Please consider supporting the project financially, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.

Jump to the Downloads section, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the Web editor, the XR editor, or the Android editor for this release. If you are interested in the latter, please request to join our testing group to get access to pre-release builds.


The cover illustration is from Upload Labs, an idle game where you build and optimize your computer’s system from the ground up. You can get the game for free on Steam, and follow the developers on YouTube or Discord.

Highlights

Build Godot Engine as a library

A very common request we’ve seen regarding Godot is the ability to build the engine as a standalone library. In the past, it’s not something we’ve actively pursued, as the engine paradigm is so central to many of our design philosophies. However, as time has gone on, we’ve encountered more and more scenarios where simply having the ability to access Godot in an isolated context is absolutely necessary for certain workflows. So while a fully-fledged integration of this concept isn’t something we fully support at this time, Gergely Kis has put in the work to allow for a functional baseline (GH-110863). Currently dubbed LibGodot internally, there’s now a basic support for a GodotInstance to function as an entry point for these specialized workflows.

ObjectDB profiling tool

Another common request from more technically-minded users has been a proper means of profiling ObjectDB, which can be considered the heart of our entire Object structure. First-time contributor Aleksander Litynski took to this daunting task, bringing us the ObjectDB Profiler tool (GH-97210). With this, users will be able to take snapshots of the current ObjectDB state during debug sessions, and compare that to other snapshots at a given point in time. These snapshots can also be viewed in a variety of contexts detailed in the PR’s original post, but the short version is finding or exporting a diff between states has never been easier or more accessible!

ObjectDB Profiler

Improved automatic mesh LOD using component pruning

Our mesh simplifier currently supports the ability to collapse edges, but lacked functionality for simplifying the components themselves. Arseny Kapoulkine has addressed this shortcoming, enabling topologically complex sections of a larger mesh to more easily reach the desired LOD target (GH-110028).

Pruned components in simplified mesh

Rotation visualization and snapping

The way that we present and handle our 3D space has already seen a fair number of improvements in the 4.6 cycle, but these two warrant particular mention for implementing popular features that are found in many 3D modelling programs today. Firstly, Robert Yevdokimov has expanded the 3D Transform gizmo to visualize the current delta angle of a rotation operation (GH-108576). This process is non-accumulating, meaning rotations beyond 360° are reset.

The second comes to us from passivestar, who integrated orbit snapping to the 3D Viewport (GH-111509). While holding Alt, exiting an orbit pan will cause the resulting view to be snapped to a static, 45° offset. This is similar to directly swapping to an orthographic view, but from the convenience of orbitting and allowing for more granular 45° midpoints.

Rendering: Blend glow before tonemapping and change default to screen

HDR has been growing in prevalence as a feature in modern displays, but actual support of the feature is lagging behind somewhat. This is largely because most existing programs were designed with sRGB in mind, and necessitate retrofitting themselves to handle HDR. This process is much easier said than done, and sometimes the effects can be invisible to the average user, meaning such advancements are rarely given a proper highlight. Allen Pestaluky has broken this convention, with a PR that improves visual quality for all users and sets the stage for HDR output support (GH-110671).

The first change was to blend glow before tonemapping for all rendering methods and blend modes (except soft light). While this was always the case in the Compatibility renderer, the functionality has been expanded to the Mobile and Forward+ renderers as well. Blending beforehand results in the glow effect blending in a more realistic fashion, sidestepping the hard edges and hue shifts if blended after.

Original sceneBefore tonemapping (screen, AgX, 16.29 white)After tonemapping (screen, AgX, 16.29 white)
Original SceneBefore tonemapping (screen, AgX, 16.29 white)After tonemapping (screen, AgX, 16.29 white)

The second change was adjusting the default blend mode from soft light to screen for all renderers. This too was already the case for the Compatibility renderer, though that default was set with the behavior of blend glow before tonemapping in mind. As such, a change in the other renderers to match the new behavior is to be expected.

RendererSoft light blend modeScreen blend mode
MobileMobile renderer, soft light blend modeMobile renderer, screen blend mode
Forward+Forward+ renderer, soft light blend modeForward+ renderer, screen blend mode

This change technically breaks compatibility since it will result in a noticeable visual change, and the previous behavior cannot be restored by simply adjusting settings. In most cases we are confident that this change in behavior will be a direct upgrade. But this change is something to be aware of if your game is using Glow at all.

And more!

There are too many exciting changes to list them all here, but here’s a curated selection:

  • Core: Add reserve_exact to CowData, and change growth factor to 1.5x (GH-106039).
  • Core: Add reserve function to Array, Vector, and String (GH-105928).
  • Core: Add unique Node IDs to support base and instantiated scene refactorings (GH-106837).
  • Documentation: Drop the experimental label for the Jolt Physics integration (GH-111115).
  • Editor: Add game speed controls to the embedded game window (GH-107273).
  • Editor: Add source lines to file locations on POT generation (GH-111419).
  • Editor: Make file part of errors/warnings clickable in Output panel (GH-108473).
  • Editor: Rework editor docks (GH-106503).
  • Editor: Store script states for built-in scripts (GH-93713).
  • GDScript: Add opt-in GDScript warning for when calling coroutine without await (GH-107936).
  • GUI: Add pivot_offset_ratio property to Control (GH-70646).
  • GUI: Add auto-scroll behavior when selecting text outside the visible area in RichTextLabel (GH-104715).
  • GUI: Visualize MarginContainer margins when selected (GH-111095).
  • Import: OBJ: Support bump multiplier (normal scale) (GH-110925).
  • Network: Add Core UNIX domain socket support (GH-107954).
  • Physics: Add MeshInstance3D primitive conversion options (GH-101521).
  • Physics: Add MultiMesh physics interpolation for 2D transforms (MultiMeshInstance2D) (GH-107666).
  • Rendering: Add material debanding for use in Mobile rendering method (GH-109084).
  • Rendering: Implement motion vectors in compatibility renderer (GH-97151).
  • Rendering: Make OpenXRCompositionLayer and its children safe for multithreaded rendering (GH-109431).

Changelog

114 contributors submitted 323 fixes for this release. See our interactive changelog for the complete list of changes since 4.6-dev1. You can also review all changes included in 4.6 compared to the previous 4.5 feature release.

This release is built from commit 7864ac801.

Downloads

Standard build includes support for GDScript and GDExtension.

.NET build (marked as mono) includes support for C#, as well as GDScript and GDExtension.

While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition a pre-release piece of software. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss.

Known issues

There are currently no known issues introduced by this release.

With every release we accept that there are going to be various issues, which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a complete list of known bugs.

Bug reports

As a tester, we encourage you to open bug reports if you experience issues with this release. Please check the existing issues on GitHub first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.

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 previous 4.x releases, but no longer works in this snapshot).

Support

Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part and full-time developers hired thanks to generous donations from the Godot community. A big thank you to everyone who has contributed their time or their 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 using the Godot Development Fund platform managed by Godot Foundation. There are also several alternative ways to donate which you may find more suitable.

Donate now