Classroom Blender demo by Christophe Seux, ported to Godot 4 by Magnus Jørgensen
Classroom Blender demo by Christophe Seux, ported to Godot 4 by Magnus Jørgensen

Dev snapshot: Godot 4.0 beta 15

By: Rémi Verschelde 25 January 2023

We’re getting dangerously close to the first Release Candidate for Godot 4.0, and focus on finalizing many of the remaining high priority issues. The beta snapshots cadence allows us to better measure the overall stability and quickly catch regressions, especially when a lot of features are worked on at the same time.

This beta includes quite a few big changes which may interest a lot of users:

  • Add support for Unicode identifiers in GDScript and Expression (GH-71676).
  • Support script global resource name in EditorFileSystem, making Quick Open work with custom resources (GH-71683, GH-71687).
  • Rework EditorPlugin editing logic, allowing multiple plugins to be active at the same time (GH-71770).
  • Auto-update instances of scenes which have been reimported (GH-57606).
  • Cleanup and unify keyboard input, adds new Key Label property for localized key mappings (GH-70052).
  • Add “dedicated server” export mode which can strip unneeded visual resources (GH-70377).
  • Fix some SpotLight3D issues (clustering artifacts, leaking light, AABB) (GH-71832).
  • Add AudioStreamPolyphonic to simplify sound playback from code (GH-71855, GH-71906).

Jump to the Downloads section.

You can also try the Web editor (early testing, it’s still slow and unstable).

The illustration picture for this article is from a Godot 4 port of the popular Blender Classroom scene by Christophe Seux. It was ported to Godot 4.0 by Magnus Jørgensen (Godot4Classroom repository) and highlighted in a video with SDFGI by Eray Zeşen.

What’s new

If you’re interested in an overview of what’s new in Godot 4.0 beta in general, have a look at the detailed release notes for 4.0 beta 1. In this blog post, we will only cover the main changes since the previous beta release.

See the changelog on GitHub, or the list of merged PRs, for an overview of all changes since 4.0 beta 14 (111 commits – excluding merge commits ― from 40 contributors).

While we do our best to minimize compatibility breaking changes for existing beta users, there are still occasional changes in the API which may impact your Godot 4 projects. See the list of PRs with the breaks compat label for details.

Some of the most notables feature changes in this update are:

  • 2D: Add a method to get global CanvasItem modulate (GH-70294).
  • Android: Update the logic to calculate the screen scale (GH-71836).
  • Audio: Add AudioStreamPolyphonic to simplify sound playback from code (GH-71855, GH-71906).
  • C#: Move LinearToDb and DbToLinear to Mathf (GH-71932).
  • Core: Add range iterator to LocalVector (GH-70773).
  • Editor: Add “Open in External Program” option (GH-68489).
  • Editor: Fix various gradient editor bugs (GH-70548).
  • Editor: Improve performance of imported file scan (GH-71441).
  • Editor: Support script global resource name in EditorFileSystem (GH-71683, GH-71687).
    • Makes EditorQuickOpen work with custom resources.
  • Editor: Add InputMap conversion to Project Converter (GH-71753).
  • Editor: Rework EditorPlugin editing logic (GH-71770).
    • Allows multiple plugins to be active at the same time.
  • GDScript: Add support for Unicode identifiers in GDScript and Expression (GH-71676).
  • GDScript: Remove function of continue for match statement (GH-71914).
    • This was conflicting with the use of continue in for and while loops. We intend to implement pattern guards for 4.1 which will allow this use case and a lot more. So we’re removing the continue fallthrough behavior now to avoid breaking compatibility in 4.1.
  • GDScript: Fix updating export variables when saving via LSP (GH-71781).
  • GUI: Clean-up, harmonize, and improve StyleBox API (GH-71686).
    • There are a few known regressions which we’ll aim to address in a later build (GH-71891, GH-71913).
  • GUI: Fix BiDi override for the characters outside BMP (e.g., emojis) (GH-71909).
  • Import: Update instances of scenes which have been reimported (GH-57606).
  • Input: Cleanup and unify keyboard input, adds new Key Label property for localized key mappings (GH-70052).
    • Given the scope of this change for all platforms, we expect some regressions, which will be fixed for beta 16. Some have already been reported, and possibly fixed: GH-72006, GH-72012, GH-72013, GH-72026.
  • iOS: Restore OpenGL ES 3.0 renderer support (GH-71848).
    • It is deprecated by Apple, but still works, so it’s exposed as an option.
  • Linux: Include headers for dynamically loaded libraries to simplify build dependencies (GH-71263).
  • Networking: Add “dedicated server” export mode which can strip unneeded visual resources (GH-70377).
  • Physics: Warn against using non-uniform scale for 3D physics (GH-67847).
  • Physics: Fix regression in collision detection for uniform scaling (GH-71707).
  • Rendering: Fix Vulkan validation errors related to enabling extensions (GH-70429).
  • Rendering: Fix DirectionalLight3D shadow opacity on Forward Mobile rendering backend (GH-71690).
  • Rendering: Use proper space for forward GI reflections (GH-71694).
  • Rendering: Add mutex when adding geometry instances to the dirty list in the Forward Clustered renderer (GH-71705).
  • Rendering: Sort decals and lights based on camera origin (GH-71709).
  • Rendering: Decrement texture_binding count when using screen textures (GH-71764).
  • Rendering: Assign light indices after sorting in OpenGL renderer (GH-71772).
  • Rendering: Stop incrementing light_count once max number of lights are reached in 2D canvas renderer (GH-71776).
  • Rendering: Allowed negative DoF blur transition in the editor (GH-71778).
  • Rendering: Fix some SpotLight3D issues (clustering artifacts, leaking light, AABB) (GH-71832).
  • Rendering: Ensure that Particles have fully initialized before doing view axis pass in RD renderers (GH-71925).
  • Rendering: Add a few more checks to ensure that unsupported image formats are not used in the mobile renderer (GH-71939).
  • Shaders: Fix code generation for ProximityRange node in visual shader (GH-71760).
    • This fixes a regression in beta 14. Note that you need to force recompiling your affected visual shaders by doing any change in their graph.
  • Shaders: Clean up shader parameter remap (GH-71797).
  • Shaders: Fix shader include dependency handling (GH-71878).
  • Windows: Fix Alt Gr getting stuck on Windows Right Alt + Tab focus loss (GH-71730).
  • Windows: Fix Xbox Series controller in Bluetooth mode detected as 2 devices (GH-71784).
  • XR: Rename getters and signals on XR nodes to be consistant with input types (GH-71830).
  • As well as many improvements to the documentation.

This release is built from commit 4fa6edc88.

Downloads

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

  • Standard build (GDScript, GDExtension).
  • .NET 6 build (C#, GDScript, GDExtension).
    • Requires .NET SDK 6.0 installed in a standard location. .NET 7.0 is not supported yet, so make sure to install .NET 6.0 specifically.

Known issues

As we are still in the early beta phase of development, there are still many issues to fix, some of which have already been reported and are being worked on. See the GitHub issue tracker for a list of known bugs in the 4.0 milestone.

Bug reports

As a tester, you are encouraged to open bug reports if you experience issues with this release. 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.

As in any major release there are going to be compatibility breaking changes. However, we still try to provide a migration path for your projects. If you experience a regression without a known migration path or workaround, do not hesitate to report it.

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.