We are back roughly a month after the release of dev3 to bring you a host of new improvements. Many of our developers
traveled to Germany in October for GodotCon and the yearly Godot contributor meeting. There they spent two days
discussing some of the biggest technical challenges and puzzling out solutions.
Many of the changes in this release are bug fixes that will be backported to Godot 4.3 and released in 4.3.1! So please
test this release well so we can be confident with the changes and release 4.3.1 with them as soon as possible.
Keep in mind that while we try to make sure each dev snapshot is stable enough for general testing, 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.
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, XR editor, or the Android editor for this release (join the Android editor testing group to get access to pre-release builds).
The cover illustration is from Unrailed 2: Back on Track, a chaotic co-op railroad construction game where you build your track across procedurally generated worlds! It is developed by Indoor Astronaut. You can purchase the game in early access on Steam and follow the developer on Twitter.
Highlights
In case you missed them, see the 4.4 dev 1, dev2,
and dev 3 release notes for an overview of some key features which were
already in that snapshot, and are therefore still available for testing in dev 3.
Here are a few highlights that you might find particularly exciting!
Interactive in-game editing
One of the most requested features is the ability to debug the running game from within the editor including pausing the
game, clicking on elements within the scene, and embedding the running game window inside the editor. Dev4 comes with
the first two of these workflows thanks to the contribution from YeldhamDev of Lone Wolf
Technology & W4 Games, users are now able to explore their project’s world freely!
The actual embedding of the game window into the editor will come later in a subsequent PR.
Check out the PR (GH-97257) and the video below to see exactly what
this change enables.
Use collision detection ray to reposition an object already in the scene
ryevdokimov added object snapping for placing 3D objects in the editor (GH-96740).
This is not a drill, see below.
Ubershaders and pipeline pre-compilation (and dedicated transfer queues)
This change combines 2 huge improvements (GH-90400):
- Ubershaders: a technique that allows us to completely avoid shader stutter when objects are viewed in a scene for the first time
- Dedicated transfer queues: by relying on special hardware functions we can dramatically improve the load time for scenes containing many graphics assets like meshes and textures.
Thanks to DarioSamo for months of hard work on this. The implementation of Ubershaders
is something that took a lot of design and implementation to get right, but the end result is something we are very
happy with.
“Ubershaders” are a version of each shader that contains all features and are compiled at load time. We pair the
ubershader with the ability to compile specialized shader pipelines in the background. This way when we draw a new
object, instead of freezing and waiting for the pipeline to compile, we fallback on the ubershader and compile the
specialized shader in the background.
Most games will notice the improvement from ubershaders without any content changes. However, there are certain cases
where the ubershader won’t work and some content changes will be needed to avoid shader stutter. However, the
workarounds for avoiding shader stutter are now very simple and are well documented already in the official docs.
Taking advantage of the new ubershader infrastructure, we can now optimize our shaders by creating specialized variants
that skip unused pathways. We have already begin doing so to optimize our existing shaders
(GH-98825).
Add Shadow Caster Mask property to Light3D
This long awaited improvement from EMBYRDEV allows users to apply a mask on Light3Ds to
select what rendering layers will be considered when casting shadows
(GH-85338). Previously it was only possible to disable shadows from a
GeometryInstance (for all Light3Ds) or a Light3D (for all GeometryInstances). This allows much more fine-grained control
that allows users to further optimize dynamic lights and control where shadows appear in their games.
Always add decimal when converting float to string
Currently when printing float values Godot trims trailing .0
s as they are technically unnecessary. However, this could
lead to issues for users who need to distinguish between floating point numbers and integers.
KoBeWi has now changed the behavior when floats are converted to strings to always add the decimal number, even if it would be .0
.
This makes floats always recognizable when they are converted to strings (GH-47502).
This change in behavior may break your project if you are relying on the current serialization behavior. If this change
breaks your project, please let us know by opening an issue on GitHub.
# Before:
var a: float = 1.0
print(a)
# Prints 1
# After:
var a: float = 1.0
print(a)
# Prints 1.0
And more!
There are too many exciting changes to list them all here, but here’s a curated selection:
- 2D: Revert unintentional rounding change when 2D transform snapping (GH-98195).
- Animation: Fix error when stopping empty animation player (GH-97760).
- Audio: Expose some AudioStreamPlayback methods (namely mix_audio()) (GH-86539).
- Buildsystem: CI: Add MinGW/GCC build to Windows GHA (GH-97446).
- Core: Implement array based hash map AHashMap (GH-92554).
- Core: Expose
Geometry2D.bresenham_line()
method (GH-74714). - Core: Add Object support for String.format (GH-65962).
- Dotnet: Change generated
On{SignalName}
to EmitSignal{SignalName}
(GH-97588). - Dotnet: Generate
ReadOnlySpan<T>
Overloads for GodotSharp APIs (GH-96329). - Editor: Improve UI of sun angle in the sun/preview env popup (GH-97747).
- Editor: Add submenu support to EditorContextMenuPlugin (GH-97292).
- Editor: Improve display for lightmap probes in the editor (GH-83863).
- Editor: Add missing audio bus button styles #(GH-93443).
- Editor: Add Markdown syntax highlighting to the script editor (GH-78312).
- GDExtension: Fix loss of gdextension on editor startup (GH-98041).
- GDScript: GDScript: Fix cached parser error when using typed Dictionaries (GH-98400).
- GDScript: GDScript: Fix annotation parsing adding new annotation entries (GH-98146).
- GUI: Add hover state to Tree items display (GH-88530).
- GUI: Handle scroll events in RichtTextLabel (GH-97730).
- Import: Rewrite index optimization code for maximum efficiency (GH-98801).
- Import: LOD: Remove “Raycast Normals” and associated “Normal Split Angle” settings (GH-98620).
- Import: Betsy: Implement BC4 compression (GH-97295).
- Import: Emit filesystem_changed only once per frame (GH-98584).
- Navigation: Optimize some parts of NavMap::sync (GH-90182).
- Porting: Implement native file picker support for Android (GH-98350).
- Porting: Implement has_hardware_keyboard method for Android and iOS (GH-97743).
- Rendering: Fix various issues and minor performance optimisations in 2D renderer (GH-98652).
- Rendering: Fix volumetric fog artifacts when inside the fog (GH-86103).
- Rendering: Fix updating dynamic objects in LightmapGI (GH-97925).
- Rendering: Add draw indirect to Rendering Device (GH-97247).
- Rendering: Add Swappy & Pre-Transformed Swapchain (GH-96439).
- Shaders: Implement instance uniforms in Compatibility renderer (GH-96819).
- Shaders: Implement custom function overloading in shading language (GH-92441).
- XR: OpenXR: change bindings to ‘flatten’ source paths (GH-98163).
- XR: Add support for external camera feed from external plugin on Android (GH-96705).
Changelog
131 contributors submitted 339 improvements for this new snapshot. See our interactive changelog for the complete list of changes since the previous 4.4-dev3 snapshot.
This release is built from commit 36e6207bb
.
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
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 or 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.