Godot 4.4, a unified experience – Godot Engine

9 min read Original article ↗

Embedded game window

Window management magic

Godot runs the game as a separate process from the editor for two reasons:

  • avoid having to share resources as much as possible
  • in case of a game crash, keep the editor running (to avoid data loss)

However, this design choice previously prevented embedding the game window into the editor. Which is something that users with limited screenspace, like on single-monitor setups or laptops, are looking for.

Thanks to some window management tricks, it is now possible to embed the game seamlessly and interact with the rest of the editor, while still keeping the processes separate in the background.

Note that this only works on Linux, Windows, and Android for now. Support for macOS will require a different approach for technical reasons.

Optimizations

Harder, Better, Faster, Stronger

Now that the core feature set of Godot 4 feels stable, our contributors have shifted their efforts towards optimizing them across the board.

While many of the linked PRs were finished and tested before the 4.3 release, they did not make the merge deadline, resulting in a big batch for you to enjoy now.

Manifold library replaces CSG implementation

Support for Constructive Solid Geometry (CSG) has been in the engine since Godot 3.1 and is a great tool for rapid prototyping.

Nonetheless, our internal implementation suffered from stability issues and other bugs. This is one of the engine areas that does not have a dedicated maintainer to look after it, so when an open source library with the same functionality was released, we jumped at the opportunity.

Manifold completely replaces the existing implementation, which is a fairly big change in how Godot handles CSG internally, but only minimally impacts the user API. Please check your projects after upgrading and report any negative consequences to us so they can be tackled!

Curve: domains outside of [0,1]

By extending the domain of Curve values beyond the normalized [0, 1] range, we aim to give you greater flexibility in how to map functions and data to this ubiquitous resource.

Temporary file and directory utilities

With this brand new API you can create and dispose of temporary files and directories. In other words: you can write content on a disc without worrying about polluting user data. By default, any file/directory you create this way automatically disposes of itself after use.

Tool developers in particular should have a look at this new feature!

Shadowmasks for LightmapGI

Both. Both is good.

From now on, you don’t have to choose between fully baked or fully dynamic shadows anymore when using LightmapGI.

By enabling shadowmasks while baking your lightmaps, it is now possible to use static shadows in the distance and dynamic shadows up close. The lower resolutions far away will save precious resources, while the level of detail close to the player is not impacted.

Shortening the range of your dynamic shadows like so provides very important optimization, especially for mobile applications.

Persistent window state

Continue where you left off

This is a quality of life improvement for anyone using big monitors or multi-monitor setups.

The Godot editor now keeps track of its window state: whether it is in fullscreen or windowed mode, which screen it is on, as well as its size and position.

These settings are then automatically restored when you open the program again.

Scene startup optimizations

Editor load speed improves once again. Large projects can expect a speed bump of up to 3x!

This benefits both the project startup and any operations that scan the filesystem.

Autostart for all profilers

If you want to capture profiling data while running your game - without missing the first few seconds of loading a scene - you will appreciate this new checkbox.

It will autostart all profilers when you run a project, rather than forcing you to tab out of the game to do it yourself.

Error-less first project import

No one wants to be met with a wall of errors after freshly importing their project from a version control system.

This used to happen because it is not necessary to push the .godot folder into your repositories, since it auto-generates upon opening your project for the first time. After that, you had to restart the editor to get rid of all the errors caused by broken references — not anymore!

Android editor: Export support

Stay on mobile from start to finish

The Godot editor has been available on Android devices for a while already, but until now you were forced to switch to a different OS to create the various platform binaries.

No more of that: download export templates onto your Android device and finalize your project right there.

JavaClassWrapper fixed

You can now map Java classes to Godot objects as an interface. This gives easier access to the Android SDK and lets you avoid creating a plugin for even the most basic things.

AndroidFilePicker support

You can now utilize Android’s native file picker in your games and apps. This creates a more seamless experience on mobile.

Swappy – Android Frame Pacing library

Pace yourself

The Android Frame Pacing library also known as Swappy helps games achieve smooth rendering and correct frame pacing on Android. The library handles multiple refresh rates if they are supported by the device, which gives a game more flexibility in presenting a frame.

As a developer, you don’t have to do anything to reap these benefits: they are automatic upon upgrading your project.

Linux camera support

We can see you now!

Before Godot 4.4, accessing a device’s camera was only supported on macOS and iOS devices.

Now Linux support has finally been merged as well.

For other platforms, we still require contributors to pick up the work — could that be you?

Apple game controller improvements

We overhauled how game controllers work on macOS and iOS, to unify the code across those two platforms some more. Plenty of bugs were fixed along the way.

You will notice improvements in the reliability of controller discovery and manipulating the rumble motors.

.NET 8.0

Time for an upgrade

With the release of Godot 4.0, we moved our C# packages from targeting Mono to .NET 6. This version of .NET was released on November 8, 2021 and ended support on November 12, 2024.

Therefore, our next release will implement and raise the minimum required version to .NET 8; existing projects will automatically be upgraded when opened with Godot 4.4 while older releases will keep targeting .NET 6 to avoid breakage.

.NET support for Android

C# projects now support all Android ABIs and BCL APIs (formerly only 64-bit architectures).

Runtime WAV file loading

Catch this WAVe

You can now load WAV files at runtime — just like OGG Vorbis audio tracks already allowed.

This feature will come in handy for those looking to load user-generated content at runtime, including non-game audio applications.

Betsy texture compressor

Faster imports

The Betsy texture compressor is a tool to compress images into various GPU texture formats. It is now being integrated into the Godot Engine.

Betsy runs on the GPU and is able to compress images significantly faster than our current compressors (using the “VRAM Compressed” import setting).

This change reduces import time dramatically.

New glTF extension

Customizable animation imports

Previously, glTF imports only allowed you to animate properties from this list: position, rotation, scale, and mesh blend shape weights.

This new extension now enables animations to target custom properties too! Think the color of a light, the FOV of a camera, the albedo color of a material, the UV offset of a material, …

The mappings between Godot properties and glTF Object Model JSON pointers can be defined via GDScript.

Async navigation

Background checks

Navigation map synchronization has been moved to an asynchronous background thread.

This avoids slowing down the entire game during navigation updates, especially on lower-end systems. Instead, updates will happen less frequently when resources are limited.

2D Batching

Call me maybe

Batching is a performance optimization that drastically reduces the number of draw calls in a scene. The effect will be particularly noticeable in scenes with a lot of text rendering or repeated sprites sharing a texture.

Previously, this optimization was only available in the Compatibility renderer. This release brings batching to the other rendering backends as well, which should make 2D performance comparable amongst all of them.

Rendering driver fallback

In case you were trying to run Godot with the Forward+ or Mobile backends on a device that does not not actually support Vulkan, D3D12, or Metal, you used to be met with an OS alert that has proven to confuse users more than it is helpful.

This change instead automatically makes the engine fallback on the Compatibility renderer, which is based on OpenGL. For moments when you do not want this behavior, you can toggle it off in the project settings.

Shadow Caster Mask property

Users can now apply a mask on singular Light3D objects to select which rendering layers are considered when casting shadows.

By adding this level of control, dynamic lights can be further optimized and shadows selectively turned on/off.

2D shader instance uniforms

Variations made easier

This release adds support for shader instance uniforms to CanvasItem shaders.

They allow you to assign a different uniform value to each instance of the item, instead of having to compile two separate shaders to achieve this.

This approach is more performant than having to juggle materials, and does not break batching.

Emission shapes for 3D particle systems

Removing the guesswork

From now on, you can rely on a visualization of the 3D particle systems you are placing in your scene, instead of having to guess based on the emission shape’s properties alone.

This works for both CPU and GPU particles.

Another massive release with close to 3,000 commits (excluding merge commits), with a big focus on improvements to the overall workflow and usability of the editor.

Engine features didn't want to be left out amidst this usability focus though, and this release is absolutely feature-packed in all areas.

More than 500 contributors were involved in this new feature release, and we want to thank them all for their amazing contributions, as well as all users who sponsor the Development Fund, reported bugs, opened proposals, or supported each other on our community platforms.

Release page credits