Software 43353 Published by

Godot 4.5 dev 5 has been released and represents the concluding development snapshot of the 4.5 release cycle, where bug reports and feedback are essential for ensuring a seamless beta period. The latest release features enhancements in the Web and Android editors, and users are invited to join the testing group to gain access to pre-release builds. The key features from earlier snapshots remain accessible for testing in development version 5. Native visionOS support is provided by Ricardo Sanchez-Saez, a member of Apple's visionOS engineering team, marking the first officially supported platform integration in nearly ten years. The Godot Engine provides support for abstract classes, a feature that was previously limited to internal use. Due to Aaron Franke's contributions, this paradigm is now accessible to GDScript users, enabling them to implement their own abstract class with the introduction of the new abstract keyword.

The recent update to Godot 4.5 dev 5 presents a range of features, such as shader baker exporting, WebAssembly SIMD support, inline color pickers, and enhancements in rendering. The shader baker exporting feature is an optional capability that can be activated during the export process to enhance shader compilation efficiency. Targeting Apple devices or D3D12 is highly advisable, as it greatly minimizes load times. Nonetheless, it presents certain trade-offs, including extended export durations and increased build sizes.



WebAssembly SIMD support is an excellent option for web builds, as it is compatible with all major browsers. Adam Scott has seamlessly integrated this implementation for web builds as a standard feature. Inline color pickers enable users to identify the type of variable associated with an exported color without requiring direct exposure.

The latest updates feature alphabetical sorting in the Animation Player, animation filtering enhancements in the animation editor, audio seek functionality for Theora video files, core improvements, and additional enhancements. Other features include a "Quick Load" button in EditorResourcePicker, file sorting in FileDialog, a translation preview in the editor, channel remap settings added to ResourceImporterTexture, and better performance in areas not being monitored when using Jolt Physics.

Portings for Android, Windows/macOS/Linux, and rendering feature export options for custom theme attributes, support for 16 KB page sizes, and enhancements in SceneTree traversal optimization.

Here is the full announcement:

Dev snapshot: Godot 4.5 dev 5

Brrr… Do you feel that? That’s the cold front of the feature freeze just around the corner. It’s not upon us just yet, but this is likely to be our final development snapshot of the 4.5 release cycle. As we enter the home stretch of new features, bugs are naturally going to follow suit, meaning bug reports and feedback will be especially important for a smooth beta timeframe.

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 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 Replicube, a programming puzzle game where you write code to recreate voxelized objects. It is developed by Walaber Entertainment LLC (Bluesky, Twitter). You can get the game on Steam.

Highlights

In case you missed them, see the  4.5 dev 1 4.5 dev 2 4.5 dev 3, and  4.5 dev 4 release notes for an overview of some key features which were already in those snapshots, and are therefore still available for testing in dev 5.

Native visionOS support

Normally, our featured highlights in these development blogs come from long-time contributors. This makes sense of course, as it’s generally those users that have the familiarity necessary for major changes or additions that are commonly used for these highlights. That’s why it might surprise you to hear that visionOS support comes to us from  Ricardo Sanchez-Saez, whose pull request  GH-105628 is his very first contribution to the engine! It might not surprise you to hear that Ricardo is part of the visionOS engineering team at Apple, which certainly helps get his foot in the door, but that still makes visionOS the first officially-supported platform integration in about a decade.

For those unfamiliar, visionOS is Apple’s XR environment. We’re no strangers to XR as a concept (see our recent  XR blogpost highlighting the latest  Godot XR Game Jam), but XR platforms are as distinct from one another as traditional platforms. visionOS users have expressed a strong interest in integrating with our ever-growing XR community, and now we can make that happen. See you all in the next XR Game Jam!

GDScript: Abstract classes

While the Godot Engine utilizes abstract classes—a class that cannot be directly instantiated—frequently, this was only ever supported internally. Thanks to the efforts of  Aaron Franke, this paradigm is now available to GDScript users ( GH-67777). Now if a user wants to introduce their own abstract class, they merely need to declare it via the new abstract keyword:

abstract class_name MyAbstract extends Node

The purpose of an abstract class is to create a baseline for other classes to derive from:

class_name ExtendsMyAbstract extends MyAbstract

Shader baker

From the technical gurus behind implementing  ubershaders Darío Samo and  Pedro J. Estébanez bring us another miracle of rendering via  GH-102552: shader baker exporting. This is an optional feature that can be enabled at export time to speed up shader compilation massively. This feature works with ubershaders automatically without any work from the user. Using shader baking is strongly recommended when targeting Apple devices or D3D12 since it makes the biggest difference there (over 20× decrease in load times in the TPS demo)!

However, it comes with tradeoffs:

  1. Export time will be much longer.
  2. Build size will be much larger since the baked shaders can take up a lot of space.
  3. We have removed several MoltenVK bug workarounds from the Forward+ shader, therefore we no longer guarantee support for the Forward+ renderer on Intel Macs. If you are targeting Intel Macs, you should use the Mobile or Compatibility renderers.
  4. Baking for Vulkan can be done from any device, but baking for D3D12 needs to be done from a Windows device and baking for Apple .metallib requires a Metal compiler (macOS with Xcode / Command Line Tools installed).

Web: WebAssembly SIMD support

As you might recall, Godot 4.0 initially released under the assumption that multi-threaded web support would become the standard, and only supported that format for web builds. This assumption unfortunately proved to be wishful thinking, and was  reverted in 4.3 by allowing for single-threaded builds once more. However, this doesn’t mean that these single-threaded environments are inherently incapable of parallel processing; it just requires alternative implementations. One such implementation,  SIMD, is a perfect candidate thanks to its support across  all major browsers. To that end, web-wiz  Adam Scott has taken to integrating this implementation for our web builds by default ( GH-106319).

Inline color pickers

While it’s always been possible to see what kind of variable is assigned to an exported color in the inspector, some users have expressed a keen interest in allowing for this functionality within the script editor itself. This is because it would mean seeing what kind of color is represented by a variable without it needing to be exposed, as well as making it more intuitive at a glance as to what color a name or code corresponds to.  Koliur Rahman has blessed us with this quality-of-life goodness, which adds an inline color picker  GH-105724. Now no matter where the color is declared, users will be able to immediately and intuitively know what is actually represented in a non-intrusive manner.

Rendering goodies

The renderer got a fair amount of love this snapshot; not from any one PR, but rather a multitude of community members bringing some long-awaited features to light.  Raymond DiDonato helped SMAA 1x make its transition from addon to fully-fledged engine feature ( GH-102330).  Capry brings bent normal maps to further enhance specular occlusion and indirect lighting ( GH-89988). Our very own  Clay John converted our Compatibility backend to use a fragment shader copy instead of a blit copy, working around common sample rate issues on mobile devices ( GH-106267). More technical information on these rendering changes can be found in their associated PRs.

And more!

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

  • Animation: Add alphabetical sorting to Animation Player ( GH-103584).
  • Animation: Add animation filtering to animation editor ( GH-103130).
  • Audio: Implement seek operation for Theora video files, improve multi-channel audio resampling ( GH-102360).
  • Core: Add --scene command line argument ( GH-105302).
  • Core: Overhaul resource duplication ( GH-100673).
  • Core: Use Grisu2 algorithm in String::num_scientific to fix serializing ( GH-98750).
  • Editor: Add “Quick Load” button to EditorResourcePicker ( GH-104490).
  • Editor: Add PROPERTY_HINT_INPUT_NAME for use with @export_custom to allow using input actions ( GH-96611).
  • Editor: Add named EditorScripts to the command palette ( GH-99318).
  • GUI: Add file sort to FileDialog ( GH-105723).
  • I18n: Add translation preview in editor ( GH-96921).
  • Import: Add Channel Remap settings to ResourceImporterTexture ( GH-99676).
  • Physics: Improve performance with non-monitoring areas when using Jolt Physics ( GH-106490).
  • Porting: Android: Add export option for custom theme attributes ( GH-106724).
  • Porting: Android: Add support for 16 KB page sizes, update to NDK r28b ( GH-106358).
  • Porting: Android: Remove the gradle_build/compress_native_libraries export option ( GH-106359).
  • Porting: Web: Use actual PThread pool size for get_default_thread_pool_size() ( GH-104458).
  • Porting: Windows/macOS/Linux: Use SSE 4.2 as a baseline when compiling Godot ( GH-59595).
  • Rendering: Add new StandardMaterial properties to allow users to control FPS-style objects (hands, weapons, tools close to the camera) ( GH-93142).
  • Rendering: FTI - Optimize SceneTree traversal ( GH-106244).

Dev snapshot: Godot 4.5 dev 5 – Godot Engine