<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title>Godot Engine Official</title><link href="https://godotengine.org/atom.xml" rel="self"/><link href="https://godotengine.org/"/><updated>2024-12-20T10:43:43+00:00</updated><id>https://godotengine.org/</id><entry><title>Dev snapshot: Godot 4.4 dev 7</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-4-dev-7/"/><updated>2024-12-19T18:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-7/</id><summary>One last build before the holidays!</summary><content type="html">&lt;p>Season’s greetings, everyone! As our team winds down for the holiday season, we present you with one last gift before
the new year: our final development build of the year!&lt;/p>
&lt;p>After having a few notable regressions in dev 6, we intended to do a quick turnaround for dev 7 with high priority bug
fixes. But we got greedy and ended up making dev 7 another feature-packed new release so you will have plenty of things
to check out while we are on holidays.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>&lt;a href="#downloads">Jump to the &lt;strong>Downloads&lt;/strong> section&lt;/a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the &lt;a href="https://editor.godotengine.org/releases/4.4.dev7/">&lt;strong>Web editor&lt;/strong>&lt;/a>, &lt;a href="https://www.meta.com/experiences/godot-game-engine/7713660705416473/">&lt;strong>XR editor&lt;/strong>&lt;/a>, or the &lt;strong>Android editor&lt;/strong> for this release (join the &lt;a href="https://groups.google.com/g/godot-testers">Android editor testing group&lt;/a> to get access to pre-release builds).&lt;/p>
&lt;hr />
&lt;p>&lt;em>The cover illustration is from&lt;/em> &lt;a href="https://store.steampowered.com/app/2506810/Pest_Apocalypse/">&lt;strong>Pest Apocalypse&lt;/strong>&lt;/a>, &lt;em>a hyper-realistic post apocalyptic physics based pizza delivery action rogue-lite! It is developed by &lt;a href="https://www.kikimora.games/">Kikimora Games&lt;/a>. You can purchase the game &lt;a href="https://store.steampowered.com/app/2506810/Pest_Apocalypse/">on Steam&lt;/a>, and follow the developers &lt;a href="https://bsky.app/profile/kikimora.games">on BlueSky&lt;/a> and &lt;a href="https://discord.com/invite/sSmGbJSa4E">Discord&lt;/a>.&lt;/em>&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>In case you missed them, see the &lt;a href="/article/dev-snapshot-godot-4-4-dev-1/">4.4 dev 1&lt;/a>, &lt;a href="/article/dev-snapshot-godot-4-4-dev-2/">4.4 dev 2&lt;/a>,
&lt;a href="/article/dev-snapshot-godot-4-4-dev-3/">4.4 dev 3&lt;/a>, &lt;a href="/article/dev-snapshot-godot-4-4-dev-4/">4.4 dev 4&lt;/a>, &lt;a href="/article/dev-snapshot-godot-4-4-dev-5/">4.4 dev 5&lt;/a>, and &lt;a href="/article/dev-snapshot-godot-4-4-dev-6/">4.4 dev 6&lt;/a> release notes for an overview of
some key features which were already in those snapshots, and are therefore still available for testing in dev 7.&lt;/p>
&lt;p>Here are highlights of a few new features in dev 7 that you might find particularly exciting!&lt;/p>
&lt;h3 id="jolt-physics-module">Jolt Physics module&lt;/h3>
&lt;p>Ever since its inception in late 2022, &lt;a href="https://github.com/godot-jolt/godot-jolt">godot-jolt&lt;/a> has become the de-facto 3D
physics engine for many of our developers. Much of the history behind why this was the case is documented in &lt;a href="https://github.com/godotengine/godot-proposals/issues/7308">this
proposal&lt;/a> by &lt;a href="https://github.com/adamscott">Adam Scott&lt;/a>, but
the main takeaway was a strong push for this tool to be recognized as an official addon. In doing so, users would be
able to find this amazing resource in a way that was promoted by the engine itself; an exciting prospect!&lt;/p>
&lt;p>The Godot Jolt maintainers, &lt;a href="https://github.com/mihe">Mikael Hermansson&lt;/a> and &lt;a href="https://github.com/jrouwe">Jorrit Rouwe&lt;/a>,
took this idea one step further: integrating the tool as part of the engine &lt;em>directly&lt;/em>. There was already a symbiosis
between their team and the Godot engine, with many features being added to Godot &lt;em>and&lt;/em> Jolt to accommodate both, but the
integration of an official module was no small feat; their pull request
(&lt;a href="https://github.com/godotengine/godot/pull/99895">GH-99895&lt;/a>) ended up adding over 500 files and 115 &lt;strong>thousand&lt;/strong> lines
of code! So while this was one of the most rigorously tested PRs relative to the amount of time it’s been up, it’d be
impossible for any team to account for &lt;em>everything&lt;/em> this behemoth introduced, so we eagerly await your feedback (and bug
reports) on one of the most highly-requested features of 4.x.&lt;/p>
&lt;p>&lt;strong>Note:&lt;/strong> At time of writing, this does &lt;strong>not&lt;/strong> replace Godot Physics as the default 3D physics engine.
The Jolt Physics integration in Godot is considered experimental, and may change in future releases. It also lacks some features of Godot Physics so isn’t a full drop-in replacement. If your interests/use-case are supported, the
tool can be enabled by changing the &lt;code class="language-plaintext highlighter-rouge">physics/3d/physics_engine&lt;/code> project setting to &lt;code class="language-plaintext highlighter-rouge">Jolt Physics&lt;/code>.&lt;/p>
&lt;h3 id="net-80">.NET 8.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/paulloz">Paul Joannon&lt;/a> and &lt;a href="https://github.com/raulsntos">Raul Santos&lt;/a> have put the final pieces in
place for moving both the GodotSharp library and user projects to .NET 8 (&lt;a href="https://github.com/godotengine/godot/pull/92131">GH-92131&lt;/a> and
&lt;a href="https://github.com/godotengine/godot/pull/100195">GH-100195&lt;/a>). All new projects will use .NET 8 by default and
existing projects will automatically update to .NET 8 once opened with this release or any newer 4.4 build.&lt;/p>
&lt;h3 id="improved-scene-tree-editor-performance">Improved Scene Tree editor performance&lt;/h3>
&lt;p>The amount of performance boosts that have been crammed in between dev 6 and dev 7 has been staggering. Of note are the
recent improvements to the engine’s core including many optimizations throughout the String class, spearheaded by
&lt;a href="https://github.com/Ivorforce">Ivorforce&lt;/a>. But perhaps the most obvious improvement comes from &lt;a href="https://github.com/hpvb">HP van
Braam&lt;/a> and their modifications to the SceneTree system
(&lt;a href="https://github.com/godotengine/godot/pull/99700">GH-99700&lt;/a>). While this will prove beneficial across all projects,
these changes result in especially complex scenes having a tenfold performance in the editor when moving or renaming
nodes in the SceneTree.&lt;/p>
&lt;h3 id="documentation-tooltips">Documentation tooltips&lt;/h3>
&lt;p>Thanks to &lt;a href="https://github.com/dalexeev">Danil Alexeev&lt;/a> the GDScript code editor will now display a tooltip containing
information about functions, variables, classes, etc. when you hover over them, including the documentation you have
written using our documentation system (&lt;a href="https://github.com/godotengine/godot/pull/91060">GH-91060&lt;/a>). This makes using
the integrated documentation system even more powerful as you no longer have to bounce between the code editor and the
related docs to quickly get information.&lt;/p>
&lt;p>&lt;img src="/storage/blog/dev-snapshot-godot-4-4-dev-7/documentation-tooltip.webp" alt="Documentation tooltip" />&lt;/p>
&lt;h3 id="baked-shadowmasks-for-lightmaps">Baked shadowmasks for lightmaps&lt;/h3>
&lt;p>Until now, you have always had to choose between fully baked or fully dynamic shadows when using LightmapGI. However,
sometimes you want to have dynamic shadows up close where detail matters, but use static shadows in the distance where a
low resolution is acceptable. Finally it is possible thanks to the hard work of
&lt;a href="https://github.com/BlueCube3310">BlueCube3310&lt;/a> in &lt;a href="https://github.com/godotengine/godot/pull/85653">GH-85653&lt;/a>. You can
now enable shadow masks while baking your LightmapGI to combine dynamic and static shadows for the best quality.&lt;/p>
&lt;p>Additionally, this allows you to drastically shorten the range of your dynamic shadows which is a very important
optimization, especially for mobile devices.&lt;/p>
&lt;p>This feature is still experimental and it will change in response to feedback, so please test it out and let us know
what you think!&lt;/p>
&lt;p>&lt;img src="/storage/blog/dev-snapshot-godot-4-4-dev-7/shadowmask.webp" alt="Baked Lightmap" />&lt;/p>
&lt;h3 id="updated-toolchains-for-official-builds">Updated toolchains for official builds&lt;/h3>
&lt;p>We updated some of the toolchains we use for official builds in &lt;a href="https://github.com/godotengine/build-containers/pull/150">build-containers#150&lt;/a>,
notably macOS and iOS SDKs from Xcode 16.2, and MinGW 12.0.0 with GCC 14.2.1 for Windows builds.&lt;/p>
&lt;p>Toolchains for Linux, Android, and Web are still the same versions as for Godot 4.3.&lt;/p>
&lt;h3 id="and-more">And more!&lt;/h3>
&lt;p>There are too many exciting changes to list them all here, but here’s a curated selection:&lt;/p>
&lt;ul>
&lt;li>3D: Add 3D translation sensitivity to Editor Settings (&lt;a href="https://github.com/godotengine/godot/pull/81714">GH-81714&lt;/a>).&lt;/li>
&lt;li>3D: Add ruler mode to 3D (&lt;a href="https://github.com/godotengine/godot/pull/100162">GH-100162&lt;/a>).&lt;/li>
&lt;li>Animation: Add animation node extension (&lt;a href="https://github.com/godotengine/godot/pull/99181">GH-99181&lt;/a>).&lt;/li>
&lt;li>Audio: Add Web MIDI support (&lt;a href="https://github.com/godotengine/godot/pull/95928">GH-95928&lt;/a>).&lt;/li>
&lt;li>Buildsystem: Add loongarch64 support for Linux/*BSD (&lt;a href="https://github.com/godotengine/godot/pull/97822">GH-97822&lt;/a>).&lt;/li>
&lt;li>Buildsystem: Make Godot compile on &lt;code class="language-plaintext highlighter-rouge">FreeBSD&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/100047">GH-100047&lt;/a>).&lt;/li>
&lt;li>Core: Fix &lt;code class="language-plaintext highlighter-rouge">JSON.{from,to}_native()&lt;/code> issues (&lt;a href="https://github.com/godotengine/godot/pull/99765">GH-99765&lt;/a>).&lt;/li>
&lt;li>Core: Optimize StringBuilder by using &lt;code class="language-plaintext highlighter-rouge">LocalVector&lt;/code> instead of &lt;code class="language-plaintext highlighter-rouge">Vector&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/99775">GH-99775&lt;/a>).&lt;/li>
&lt;li>Core: Optimize String construction from statically known strings by evaluating &lt;code class="language-plaintext highlighter-rouge">strlen&lt;/code> at compile-time (&lt;a href="https://github.com/godotengine/godot/pull/100132">GH-100132&lt;/a>).&lt;/li>
&lt;li>Core: Add move assignment and move constructor to Variant (&lt;a href="https://github.com/godotengine/godot/pull/100426">GH-100426&lt;/a>).&lt;/li>
&lt;li>Documentation: Document &lt;code class="language-plaintext highlighter-rouge">_process()&lt;/code> and &lt;code class="language-plaintext highlighter-rouge">_physics_process()&lt;/code> delta behavior at low FPS (&lt;a href="https://github.com/godotengine/godot/pull/94636">GH-94636&lt;/a>).&lt;/li>
&lt;li>Editor: Add ability to create a new inherited scene from code (&lt;a href="https://github.com/godotengine/godot/pull/90057">GH-90057&lt;/a>).&lt;/li>
&lt;li>Editor: Add profiler autostart indicator to EditorRunBar (&lt;a href="https://github.com/godotengine/godot/pull/97492">GH-97492&lt;/a>).&lt;/li>
&lt;li>Editor: Allow dragging to specific folders in filesystem dock (&lt;a href="https://github.com/godotengine/godot/pull/99453">GH-99453&lt;/a>).&lt;/li>
&lt;li>Editor: Make the Script Editor’s parser execute sooner on edit after error was found (&lt;a href="https://github.com/godotengine/godot/pull/87542">GH-87542&lt;/a>).&lt;/li>
&lt;li>Editor: Show String properties’ text in a tooltip in the inspector (&lt;a href="https://github.com/godotengine/godot/pull/76231">GH-76231&lt;/a>).&lt;/li>
&lt;li>Export: Use temp dirs instead of cache dirs for export (&lt;a href="https://github.com/godotengine/godot/pull/100150">GH-100150&lt;/a>).&lt;/li>
&lt;li>GDExtension: Fix &lt;code class="language-plaintext highlighter-rouge">Variant&lt;/code> modulo operation (&lt;a href="https://github.com/godotengine/godot/pull/99559">GH-99559&lt;/a>).&lt;/li>
&lt;li>GDScript: Add &lt;code class="language-plaintext highlighter-rouge">@warning_ignore_start&lt;/code> and &lt;code class="language-plaintext highlighter-rouge">@warning_ignore_restore&lt;/code> annotations (&lt;a href="https://github.com/godotengine/godot/pull/76020">GH-76020&lt;/a>).&lt;/li>
&lt;li>GUI: Change default Arabic font to Vazirmatn (&lt;a href="https://github.com/godotengine/godot/pull/100053">GH-100053&lt;/a>).&lt;/li>
&lt;li>GUI: Fix Tree drag-and-drop scrolling having low FPS at low Physics Ticks per Second (&lt;a href="https://github.com/godotengine/godot/pull/98766">GH-98766&lt;/a>).&lt;/li>
&lt;li>GUI: Improve emoji SVG parsing by caching (&lt;a href="https://github.com/godotengine/godot/pull/100300">GH-100300&lt;/a>).&lt;/li>
&lt;li>GUI: Save color palette as resources to reuse later (&lt;a href="https://github.com/godotengine/godot/pull/91604">GH-91604&lt;/a>).&lt;/li>
&lt;li>Import: Consider all texture types for resource thumbnail generation (&lt;a href="https://github.com/godotengine/godot/pull/100247">GH-100247&lt;/a>).&lt;/li>
&lt;li>Input: Add &lt;code class="language-plaintext highlighter-rouge">Tablet/Trackpad&lt;/code> 3D navigation preset (&lt;a href="https://github.com/godotengine/godot/pull/97985">GH-97985&lt;/a>).&lt;/li>
&lt;li>Navigation: Despaghettify NavigationServer path queries (&lt;a href="https://github.com/godotengine/godot/pull/100129">GH-100129&lt;/a>).&lt;/li>
&lt;li>Plugin: Export &lt;code class="language-plaintext highlighter-rouge">EditorInspector::instantiate_property_editor&lt;/code> for use by plugins (&lt;a href="https://github.com/godotengine/godot/pull/87375">GH-87375&lt;/a>).&lt;/li>
&lt;li>Rendering: Add Blend Distance property to ReflectionProbe (&lt;a href="https://github.com/godotengine/godot/pull/99958">GH-99958&lt;/a>).&lt;/li>
&lt;li>Rendering: Allow changing the anisotropic filter level at run-time per Viewport (&lt;a href="https://github.com/godotengine/godot/pull/88313">GH-88313&lt;/a>).&lt;/li>
&lt;li>Rendering: Further performance improvements from The Forge (&lt;a href="https://github.com/godotengine/godot/pull/99257">GH-99257&lt;/a>).&lt;/li>
&lt;li>Rendering: Automatically compress new lightmap textures (&lt;a href="https://github.com/godotengine/godot/pull/100327">GH-100327&lt;/a>).&lt;/li>
&lt;li>Rendering: Optimize PointLight2D shadow rendering by reducing draw calls and RD state changes (&lt;a href="https://github.com/godotengine/godot/pull/100302">GH-100302&lt;/a>).&lt;/li>
&lt;li>Rendering: Implement &lt;code class="language-plaintext highlighter-rouge">RD::buffer_get_data_async()&lt;/code> and &lt;code class="language-plaintext highlighter-rouge">RD::texture_get_data_async()&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/100110">GH-100110&lt;/a>).&lt;/li>
&lt;li>Shaders: Avoid error spam when shaders fail to compile by freeing shader_data version when compilation fails (&lt;a href="https://github.com/godotengine/godot/pull/100128">GH-100128&lt;/a>).&lt;/li>
&lt;li>XR: Allow locking the camera to the &lt;code class="language-plaintext highlighter-rouge">XROrigin3D&lt;/code> for benchmarking or automated testing (&lt;a href="https://github.com/godotengine/godot/pull/99145">GH-99145&lt;/a>).&lt;/li>
&lt;li>XR: OpenXR: Add support for binding modifiers (&lt;a href="https://github.com/godotengine/godot/pull/97140">GH-97140&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h2 id="changelog">Changelog&lt;/h2>
&lt;p>&lt;strong>113 contributors&lt;/strong> submitted &lt;strong>263 improvements&lt;/strong> for this new snapshot. See our &lt;a href="https://godotengine.github.io/godot-interactive-changelog/#4.4-dev7">&lt;strong>interactive changelog&lt;/strong>&lt;/a> for the complete list of changes since the previous 4.4-dev6 snapshot.&lt;/p>
&lt;p>This release is built from commit &lt;a href="https://github.com/godotengine/godot/commit/46c8f8c5c5874c7c56ea5b1384259de9402d3449">&lt;code class="language-plaintext highlighter-rouge">46c8f8c5c&lt;/code>&lt;/a>.&lt;/p>
&lt;h2 id="downloads">Downloads&lt;/h2>
&lt;div class="card card-download">
&lt;a class="card-download-link" href="/download/archive/4.4-dev7">
Download Godot 4.4 dev7
&lt;/a>
&lt;div class="card-download-details">
&lt;img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-4-dev-7.webp" />
&lt;div class="card-download-platforms">
&lt;div class="download-platform platform-linux">
&lt;img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" />
Linux
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev7/Godot_v4.4-dev7_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev7/Godot_v4.4-dev7_mono_linux_x86_64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-macos">
&lt;img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" />
macOS
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev7/Godot_v4.4-dev7_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev7/Godot_v4.4-dev7_mono_macos.universal.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-windows">
&lt;img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" />
Windows
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev7/Godot_v4.4-dev7_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev7/Godot_v4.4-dev7_mono_win64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;div class="card-download-sublinks">
&lt;a class="card-download-other" href="/download/archive/4.4-dev7">
Export templates and other downloads
&lt;/a>
&lt;a class="card-download-donate" href="/donate/">
Make a Donation
&lt;/a>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Standard build&lt;/strong> includes support for GDScript and GDExtension.&lt;/p>
&lt;p>&lt;strong>.NET build&lt;/strong> (marked as &lt;code class="language-plaintext highlighter-rouge">mono&lt;/code>) includes support for C#, as well as GDScript and GDExtension.&lt;/p>
&lt;ul>
&lt;li>.NET 8.0 or newer is required for this build, changing the minimal supported version from .NET 6 to 8.&lt;/li>
&lt;/ul>
&lt;div class="card card-warning">
&lt;p>
While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition &lt;strong>a pre-release piece of software&lt;/strong>. 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.
&lt;/p>
&lt;/div>
&lt;h2 id="known-issues">Known issues&lt;/h2>
&lt;p>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 &lt;a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug+">known bugs&lt;/a>.&lt;/p>
&lt;p>There are currently no known issues introduced by this release.&lt;/p>
&lt;h2 id="bug-reports">Bug reports&lt;/h2>
&lt;p>As a tester, we encourage you to &lt;a href="https://github.com/godotengine/godot/issues">open bug reports&lt;/a> if you experience issues with this release. Please check the &lt;a href="https://github.com/godotengine/godot/issues">existing issues on GitHub&lt;/a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.&lt;/p>
&lt;p>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).&lt;/p>
&lt;h2 id="support">Support&lt;/h2>
&lt;p>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 &lt;a href="https://fund.godotengine.org/">generous donations from the Godot community&lt;/a>. A big thank you to everyone who has contributed &lt;a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time&lt;/a> or &lt;a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support&lt;/a> to the project!&lt;/p>
&lt;p>If you’d like to support the project financially and help us secure our future hires, you can do so using the &lt;a href="https://fund.godotengine.org/">Godot Development Fund&lt;/a> platform managed by &lt;a href="https://godot.foundation/">Godot Foundation&lt;/a>. There are also several &lt;a href="/donate">alternative ways to donate&lt;/a> which you may find more suitable.&lt;/p></content><author><name>Thaddeus Crews</name></author><category term="Pre-release"/></entry><entry><title>Godot XR community - December 2024</title><link href="https://godotengine.org/article/godot-xr-community-nov-2024/"/><updated>2024-12-18T12:00:00+00:00</updated><id>https://godotengine.org/article/godot-xr-community-nov-2024/</id><summary>Interesting projects from the Godot XR community.</summary><content type="html">&lt;p>Godot has a very active XR-focused community on the XR channel of the &lt;a href="/community/">official Godot Discord server&lt;/a>.
Today, we want to put a spotlight on a number of community projects.&lt;/p>
&lt;h2 id="godot-xr-community-game-jams">Godot XR community Game Jams&lt;/h2>
&lt;p>To showcase the engine capabilities and the ingenuity of the Godot XR community, game jams are now being organized twice a year.
It’s a fun way for participants to get introduced to Godot’s XR capabilities.&lt;/p>
&lt;h3 id="godot-xr-game-jam-1">Godot XR Game Jam #1&lt;/h3>
&lt;p>The &lt;a href="https://itch.io/jam/godot-xr-game-jam">first Godot XR Game Jam&lt;/a> was held from 1 December until 4 December 2023.
The theme of this game jam was Vapor.
We saw both many new faces and long-time community members join, and had a total of 17 entries.&lt;/p>
&lt;p>The #1 spot went to &lt;a href="https://itch.io/jam/godot-xr-game-jam/rate/2402526">Cloud Shepherd&lt;/a> which won 3 out of 6 categories, including “Originality”, “User experience”, and “Audio”.
In this entry, you herd sheep on clouds in the sky by using fans to create breezes that blow the sheep to their destinations.&lt;/p>
&lt;p>The #2 spot was taken by &lt;a href="https://itch.io/jam/godot-xr-game-jam/rate/2402404">Super Steam Hands&lt;/a> which won 2 out of 6 categories (“Fun factor” and “Theme incorporation”).
Don’t let the thumbnail of this entry fool you. It’s a great game where you can feel like Iron Man by using jets of steam to parkour around a level.&lt;/p>
&lt;p>The #3 spot went to &lt;a href="https://itch.io/jam/godot-xr-game-jam/rate/2400974">Pipe Stream&lt;/a> which ranked the best in the “Haptics” category.
It’s a great little puzzle game where you need to chip away a path for vapor to reach a target. Very challenging!&lt;/p>
&lt;p>There were far more great entries, so be sure to &lt;a href="https://itch.io/jam/godot-xr-game-jam/entries">check out the jam page for more&lt;/a>!&lt;/p>
&lt;h3 id="godot-xr-game-jam-2">Godot XR Game Jam #2&lt;/h3>
&lt;p>The &lt;a href="https://itch.io/jam/godot-xr-game-jam-july-2024">second Godot XR Game Jam&lt;/a> was held from 8 July until 15 July 2024.
We decided to give participants a full week to complete their game.
The theme this jam was Relaxation. There were a total of 26 entries and this time we scored them on the average points in all categories.&lt;/p>
&lt;p>The #1 spot went to &lt;a href="https://itch.io/jam/godot-xr-game-jam-july-2024/rate/2821459">Who’s a good boy&lt;/a> with 4.042 points.
This cute little game has you play fetch with a dog in a park.
It features some excellent interactions both from the player’s and dog’s points of view.&lt;/p>
&lt;p>The #2 spot went to &lt;a href="https://itch.io/jam/godot-xr-game-jam-july-2024/rate/2830514">Constellation Coach VR&lt;/a> with 3.974 points.
This game has you find constellations in the night sky by holding up a picture of the constellation and aligning it with the relevant stars.
Excellent haptic feedback lets you know when you’ve gotten close, and successfully aligning the constellation lights it up.&lt;/p>
&lt;p>The #3 spot went to &lt;a href="https://itch.io/jam/godot-xr-game-jam-july-2024/rate/2830121">Summer Pottery VR&lt;/a> with 3.938 points.
This game lets you do some clay pottery sculpting.
It’s a great and very well-executed use of physically interacting with the clay to shape and paint your creation.&lt;/p>
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/0IxvWaj8iUo?si=em-D99NacStXyIYA" title="5 VR Games Made in Godot To Inspire You" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="">&lt;/iframe>
&lt;p>Again, many of the other entries were of great quality and we highly recommend &lt;a href="https://itch.io/jam/godot-xr-game-jam-july-2024/entries">checking them out&lt;/a>.&lt;/p>
&lt;h3 id="godot-xr-game-jam-3">Godot XR Game Jam #3&lt;/h3>
&lt;p>The 3rd game jam will be held in the week starting 10 February 2025. &lt;a href="https://itch.io/jam/godot-xr-game-jam-feb-2025">You can read all about it and sign up here&lt;/a>.&lt;/p>
&lt;h2 id="universal-godot-vr-plugin">Universal Godot VR plugin&lt;/h2>
&lt;p>Inspired by the Universal Unreal Engine VR Mod, community member TeddyBear082 has created a mod to inject VR capabilities into existing 3D games made with Godot.&lt;/p>
&lt;p>TeddyBear082 previously made a name for himself with the excellent VR port of the popular game Cruelty Squad and has used the knowledge gained with that and similar projects to create a more universal mod.&lt;/p>
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/Hb9BDcCZHCY?si=Zr2Jw3MV7cY00yEE" title="UGVR Demo" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="">&lt;/iframe>
&lt;p>You can find the plugin &lt;a href="https://github.com/teddybear082/UGVR">on teddybear082’s GitHub profile&lt;/a>.&lt;/p>
&lt;h2 id="body-tracking-and-motion-capture-plugins">Body tracking and motion capture plugins&lt;/h2>
&lt;p>Core contributor Malcolm Nixon has created various plugins for Godot that use the new body tracking feature to make tracking data available from various sources.&lt;/p>
&lt;p>He has support for Rokoko, Axis Studio and Movella.
He also has a plugin for VMC (Virtual Motion Capture), which is a standard used by a number of motion capture systems.&lt;/p>
&lt;p>You can find the plugins &lt;a href="https://github.com/Malcolmnixon?tab=repositories">on his GitHub profile&lt;/a>.&lt;/p>
&lt;h2 id="meta-platform-plugin">Meta platform plugin&lt;/h2>
&lt;p>Community member Decacis has released a few of his games on the Meta Horizon store and implemented part of the Meta platform SDK in support of this.
He has implemented support for things like in-app purchases, leaderboard, challenges, and much much more.&lt;/p>
&lt;p>The plugin he created is open source and can be found &lt;a href="https://github.com/decacis/godot_oculus_platform">on his GitHub profile&lt;/a>.&lt;/p>
&lt;h2 id="godot-xr-tools">Godot XR Tools&lt;/h2>
&lt;p>We’ve showcased XR Tools before, but with version 4.4 of the plugin nearly ready for release, it’s worth quickly looking at what’s coming.&lt;/p>
&lt;ul>
&lt;li>Improved support for Godot 4.2+ features such as pass through logic with both OpenXR and WebXR.&lt;/li>
&lt;li>New objects to make games suitable for both VR and non-VR use.&lt;/li>
&lt;li>A new gaze interaction component for controller-less experiences.&lt;/li>
&lt;li>Various improvements to snap points.&lt;/li>
&lt;li>Improvements to hands interacting with physics.&lt;/li>
&lt;/ul>
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/YWdcc6r9w3E?si=BimitXSjjVQxcLrO" title="Godot XR tools demo for GodotCon 2024" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="">&lt;/iframe>
&lt;h2 id="godot-arcore-support">Godot ARCore support&lt;/h2>
&lt;p>ARCore support in Godot has been a long time coming.
From an early working prototype in Godot 3, to moving this into a community maintained plugin, there have been plenty of hurdles along the way. Thanks to the persistance of Patrick Exner, Luca Junge, and Chambefort Maxime, we have nearly reached the finish line.&lt;/p>
&lt;p>Supporting changes were recently merged into the master branch of Godot and you can find the plugin itself &lt;a href="https://github.com/GodotVR/godot_arcore">on the plugin’s GitHub&lt;/a>.&lt;/p></content><author><name>Bastiaan Olij</name></author><category term="News"/></entry><entry><title>Meet the creator behind the Godot Game Awards</title><link href="https://godotengine.org/article/godot-game-awards-stayathomedev/"/><updated>2024-12-09T18:00:00+00:00</updated><id>https://godotengine.org/article/godot-game-awards-stayathomedev/</id><summary>StayAtHomeDev has been sharing his passion on YouTube for over two years and now he's running the awards.</summary><content type="html">&lt;p>If you’ve watched Godot-related content on YouTube, &lt;a href="https://www.youtube.com/@stayathomedev">StayAtHomeDev&lt;/a> needs no introduction. He’s been sharing his passion for game development and the Godot Engine through his channel. As the creator of the popular “&lt;a href="https://www.youtube.com/playlist?list=PLEHvj4yeNfeHArSU6U2a715ssJYYCnKCg">This Week in Godot&lt;/a>” series, and the Godot Game Awards, he’s helped showcase the amazing work of the Godot community. We had the chance to talk with him about his journey, what inspired the awards, and his efforts to support the community.&lt;/p>
&lt;h3 id="what-inspired-you-to-create-the-godot-game-awards-and-how-long-has-it-been-running">What inspired you to create the Godot Game Awards, and how long has it been running?&lt;/h3>
&lt;p>I started the “&lt;a href="https://www.youtube.com/playlist?list=PLEHvj4yeNfeHArSU6U2a715ssJYYCnKCg">This Week in Godot&lt;/a>” series over two years ago on my channel. At first it started as a compilation of cool projects or games I found throughout each week. About 7-8 videos in, I thought it would be cool if people could vote for their favorite each week and the engagement exploded. People would comment every week and eventually I compiled every winner into a final vote for the “&lt;a href="https://www.youtube.com/watch?v=3_3N_nL9gIM">Best Godot Project of the Year&lt;/a>” in 2023.&lt;/p>
&lt;p>This year I wanted to expand that into multiple categories, highlighting certain achievements like art design and music, and give attention to other things like plugins, tutorials, even devlogs. From that came the Godot Game Awards, a compilation of the best Godot-based games, plugins, and projects as voted by viewers on my channel.&lt;/p>
&lt;h3 id="how-can-people-get-involved-in-this-years-edition">How can people get involved in this year’s edition?&lt;/h3>
&lt;p>People can get involved from now until December 15th by voting on the 20+ different categories with an official 2024 🗳️ &lt;a href="https://forms.gle/Q4yYy82neZcKA3Ny6">Godot Game Awards Ballot&lt;/a>.&lt;/p>
&lt;p>The winners will be announced in a premiere video on December 28th at 2:00pm EST on my channel so that everyone can watch together and help support the great work by these developers.&lt;/p>
&lt;h3 id="tell-us-about-your-youtube-channelwhat-kind-of-content-do-you-focus-on-and-what-motivated-you-to-start-creating-videos">Tell us about your YouTube channel—what kind of content do you focus on, and what motivated you to start creating videos?&lt;/h3>
&lt;p>I started &lt;a href="https://www.youtube.com/@stayathomedev">StayAtHomeDev&lt;/a> over two years ago to share my passion for creating through game development. At the time, I had a potential job offer to be the Web Coordinator for a professional football team in the US. But I had just been given a grant by Meta for some VR development work with their Oculus Quest 2 headset so I used that to launch the channel. It really was an exercise to create independent income so I could stay at home with my kids. That was a lifestyle choice I knew I wanted to make for them, so I took a shot at YouTube.&lt;/p>
&lt;p>I’m very interested in sharing knowledge so the channel has had an element of teaching with tutorials or game development concept videos. With the “&lt;a href="https://www.youtube.com/playlist?list=PLEHvj4yeNfeHArSU6U2a715ssJYYCnKCg">This Week in Godot&lt;/a>” series, the channel started to steer more towards enriching the Godot community and showcasing what people were creating with the engine. Now, it’s a mix of tutorials, QAs about general game development topics, and the newest format, interviews. I am actually most excited about the interview videos because they really give a chance for viewers to peek into real game dev life with stories and advice from developers actively breaking through the industry or those who are already successful, and of course doing it with the Godot Engine.&lt;/p>
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/8nsJw89FG_A" frameborder="0" allowfullscreen="" style="width: 100%; aspect-ratio: 16 / 9; height: auto;">&lt;/iframe>
&lt;h3 id="how-did-you-discover-godot-when-did-you-start-using-it-do-you-have-prior-experience-with-other-game-engines">How did you discover Godot? When did you start using it? Do you have prior experience with other game engines?&lt;/h3>
&lt;p>If you look at the earliest videos on the channel, you’ll notice they were all focused on the Unreal Engine. I actually worked within Unreal first. Long ago…like long ago…I started making little games with an engine called 3D GameStudio.&lt;/p>
&lt;p>When I started the channel, I knew of Godot (which I thought was called GoDot) but never tried it. After spending more time on YouTube and lurking around other game dev content, Godot kept popping up, so I took it for a test drive. I ended up making a video about it which went “viral” for a small channel while my first kid was being born. There was clearly a lot of interest in the engine so I kept playing around with it and fell in love. Not only with how streamlined it felt but also because it was open source and had such a strong sense of community and pride. I decided I wanted to help support that with the channel.&lt;/p>
&lt;h3 id="what-advice-would-you-give-to-someone-starting-out-as-a-game-developer-or-content-creator-in-the-godot-community">What advice would you give to someone starting out as a game developer or content creator in the Godot community?&lt;/h3>
&lt;p>I would say the WORST thing you can do is stop yourself before you even try. Game development and content creation are both difficult. They are also largely self-motivated so telling yourself you can’t do them means you likely won’t.&lt;/p>
&lt;p>The BEST thing you can do is just try. If you are interested in making games, download the engine and try. You are going to hit walls and fail at a number of things but that’s part of the learning process. The information and tools are out there, you just need to start the climb.&lt;/p>
&lt;p>In more applicable terms…start small, remake Pong or level 1 of Mario Bros. If something seems too difficult to understand, break it into smaller pieces. Don’t try to make an entire 2D platformer controller, make it move left and right first. And don’t think you’re going to sell your first game and make tons of money. You’ll put too much pressure on yourself and it won’t be fun anymore, you’ll get frustrated, and you’ll quit.&lt;/p>
&lt;p>For content creation, it’s a marathon so the most important thing is don’t worry about the views. Make content that you want to make. If a video gets more views than normal, analyze why, and do it again with a small change. YouTube is sort of a constantly moving target and you won’t get a good idea of your style, your interest, or what people want to watch for a while. And even then, those things can always change. Consistency is the important variable…keep doing it and consistently try to get better. Better sound, better speaking, better editing, better pacing, better thumbnails, better topics, better storytelling. There is always something you can improve. If you create videos consistently and improve with every video, you’ll get to where you want to go and build a ton of new skills along the way.&lt;/p>
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/C-sJarU469Y" frameborder="0" allowfullscreen="" style="width: 100%; aspect-ratio: 16 / 9; height: auto;">&lt;/iframe>
&lt;h3 id="do-you-plan-to-continue-organizing-the-godot-game-awards-in-the-future">Do you plan to continue organizing the Godot Game Awards in the future?&lt;/h3>
&lt;p>Absolutely! There have already been nearly 1000 ballots submitted, which is crazy to me. People comment how they enjoy finding new Godot projects every week with the weekly video series and tell me that they feel inspired to make something themselves. That is the best thing I could hope for, that people feel inspired to create. I’m also a music therapist so I have seen the effect creativity and expression can have on a person’s well-being. To me, games are an art form and within that lies the ability to create powerful feelings in other people through interactive play. If one person continues to be inspired by the games showcased in the awards, then I’ll keep making the videos.&lt;/p>
&lt;hr />
&lt;p>&lt;span style="font-size: 28px; font-family: var(--header-font-family); font-weight: 800;">🗳️ &lt;a href="https://forms.gle/Q4yYy82neZcKA3Ny6">Vote now!&lt;/a> 👈&lt;span>&lt;/span>&lt;/span>&lt;/p>
&lt;hr />
&lt;p>If you want to support StayAtHomeDev you can visit his &lt;a href="https://www.patreon.com/StayAtHomeDev_">Patreon&lt;/a>, subscribe to &lt;a href="https://www.youtube.com/@stayathomedev">his channel&lt;/a>, or vote for your favorite Godot projects each week.&lt;/p>
&lt;p>Good luck to all the nominees, and thank you StayAtHomeDev for all your work organizing the awards!&lt;/p></content><author><name>Emi</name></author><category term="Showcase"/></entry><entry><title>Dev snapshot: Godot 4.4 dev 6</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-4-dev-6/"/><updated>2024-12-05T17:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-6/</id><summary>New snapshot on the road to beta, with a lot of 3D workflow goodies!</summary><content type="html">&lt;p>Safety goggles on, people! Features and Quality-of-Life are being integrated at blinding speeds; precautions must be taken to view them head-on. Once secure, we can dive into what’s shaping up to be one of the final development snapshots before 4.4-beta builds roll out!&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>&lt;a href="#downloads">Jump to the &lt;strong>Downloads&lt;/strong> section&lt;/a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the &lt;a href="https://editor.godotengine.org/releases/4.4.dev6/">&lt;strong>Web editor&lt;/strong>&lt;/a>, &lt;a href="https://www.meta.com/experiences/godot-game-engine/7713660705416473/">&lt;strong>XR editor&lt;/strong>&lt;/a>, or the &lt;strong>Android editor&lt;/strong> for this release (join the &lt;a href="https://groups.google.com/g/godot-testers">Android editor testing group&lt;/a> to get access to pre-release builds).&lt;/p>
&lt;hr />
&lt;p>&lt;em>The cover illustration is from&lt;/em> &lt;a href="https://store.steampowered.com/app/3019370/Malware/">&lt;strong>Malware&lt;/strong>&lt;/a>, &lt;em>an installation simulator where players must navigate a minefield of circa-1999 malware! It is developed by &lt;a href="https://store.steampowered.com/search/?developer=Odd%20Games">Odd Games&lt;/a>. You can purchase the game &lt;a href="https://store.steampowered.com/app/3019370/Malware/">on Steam&lt;/a>.&lt;/em>&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>In case you missed them, see the &lt;a href="/article/dev-snapshot-godot-4-4-dev-1/">4.4 dev 1&lt;/a>, &lt;a href="/article/dev-snapshot-godot-4-4-dev-2/">4.4 dev 2&lt;/a>,
&lt;a href="/article/dev-snapshot-godot-4-4-dev-3/">4.4 dev 3&lt;/a>, &lt;a href="/article/dev-snapshot-godot-4-4-dev-4/">4.4 dev 4&lt;/a>, and &lt;a href="/article/dev-snapshot-godot-4-4-dev-5/">4.4 dev 5&lt;/a> release notes for an overview of
some key features which were already in those snapshots, and are therefore still available for testing in dev 6.&lt;/p>
&lt;p>Here are highlights of a few new features in dev 6 that you might find particularly exciting!&lt;/p>
&lt;h3 id="camera3d-preview-in-inspector">Camera3D preview in inspector&lt;/h3>
&lt;p>Previously, adjusting the view of a &lt;code class="language-plaintext highlighter-rouge">Camera3D&lt;/code> in a scene could be a chore to handle. It required activating the camera you wanted to preview, and then reverting it back if it wasn’t the main camera. You could pin a preview of a camera in a dedicated viewport, but that meant reducing the real-estate of your main viewport.&lt;/p>
&lt;p>Now, with &lt;a href="https://github.com/timothyqiu">Haoyu Qiu&lt;/a>’s feature (&lt;a href="https://github.com/godotengine/godot/pull/90778">GH-90778&lt;/a>), every selected 3D camera shows a preview inside the inspector. No switching cameras needed to preview anymore.&lt;/p>
&lt;video autoplay="" loop="" muted="" playsinline="">
&lt;source src="/storage/blog/dev-snapshot-godot-4-4-dev-6/camera3d-inspector.mp4?1" type="video/mp4" />
&lt;/video>
&lt;h3 id="collisionshape3d-debug-color-customization">CollisionShape3D debug color customization&lt;/h3>
&lt;p>3D collision shapes now have parity with their 2D counterparts with the newly added &lt;code class="language-plaintext highlighter-rouge">debug_color&lt;/code> and &lt;code class="language-plaintext highlighter-rouge">debug_fill&lt;/code> properties, which lets you customize the appearance of debug collision shapes in the editor, or at runtime if “Visible Collision Shapes” is enabled in the Debug menu. Thanks to first-time contributor &lt;a href="https://github.com/BattyBovine">BattyBovine&lt;/a> for implementing this much-requested proposal (&lt;a href="https://github.com/godotengine/godot/pull/90644">GH-90644&lt;/a>).&lt;/p>
&lt;p>&lt;img src="/storage/blog/dev-snapshot-godot-4-4-dev-6/debug-color.webp" alt="Examples of custom debug colors" />&lt;/p>
&lt;h3 id="replace-internal-csg-implementation-with-manifold-library">Replace internal CSG implementation with Manifold library&lt;/h3>
&lt;p>Godot added support for CSG, or Constructive Solid Geometry, &lt;a href="/article/godot-gets-csg-support/">back in 3.1&lt;/a>. This is a great tool for rapidly prototyping level geometry or even simple props and characters by combining 3D primitives with various boolean operations (union, intersection, subtraction).&lt;/p>
&lt;p>Our implementation suffered from a number of bugs and stability issues, with no dedicated maintainer to tackle them. Thankfully, a great open source library has been released since then which can be used as a well-maintained replacement for our CSG internals: &lt;a href="https://github.com/elalish">Emmett Lalish&lt;/a>’s &lt;a href="https://github.com/elalish/manifold">Manifold&lt;/a>.&lt;/p>
&lt;p>&lt;a href="https://github.com/fire">Ernest Lee&lt;/a> did an amazing work implementing Manifold in Godot, with help from Emmett to ensure that the library fits our requirements (&lt;a href="https://github.com/godotengine/godot/pull/94321">GH-94321&lt;/a>). As this is a fairly big change to how Godot’s CSG works internally (but with minimal impact on the user API), you might notice differences in your projects using CSG. Please report any change that appears to have a negative impact on your usage.&lt;/p>
&lt;h3 id="runtime-wav-file-loading">Runtime WAV file loading&lt;/h3>
&lt;p>First-time contributor &lt;a href="https://github.com/what-is-a-git">cherry&lt;/a> implemented the long-requested support for runtime loading of WAV files (&lt;a href="https://github.com/godotengine/godot/pull/93831">GH-93831&lt;/a>). This adds parity with OGG Vorbis audio tracks, and will be a welcome addition for users who want to load user-generated content at runtime (including non-game audio applications).&lt;/p>
&lt;h3 id="extend-curve-to-allow-for-domains-outside-of-0-1">Extend Curve to allow for domains outside of &lt;code class="language-plaintext highlighter-rouge">[0, 1]&lt;/code>&lt;/h3>
&lt;p>Have you ever wished that you could edit a &lt;code class="language-plaintext highlighter-rouge">Curve&lt;/code> in a domain that goes beyond the normalized &lt;code class="language-plaintext highlighter-rouge">[0, 1]&lt;/code> range? &lt;a href="https://github.com/anvilfolk">ocean&lt;/a> finally got their implementation of this feature merged (&lt;a href="https://github.com/godotengine/godot/pull/67857">GH-67857&lt;/a>), which should give you greater flexibility in how to map your functions and data to Godot’s ubiquitous Curve resource.&lt;/p>
&lt;video autoplay="" loop="" muted="" playsinline="">
&lt;source src="/storage/blog/dev-snapshot-godot-4-4-dev-6/curve-extended-domain.mp4?1" type="video/mp4" />
&lt;/video>
&lt;h3 id="temporary-file-and-directory-utilities">Temporary file and directory utilities&lt;/h3>
&lt;p>Tool creators, &lt;a href="https://github.com/adamscott">Adam Scott&lt;/a> cooked a little something that could be interesting for you. A brand new API lets you create and dispose of temporary files. Handy if you need to write content on disk, but without worrying about polluting user data. These temporary files and directories even dispose of themselves after use by default. For more information, see (&lt;a href="https://github.com/godotengine/godot/pull/98397">GH-98397&lt;/a>).&lt;/p>
&lt;h3 id="and-more">And more!&lt;/h3>
&lt;p>There are too many exciting changes to list them all here, but here’s a curated selection:&lt;/p>
&lt;ul>
&lt;li>2D: Change how multi selection scale is applied to canvas item (&lt;a href="https://github.com/godotengine/godot/pull/99506">GH-99506&lt;/a>).&lt;/li>
&lt;li>2D: Ensure primitive meshes are created before connected to changed signal (&lt;a href="https://github.com/godotengine/godot/pull/99740">GH-99740&lt;/a>).&lt;/li>
&lt;li>3D: Add ShadowCastingSetting to MeshLibrary / GridMap items (&lt;a href="https://github.com/godotengine/godot/pull/85443">GH-85443&lt;/a>).&lt;/li>
&lt;li>3D: Add CollisionShape3D custom debug colors (&lt;a href="https://github.com/godotengine/godot/pull/90644">GH-90644&lt;/a>).&lt;/li>
&lt;li>3D: Add Camera3D preview in Inspector (&lt;a href="https://github.com/godotengine/godot/pull/90778">GH-90778&lt;/a>).&lt;/li>
&lt;li>3D: Allow tool scripts to alter transform of Node3DEditorViewport camera (&lt;a href="https://github.com/godotengine/godot/pull/93503">GH-93503&lt;/a>).&lt;/li>
&lt;li>3D: Fix mesh corruption of CSG by using elalish/manifold (&lt;a href="https://github.com/godotengine/godot/pull/94321">GH-94321&lt;/a>).&lt;/li>
&lt;li>3D: Adjust VoxelGI gizmo opacity (&lt;a href="https://github.com/godotengine/godot/pull/99969">GH-99969&lt;/a>).&lt;/li>
&lt;li>Animation: Add persistent folding to Animation Library Editor (&lt;a href="https://github.com/godotengine/godot/pull/86481">GH-86481&lt;/a>).&lt;/li>
&lt;li>Animation: Fix crash when re-importing model with AnimationPlayer panel open and node selected (&lt;a href="https://github.com/godotengine/godot/pull/95795">GH-95795&lt;/a>).&lt;/li>
&lt;li>Animation: Add RetargetModifier3D for realtime retarget to keep original rest (&lt;a href="https://github.com/godotengine/godot/pull/97824">GH-97824&lt;/a>).&lt;/li>
&lt;li>Animation: Prioritize proximity to green arrow when selecting overlapping transitions in AnimationNodeStateMachine (&lt;a href="https://github.com/godotengine/godot/pull/98401">GH-98401&lt;/a>).&lt;/li>
&lt;li>Audio: Add runtime file loading to &lt;code class="language-plaintext highlighter-rouge">AudioStreamWAV&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/93831">GH-93831&lt;/a>).&lt;/li>
&lt;li>Audio: Fix AudioStreamPlayer2D/3D’s &lt;code class="language-plaintext highlighter-rouge">get_playback_position&lt;/code> returning &lt;code class="language-plaintext highlighter-rouge">0&lt;/code> right after calling &lt;code class="language-plaintext highlighter-rouge">seek&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/99759">GH-99759&lt;/a>).&lt;/li>
&lt;li>C#: Preserve no-hint behavior for unmarshallable generics in dictionaries (&lt;a href="https://github.com/godotengine/godot/pull/99485">GH-99485&lt;/a>).&lt;/li>
&lt;li>Core: RegEx: Fix handling of unset/unknown capture groups (&lt;a href="https://github.com/godotengine/godot/pull/73973">GH-73973&lt;/a>).&lt;/li>
&lt;li>Core: FileAccess: Return error codes from &lt;code class="language-plaintext highlighter-rouge">store_*&lt;/code> methods (&lt;a href="https://github.com/godotengine/godot/pull/78289">GH-78289&lt;/a>).&lt;/li>
&lt;li>Core: Avoid duplicating signals from scene instances into packed scenes (&lt;a href="https://github.com/godotengine/godot/pull/97303">GH-97303&lt;/a>).&lt;/li>
&lt;li>Core: Make loading translations from threads safe (&lt;a href="https://github.com/godotengine/godot/pull/99527">GH-99527&lt;/a>).&lt;/li>
&lt;li>Core: Do not generate &lt;code class="language-plaintext highlighter-rouge">*.uid&lt;/code> files for JSON, certificates, and translations (&lt;a href="https://github.com/godotengine/godot/pull/99540">GH-99540&lt;/a>).&lt;/li>
&lt;li>Core: Convert line breaks to &lt;code class="language-plaintext highlighter-rouge">\n&lt;/code> and strip line break from the end of string returned by &lt;code class="language-plaintext highlighter-rouge">OS::read_string_from_stdin&lt;/code>/&lt;code class="language-plaintext highlighter-rouge">OS::get_stdin_string&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/99542">GH-99542&lt;/a>).&lt;/li>
&lt;li>Core: Fix &lt;code class="language-plaintext highlighter-rouge">OS::has_feature()&lt;/code> skipping custom features (&lt;a href="https://github.com/godotengine/godot/pull/99864">GH-99864&lt;/a>).&lt;/li>
&lt;li>Core: Add temp utilities (alias &lt;code class="language-plaintext highlighter-rouge">OS::get_temp_dir()&lt;/code>, &lt;code class="language-plaintext highlighter-rouge">FileAccess::create_temp()&lt;/code>, and &lt;code class="language-plaintext highlighter-rouge">DirAccess::create_temp()&lt;/code>) (&lt;a href="https://github.com/godotengine/godot/pull/98397">GH-98397&lt;/a>).&lt;/li>
&lt;li>Editor: Extend Curve to allow for domains outside of &lt;code class="language-plaintext highlighter-rouge">[0, 1]&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/67857">GH-67857&lt;/a>).&lt;/li>
&lt;li>Editor: Implement zooming and panning in the profiler (&lt;a href="https://github.com/godotengine/godot/pull/76055">GH-76055&lt;/a>).&lt;/li>
&lt;li>Editor: Fix jumping to editor help does not scroll correctly sometimes (&lt;a href="https://github.com/godotengine/godot/pull/96449">GH-96449&lt;/a>).&lt;/li>
&lt;li>Editor: Show file names in remove files confirmation dialog (&lt;a href="https://github.com/godotengine/godot/pull/98539">GH-98539&lt;/a>).&lt;/li>
&lt;li>Editor: Add editor setting to stop the bottom panel from switching to the Stack Trace (&lt;a href="https://github.com/godotengine/godot/pull/98657">GH-98657&lt;/a>).&lt;/li>
&lt;li>Editor: Don’t tint editor bottom panel icons when hovered or pressed (&lt;a href="https://github.com/godotengine/godot/pull/98765">GH-98765&lt;/a>).&lt;/li>
&lt;li>Editor: Add copy button to toast notification (&lt;a href="https://github.com/godotengine/godot/pull/98778">GH-98778&lt;/a>).&lt;/li>
&lt;li>Editor: Enable editing of controls inside viewports in editor (&lt;a href="https://github.com/godotengine/godot/pull/99401">GH-99401&lt;/a>).&lt;/li>
&lt;li>Editor: Improve appearance of external links in built-in docs (&lt;a href="https://github.com/godotengine/godot/pull/99480">GH-99480&lt;/a>).&lt;/li>
&lt;li>Editor: Make the alt selection menu available for all modes (&lt;a href="https://github.com/godotengine/godot/pull/99795">GH-99795&lt;/a>).&lt;/li>
&lt;li>Export: Ensure excluded GDExtension files are not included in &lt;code class="language-plaintext highlighter-rouge">extension_list.cfg&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/97216">GH-97216&lt;/a>).&lt;/li>
&lt;li>Export: Write text server data from memory, instead of using temporary file (&lt;a href="https://github.com/godotengine/godot/pull/99164">GH-99164&lt;/a>).&lt;/li>
&lt;li>GDExtension: Register Engine, OS, ProjectSettings, and Time singletons in time for &lt;code class="language-plaintext highlighter-rouge">INITIZATION_LEVEL_CORE&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/98862">GH-98862&lt;/a>).&lt;/li>
&lt;li>GDExtension: Support extension icons in ScriptCreateDialog (&lt;a href="https://github.com/godotengine/godot/pull/98914">GH-98914&lt;/a>).&lt;/li>
&lt;li>GDScript: Fix crash when division by zero/modulo by zero happen on vectors (&lt;a href="https://github.com/godotengine/godot/pull/95172">GH-95172&lt;/a>).&lt;/li>
&lt;li>GDScript: Improve GDScript autocompletion for methods (&lt;a href="https://github.com/godotengine/godot/pull/99102">GH-99102&lt;/a>).&lt;/li>
&lt;li>GDScript: LSP: Fix spec violations that break the VSCode outline (&lt;a href="https://github.com/godotengine/godot/pull/99295">GH-99295&lt;/a>).&lt;/li>
&lt;li>GDScript: Core: Fix built-in enum constant bindings (&lt;a href="https://github.com/godotengine/godot/pull/99424">GH-99424&lt;/a>).&lt;/li>
&lt;li>GDScript: Support tracking multiple analyzer and runtime errors in tests (&lt;a href="https://github.com/godotengine/godot/pull/99490">GH-99490&lt;/a>).&lt;/li>
&lt;li>GUI: Add a Viewport method to get automatically computed 2D stretch transform (&lt;a href="https://github.com/godotengine/godot/pull/80965">GH-80965&lt;/a>).&lt;/li>
&lt;li>GUI: Make &lt;code class="language-plaintext highlighter-rouge">FileDialog&lt;/code> filtering case insensitive (&lt;a href="https://github.com/godotengine/godot/pull/85789">GH-85789&lt;/a>).&lt;/li>
&lt;li>GUI: Make TextEdit autocompletion replace word unless Shift is held (&lt;a href="https://github.com/godotengine/godot/pull/90723">GH-90723&lt;/a>).&lt;/li>
&lt;li>GUI: Reshape and update button on oversampling change (&lt;a href="https://github.com/godotengine/godot/pull/95511">GH-95511&lt;/a>).&lt;/li>
&lt;li>GUI: Prevent infinite recursion in first &lt;code class="language-plaintext highlighter-rouge">_draw&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/97328">GH-97328&lt;/a>).&lt;/li>
&lt;li>GUI: Add theme type variations for secondary Trees and ItemLists (&lt;a href="https://github.com/godotengine/godot/pull/97884">GH-97884&lt;/a>).&lt;/li>
&lt;li>GUI: RTL: Add support for vertical alignment (&lt;a href="https://github.com/godotengine/godot/pull/97963">GH-97963&lt;/a>).&lt;/li>
&lt;li>GUI: Introduce a &lt;code class="language-plaintext highlighter-rouge">SubViewportContainer&lt;/code> config for drag-and-drop target locations (&lt;a href="https://github.com/godotengine/godot/pull/99270">GH-99270&lt;/a>, &lt;a href="https://github.com/godotengine/godot/pull/99691">GH-99691&lt;/a>).&lt;/li>
&lt;li>GUI: Fix SVG font rendering (&lt;a href="https://github.com/godotengine/godot/pull/99459">GH-99459&lt;/a>).&lt;/li>
&lt;li>GUI: Add tooltip support to meta/url tag (&lt;a href="https://github.com/godotengine/godot/pull/99481">GH-99481&lt;/a>).&lt;/li>
&lt;li>Import: Generate thumbnails on imported scenes (&lt;a href="https://github.com/godotengine/godot/pull/96544">GH-96544&lt;/a>).&lt;/li>
&lt;li>Import: Blend file import: Don’t keep original files when not unpacking them (&lt;a href="https://github.com/godotengine/godot/pull/96782">GH-96782&lt;/a>).&lt;/li>
&lt;li>Import: Betsy: Add BC3 and BC5 support (&lt;a href="https://github.com/godotengine/godot/pull/99537">GH-99537&lt;/a>).&lt;/li>
&lt;li>Multiplayer: Fix UID support in MultiplayerSpawner (&lt;a href="https://github.com/godotengine/godot/pull/99712">GH-99712&lt;/a>).&lt;/li>
&lt;li>Navigation: Improve &lt;code class="language-plaintext highlighter-rouge">NavMeshQueries3D::polygons_get_closest_point_info&lt;/code> performance (&lt;a href="https://github.com/godotengine/godot/pull/97928">GH-97928&lt;/a>).&lt;/li>
&lt;li>Navigation: Make NavMap objects request sync only on demand (&lt;a href="https://github.com/godotengine/godot/pull/99646">GH-99646&lt;/a>).&lt;/li>
&lt;li>Network: Add half precision floating point support to &lt;code class="language-plaintext highlighter-rouge">StreamPeer&lt;/code> and &lt;code class="language-plaintext highlighter-rouge">FileAccess&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/97716">GH-97716&lt;/a>).&lt;/li>
&lt;li>Network: Allow disabling UPNP implementation on the Web (&lt;a href="https://github.com/godotengine/godot/pull/99597">GH-99597&lt;/a>).&lt;/li>
&lt;li>Physics: Fix &lt;code class="language-plaintext highlighter-rouge">GodotSpace3D::test_body_motion()&lt;/code> not setting &lt;code class="language-plaintext highlighter-rouge">local_shape&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/99901">GH-99901&lt;/a>).&lt;/li>
&lt;li>Porting: Android: Fix immersive mode issue (&lt;a href="https://github.com/godotengine/godot/pull/98917">GH-98917&lt;/a>).&lt;/li>
&lt;li>Porting: macOS: Change the shortcut for Align Transform with View (&lt;a href="https://github.com/godotengine/godot/pull/94026">GH-94026&lt;/a>).&lt;/li>
&lt;li>Porting: Unix: Don’t create world-writable files when safe save is enabled (&lt;a href="https://github.com/godotengine/godot/pull/96399">GH-96399&lt;/a>).&lt;/li>
&lt;li>Porting: Windows: Fix restoring fullscreen window (&lt;a href="https://github.com/godotengine/godot/pull/98631">GH-98631&lt;/a>).&lt;/li>
&lt;li>Porting: Windows: Fix Inspector tooltips blinking on Windows (&lt;a href="https://github.com/godotengine/godot/pull/99988">GH-99988&lt;/a>).&lt;/li>
&lt;li>Porting: Windows: Improve frame pacing by busy waiting as needed (&lt;a href="https://github.com/godotengine/godot/pull/99833">GH-99833&lt;/a>).&lt;/li>
&lt;li>Porting: Implement &lt;code class="language-plaintext highlighter-rouge">DisplayServer.beep&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/99371">GH-99371&lt;/a>).&lt;/li>
&lt;li>Rendering: Optimize &lt;code class="language-plaintext highlighter-rouge">RenderForwardClustered::_setup_render_pass_uniform_set&lt;/code> by reducing Vector allocations (&lt;a href="https://github.com/godotengine/godot/pull/94368">GH-94368&lt;/a>).&lt;/li>
&lt;li>Rendering: Deprecate the pointless unsafe threading model for rendering (&lt;a href="https://github.com/godotengine/godot/pull/98383">GH-98383&lt;/a>).&lt;/li>
&lt;li>Rendering: Automatically resolve initial and final action for draw lists (&lt;a href="https://github.com/godotengine/godot/pull/98670">GH-98670&lt;/a>).&lt;/li>
&lt;li>Rendering: Fix occlusion culling for double builds by enforcing float conversion for Embree (&lt;a href="https://github.com/godotengine/godot/pull/98770">GH-98770&lt;/a>).&lt;/li>
&lt;li>Rendering: Mask out shadows on CanvasItems that don’t have a matching &lt;code class="language-plaintext highlighter-rouge">item_shadow_mask&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/98835">GH-98835&lt;/a>).&lt;/li>
&lt;li>Rendering: Add lightmap bake cancelling (&lt;a href="https://github.com/godotengine/godot/pull/99483">GH-99483&lt;/a>).&lt;/li>
&lt;li>Rendering: Add VoxelGI bake cancelling and progress UI improvement (&lt;a href="https://github.com/godotengine/godot/pull/99562">GH-99562&lt;/a>).&lt;/li>
&lt;li>Rendering: Fix ReflectionProbe AABB (&lt;a href="https://github.com/godotengine/godot/pull/99802">GH-99802&lt;/a>).&lt;/li>
&lt;li>Shaders: Allow &lt;code class="language-plaintext highlighter-rouge">SCREEN_UV&lt;/code> to be used in light function of spatial shader (&lt;a href="https://github.com/godotengine/godot/pull/94981">GH-94981&lt;/a>).&lt;/li>
&lt;li>Shaders: VisualShader: Add LinearToSRGB and SRGBToLinear to ColorFunc node (&lt;a href="https://github.com/godotengine/godot/pull/97388">GH-97388&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h2 id="changelog">Changelog&lt;/h2>
&lt;p>&lt;strong>114 contributors&lt;/strong> submitted &lt;strong>259 improvements&lt;/strong> for this new snapshot. See our &lt;a href="https://godotengine.github.io/godot-interactive-changelog/#4.4-dev6">&lt;strong>interactive changelog&lt;/strong>&lt;/a> for the complete list of changes since the previous 4.4-dev5 snapshot.&lt;/p>
&lt;p>This release is built from commit &lt;a href="https://github.com/godotengine/godot/commit/1f47e4c4e3a09a422e96880a7918d986dd575a63">&lt;code class="language-plaintext highlighter-rouge">1f47e4c4e&lt;/code>&lt;/a>.&lt;/p>
&lt;h2 id="downloads">Downloads&lt;/h2>
&lt;div class="card card-download">
&lt;a class="card-download-link" href="/download/archive/4.4-dev6">
Download Godot 4.4 dev6
&lt;/a>
&lt;div class="card-download-details">
&lt;img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-4-dev-6.webp" />
&lt;div class="card-download-platforms">
&lt;div class="download-platform platform-linux">
&lt;img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" />
Linux
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev6/Godot_v4.4-dev6_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev6/Godot_v4.4-dev6_mono_linux_x86_64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-macos">
&lt;img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" />
macOS
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev6/Godot_v4.4-dev6_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev6/Godot_v4.4-dev6_mono_macos.universal.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-windows">
&lt;img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" />
Windows
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev6/Godot_v4.4-dev6_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev6/Godot_v4.4-dev6_mono_win64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;div class="card-download-sublinks">
&lt;a class="card-download-other" href="/download/archive/4.4-dev6">
Export templates and other downloads
&lt;/a>
&lt;a class="card-download-donate" href="/donate/">
Make a Donation
&lt;/a>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Standard build&lt;/strong> includes support for GDScript and GDExtension.&lt;/p>
&lt;p>&lt;strong>.NET build&lt;/strong> (marked as &lt;code class="language-plaintext highlighter-rouge">mono&lt;/code>) includes support for C#, as well as GDScript and GDExtension.&lt;/p>
&lt;ul>
&lt;li>See also &lt;a href="https://docs.godotengine.org/en/latest/tutorials/scripting/c_sharp/index.html#c-platform-support">C# platform support&lt;/a>.&lt;/li>
&lt;/ul>
&lt;div class="card card-warning">
&lt;p>
While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition &lt;strong>a pre-release piece of software&lt;/strong>. 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.
&lt;/p>
&lt;/div>
&lt;h2 id="known-issues">Known issues&lt;/h2>
&lt;p>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 &lt;a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug+">known bugs&lt;/a>.&lt;/p>
&lt;p>Here are some known regressions introduced in this snapshot:&lt;/p>
&lt;ul>
&lt;li>Occlusion culling randomly occluding things completely in the open (&lt;a href="https://github.com/godotengine/godot/issues/100032">GH-10032&lt;/a>).
&lt;ul>
&lt;li>A pull request is already open to fix this in the next dev snapshot (&lt;a href="https://github.com/godotengine/godot/pull/100060">GH-100060&lt;/a>).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Error “Manifold creation from mesh failed” with Plane and Quad shapes, which do not get rendered (&lt;a href="https://github.com/godotengine/godot/issues/100014">GH-100014&lt;/a>).
&lt;ul>
&lt;li>Planes and Quads cannot be used with CSG, and just seemed to be usable previously. We’ll improve the usability so they cannot be selected for CSGMesh3D. Instead, use MeshInstance3D to place Planes and Quads.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="bug-reports">Bug reports&lt;/h2>
&lt;p>As a tester, we encourage you to &lt;a href="https://github.com/godotengine/godot/issues">open bug reports&lt;/a> if you experience issues with this release. Please check the &lt;a href="https://github.com/godotengine/godot/issues">existing issues on GitHub&lt;/a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.&lt;/p>
&lt;p>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).&lt;/p>
&lt;h2 id="support">Support&lt;/h2>
&lt;p>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 &lt;a href="https://fund.godotengine.org/">generous donations from the Godot community&lt;/a>. A big thank you to everyone who has contributed &lt;a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time&lt;/a> or &lt;a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support&lt;/a> to the project!&lt;/p>
&lt;p>If you’d like to support the project financially and help us secure our future hires, you can do so using the &lt;a href="https://fund.godotengine.org/">Godot Development Fund&lt;/a> platform managed by &lt;a href="https://godot.foundation/">Godot Foundation&lt;/a>. There are also several &lt;a href="/donate">alternative ways to donate&lt;/a> which you may find more suitable.&lt;/p></content><author><name>Thaddeus Crews</name></author><category term="Pre-release"/></entry><entry><title>Beyond #100000: You're breathtaking!</title><link href="https://godotengine.org/article/beyond-100000-you-re-breathtaking/"/><updated>2024-12-04T19:00:00+00:00</updated><id>https://godotengine.org/article/beyond-100000-you-re-breathtaking/</id><summary>As we reach issue #100,000 on GitHub, we celebrate with a little retrospective on our issue and pull request growth.</summary><content type="html">&lt;div class="card card-info" style="margin-top: 1em;">
&lt;p>This blog post was originally posted on &lt;a href="https://github.com/godotengine/godot/issues/100000">GH-100000&lt;/a>.&lt;/p>
&lt;/div>
&lt;p>It’s been over 10 years now that Godot has been developed in the open, with code contributions from 2,800 users.&lt;/p>
&lt;p>The total count of people who helped build Godot is actually far greater, as it should include documentation writers, testers, bug reporters, translators, moderators, content creators, users doing community support or talking at events, folks making games that credit Godot visibly, everyone supporting the project financially, and many other types of contributions which I can’t keep enumerating.&lt;/p>
&lt;p>All these people brought Juan and Ariel’s little-engine-that-could from this:&lt;/p>
&lt;p>&lt;img src="/storage/blog/beyond-100000-you-re-breathtaking/godot-1-0.webp" alt="Screenshot of the isometric 2D demo in Godot 1.0" />&lt;/p>
&lt;div class="small text-center">
&lt;p>&lt;em>Screenshot of the isometric 2D demo in Godot 1.0.&lt;/em>&lt;/p>
&lt;/div>
&lt;p>To this:&lt;/p>
&lt;p>&lt;img src="/storage/blog/beyond-100000-you-re-breathtaking/godot-4-3.webp" alt="Screenshot of PVKK: Planetenverteidigungskanonenkommandant in Godot 4.3" />&lt;/p>
&lt;div class="small text-center">
&lt;p>&lt;em>Screenshot of &lt;a href="https://store.steampowered.com/app/2956040/PVKK_Planetenverteidigungskanonenkommandant/">PVKK: Planetenverteidigungskanonenkommandant&lt;/a> in Godot 4.3.&lt;/em>&lt;/p>
&lt;/div>
&lt;p>That’s no small achievement, so I encourage all contributors to take a minute to contemplate the progress that we’ve made together over this journey so far!&lt;/p>
&lt;p>Amidst the daily churn of fixing issues, reviewing &lt;abbr title="pull requests">PRs&lt;/abbr>, making releases, etc., it’s important to remind ourselves of where we are, and how we got there.&lt;/p>
&lt;video autoplay="" loop="" muted="">
&lt;source src="/storage/blog/beyond-100000-you-re-breathtaking/cozy-space-survivors.webm" />
&lt;/video>
&lt;div class="small text-center">
&lt;p>&lt;em>GIF of &lt;a href="https://store.steampowered.com/app/2657850/Cozy_Space_Survivors/">Cozy Space Survivors&lt;/a> where asteroids form the word “GO♥DOT”.&lt;/em>&lt;/p>
&lt;/div>
&lt;h2 id="some-stats-about-godot-usage-on-github">Some stats about Godot usage on GitHub&lt;/h2>
&lt;p>Between our usual traditions of either &lt;a href="https://github.com/godotengine/godot/issues/10000">making silly jokes&lt;/a> or &lt;a href="https://github.com/godotengine/godot/issues/30000">sharing some inspiring stats&lt;/a> for round issue numbers, I picked the latter for this 100,000th issue&lt;sup id="fnref:1" role="doc-noteref">&lt;a href="#fn:1" class="footnote" rel="footnote">1&lt;/a>&lt;/sup>, and wanted to look a bit closer at our issue and &lt;abbr title="pull request">PR&lt;/abbr> numbers over time.&lt;/p>
&lt;p>A lot of people coming to Godot’s repository to see over 10,000 open issues and 3,000 open &lt;abbr title="pull requests">PRs&lt;/abbr> might rightfully wonder whether this is normal, or a sign of a maintenance issue.
I will make the case that it is a bit of both :)&lt;/p>
&lt;h3 id="issues">Issues&lt;/h3>
&lt;p>&lt;img src="/storage/blog/beyond-100000-you-re-breathtaking/issue-history.webp" alt="Graph showing issue count over time" />&lt;/p>
&lt;div class="small text-center">
&lt;p>&lt;em>Visualization from OSS Insight showing issue count over time, &lt;a href="https://ossinsight.io/analyze/godotengine/godot#issue-history">see the interactive version&lt;/a>.&lt;/em>&lt;/p>
&lt;/div>
&lt;p>The two accumulated curves show the total number of issues created over the lifetime of the repository (topmost curve), and the subset of those which have been closed (as fixed or invalid). The difference between the two curves represents the number of issues still open at a given point in time - currently exactly 11,000, out of 53,648 issues total, so roughly 20%.&lt;/p>
&lt;p>This is a fairly normal percentage of yet-unresolved issues in software projects of this scale, but it can definitely be better.&lt;/p>
&lt;p>I annotated the graph with some key events of Godot’s development which match peaks in either reported bugs (usually at the start of a beta phase, or shortly after a stable release), or closed issues (when we do a “spring cleaning” going through old issues to check if they are still reproducible in a newly released Godot version). You can see notably two big peaks of closed issues around the 3.2 release, when we had a coordinated effort from maintainers to go through the whole backlog and ask reporters to confirm whether their issues were still valid, or had been fixed. This reduced the percentage of open issues from 29% to 19%, and it’s been mostly stable since, with minor fluctuations.&lt;/p>
&lt;p>We are preparing a new “spring cleaning” to properly reassess a lot of the old issues which have been opened before the 4.0 release, or in the early days of 4.0 or 4.1, and may no longer be relevant nowadays with 4.3 and soon 4.4 beta.&lt;/p>
&lt;p>As the volume of issues keeps increasing steadily, but the number of active bug triagers doesn’t really grow as fast, we are working on improving and documenting our workflows so that we can:&lt;/p>
&lt;ul>
&lt;li>Onboard new volunteers to help triage new and old issues;&lt;/li>
&lt;li>Spread the workload and be more consistent with our issue triage;&lt;/li>
&lt;li>Be confident that while doing so, we do increase the &lt;em>quality&lt;/em> of our open issues, which isn’t something that can be easily tracked in numbers.&lt;/li>
&lt;/ul>
&lt;p>We will share more details here and on the Godot blog when this process is ready to welcome new volunteers.&lt;/p>
&lt;p>In the meantime, you can already do some simple things which help greatly the existing bug triage team:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/godotengine/godot/issues?q=is%3Aissue%20state%3Aopen%20author%3A%40me">&lt;strong>Regularly re-assess your own issues&lt;/strong>&lt;/a> (you can bookmark that URL). Make sure that they are reproducible in the latest stable release and dev snapshots, and that there is a minimal reproduction project that contributors can use to reproduce and fix the issue. If your issue is no longer relevant, please close it with a comment explaining why.&lt;/li>
&lt;li>Feel free to apply the same process to other people’s issues that you stumble upon, especially if their last update was a long time ago. In this case you can’t close issues yourself, but you can suggest it by commenting that the issue is no longer reproducible in the version you tested. Bug triagers will get a notification and can double check.&lt;/li>
&lt;/ul>
&lt;h3 id="pull-requests">Pull Requests&lt;/h3>
&lt;p>&lt;img src="/storage/blog/beyond-100000-you-re-breathtaking/pull-request-history.webp" alt="Graph showing pull request count over time" />&lt;/p>
&lt;div class="small text-center">
&lt;p>&lt;em>Visualization from OSS Insight showing pull request count over time, &lt;a href="https://ossinsight.io/analyze/godotengine/godot#pr-history">see the interactive version&lt;/a>.&lt;/em>&lt;/p>
&lt;/div>
&lt;p>I didn’t annotate this one, but a few takeaways:&lt;/p>
&lt;ul>
&lt;li>Godot gets almost the same number of new pull requests per month as new issues, roughly 600 of each per month (that’s 20 &lt;abbr title="pull requests">PRs&lt;/abbr> and 20 issues per day).&lt;/li>
&lt;li>The &lt;abbr title="pull request">PR&lt;/abbr> volume increased a lot over the lifetime of the project to culminate at over 700 &lt;abbr title="pull requests">PRs&lt;/abbr> per month at the end of the 4.0 development. Since then, as the Godot userbase grew a lot and we are more careful with compatibility and API design, reviews can take a bit longer and the total monthly volume seems to have plateaued around 500-600. That’s still plenty enough for a fairly small group of reviewers.&lt;/li>
&lt;li>Someone should plot this data with relative percentages, but it seems like the size/complexity of pull requests is slightly increasing recently. Whether that trend gets confirmed or not, I can attest that reviewing 600 &lt;abbr title="pull requests">PRs&lt;/abbr> per month is hard, and that we need more help for interested contributors and users to both test and review the &lt;abbr title="pull requests">PRs&lt;/abbr> that get opened on a daily basis.&lt;/li>
&lt;/ul>
&lt;hr />
&lt;p>That’s all for now, I was already way too long and verbose while drafting this at the last minute to (try to) snatch the 100,000th issue number ;)&lt;/p>
&lt;p>Aside from showing some cool numbers, I mostly want to convey that we are well aware that we have a significant backlog, though it’s not as dire as it might look from the outside.&lt;/p>
&lt;p>To deal with it, we need better triage and review processes (which we are designing now), more volunteers involved in these processes, but also importantly &lt;a href="https://fund.godotengine.org/">&lt;strong>more funding&lt;/strong>&lt;/a>. Volunteer contributors do a ton of work, but many critical parts of the workflow depend on a few paid contractors, and we need to grow that group to better manage the increasing scale of the project.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;ol>
&lt;li id="fn:1" role="doc-endnote">
&lt;p>I’ll make a quick note that 100,000 is the combined number of issues and &lt;abbr title="pull requests">PRs&lt;/abbr>, which share the same index system on GitHub.&lt;br />&lt;br />At the time of writing, we’ve actually had 53,648 issues and 45,213 &lt;abbr title="pull requests">PRs&lt;/abbr> created. Astute minds will notice that the sum is not 100,000; the difference comes from spam issues or &lt;abbr title="pull requests">PRs&lt;/abbr> which have been deleted by GitHub. &lt;a href="#fnref:1" class="reversefootnote" role="doc-backlink">&amp;#8617;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></content><author><name>Rémi Verschelde</name></author><category term="News"/></entry><entry><title>Godot Foundation Update December 2024</title><link href="https://godotengine.org/article/godot-foundation-update-dec-2024/"/><updated>2024-12-02T17:00:00+00:00</updated><id>https://godotengine.org/article/godot-foundation-update-dec-2024/</id><summary>We’ve made progress on several key initiatives for the organization and the Godot ecosystem. Here’s what we’ve been up to.</summary><content type="html">&lt;p>The Foundation has been working on a number of things behind the scenes that are important for the organization and for
the Godot ecosystem more broadly. We wanted to take the chance to highlight a few of them in this post.&lt;/p>
&lt;h2 id="key-policies-and-procedures">Key policies and procedures&lt;/h2>
&lt;p>The Foundation was formed in August 2022, but we only began operating in a full capacity in July 2023. We initially
adopted the &lt;a href="https://sfconservancy.org/projects/policies/">member project policies&lt;/a> of the Software Freedom Conservancy.
Doing so allowed us to operate exactly as we had when we were a member project of the SFC, and maintain very high
standards.&lt;/p>
&lt;p>In September, we adopted a modified version of those policies that is more specific to our organization. You can read the
updated version on the &lt;a href="https://godot.foundation/policies-and-procedures/key-policies">Godot Foundation website&lt;/a>.&lt;/p>
&lt;p>We are very happy with the policies and we hope you are too. They hold us to a very high standard and ensure that the
Foundation will always operate in a way that supports Godot.&lt;/p>
&lt;h2 id="contractors">Contractors&lt;/h2>
&lt;p>The Foundation currently has 10 contractors working on the engine directly (6 full time, 4 part time) and 3 contractors
working on administration and infrastructure.&lt;/p>
&lt;p>This is the most contractors we have had at once, and even so, we feel understaffed as there is always more
work that needs to be done than we can do. Accordingly, we would like to continue hiring once funding allows for it.&lt;/p>
&lt;h2 id="upcoming-projects">Upcoming projects&lt;/h2>
&lt;p>The Foundation is working on 4 major projects in addition to working on Godot itself:&lt;/p>
&lt;ol>
&lt;li>An official asset store&lt;/li>
&lt;li>An official job board on the Godot website&lt;/li>
&lt;li>A public project priorities page&lt;/li>
&lt;li>A public trademark policy&lt;/li>
&lt;/ol>
&lt;h3 id="asset-store">Asset store&lt;/h3>
&lt;p>We have been working towards an initial version of the asset store for a while now. It has taken us some time to get the legal aspects into place and a design agreed upon.&lt;/p>
&lt;p>We expect to have an early access version of the site up and running this month and we will begin inviting testers to help us polish it and get it ready for a full release sometime in 2025.&lt;/p>
&lt;h3 id="job-board">Job board&lt;/h3>
&lt;p>We aim to have a place for people to post that are looking to hire Godot developers to add to their game team or Godot
contributors to fix high priority bugs that may be impacting your team.&lt;/p>
&lt;p>In addition to a job board, we will be curating a list of service providers who have shown that they offer services in
the Godot ecosystem to make it easy to find someone to contract with if you need support or any other services.&lt;/p>
&lt;p>Much of the foundational work for this has been finished, but it will likely be released after the asset store so we can
focus our efforts more on that first.&lt;/p>
&lt;h3 id="project-priorities">Project priorities&lt;/h3>
&lt;p>Soon we will be adding a project priorities page to our website to give the community more clarity on the direction of
development.&lt;/p>
&lt;p>We have avoided providing a roadmap as we don’t want to promise more than we can deliver, or put too much pressure on
volunteer contributors. However, the Godot Project maintainers have agreed that it is time to at least write down what
the largest tasks are that we are working towards. This won’t be like a traditional roadmap where we have specific tasks
with expected dates. However, we believe it will answer a lot of questions that the community has about the future of
the project.&lt;/p>
&lt;h3 id="trademark-policy">Trademark policy&lt;/h3>
&lt;p>We registered the Godot trademark and the Godot logo trademark while still a member project of the SFC. Last year, the
SFC granted the Godot Foundation ownership over the trademarks. Now we need to have a public policy that says how and
when others can use the trademarks to protect them.&lt;/p>
&lt;p>We are working with our lawyers to craft a policy that is fair to existing users, as permissive as possible, and still
able to protect our trademark.&lt;/p>
&lt;p>We will have a blog post soon with more information.&lt;/p>
&lt;h2 id="the-foundations-role-in-the-project">The Foundation’s role in the project&lt;/h2>
&lt;p>We also wanted to take this chance to muse about the Foundation’s role in the project. In particular, we want to
contrast the size of the Foundation with the size of the Godot project contributor pool. As explained above, the
Foundation currently hires 13 contractors to work on Godot, while the total number of contributors to Godot is over
2,500 (the 4.3 release alone had over 500 contributors)! This large group of contributors is the reason why Godot is
able to improve so quickly and do so much for a fraction of the funding that the other large engines have.&lt;/p>
&lt;p>The Foundation (meaning the Board of Directors and the people hired by the Foundation) does not determine the priorities
of the project in a top-down way. In other words, the Foundation does not dictate to individual volunteers what they
should work on. Instead, it influences the project implicitly by making hiring decisions and hiring people for specific
tasks that aren’t being done by the community.&lt;/p>
&lt;p>Ultimately, it is the Godot community that deserves the most credit for the growth and development of Godot. While we
hope to see the Foundation grow and take on a stronger role in the project, it should be seen as a central pillar of the
project that volunteers can rally around. Donating to the Foundation is one avenue to contribute, but there are many
more and Godot needs contribution in all areas in order to continue growing at this pace. Please consider contributing
however you are able!&lt;/p>
&lt;h2 id="support">Support&lt;/h2>
&lt;p>Godot is a non-profit, open source game engine developed by hundreds of contributors in their free time, as well as a handful of part or full-time developers hired thanks to &lt;a href="https://fund.godotengine.org/">generous donations from the Godot community&lt;/a>. A big thank you to everyone who has contributed &lt;a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time&lt;/a> or &lt;a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support&lt;/a> to the project!&lt;/p>
&lt;p>If you’d like to support the project financially and help us secure our future hires, you can do so using the &lt;a href="https://fund.godotengine.org/">Godot Development Fund&lt;/a> platform managed by &lt;a href="https://godot.foundation/">Godot Foundation&lt;/a>. There are also several &lt;a href="/donate">alternative ways to donate&lt;/a> which you may find more suitable.&lt;/p></content><author><name>Godot Foundation</name></author><category term="News"/></entry><entry><title>Statement on GodLoader malware loader</title><link href="https://godotengine.org/article/statement-on-godloader-malware-loader/"/><updated>2024-11-28T11:00:00+00:00</updated><id>https://godotengine.org/article/statement-on-godloader-malware-loader/</id><summary>Godot security team clarifies the risk exposed by Check Point Research's report.</summary><content type="html">&lt;p>Security researchers at &lt;a href="https://research.checkpoint.com/">Check Point Research&lt;/a> have &lt;a href="https://research.checkpoint.com/2024/gaming-engines-an-undetected-playground-for-malware-loaders/">published a report&lt;/a> about GodLoader, a malware loader using Godot as its runtime to execute malicious code and infect unaware users with known malware. Based on the report, affected users thought they were downloading and executing cracks for paid software, but instead executed the malware loader.&lt;/p>
&lt;p>As the report states, the vulnerability is not specific to Godot. The Godot Engine is a programming system with a scripting language. It is akin to, for instance, the Python and Ruby runtimes. It is possible to write malicious programs in any programming language. We do not believe that Godot is particularly more or less suited to do so than other such programs.&lt;/p>
&lt;p>&lt;strong>If you downloaded a Godot game or the editor from a reliable source, you don’t have to do anything. You are not at risk.&lt;/strong>
We encourage people to only execute software from trusted sources – whether it’s written using Godot or any other programming system.&lt;/p>
&lt;p>For some more technical details:&lt;/p>
&lt;p>Godot does not register a file handler for &lt;code class="language-plaintext highlighter-rouge">.pck&lt;/code> files. This means that a malicious actor always has to ship the Godot runtime (&lt;code class="language-plaintext highlighter-rouge">.exe&lt;/code> file) together with a &lt;code class="language-plaintext highlighter-rouge">.pck&lt;/code> file. The user will always have to unpack the runtime together with the &lt;code class="language-plaintext highlighter-rouge">.pck&lt;/code> to the same location and then execute the runtime. There is no way for a malicious actor to create a “one click exploit”, barring other OS-level vulnerabilities. If such an OS-level vulnerability were used then Godot would not be a particularly attractive option due to the size of the runtime.&lt;/p>
&lt;p>This is similar to writing malicious software in Python or Ruby, the malicious actor will have to ship a &lt;code class="language-plaintext highlighter-rouge">python.exe&lt;/code> or &lt;code class="language-plaintext highlighter-rouge">ruby.exe&lt;/code> together with their malicious program.&lt;/p>
&lt;h2 id="good-security-practices">Good security practices&lt;/h2>
&lt;p>We would like to take this opportunity to remind users about some good security practices when it comes to downloading and executing software.&lt;/p>
&lt;ul>
&lt;li>Only download and execute software (including game mods) from trusted sources:
&lt;ul>
&lt;li>Official project website. Confirm it by checking the URL, and verify with a search engine that this seems to be the most frequently referenced website for this software.&lt;/li>
&lt;li>Trusted distribution platform: Steam, Epic Games Store, Windows Store, Google Play, Apple Store, etc.&lt;/li>
&lt;li>People you know, after confirming that they are who they claim to be if the communication is text-based (see below).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>On Windows and macOS, verify that the executable is signed (and notarized, on macOS) by a trusted party.&lt;/li>
&lt;li>Be wary of executing cracked software, which is a prime attack vector for malicious actors.&lt;/li>
&lt;li>Be wary of executing software even from people you know, if you can’t confirm that their account hasn’t been compromised. A very common attack vector targeting specifically game developers is for Discord accounts to get hacked, and then malicious actors use them to send malicious downloads to their friends in private messages (“hey will you try my game?”). Make sure to confirm the identity of your contacts before executing such software.&lt;/li>
&lt;/ul>
&lt;h2 id="reporting-security-issues">Reporting security issues&lt;/h2>
&lt;p>We thank Check Point Research for following the security guidelines of responsible disclosure, which let us confirm that this attack vector, while unfortunate, is not specific to Godot and does not expose a vulnerability in the engine or for its users.&lt;/p>
&lt;p>If you would like to report a security vulnerability or concern, please send an email to &lt;a href="mailto:security@godotengine.org">security@godotengine.org&lt;/a>.&lt;/p></content><author><name>Godot Security Team</name></author><category term="News"/></entry><entry><title>Dev snapshot: Godot 4.4 dev 5</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-4-dev-5/"/><updated>2024-11-21T18:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-5/</id><summary>With GodotCon behind us and our developers recuperated, we're thrilled to return to a more frequent release-cycle.</summary><content type="html">&lt;p>With &lt;a href="https://godotengine.org/article/review-godotcon24/">GodotCon&lt;/a> behind us and our developers recuperated, we’re thrilled to return
to a more frequent release-cycle. It’s only been two weeks since we last checked in, yet there’s still so much to talk about!
So buckle on in for a breakdown of what you can expect to see in 4.4 dev 5.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>&lt;a href="#downloads">Jump to the &lt;strong>Downloads&lt;/strong> section&lt;/a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the &lt;a href="https://editor.godotengine.org/releases/4.4.dev5/">&lt;strong>Web editor&lt;/strong>&lt;/a>, &lt;a href="https://www.meta.com/experiences/godot-game-engine/7713660705416473/">&lt;strong>XR editor&lt;/strong>&lt;/a>, or the &lt;strong>Android editor&lt;/strong> for this release (join the &lt;a href="https://groups.google.com/g/godot-testers">Android editor testing group&lt;/a> to get access to pre-release builds).&lt;/p>
&lt;hr />
&lt;p>&lt;em>The cover illustration is from&lt;/em> &lt;a href="https://store.steampowered.com/app/2716400/The_Rise_of_the_Golden_Idol/">&lt;strong>The Rise of the Golden Idol&lt;/strong>&lt;/a>, &lt;em>a mystery game where you unravel the truth behind 20 cases of crime in the 1970s! It is developed by &lt;a href="https://www.thegoldenidol.com/">Color Gray Games&lt;/a>. You can purchase the game &lt;a href="https://store.steampowered.com/app/2716400/The_Rise_of_the_Golden_Idol/">on Steam&lt;/a> and follow the developer on &lt;a href="https://twitter.com/colorgray7/">Twitter&lt;/a>.&lt;/em>&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>In case you missed them, see the &lt;a href="/article/dev-snapshot-godot-4-4-dev-1/">4.4 dev 1&lt;/a>, &lt;a href="/article/dev-snapshot-godot-4-4-dev-2/">4.4 dev 2&lt;/a>,
&lt;a href="/article/dev-snapshot-godot-4-4-dev-3/">4.4 dev 3&lt;/a>, and &lt;a href="/article/dev-snapshot-godot-4-4-dev-4/">4.4 dev 4&lt;/a> release notes for an overview of
some key features which were already in that snapshot, and are therefore still available for testing in dev 5.&lt;/p>
&lt;p>Here are highlights of a few new features in dev 5 that you might find particularly exciting!&lt;/p>
&lt;h3 id="universalize-uid-support">Universalize UID support&lt;/h3>
&lt;p>Previously, the &lt;abbr title="Universal ID">UID&lt;/abbr> format was not supported by all Resource types. This proved to be a pain point for users wishing to reference their scripts and other resources in a manner that’s path-agnostic. This, along with a need to refactor their scripts anytime these kinds of files were moved, put a significant duty of care on the end-user that shouldn’t have been necessary.&lt;/p>
&lt;p>Starting with dev 5, this will no longer be your burden to bear! Thanks to a long-term effort from &lt;a href="https://github.com/reduz">reduz&lt;/a>, UIDs will now be applied universally in a way the engine can automatically track and account for. This is achieved via &lt;code class="language-plaintext highlighter-rouge">.uid&lt;/code> files for the resource types that previously didn’t support them, functioning similarly to other metadata files that “track” a main file.&lt;/p>
&lt;p>Note that, unlike metadata files, &lt;code class="language-plaintext highlighter-rouge">.uid&lt;/code> files are strictly for the editor; the information is migrated to the uid database on export. Despite this, users using version control software &lt;strong>should add these files&lt;/strong>, as they’re required to properly sync data (similar to &lt;code class="language-plaintext highlighter-rouge">.import&lt;/code> files). For more information, see (&lt;a href="https://github.com/godotengine/godot/pull/97352">GH-97352&lt;/a>).&lt;/p>
&lt;h3 id="favorite-editor-items">Favorite editor items&lt;/h3>
&lt;p>A common complaint we hear regarding the inspector is the potential for it to get cluttered. Namely, while there’s generally a wide selection of options available for a given class/script, users will usually only care about a particular subsection that suits them. To account for this, &lt;a href="https://github.com/YeldhamDev">YeldhamDev&lt;/a> brings us the long-awaited ability to pin one’s favorite properties in the inspector! Check out the implementation from PR (&lt;a href="https://github.com/godotengine/godot/pull/97415">GH-97352&lt;/a>) below:&lt;/p>
&lt;video autoplay="" loop="" muted="" playsinline="">
&lt;source src="/storage/blog/dev-snapshot-godot-4-4-dev-5/favorite-inspector.mp4?1" type="video/mp4" />
&lt;/video>
&lt;h3 id="and-more">And more!&lt;/h3>
&lt;p>There are too many exciting changes to list them all here, but here’s a curated selection:&lt;/p>
&lt;ul>
&lt;li>2D: Add a way to know when a TileMapLayer’s cell is modified (&lt;a href="https://github.com/godotengine/godot/pull/96188">GH-96188&lt;/a>).&lt;/li>
&lt;li>2D: Make possible to scale multiple nodes at once in the canvas editor (&lt;a href="https://github.com/godotengine/godot/pull/98534">GH-98534&lt;/a>).&lt;/li>
&lt;li>3D: Fix Gridmap shortcut conflicts with 3D editor (&lt;a href="https://github.com/godotengine/godot/pull/99170">GH-99170&lt;/a>).&lt;/li>
&lt;li>3D: Move GridMapEditor to bottom panel (&lt;a href="https://github.com/godotengine/godot/pull/96922">GH-96922&lt;/a>).&lt;/li>
&lt;li>Animation: Add &lt;code class="language-plaintext highlighter-rouge">advance_on_start&lt;/code> option to &lt;code class="language-plaintext highlighter-rouge">NodeAnimation&lt;/code> to handle &lt;code class="language-plaintext highlighter-rouge">advance(0)&lt;/code> for each &lt;code class="language-plaintext highlighter-rouge">NodeAnimation&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/94372">GH-94372&lt;/a>).&lt;/li>
&lt;li>Animation: Fix key is deselected by changing key time in KeyEdit in FPS mode (&lt;a href="https://github.com/godotengine/godot/pull/99319">GH-99319&lt;/a>).&lt;/li>
&lt;li>Animation: Implement LookAtModifier3D (&lt;a href="https://github.com/godotengine/godot/pull/98446">GH-98446&lt;/a>).&lt;/li>
&lt;li>Animation: Sort blend shapes in the inspector by ID instead of alphabetically (&lt;a href="https://github.com/godotengine/godot/pull/99231">GH-99231&lt;/a>).&lt;/li>
&lt;li>Audio: Allow waveform resize (&lt;a href="https://github.com/godotengine/godot/pull/97551">GH-97551&lt;/a>).&lt;/li>
&lt;li>Audio: Fix &lt;code class="language-plaintext highlighter-rouge">AudioStreamWAV::save_to_wav&lt;/code> adding extra ‘.wav’ to file if existing ext is not lower case (&lt;a href="https://github.com/godotengine/godot/pull/98717">GH-98717&lt;/a>).&lt;/li>
&lt;li>Buildsystem: Bump minimum version of SCons to 4.0 &amp;amp; Python to 3.8 (&lt;a href="https://github.com/godotengine/godot/pull/99134">GH-99134&lt;/a>).&lt;/li>
&lt;li>Core: Add typed dictionary support for binary serialization (&lt;a href="https://github.com/godotengine/godot/pull/98120">GH-98120&lt;/a>).&lt;/li>
&lt;li>Core: Fix &lt;code class="language-plaintext highlighter-rouge">Freed Object&lt;/code> booleanization (&lt;a href="https://github.com/godotengine/godot/pull/93885">GH-93885&lt;/a>).&lt;/li>
&lt;li>Core: Fix &lt;code class="language-plaintext highlighter-rouge">MissingResource&lt;/code> properties being stripped on save (&lt;a href="https://github.com/godotengine/godot/pull/86600">GH-86600&lt;/a>).&lt;/li>
&lt;li>Core: Fix comparison of callables (&lt;a href="https://github.com/godotengine/godot/pull/99078">GH-99078&lt;/a>).&lt;/li>
&lt;li>Core: Provide a reliable way to see original resources in a directory (&lt;a href="https://github.com/godotengine/godot/pull/96590">GH-96590&lt;/a>).&lt;/li>
&lt;li>Dotnet: Add Codium support to C# external editors (&lt;a href="https://github.com/godotengine/godot/pull/89051">GH-89051&lt;/a>).&lt;/li>
&lt;li>Dotnet: Implement &lt;code class="language-plaintext highlighter-rouge">[ExportToolButton]&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/97894">GH-97894&lt;/a>).&lt;/li>
&lt;li>Editor: Add a pin toggle to prevent involuntary bottom editor switching (&lt;a href="https://github.com/godotengine/godot/pull/98074">GH-98074&lt;/a>).&lt;/li>
&lt;li>Editor: Add fuzzy string matching to quick open search (&lt;a href="https://github.com/godotengine/godot/pull/98278">GH-98278&lt;/a>).&lt;/li>
&lt;li>Editor: Highlight scripts used by current scene (&lt;a href="https://github.com/godotengine/godot/pull/97041">GH-97041&lt;/a>).&lt;/li>
&lt;li>Editor: Optimize FileSystem Dock filtering (&lt;a href="https://github.com/godotengine/godot/pull/95107">GH-95107&lt;/a>).&lt;/li>
&lt;li>Export: Add ability for PCK patches to remove files (&lt;a href="https://github.com/godotengine/godot/pull/97356">GH-97356&lt;/a>).&lt;/li>
&lt;li>Export: Display project settings splash color on web export (&lt;a href="https://github.com/godotengine/godot/pull/96625">GH-96625&lt;/a>)&lt;/li>
&lt;li>GDExtension: Fix method binds not saying if they are varargs (&lt;a href="https://github.com/godotengine/godot/pull/99403">GH-99403&lt;/a>).&lt;/li>
&lt;li>GDExtension: Improve macOS library loading/export (&lt;a href="https://github.com/godotengine/godot/pull/98809">GH-98809&lt;/a>).&lt;/li>
&lt;li>GDScript: Add support for &lt;code class="language-plaintext highlighter-rouge">print&lt;/code> command in local (command line &lt;code class="language-plaintext highlighter-rouge">-d&lt;/code>) debugger (&lt;a href="https://github.com/godotengine/godot/pull/97218">GH-97218&lt;/a>).&lt;/li>
&lt;li>GUI: Fix tooltip appearing in old place, on movement (&lt;a href="https://github.com/godotengine/godot/pull/96721">GH-96721&lt;/a>).&lt;/li>
&lt;li>Import: Allow passing UID to importer (&lt;a href="https://github.com/godotengine/godot/pull/97363">GH-97363&lt;/a>).&lt;/li>
&lt;li>Import: Reload cached resources in runtime on file reimport (&lt;a href="https://github.com/godotengine/godot/pull/98710">GH-98710&lt;/a>).&lt;/li>
&lt;li>Input: Revert “Fix &lt;code class="language-plaintext highlighter-rouge">InputEvent&lt;/code> device id clash” and add a compatibility function (&lt;a href="https://github.com/godotengine/godot/pull/99449">GH-99449&lt;/a>).&lt;/li>
&lt;li>Multiplayer: Handle scene UIDs in MultiplayerSpawner (&lt;a href="https://github.com/godotengine/godot/pull/99137">GH-99137&lt;/a>).&lt;/li>
&lt;li>Navigation: Improve &lt;code class="language-plaintext highlighter-rouge">NavMeshGenerator2D::generator_bake_from_source_geometry_data&lt;/code> performance (&lt;a href="https://github.com/godotengine/godot/pull/98957">GH-98957&lt;/a>).&lt;/li>
&lt;li>Navigation: Reduce allocations for NavMap synchronisation (&lt;a href="https://github.com/godotengine/godot/pull/98866">GH-98866&lt;/a>).&lt;/li>
&lt;li>Network: Split Unix/Windows IP implementation (&lt;a href="https://github.com/godotengine/godot/pull/99026">GH-99026&lt;/a>).&lt;/li>
&lt;li>Network: Split Unix/Windows NetSocket implementation (&lt;a href="https://github.com/godotengine/godot/pull/98969">GH-98969&lt;/a>).&lt;/li>
&lt;li>Plugin: Make the method selector dialog available via &lt;code class="language-plaintext highlighter-rouge">EditorInterface&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/98859">GH-98859&lt;/a>).&lt;/li>
&lt;li>Rendering: Add &lt;code class="language-plaintext highlighter-rouge">multimesh_get_buffer_rd_rid&lt;/code> method to &lt;code class="language-plaintext highlighter-rouge">RenderingServer&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/98788">GH-98788&lt;/a>).&lt;/li>
&lt;li>Rendering: Ensure shadow material and mesh are not used with wireframe mode (&lt;a href="https://github.com/godotengine/godot/pull/98683">GH-98683&lt;/a>).&lt;/li>
&lt;li>Rendering: Normalize normal, tangent, and binormal before interpolating in the mobile renderer to avoid precision errors on heavily scaled meshes (&lt;a href="https://github.com/godotengine/godot/pull/99163">GH-99163&lt;/a>).&lt;/li>
&lt;li>Rendering: Reduce shader permutations in the compatibility backend (&lt;a href="https://github.com/godotengine/godot/pull/87558">GH-87558&lt;/a>).&lt;/li>
&lt;li>Shaders: Add renderer state defines to shader preprocessor (&lt;a href="https://github.com/godotengine/godot/pull/98549">GH-98549&lt;/a>).&lt;/li>
&lt;li>Shaders: Add swap connection option to visual shader graph (&lt;a href="https://github.com/godotengine/godot/pull/99177">GH-99177&lt;/a>).&lt;/li>
&lt;li>XR: Fix pose recenter signal to be omitted properly (&lt;a href="https://github.com/godotengine/godot/pull/99159">GH-99159&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h2 id="changelog">Changelog&lt;/h2>
&lt;p>&lt;strong>116 contributors&lt;/strong> submitted &lt;strong>265 improvements&lt;/strong> for this new snapshot. See our &lt;a href="https://godotengine.github.io/godot-interactive-changelog/#4.4-dev5">&lt;strong>interactive changelog&lt;/strong>&lt;/a> for the complete list of changes since the previous 4.4-dev4 snapshot.&lt;/p>
&lt;p>This release is built from commit &lt;a href="https://github.com/godotengine/godot/commit/9e6098432aac35bae42c9089a29ba2a80320d823">&lt;code class="language-plaintext highlighter-rouge">9e609843&lt;/code>&lt;/a>.&lt;/p>
&lt;h2 id="downloads">Downloads&lt;/h2>
&lt;div class="card card-download">
&lt;a class="card-download-link" href="/download/archive/4.4-dev5">
Download Godot 4.4 dev5
&lt;/a>
&lt;div class="card-download-details">
&lt;img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-4-dev-5.webp" />
&lt;div class="card-download-platforms">
&lt;div class="download-platform platform-linux">
&lt;img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" />
Linux
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev5/Godot_v4.4-dev5_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev5/Godot_v4.4-dev5_mono_linux_x86_64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-macos">
&lt;img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" />
macOS
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev5/Godot_v4.4-dev5_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev5/Godot_v4.4-dev5_mono_macos.universal.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-windows">
&lt;img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" />
Windows
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev5/Godot_v4.4-dev5_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev5/Godot_v4.4-dev5_mono_win64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;div class="card-download-sublinks">
&lt;a class="card-download-other" href="/download/archive/4.4-dev5">
Export templates and other downloads
&lt;/a>
&lt;a class="card-download-donate" href="/donate/">
Make a Donation
&lt;/a>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Standard build&lt;/strong> includes support for GDScript and GDExtension.&lt;/p>
&lt;p>&lt;strong>.NET build&lt;/strong> (marked as &lt;code class="language-plaintext highlighter-rouge">mono&lt;/code>) includes support for C#, as well as GDScript and GDExtension.&lt;/p>
&lt;ul>
&lt;li>See also &lt;a href="https://docs.godotengine.org/en/latest/tutorials/scripting/c_sharp/index.html#c-platform-support">C# platform support&lt;/a>.&lt;/li>
&lt;/ul>
&lt;div class="card card-warning">
&lt;p>
While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition &lt;strong>a pre-release piece of software&lt;/strong>. 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.
&lt;/p>
&lt;/div>
&lt;h2 id="known-issues">Known issues&lt;/h2>
&lt;p>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 &lt;a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug+">known bugs&lt;/a>.&lt;/p>
&lt;h2 id="bug-reports">Bug reports&lt;/h2>
&lt;p>As a tester, we encourage you to &lt;a href="https://github.com/godotengine/godot/issues">open bug reports&lt;/a> if you experience issues with this release. Please check the &lt;a href="https://github.com/godotengine/godot/issues">existing issues on GitHub&lt;/a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.&lt;/p>
&lt;p>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).&lt;/p>
&lt;h2 id="support">Support&lt;/h2>
&lt;p>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 &lt;a href="https://fund.godotengine.org/">generous donations from the Godot community&lt;/a>. A big thank you to everyone who has contributed &lt;a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time&lt;/a> or &lt;a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support&lt;/a> to the project!&lt;/p>
&lt;p>If you’d like to support the project financially and help us secure our future hires, you can do so using the &lt;a href="https://fund.godotengine.org/">Godot Development Fund&lt;/a> platform managed by &lt;a href="https://godot.foundation/">Godot Foundation&lt;/a>. There are also several &lt;a href="/donate">alternative ways to donate&lt;/a> which you may find more suitable.&lt;/p></content><author><name>Thaddeus Crews</name></author><category term="Pre-release"/></entry><entry><title>GodotCon 24: Berlin Edition</title><link href="https://godotengine.org/article/review-godotcon24/"/><updated>2024-11-13T18:30:00+00:00</updated><id>https://godotengine.org/article/review-godotcon24/</id><summary>Our biggest conference yet!</summary><content type="html">&lt;p>&lt;br />
📋 &lt;a href="https://forms.gle/3tALsQid32qqvu2Z8">Feedback form for visitors&lt;/a>
🎤 &lt;a href="https://www.youtube.com/playlist?list=PLeG_dAglpVo6TS0q858NajyeglRuvb7hs">Talk &amp;amp; workshop recordings&lt;/a>
🫙 &lt;a href="https://godotcon.itch.io/">Jam games&lt;/a>&lt;/p>
&lt;hr />
&lt;p>Variety was the name of the game this year. GodotCon keeps going around the globe and adds more activities to the program: the event team made up of volunteers and Godot Foundation staff put a lot work into making this more than a mere meetup occasion for the ever-growing community forming around the Godot Engine.&lt;/p>
&lt;p>Judging by the smiley pictures taken all around the &lt;a href="https://www.silent-green.net/">Silent Green&lt;/a> venue, and the excited chatter about what the next installments might bring to the table, we seem to have hit the sweet spot for our 574 attendees. For those of you that couldn’t be there yourself - considering both ticket batches sold out within an hour - join us on a retrospective walk through GodotCon, highlighting all the wonderful speakers, exhibitors, and sponsors that made this event possible.&lt;/p>
&lt;h1 id="sponsor-support">Sponsor support&lt;/h1>
&lt;p>GodotCon 2024 wouldn’t have been possible without the generosity of &lt;a href="https://conference.godotengine.org/2024/#sponsors">our sponsors&lt;/a>, who enabled us to bring this event to life.&lt;/p>
&lt;h2 id="critical-reflex">Critical Reflex&lt;/h2>
&lt;p>Having a publisher with experience in Godot on-board was as exciting for us as it seemed for the audience of “Indie Publishing 101” by their business developer Daniel. Additionally, you might have spotted the goodie bags they provided us.&lt;/p>
&lt;p>🔗 &lt;a href="https://criticalreflex.com">criticalreflex.com&lt;/a>&lt;/p>
&lt;p>&lt;img alt="Venue picture featuring Critical Reflex goodie bag" src="/storage/blog/godotcon24/goodie-bag.webp" />&lt;/p>
&lt;h2 id="endless-foundation">Endless Foundation&lt;/h2>
&lt;p>“Block Coding: Making Godot Accessible to Learners Everywhere” was another well-visited talk on the agenda, as was the booth of the biggest exhibitor team onsite. Their tech demonstration drew in fellow educators as well as curious game developers looking to contribute.&lt;/p>
&lt;p>🔗 &lt;a href="https://www.endlessos.org/">endlessos.org&lt;/a>&lt;/p>
&lt;p>&lt;img alt="Screenshot of their block coding editor" src="/storage/blog/godotcon24/block-coding.webp" />&lt;/p>
&lt;h2 id="w4-games">W4 Games&lt;/h2>
&lt;p>Port your Godot games to console with ease! The company founded by Godot Engine veterans explained “W4’s role in the Godot Ecosystem” on stage and let you playtest their products and talk business at their busy booth.&lt;/p>
&lt;p>🔗 &lt;a href="https://w4games.com">w4games.com&lt;/a>&lt;/p>
&lt;p>&lt;img alt="Juan giving a presentation about W4 Games on stage" src="/storage/blog/godotcon24/w4-games.webp" />&lt;/p>
&lt;h2 id="poki">Poki&lt;/h2>
&lt;p>The provider of free online games also has shown interest in Godot before and is hoping to expand their selection with your projects. We talked with them about improving Godot for the Web together; let’s see what the future might bring!&lt;/p>
&lt;p>🔗 &lt;a href="https://poki.com">poki.com&lt;/a>&lt;/p>
&lt;p>&lt;img alt="Photo of the Poki booth with two of the representatives smiling and giving a thumbs up" src="/storage/blog/godotcon24/poki.webp" />&lt;/p>
&lt;h2 id="aws">AWS&lt;/h2>
&lt;p>After demonstrating “How to quick start a Godot Engine game on AWS”, the cloud provider team spent time answering questions on the exhibition floor.&lt;/p>
&lt;p>🔗 &lt;a href="https://aws.amazon.com/gametech/">aws.amazon.com&lt;/a>&lt;/p>
&lt;p>&lt;img alt="The AWS team presenting at the main stage." src="/storage/blog/godotcon24/aws.webp" />&lt;/p>
&lt;hr />
&lt;p>If you or your company are interested in supporting the next edition of GodotCon, we’d love to hear from you! &lt;br />Please reach out to us at &lt;a href="mailto:godotcon@godotengine.org">godotcon@godotengine.org&lt;/a>.&lt;/p>
&lt;hr />
&lt;h1 id="game-exhibition">Game exhibition&lt;/h1>
&lt;p>For the first time ever, we tried curating a selection of projects ahead of time and invited game development teams to a showcase on the venue floors. Decorated booths and sometimes even goodies caught the eyes of many attendees, and provided the exhibitors with valuable playtest information as well as wishlists. Some told us this was the first event they participated in with their project!&lt;/p>
&lt;div class="preview-image-container">
&lt;img alt="Bug Off booth" src="/storage/blog/godotcon24/bug-off.webp" />
&lt;img alt="Data Garden booth" src="/storage/blog/godotcon24/data-garden.webp" />
&lt;img alt="Dung Slinger booth" src="/storage/blog/godotcon24/dung-slinger.webp" />
&lt;img alt="Fogpiercer booth" src="/storage/blog/godotcon24/fog-piercer.webp" />
&lt;img alt="Immersive Home booth" src="/storage/blog/godotcon24/immersive-home.webp" />
&lt;img alt="In Good Faith booth" src="/storage/blog/godotcon24/in-good-faith.webp" />
&lt;/div>
&lt;div class="preview-image-container">
&lt;img alt="Keep The Heroes Out booth" src="/storage/blog/godotcon24/keep-out.webp" />
&lt;img alt="Looking Up I See Only A Ceiling booth" src="/storage/blog/godotcon24/looking-up.webp" />
&lt;img alt="PVKK: Planetenverteidigungskanonenkommandant booth" src="/storage/blog/godotcon24/pvkk.webp" />
&lt;img alt="Robot Detour booth" src="/storage/blog/godotcon24/robot-detour.webp" />
&lt;img alt="Voice of Flowers booth" src="/storage/blog/godotcon24/voice-of-flowers.webp" />
&lt;img alt="Window Arcade booth" src="/storage/blog/godotcon24/window-arcade.webp" />
&lt;/div>
&lt;p>&lt;strong>Exhibitor list:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://curio-compass-games.itch.io/bug-off">Bug Off&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/2644670/Data_Garden/">Data Garden&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://s4g.itch.io/dung-slinger">Dung Slinger&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/3219010/Fogpiercer/">Fogpiercer&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://immersive-home.org/">Immersive Home&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/3151800/In_Good_Faith/">In Good Faith&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/2592340/Keep_the_Heroes_Out/">Keep The Heroes Out&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/1742930/Looking_Up_I_See_Only_A_Ceiling/">Looking Up I See Only A Ceiling&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/2956040/PVKK_Planetenverteidigungskanonenkommandant/">PVKK: Planetenverteidigungskanonenkommandant&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/2666840/Robot_Detour/">Robot Detour&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://schwarzeralptraum.itch.io/skyes-ducky-adventure-quest-for-gluttony">Skye’s Ducky Adventure: Quest for Gluttony&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/2609560/Voice_of_Flowers/">Voice of Flowers&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://windowarcade.com">Window Arcade&lt;/a>&lt;/li>
&lt;/ul>
&lt;h1 id="activities">Activities&lt;/h1>
&lt;p>&lt;img alt="The graffiti canvas full of different drawings by the visitors" src="/storage/blog/godotcon24/canvas.webp" />&lt;/p>
&lt;p>What do you do at a conference, besides watching talks, browsing through the exhibition, or doing business? Have some fun and get to know other attendees in a casual way, of course.&lt;/p>
&lt;p>This is exactly what we aimed to facilitate with our onsite activities, especially the &lt;a href="https://conference.godotengine.org/2024/activities/">sticker challenge&lt;/a> tying them all together (since many of you asked: the stickers were designed by community artist &lt;a href="https://gotibo.fr/">Tibo&lt;/a>). From networking bingo to graffiti canvas, we saw many people striking up conversations with strangers or having a great time with friends.&lt;/p>
&lt;p>&lt;img alt="People participating in a game jam" src="/storage/blog/godotcon24/one-pc-jam.webp" />&lt;/p>
&lt;p>One of the most popular activities turned out to be the One PC Jam (taking place at three laptops concurrently) where the conference attendees created a jam game over the course of two days. The twist: everyone only was granted one hour on the project, before having to concede their seat to the next person. This resulted in three separate, actually playable games, which you can &lt;a href="https://godotcon.itch.io/">find on our GodotCon itch.io site&lt;/a>.&lt;/p>
&lt;h1 id="talks-and-workshops">Talks and workshops&lt;/h1>
&lt;p>&lt;img alt="View of the stage, with people standing behind full rows of chairs." src="/storage/blog/godotcon24/backstage.webp" />&lt;/p>
&lt;p>The Godot community once again came through and submitted more interesting talks than we could fit on the program - resulting in us repurposing the admittedly rather small workshop room to squeeze some more of the talented speakers in. Luckily, we also invited a camera crew onsite, that took great care recording both the workshops and two talk tracks, for you to enjoy on the Godot Engine YouTube channel - some of them already available, the rest being edited as you read this blog post.&lt;/p>
&lt;p>&lt;span style="font-size: 1.5em">
🔗 &lt;a href="https://www.youtube.com/playlist?list=PLeG_dAglpVo6TS0q858NajyeglRuvb7hs">YouTube Playlist&lt;/a>
&lt;/span>&lt;/p>
&lt;h1 id="feedback">Feedback&lt;/h1>
&lt;p>Considering the new additions we introduced to the event concept, and to learn from your experiences as visitors in general, we would appreciate it if you took the time to fill out this &lt;a href="https://forms.gle/3tALsQid32qqvu2Z8">feedback survey&lt;/a> we prepared. It should only take a few minutes.&lt;/p>
&lt;h1 id="thank-you">Thank you!&lt;/h1>
&lt;p>And that concludes our tour through GodotCon 24. Hope you had fun reminiscing with us!&lt;/p>
&lt;p>If you want to be notified about our next one, sign up to our mailing list and be the first to know:&lt;/p>
&lt;form method="post" action="https://godot.news/subscription/form" class="listmonk-form">
&lt;div>
&lt;input type="hidden" name="nonce" />
&lt;input type="email" name="email" required="" placeholder="E-mail" style="font-size: 18px;padding: 16px 18px;border: 1px solid var(--base-color);box-shadow: 0 4px 9px -3px #0000002e;background: var(--card-footer-color);color: var(--base-color-text);" />
&lt;p style="display:none;">
&lt;input id="6e6e9" type="checkbox" name="l" checked="" value="6e6e9ba4-732b-4528-b4cd-71bbe6850f8d" />
&lt;label for="6e6e9">Godot Conference&lt;/label>
&lt;/p>
&lt;input type="submit" class="btn" value="Subscribe" style="cursor: pointer;border: inherit; border-radius: 0;
box-shadow: none;
height: 54px;" />
&lt;/div>
&lt;/form>
&lt;p>🌐 &lt;a href="https://conference.godotengine.org/">https://conference.godotengine.org/&lt;/a>&lt;/p>
&lt;h3 id="-see-you-next-year">👋 See you next year!&lt;/h3>
&lt;style>
.preview-image-container {
display: flex;
justify-content: center;
align-items: center;
gap: 5px;
/* padding: 16px; */
background-color: transparent;
}
.preview-image-container {
background-color: transparent;
}
.preview-image-container img {
max-height: 300px;
background-color: transparent;
}
&lt;/style></content><author><name>Nat</name></author><category term="Events"/></entry><entry><title>Dev snapshot: Godot 4.4 dev 4</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-4-dev-4/"/><updated>2024-11-08T12:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-4/</id><summary>After a short delay due to GodotCon, we are back with another exciting update.</summary><content type="html">&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>&lt;a href="#downloads">Jump to the &lt;strong>Downloads&lt;/strong> section&lt;/a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the &lt;a href="https://editor.godotengine.org/releases/4.4.dev4/">&lt;strong>Web editor&lt;/strong>&lt;/a>, &lt;a href="https://www.meta.com/experiences/godot-game-engine/7713660705416473/">&lt;strong>XR editor&lt;/strong>&lt;/a>, or the &lt;strong>Android editor&lt;/strong> for this release (join the &lt;a href="https://groups.google.com/g/godot-testers">Android editor testing group&lt;/a> to get access to pre-release builds).&lt;/p>
&lt;hr />
&lt;p>&lt;em>The cover illustration is from&lt;/em> &lt;a href="https://store.steampowered.com/app/2211170/Unrailed_2_Back_on_Track/">&lt;strong>Unrailed 2: Back on Track&lt;/strong>&lt;/a>, &lt;em>a chaotic co-op railroad construction game where you build your track across procedurally generated worlds! It is developed by &lt;a href="https://indoorastronaut.ch/">Indoor Astronaut&lt;/a>. You can purchase the game in early access &lt;a href="https://store.steampowered.com/app/2211170/Unrailed_2_Back_on_Track/">on Steam&lt;/a> and follow the developer on &lt;a href="https://x.com/IndoorAstronaut">Twitter&lt;/a>.&lt;/em>&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>In case you missed them, see the &lt;a href="/article/dev-snapshot-godot-4-4-dev-1/">4.4 dev 1&lt;/a>, &lt;a href="/article/dev-snapshot-godot-4-4-dev-2/">dev2&lt;/a>,
and &lt;a href="/article/dev-snapshot-godot-4-4-dev-3/">dev 3&lt;/a> 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.&lt;/p>
&lt;p>Here are a few highlights that you might find particularly exciting!&lt;/p>
&lt;h3 id="interactive-in-game-editing">Interactive in-game editing&lt;/h3>
&lt;p>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 &lt;a href="https://github.com/YeldhamDev">YeldhamDev&lt;/a> of Lone Wolf
Technology &amp;amp; W4 Games, users are now able to explore their project’s world freely!&lt;/p>
&lt;p>The actual embedding of the game window into the editor will come later in a subsequent PR.&lt;/p>
&lt;p>Check out the PR (&lt;a href="https://github.com/godotengine/godot/pull/97257">GH-97257&lt;/a>) and the video below to see exactly what
this change enables.&lt;/p>
&lt;video autoplay="" loop="" muted="" playsinline="">
&lt;source src="/storage/blog/dev-snapshot-godot-4-4-dev-4/game-editor-debug.mp4?1" type="video/mp4" />
&lt;/video>
&lt;h3 id="use-collision-detection-ray-to-reposition-an-object-already-in-the-scene">Use collision detection ray to reposition an object already in the scene&lt;/h3>
&lt;p>&lt;a href="https://github.com/ryevdokimov">ryevdokimov&lt;/a> added object snapping for placing 3D objects in the editor (&lt;a href="https://github.com/godotengine/godot/pull/96740">GH-96740&lt;/a>).&lt;/p>
&lt;p>This is not a drill, see below.&lt;/p>
&lt;video autoplay="" loop="" muted="" playsinline="">
&lt;source src="/storage/blog/dev-snapshot-godot-4-4-dev-4/physics-placement.mp4?1" type="video/mp4" />
&lt;/video>
&lt;h3 id="ubershaders-and-pipeline-pre-compilation-and-dedicated-transfer-queues">Ubershaders and pipeline pre-compilation (and dedicated transfer queues)&lt;/h3>
&lt;p>This change combines 2 huge improvements (&lt;a href="https://github.com/godotengine/godot/pull/90400">GH-90400&lt;/a>):&lt;/p>
&lt;ol>
&lt;li>Ubershaders: a technique that allows us to completely avoid shader stutter when objects are viewed in a scene for the first time&lt;/li>
&lt;li>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.&lt;/li>
&lt;/ol>
&lt;p>Thanks to &lt;a href="https://github.com/dariosamo">DarioSamo&lt;/a> 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.&lt;/p>
&lt;p>“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.&lt;/p>
&lt;p>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 &lt;a href="https://docs.godotengine.org/en/latest/tutorials/performance/pipeline_compilations.html">official docs&lt;/a>.&lt;/p>
&lt;p>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
(&lt;a href="https://github.com/godotengine/godot/pull/98825">GH-98825&lt;/a>).&lt;/p>
&lt;h3 id="add-shadow-caster-mask-property-to-light3d">Add Shadow Caster Mask property to Light3D&lt;/h3>
&lt;p>This long awaited improvement from &lt;a href="https://github.com/EMBYRDEV">EMBYRDEV&lt;/a> allows users to apply a mask on Light3Ds to
select what rendering layers will be considered when casting shadows
(&lt;a href="https://github.com/godotengine/godot/pull/85338">GH-85338&lt;/a>). 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.&lt;/p>
&lt;h3 id="always-add-decimal-when-converting-float-to-string">Always add decimal when converting float to string&lt;/h3>
&lt;p>Currently when printing float values Godot trims trailing &lt;code class="language-plaintext highlighter-rouge">.0&lt;/code>s as they are technically unnecessary. However, this could
lead to issues for users who need to distinguish between floating point numbers and integers.
&lt;a href="https://github.com/kobewi">KoBeWi&lt;/a> has now changed the behavior when floats are converted to strings to always add the decimal number, even if it would be &lt;code class="language-plaintext highlighter-rouge">.0&lt;/code>.
This makes floats always recognizable when they are converted to strings (&lt;a href="https://github.com/godotengine/godot/pull/47502">GH-47502&lt;/a>).&lt;/p>
&lt;p>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.&lt;/p>
&lt;div class="language-gdscript highlighter-rouge">&lt;div class="highlight">&lt;pre class="highlight">&lt;code>&lt;span class="c1"># Before:&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">float&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mf">1.0&lt;/span>
&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="c1"># Prints 1&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;div class="language-gdscript highlighter-rouge">&lt;div class="highlight">&lt;pre class="highlight">&lt;code>&lt;span class="c1"># After:&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">float&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mf">1.0&lt;/span>
&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="c1"># Prints 1.0&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;h3 id="and-more">And more!&lt;/h3>
&lt;p>There are too many exciting changes to list them all here, but here’s a curated selection:&lt;/p>
&lt;ul>
&lt;li>2D: Revert unintentional rounding change when 2D transform snapping (&lt;a href="https://github.com/godotengine/godot/pull/98195">GH-98195&lt;/a>).&lt;/li>
&lt;li>Animation: Fix error when stopping empty animation player (&lt;a href="https://github.com/godotengine/godot/pull/97760">GH-97760&lt;/a>).&lt;/li>
&lt;li>Audio: Expose some AudioStreamPlayback methods (namely mix_audio()) (&lt;a href="https://github.com/godotengine/godot/pull/86539">GH-86539&lt;/a>).&lt;/li>
&lt;li>Buildsystem: CI: Add MinGW/GCC build to Windows GHA (&lt;a href="https://github.com/godotengine/godot/pull/97446">GH-97446&lt;/a>).&lt;/li>
&lt;li>Core: Implement array based hash map AHashMap (&lt;a href="https://github.com/godotengine/godot/pull/92554">GH-92554&lt;/a>).&lt;/li>
&lt;li>Core: Expose &lt;code class="language-plaintext highlighter-rouge">Geometry2D.bresenham_line()&lt;/code> method (&lt;a href="https://github.com/godotengine/godot/pull/74714">GH-74714&lt;/a>).&lt;/li>
&lt;li>Core: Add Object support for String.format (&lt;a href="https://github.com/godotengine/godot/pull/65962">GH-65962&lt;/a>).&lt;/li>
&lt;li>Dotnet: Change generated &lt;code class="language-plaintext highlighter-rouge">On{SignalName}&lt;/code> to &lt;code class="language-plaintext highlighter-rouge">EmitSignal{SignalName}&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/97588">GH-97588&lt;/a>).&lt;/li>
&lt;li>Dotnet: Generate &lt;code class="language-plaintext highlighter-rouge">ReadOnlySpan&amp;lt;T&amp;gt;&lt;/code> Overloads for GodotSharp APIs (&lt;a href="https://github.com/godotengine/godot/pull/96329">GH-96329&lt;/a>).&lt;/li>
&lt;li>Editor: Improve UI of sun angle in the sun/preview env popup (&lt;a href="https://github.com/godotengine/godot/pull/97747">GH-97747&lt;/a>).&lt;/li>
&lt;li>Editor: Add submenu support to EditorContextMenuPlugin (&lt;a href="https://github.com/godotengine/godot/pull/97292">GH-97292&lt;/a>).&lt;/li>
&lt;li>Editor: Improve display for lightmap probes in the editor (&lt;a href="https://github.com/godotengine/godot/pull/83863">GH-83863&lt;/a>).&lt;/li>
&lt;li>Editor: Add missing audio bus button styles #(&lt;a href="https://github.com/godotengine/godot/pull/93443">GH-93443&lt;/a>).&lt;/li>
&lt;li>Editor: Add Markdown syntax highlighting to the script editor (&lt;a href="https://github.com/godotengine/godot/pull/78312">GH-78312&lt;/a>).&lt;/li>
&lt;li>GDExtension: Fix loss of gdextension on editor startup (&lt;a href="https://github.com/godotengine/godot/pull/98041">GH-98041&lt;/a>).&lt;/li>
&lt;li>GDScript: GDScript: Fix cached parser error when using typed Dictionaries (&lt;a href="https://github.com/godotengine/godot/pull/98400">GH-98400&lt;/a>).&lt;/li>
&lt;li>GDScript: GDScript: Fix annotation parsing adding new annotation entries (&lt;a href="https://github.com/godotengine/godot/pull/98146">GH-98146&lt;/a>).&lt;/li>
&lt;li>GUI: Add hover state to Tree items display (&lt;a href="https://github.com/godotengine/godot/pull/88530">GH-88530&lt;/a>).&lt;/li>
&lt;li>GUI: Handle scroll events in RichtTextLabel (&lt;a href="https://github.com/godotengine/godot/pull/97730">GH-97730&lt;/a>).&lt;/li>
&lt;li>Import: Rewrite index optimization code for maximum efficiency (&lt;a href="https://github.com/godotengine/godot/pull/98801">GH-98801&lt;/a>).&lt;/li>
&lt;li>Import: LOD: Remove “Raycast Normals” and associated “Normal Split Angle” settings (&lt;a href="https://github.com/godotengine/godot/pull/98620">GH-98620&lt;/a>).&lt;/li>
&lt;li>Import: Betsy: Implement BC4 compression (&lt;a href="https://github.com/godotengine/godot/pull/97295">GH-97295&lt;/a>).&lt;/li>
&lt;li>Import: Emit filesystem_changed only once per frame (&lt;a href="https://github.com/godotengine/godot/pull/98584">GH-98584&lt;/a>).&lt;/li>
&lt;li>Navigation: Optimize some parts of NavMap::sync (&lt;a href="https://github.com/godotengine/godot/pull/90182">GH-90182&lt;/a>).&lt;/li>
&lt;li>Porting: Implement native file picker support for Android (&lt;a href="https://github.com/godotengine/godot/pull/98350">GH-98350&lt;/a>).&lt;/li>
&lt;li>Porting: Implement has_hardware_keyboard method for Android and iOS (&lt;a href="https://github.com/godotengine/godot/pull/97743">GH-97743&lt;/a>).&lt;/li>
&lt;li>Rendering: Fix various issues and minor performance optimisations in 2D renderer (&lt;a href="https://github.com/godotengine/godot/pull/98652">GH-98652&lt;/a>).&lt;/li>
&lt;li>Rendering: Fix volumetric fog artifacts when inside the fog (&lt;a href="https://github.com/godotengine/godot/pull/86103">GH-86103&lt;/a>).&lt;/li>
&lt;li>Rendering: Fix updating dynamic objects in LightmapGI (&lt;a href="https://github.com/godotengine/godot/pull/97925">GH-97925&lt;/a>).&lt;/li>
&lt;li>Rendering: Add draw indirect to Rendering Device (&lt;a href="https://github.com/godotengine/godot/pull/97247">GH-97247&lt;/a>).&lt;/li>
&lt;li>Rendering: Add Swappy &amp;amp; Pre-Transformed Swapchain (&lt;a href="https://github.com/godotengine/godot/pull/96439">GH-96439&lt;/a>).&lt;/li>
&lt;li>Shaders: Implement instance uniforms in Compatibility renderer (&lt;a href="https://github.com/godotengine/godot/pull/96819">GH-96819&lt;/a>).&lt;/li>
&lt;li>Shaders: Implement custom function overloading in shading language (&lt;a href="https://github.com/godotengine/godot/pull/92441">GH-92441&lt;/a>).&lt;/li>
&lt;li>XR: OpenXR: change bindings to ‘flatten’ source paths (&lt;a href="https://github.com/godotengine/godot/pull/98163">GH-98163&lt;/a>).&lt;/li>
&lt;li>XR: Add support for external camera feed from external plugin on Android (&lt;a href="https://github.com/godotengine/godot/pull/96705">GH-96705&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h2 id="changelog">Changelog&lt;/h2>
&lt;p>&lt;strong>131 contributors&lt;/strong> submitted &lt;strong>339 improvements&lt;/strong> for this new snapshot. See our &lt;a href="https://godotengine.github.io/godot-interactive-changelog/#4.4-dev4">&lt;strong>interactive changelog&lt;/strong>&lt;/a> for the complete list of changes since the previous 4.4-dev3 snapshot.&lt;/p>
&lt;p>This release is built from commit &lt;a href="https://github.com/godotengine/godot/commit/36e6207bb48fafd43b98a458d0c461ad982b4e68">&lt;code class="language-plaintext highlighter-rouge">36e6207bb&lt;/code>&lt;/a>.&lt;/p>
&lt;h2 id="downloads">Downloads&lt;/h2>
&lt;div class="card card-download">
&lt;a class="card-download-link" href="/download/archive/4.4-dev4">
Download Godot 4.4 dev4
&lt;/a>
&lt;div class="card-download-details">
&lt;img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-4-dev-4.webp" />
&lt;div class="card-download-platforms">
&lt;div class="download-platform platform-linux">
&lt;img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" />
Linux
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev4/Godot_v4.4-dev4_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev4/Godot_v4.4-dev4_mono_linux_x86_64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-macos">
&lt;img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" />
macOS
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev4/Godot_v4.4-dev4_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev4/Godot_v4.4-dev4_mono_macos.universal.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-windows">
&lt;img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" />
Windows
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev4/Godot_v4.4-dev4_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev4/Godot_v4.4-dev4_mono_win64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;div class="card-download-sublinks">
&lt;a class="card-download-other" href="/download/archive/4.4-dev4">
Export templates and other downloads
&lt;/a>
&lt;a class="card-download-donate" href="/donate/">
Make a Donation
&lt;/a>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Standard build&lt;/strong> includes support for GDScript and GDExtension.&lt;/p>
&lt;p>&lt;strong>.NET build&lt;/strong> (marked as &lt;code class="language-plaintext highlighter-rouge">mono&lt;/code>) includes support for C#, as well as GDScript and GDExtension.&lt;/p>
&lt;ul>
&lt;li>See also &lt;a href="https://docs.godotengine.org/en/latest/tutorials/scripting/c_sharp/index.html#c-platform-support">C# platform support&lt;/a>.&lt;/li>
&lt;/ul>
&lt;div class="card card-warning">
&lt;p>
While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition &lt;strong>a pre-release piece of software&lt;/strong>. 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.
&lt;/p>
&lt;/div>
&lt;h2 id="known-issues">Known issues&lt;/h2>
&lt;p>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 &lt;a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug+">known bugs&lt;/a>.&lt;/p>
&lt;h2 id="bug-reports">Bug reports&lt;/h2>
&lt;p>As a tester, we encourage you to &lt;a href="https://github.com/godotengine/godot/issues">open bug reports&lt;/a> if you experience issues with this release. Please check the &lt;a href="https://github.com/godotengine/godot/issues">existing issues on GitHub&lt;/a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.&lt;/p>
&lt;p>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).&lt;/p>
&lt;h2 id="support">Support&lt;/h2>
&lt;p>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 &lt;a href="https://fund.godotengine.org/">generous donations from the Godot community&lt;/a>. A big thank you to everyone who has contributed &lt;a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time&lt;/a> or &lt;a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support&lt;/a> to the project!&lt;/p>
&lt;p>If you’d like to support the project financially and help us secure our future hires, you can do so using the &lt;a href="https://fund.godotengine.org/">Godot Development Fund&lt;/a> platform managed by &lt;a href="https://godot.foundation/">Godot Foundation&lt;/a>. There are also several &lt;a href="/donate">alternative ways to donate&lt;/a> which you may find more suitable.&lt;/p></content><author><name>Clay John</name></author><category term="Pre-release"/></entry><entry><title>Dev snapshot: Godot 4.4 dev 3</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-4-dev-3/"/><updated>2024-10-03T12:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-3/</id><summary>We haven't slowed down and are bringing you another feature-packed update!</summary><content type="html">&lt;p>We are back with another big dev update with over 330 commits merged in the last few weeks! Contributors continue to
work on amazing new things while we continue to merge our backlog of important features that missed the 4.3 cutoff. The
combined result is a lot of great stuff compressed into a short amount of time.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>&lt;a href="#downloads">Jump to the &lt;strong>Downloads&lt;/strong> section&lt;/a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the &lt;a href="https://editor.godotengine.org/releases/4.4.dev3/">&lt;strong>Web editor&lt;/strong>&lt;/a>, &lt;a href="https://www.meta.com/experiences/godot-game-engine/7713660705416473/">&lt;strong>XR editor&lt;/strong>&lt;/a>, or the &lt;strong>Android editor&lt;/strong> for this release (join the &lt;a href="https://groups.google.com/g/godot-testers">Android editor testing group&lt;/a> to get access to pre-release builds).&lt;/p>
&lt;hr />
&lt;p>&lt;em>The cover illustration is from&lt;/em> &lt;a href="https://store.steampowered.com/app/3219010/Fogpiercer/">&lt;strong>Fogpiercer&lt;/strong>&lt;/a>, &lt;em>a turn-based card battler where your deck is a train! It is developed in Godot 4.3 by &lt;a href="https://x.com/MadCookiesGames">Mad Cookies Studio&lt;/a>. You can wishlist the game &lt;a href="https://store.steampowered.com/app/3219010/Fogpiercer/">on Steam&lt;/a> and follow the developers on &lt;a href="https://x.com/MadCookiesGames">Twitter&lt;/a>.&lt;/em>&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>In case you missed them, see the &lt;a href="/article/dev-snapshot-godot-4-4-dev-1/">4.4 dev 1&lt;/a> and &lt;a href="/article/dev-snapshot-godot-4-4-dev-2/">dev 2&lt;/a> 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.&lt;/p>
&lt;p>Here are a few highlights that you might find particularly exciting!&lt;/p>
&lt;h3 id="export_tool_button-annotation">&lt;code class="language-plaintext highlighter-rouge">@export_tool_button&lt;/code> annotation&lt;/h3>
&lt;p>Being able to create a button in the inspector from tool scripts was a highly requested feature, and many contributors
took it upon themselves to make it happen in &lt;a href="https://github.com/godotengine/godot/pull/96290">GH-96290&lt;/a>: new
contributors &lt;a href="https://github.com/jordi-star">jordi-star&lt;/a> and &lt;a href="https://github.com/Macksaur">Macksaur&lt;/a>, and maintainers
&lt;a href="https://github.com/fire">Ernest&lt;/a> and &lt;a href="https://github.com/dalexeev">Danil&lt;/a>!&lt;/p>
&lt;p>This new feature allows you to be even more expressive with the dev tooling that you can easily create with &lt;code class="language-plaintext highlighter-rouge">@tool&lt;/code>
scripts.&lt;/p>
&lt;p>Let’s take a look at an example:&lt;/p>
&lt;div class="language-gdscript highlighter-rouge">&lt;div class="highlight">&lt;pre class="highlight">&lt;code>&lt;span class="err">@&lt;/span>&lt;span class="k">tool&lt;/span>
&lt;span class="k">extends&lt;/span> &lt;span class="n">Sprite2D&lt;/span>
&lt;span class="c1"># With a callable (could also be a local function).&lt;/span>
&lt;span class="err">@&lt;/span>&lt;span class="n">export_tool_button&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">"Toot"&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">"Callable"&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">print_action&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">print&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bind&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">"toot"&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="c1"># With a lambda.&lt;/span>
&lt;span class="err">@&lt;/span>&lt;span class="n">export_tool_button&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">"Randomize Color"&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">"ColorRect"&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">color_action&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">func&lt;/span>&lt;span class="p">():&lt;/span> &lt;span class="n">self_modulate&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kt">Color&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">randf&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="nb">randf&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="nb">randf&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;p>&lt;img src="/storage/blog/dev-snapshot-godot-4-4-dev-3/export_tool_button.gif" alt="Export tool button examples" />&lt;/p>
&lt;h3 id="massively-optimized-scene-startup-for-large-projects">Massively optimized scene startup for large projects&lt;/h3>
&lt;p>Work has not slowed down on improving the scene startup experience, still thanks to amazing contributions by
&lt;a href="https://github.com/Hilderin">Hilderin&lt;/a>. This dev snapshot introduces a massive improvement to editor load speed for
large projects (&lt;a href="https://github.com/godotengine/godot/pull/95678">GH-95678&lt;/a>). Large projects can expect up to a 3×
speed improvement when loading the project and a similar speedup when doing any operations that scan the filesystem.&lt;/p>
&lt;h3 id="vertex-shading">Vertex shading&lt;/h3>
&lt;p>This dev release re-introduces the long-awaited vertex shading option for materials
(&lt;a href="https://github.com/godotengine/godot/pull/83360">GH-83360&lt;/a>), thanks to contributor &lt;a href="https://github.com/ywmaa">ywmaa&lt;/a>
landing their second major feature in Godot, after export support for
&lt;a href="https://github.com/godotengine/godot/pull/87735">Blender Geometry Nodes&lt;/a>.
Vertex shading is used primarily to achieve an early PSX style and to optimize performance on older and lower-end
devices.&lt;/p>
&lt;p>You can enable vertex shading either from within an existing &lt;code class="language-plaintext highlighter-rouge">StandardMaterial3D&lt;/code>, &lt;code class="language-plaintext highlighter-rouge">ORMMaterial3D&lt;/code>, &lt;code class="language-plaintext highlighter-rouge">ShaderMaterial&lt;/code>,
or by force enabling it on all materials using the &lt;code class="language-plaintext highlighter-rouge">rendering/shading/overrides/force_vertex_shading&lt;/code> project setting.&lt;/p>
&lt;p>&lt;img src="/storage/blog/dev-snapshot-godot-4-4-dev-3/vertex_shading.webp" alt="Two spheres, one is vertex shaded" />&lt;/p>
&lt;h3 id="add-batching-to-renderercanvasrenderrd">Add batching to RendererCanvasRenderRD&lt;/h3>
&lt;p>After tackling the &lt;a href="https://godotengine.org/article/dev-snapshot-godot-4-4-dev-1/#metal-rendering-backend">Metal rendering backend&lt;/a>
merged in an earlier snapshot, &lt;a href="https://github.com/stuartcarnie/">Stuart&lt;/a> took on another impressive rendering
contribution: 2D batching!&lt;/p>
&lt;p>Batching has been implemented in the Compatibility renderer since the release of 4.0. This release brings the same
performance benefits to the other backends by implementing batching when using the Forward+ and Mobile backends
(&lt;a href="https://github.com/godotengine/godot/pull/92797">GH-92797&lt;/a>). Now 2D performance is comparable between all backends.&lt;/p>
&lt;p>Batching is a performance optimization that drastically reduces the number of draw calls in a scene. The benefits of
batching will be particularly noticeable in scenes with a lot of text rendering or repeated sprites that share a texture
(e.g. when using tilemaps or making a bullet hell).&lt;/p>
&lt;p>We have further improvements planned for batching on the RD backends that should allow it to be even faster than the
Compatibility backend. Stay tuned for updates in later dev releases!&lt;/p>
&lt;h3 id="expression-evaluator-repl-in-the-debugger">Expression evaluator (REPL) in the debugger&lt;/h3>
&lt;p>The expression evaluator adds a new tab to the bottom panel that allows you to evaluate expressions using the local
state of your scripts while stopped at a breakpoint. Many users are familiar with this workflow from other
&lt;a href="https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop">REPL&lt;/a> debuggers.&lt;/p>
&lt;p>This feature has been a work in progress for awhile and was recently finished and merged in
(&lt;a href="https://github.com/godotengine/godot/pull/97647">GH-97647&lt;/a>), thank you to &lt;a href="https://github.com/rohanrhu">Oğuzhan&lt;/a>,
&lt;a href="https://github.com/rxlecky">Erik&lt;/a>, and &lt;a href="https://github.com/KoBeWi/">Tomek&lt;/a> for bringing it across the finish line.&lt;/p>
&lt;p>&lt;img src="/storage/blog/dev-snapshot-godot-4-4-dev-3/repl.webp" alt="Evaluate tab in the debugger" />&lt;/p>
&lt;h3 id="implement-autostart-for-all-profilers">Implement autostart for all profilers&lt;/h3>
&lt;p>A common complaint from users is that they need to go back to the editor once they start their game in order to enable
the profiler. This made it hard to measure performance in the first few seconds of loading a scene and was an overall
hassle for developers.&lt;/p>
&lt;p>&lt;a href="https://github.com/Geometror">Hendrik&lt;/a> introduced a checkbox that allows you to set the profiler to automatically start
when you run the engine and capture valuable profiling data immediately
(&lt;a href="https://github.com/godotengine/godot/pull/96759">GH-96759&lt;/a>).&lt;/p>
&lt;p>&lt;img src="/storage/blog/dev-snapshot-godot-4-4-dev-3/auto-start.webp" alt="Auto start checkbox in profiler" />&lt;/p>
&lt;h3 id="add-markers-to-animation">Add markers to Animation&lt;/h3>
&lt;p>Markers allow you to create sub regions of an animation that can be jumped to, or looped without playing the entire
animation.&lt;/p>
&lt;video autoplay="" loop="" muted="" playsinline="">
&lt;source src="/storage/blog/dev-snapshot-godot-4-4-dev-3/markers.mp4?1" type="video/mp4" />
&lt;/video>
&lt;p>Markers are even supported inside the Animation Tree, where you can easily select animation markers for looping or to
begin playback.&lt;/p>
&lt;video autoplay="" loop="" muted="" playsinline="">
&lt;source src="/storage/blog/dev-snapshot-godot-4-4-dev-3/markers2.mp4?1" type="video/mp4" />
&lt;/video>
&lt;p>For more details check out the pull request &lt;a href="https://github.com/godotengine/godot/pull/91765">GH-91765&lt;/a>, which was one
of the first Godot contributions of &lt;a href="https://github.com/chocola-mint">ChocolaMint&lt;/a>!&lt;/p>
&lt;h3 id="linux-camera-support">Linux camera support&lt;/h3>
&lt;p>Previously, Godot only supported accessing the device camera on macOS and iOS devices.
&lt;a href="https://github.com/pkowal1982">pkowal1982&lt;/a>’s long-running pull request &lt;a href="https://github.com/godotengine/godot/pull/53666">GH-53666&lt;/a>
was finally merged and adds support for the Linux platform, allowing developers to access connected cameras from within
their game.&lt;/p>
&lt;h3 id="fallback-to-opengl-3-if-other-rendering-drivers-are-not-supported">Fallback to OpenGL 3 if other rendering drivers are not supported&lt;/h3>
&lt;p>Currently when trying to run Godot with the Forward+ or Mobile backend on a device that doesn’t support Vulkan, D3D12,
or Metal, the engine will provide the user with an OS alert notifying them that they don’t have support for the needed
graphics API and they need to try again with the Compatibility backend. This alert has proven to be confusing for users
and the process of opening the scene ends up being cumbersome.&lt;/p>
&lt;p>Now with &lt;a href="https://github.com/godotengine/godot/pull/97142">GH-97142&lt;/a>, first contribution from
&lt;a href="https://github.com/SheepYhangCN">SheepYhangCN&lt;/a>, the engine will automatically fall back to using OpenGL (the
Compatibility backend) when the other backends are not available. This should provide the smoothest possible experience
for users on older devices.&lt;/p>
&lt;p>Since the Compatibility backends can look different from the other backends, game developers may not want Godot to
automatically fall back. In that case, they can disable the &lt;code class="language-plaintext highlighter-rouge">rendering/rendering_device/fallback_to_opengl3&lt;/code> project
setting to avoid falling back, and users with OpenGL-only devices would then get notified that their hardware is not
supported.&lt;/p>
&lt;h3 id="and-more">And more!&lt;/h3>
&lt;p>There are too many exciting changes to list them all here, but here’s a curated selection:&lt;/p>
&lt;ul>
&lt;li>2D: Fix pink GradientTexture2D (&lt;a href="https://github.com/godotengine/godot/pull/94744">GH-94744&lt;/a>).&lt;/li>
&lt;li>2D: Fix polygon node losing its UV toolbar (&lt;a href="https://github.com/godotengine/godot/pull/96466">GH-96466&lt;/a>).&lt;/li>
&lt;li>3D: PathFollow3D update transform immediately by default (&lt;a href="https://github.com/godotengine/godot/pull/96140">GH-96140&lt;/a>).&lt;/li>
&lt;li>Animation: Update AnimationPlayer in real-time when bezier curve properties or bezier editor changes (&lt;a href="https://github.com/godotengine/godot/pull/96753">GH-96753&lt;/a>).&lt;/li>
&lt;li>Audio: Fix one frame overflow at the end of WAV files (&lt;a href="https://github.com/godotengine/godot/pull/96768">GH-96768&lt;/a>).&lt;/li>
&lt;li>Audio: Use a LocalVector to store data to optimize AudioStreamMp3 (&lt;a href="https://github.com/godotengine/godot/pull/97026">GH-97026&lt;/a>).&lt;/li>
&lt;li>Buildsystem: CI: Update clang-format pre-commit hook to 19.1.0 (&lt;a href="https://github.com/godotengine/godot/pull/97483">GH-97483&lt;/a>).&lt;/li>
&lt;li>Core: Add callable support for find and rfind Array methods (&lt;a href="https://github.com/godotengine/godot/pull/95449">GH-95449&lt;/a>).&lt;/li>
&lt;li>Core: Fix inability to use ResourceLoader in C# after threaded load in GDScript (&lt;a href="https://github.com/godotengine/godot/pull/92888">GH-92888&lt;/a>).&lt;/li>
&lt;li>Core: Add translation domain (&lt;a href="https://github.com/godotengine/godot/pull/95787">GH-95787&lt;/a>).&lt;/li>
&lt;li>Core: WorkerThreadPool: Revamp interaction with ScriptServer (&lt;a href="https://github.com/godotengine/godot/pull/96959">GH-96959&lt;/a>).&lt;/li>
&lt;li>Core: StringName: Fix empty hash (&lt;a href="https://github.com/godotengine/godot/pull/96586">GH-96586&lt;/a>).&lt;/li>
&lt;li>Dotnet: Generate strongly-typed method to raise signal events and fix event accessibility (&lt;a href="https://github.com/godotengine/godot/pull/68233">GH-68233&lt;/a>).&lt;/li>
&lt;li>Editor: Fix MeshInstance3D gizmo redraw performance for PlaneMesh with larger subdiv value (&lt;a href="https://github.com/godotengine/godot/pull/96934">GH-96934&lt;/a>).&lt;/li>
&lt;li>Editor: Fix error reopening non existing scene on startup (&lt;a href="https://github.com/godotengine/godot/pull/97028">GH-97028&lt;/a>).&lt;/li>
&lt;li>GDExtension: GDExtension: Allow class names to be unicode (&lt;a href="https://github.com/godotengine/godot/pull/96501">GH-96501&lt;/a>).&lt;/li>
&lt;li>GDScript: Fix issue with GDScript binary tokens being non-deterministic (&lt;a href="https://github.com/godotengine/godot/pull/96855">GH-96855&lt;/a>).&lt;/li>
&lt;li>GDScript: Fix Dictionary.merge() type validation (&lt;a href="https://github.com/godotengine/godot/pull/96864">GH-96864&lt;/a>).&lt;/li>
&lt;li>GDScript: Fix operator[] for typed dictionaries (&lt;a href="https://github.com/godotengine/godot/pull/96797">GH-96797&lt;/a>).&lt;/li>
&lt;li>GUI: GraphEdit: Improve dotted pattern grid performance (&lt;a href="https://github.com/godotengine/godot/pull/96910">GH-96910&lt;/a>).&lt;/li>
&lt;li>GUI: Fix TabContainer minimum size (&lt;a href="https://github.com/godotengine/godot/pull/97132">GH-97132&lt;/a>).&lt;/li>
&lt;li>Import: Add BC1 compression support to Betsy (&lt;a href="https://github.com/godotengine/godot/pull/95915">GH-95915&lt;/a>).&lt;/li>
&lt;li>Navigation: Fix AStar2D, AStar3D, AStarGrid2D from not returning a path when the destination is disabled/solid even with allow_partial_path option (&lt;a href="https://github.com/godotengine/godot/pull/94246">GH-94246&lt;/a>).&lt;/li>
&lt;li>Physics: Move Godot Physics 2D into a module; add dummy 2D physics server (&lt;a href="https://github.com/godotengine/godot/pull/95261">GH-95261&lt;/a>).&lt;/li>
&lt;li>Physics: Move Godot Physics 3D into a module; add dummy 3D physics server (&lt;a href="https://github.com/godotengine/godot/pull/95252">GH-95252&lt;/a>).&lt;/li>
&lt;li>Physics: Add forgotten get_space() check in GodotArea3D::remove_soft_body_from_query() (&lt;a href="https://github.com/godotengine/godot/pull/97130">GH-97130&lt;/a>).&lt;/li>
&lt;li>Porting: Fix project manager stealing focus on i3 (&lt;a href="https://github.com/godotengine/godot/pull/96829">GH-96829&lt;/a>).&lt;/li>
&lt;li>Rendering: Use distance to AABB surface to calculate Mesh LOD instead of using supports (&lt;a href="https://github.com/godotengine/godot/pull/92290">GH-92290&lt;/a>).&lt;/li>
&lt;li>Rendering: Fix BaseMaterial3D refracting objects located in front of the material (&lt;a href="https://github.com/godotengine/godot/pull/93449">GH-93449&lt;/a>).&lt;/li>
&lt;li>Rendering: Fix incorrect Reinhard tonemap operator (&lt;a href="https://github.com/godotengine/godot/pull/93324">GH-93324&lt;/a>).&lt;/li>
&lt;li>Rendering: Use temporal accumulation to improve the quality of shadows (&lt;a href="https://github.com/godotengine/godot/pull/97428">GH-97428&lt;/a>).&lt;/li>
&lt;li>Rendering: Fix region_filter_clip_enabled to avoid sprite bleeding for interpolated sprite sheets (&lt;a href="https://github.com/godotengine/godot/pull/97602">GH-97602&lt;/a>).&lt;/li>
&lt;li>Visual Shaders: Add vector operations to Remap node (&lt;a href="https://github.com/godotengine/godot/pull/97314">GH-97314&lt;/a>).&lt;/li>
&lt;li>Thirdparty: mbedTLS: Enable TLS 1.3 support (&lt;a href="https://github.com/godotengine/godot/pull/96394">GH-96394&lt;/a>).&lt;/li>
&lt;li>XR: Fix launching XR apps from the Android editor (&lt;a href="https://github.com/godotengine/godot/pull/96868">GH-96868&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h2 id="changelog">Changelog&lt;/h2>
&lt;p>&lt;strong>136 contributors&lt;/strong> submitted &lt;strong>332 improvements&lt;/strong> for this new snapshot. See our &lt;a href="https://godotengine.github.io/godot-interactive-changelog/#4.4-dev3">&lt;strong>interactive changelog&lt;/strong>&lt;/a> for the complete list of changes since the previous 4.4-dev2 snapshot.&lt;/p>
&lt;p>This release is built from commit &lt;a href="https://github.com/godotengine/godot/commit/f4af8201bac157b9d47e336203d3e8a8ef729de2">&lt;code class="language-plaintext highlighter-rouge">f4af8201b&lt;/code>&lt;/a>.&lt;/p>
&lt;h2 id="downloads">Downloads&lt;/h2>
&lt;div class="card card-download">
&lt;a class="card-download-link" href="/download/archive/4.4-dev3">
Download Godot 4.4 dev3
&lt;/a>
&lt;div class="card-download-details">
&lt;img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-4-dev-3.webp" />
&lt;div class="card-download-platforms">
&lt;div class="download-platform platform-linux">
&lt;img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" />
Linux
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev3/Godot_v4.4-dev3_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev3/Godot_v4.4-dev3_mono_linux_x86_64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-macos">
&lt;img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" />
macOS
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev3/Godot_v4.4-dev3_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev3/Godot_v4.4-dev3_mono_macos.universal.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-windows">
&lt;img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" />
Windows
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev3/Godot_v4.4-dev3_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev3/Godot_v4.4-dev3_mono_win64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;div class="card-download-sublinks">
&lt;a class="card-download-other" href="/download/archive/4.4-dev3">
Export templates and other downloads
&lt;/a>
&lt;a class="card-download-donate" href="/donate/">
Make a Donation
&lt;/a>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Standard build&lt;/strong> includes support for GDScript and GDExtension.&lt;/p>
&lt;p>&lt;strong>.NET build&lt;/strong> (marked as &lt;code class="language-plaintext highlighter-rouge">mono&lt;/code>) includes support for C#, as well as GDScript and GDExtension.&lt;/p>
&lt;ul>
&lt;li>See also &lt;a href="https://docs.godotengine.org/en/latest/tutorials/scripting/c_sharp/index.html#c-platform-support">C# platform support&lt;/a>.&lt;/li>
&lt;/ul>
&lt;div class="card card-warning">
&lt;p>
While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition &lt;strong>a pre-release piece of software&lt;/strong>. 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.
&lt;/p>
&lt;/div>
&lt;h2 id="known-issues">Known issues&lt;/h2>
&lt;ul>
&lt;li>“Attempting to use an uninitialized RID” error is printed when opening the editor (&lt;a href="https://github.com/godotengine/godot/issues/97694">GH-97694&lt;/a>). This is a harmless error, and should have no noticeable impact on your project.&lt;/li>
&lt;/ul>
&lt;p>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 &lt;a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug+">known bugs&lt;/a>.&lt;/p>
&lt;h2 id="bug-reports">Bug reports&lt;/h2>
&lt;p>As a tester, we encourage you to &lt;a href="https://github.com/godotengine/godot/issues">open bug reports&lt;/a> if you experience issues with this release. Please check the &lt;a href="https://github.com/godotengine/godot/issues">existing issues on GitHub&lt;/a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.&lt;/p>
&lt;p>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).&lt;/p>
&lt;h2 id="support">Support&lt;/h2>
&lt;p>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 &lt;a href="https://fund.godotengine.org/">generous donations from the Godot community&lt;/a>. A big thank you to everyone who has contributed &lt;a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time&lt;/a> or &lt;a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support&lt;/a> to the project!&lt;/p>
&lt;p>If you’d like to support the project financially and help us secure our future hires, you can do so using the &lt;a href="https://fund.godotengine.org/">Godot Development Fund&lt;/a> platform managed by &lt;a href="https://godot.foundation/">Godot Foundation&lt;/a>. There are also several &lt;a href="/donate">alternative ways to donate&lt;/a> which you may find more suitable.&lt;/p></content><author><name>Clay John</name></author><category term="Pre-release"/></entry><entry><title>Godot XR update - October 2024</title><link href="https://godotengine.org/article/godot-xr-update-oct-2024/"/><updated>2024-10-02T12:00:00+00:00</updated><id>https://godotengine.org/article/godot-xr-update-oct-2024/</id><summary>Looking back at a year of XR development.</summary><content type="html">&lt;p>It has been a very busy year on the XR front and seeing we haven’t given a proper update for well over a year, it’s time to look back at what has happened since our last update post.
We touched on some of these in the Godot 4.3 release blog but we’re doing a bit of a deep dive here.&lt;/p>
&lt;p>We’re planning on publishing more articles about XR in the near future. We recently &lt;a href="https://godotengine.org/article/godot-editor-horizon-store-early-access-release/">announced the XR editor&lt;/a> but we have more news on the way!&lt;/p>
&lt;h2 id="improvements-in-godots-xr-architecture">Improvements in Godot’s XR architecture&lt;/h2>
&lt;p>A lot of work has gone into improving the XR implementation in Godot.&lt;/p>
&lt;h3 id="improved-frame-timing-logic">Improved frame timing logic&lt;/h3>
&lt;p>When OpenXR was originally implemented in Godot 3 there were limitations on the order in which certain actions took place. Most of the communication with OpenXR was tied into the rendering engine resulting in Godot relying more on predictive algorithms to position tracked entities such as controllers. Originally Godot 4 inherited this approach.&lt;/p>
&lt;p>As part of the Godot 4.3 release much of this logic was redone to interface with OpenXR correctly. Godot now correctly informs OpenXR when it starts processing a new frame and obtains pose data for tracked entities with predicted positioning for the current frame.&lt;/p>
&lt;h3 id="preparing-to-support-rendering-on-a-separate-thread">Preparing to support rendering on a separate thread&lt;/h3>
&lt;p>As part of implementing the improved frame timing logic, we did a large cleanup of the XR code to make sure it runs properly when rendering happens on a separate thread. Especially for XR applications this brings us closer to ensuring a steady framerate, even on stand alone devices.&lt;/p>
&lt;p>There is more work that needs to be done in Godot 4.4 to make this fully viable but the foundations are in place.&lt;/p>
&lt;h3 id="standardisation-for-ar-and-passthrough">Standardisation for AR and passthrough&lt;/h3>
&lt;p>Passthrough is a mechanism where video cameras on a VR headset record the real world and present this real world view as the background inside of our HMD turning the headset into an AR device. Different headsets implement this feature in different ways and this caused difficulties for developers who were targeting multiple devices.&lt;/p>
&lt;p>While passthrough allows some neat things not possible with optical AR devices, for most AR focussed application developers should not be tasked with writing different code to support all these devices.&lt;/p>
&lt;p>We have thus standardized this approach through utilising OpenXRs environment blend modes and moving platforms specific code into the OpenXR vendors plugin.&lt;/p>
&lt;h3 id="standardisation-of-hand-face-and-body-tracking">Standardisation of hand, face and body tracking&lt;/h3>
&lt;p>Hand tracking has been supported in Godot for a long while now, however improvements have been made to ensure better cross platform support, including standardisation between OpenXR and WebXR. The &lt;code class="language-plaintext highlighter-rouge">OpenXRHand&lt;/code> node has been deprecated, in favour of the new &lt;code class="language-plaintext highlighter-rouge">XRHandModifier3D&lt;/code> node which is designed to work with any XR system - not just OpenXR.&lt;/p>
&lt;p>Face tracking support has been added with face tracking data being sourced from several devices. Godot now supports the Unified Expressions standard for handling face tracking data.&lt;/p>
&lt;p>Body tracking support has been added using Godots Humanoid Skeleton as a base which allows various body tracking devices to leverage Godots retargeting logic.&lt;/p>
&lt;p>While these 3 systems have been implemented under the XR name, their use cases are not limited to XR. Already several plugins have been created using this system to bring in body tracking data from various body tracking solutions ranging from optical Mocap to full body tracking suits.&lt;/p>
&lt;h3 id="improved-webxr-support">Improved WebXR support&lt;/h3>
&lt;p>WebXR support in Godot is seeing continuous improvement, most notably the addition of hand tracking support, but also support for MSAA and a number of smaller bug fixes and improvements.
Our WebXR implementation now also supports AR applications.&lt;/p>
&lt;h3 id="improved-opengl-support">Improved OpenGL support&lt;/h3>
&lt;p>While technically not specific to XR, several improvements to the compatibility renderer directly impact the ability to create XR experiences using Godot.&lt;/p>
&lt;p>The new MSAA implementation in the compatibility renderer has support for OpenGL extensions specifically targeting TBDR GPUs found on modern standalone headsets.
When available enabling MSAA 2x or 4x has a very low cost while providing worth while improvement in the visuals.&lt;/p>
&lt;p>The new lightmapping capabilities of the compatibility renderer, where the Vulkan implementation is leveraged to bake the lightmaps, provides a viable solution for improved lighting on standalone XR hardware.&lt;/p>
&lt;h3 id="improved-foveated-rendering-support-in-the-vulkan-engine">Improved foveated rendering support in the Vulkan engine&lt;/h3>
&lt;p>The compatibility renderer uses OpenXRs foveated rendering support directly but this comes with various limitations and is not applicable outside of OpenXR.&lt;/p>
&lt;p>In the Vulkan renderer we have had Variable Rate Shading support for a while which allows foveated rendering to be applied in Godot without the same drawbacks.&lt;/p>
&lt;p>In the latest release various improvements have been applied that provide more control over the density map used and allow for eye tracking to impact the density map and ensure quality rendering at the users focal point.&lt;/p>
&lt;h2 id="collaboration-between-w4-games--meta">Collaboration between W4 Games &amp;amp; Meta&lt;/h2>
&lt;p>The past year saw W4 Games and Meta join forces to improve Godot’s support for the Quest line of devices.&lt;/p>
&lt;h3 id="core-functionality-improvements">Core functionality improvements&lt;/h3>
&lt;p>The team at W4 has worked closely together with several core Godot XR contributors to improve the core functionality in Godot, improving the experience not just for Meta Quest users, but also for other XR systems. Several of the items mentioned in the previous sections benefited greatly from the help provided here.&lt;/p>
&lt;p>These improvements also include various rendering optimisations and fixes.&lt;/p>
&lt;h3 id="enhanced-passthrough-and-hand-tracking-support">Enhanced passthrough and hand-tracking support&lt;/h3>
&lt;p>On top of the standardisation of passthrough and hand-tracking in Godot, support for many extra features Meta provides was implemented in the &lt;a href="https://github.com/GodotVR/godot_openxr_vendors">Godot OpenXR Vendors plugin&lt;/a>.&lt;/p>
&lt;p>For passthrough, this includes applying various filters to the passthrough imagery, like adjusting the brightness, contrast and saturation, mapping the colors to other values, or even projecting passthrough onto custom geometry, in order to bring only specific objects from the user’s physical environment into an otherwise VR experience. See the &lt;a href="https://godotvr.github.io/godot_openxr_vendors/manual/meta/passthrough.html">Meta Passthrough tutorial&lt;/a> for more information.&lt;/p>
&lt;p>For hand-tracking, developers can now access hand meshes, collision shapes for the hands, and do some simple gesture tracking, like detecting pinches between the user’s thumb and any of the other fingers. See the &lt;a href="https://godotvr.github.io/godot_openxr_vendors/manual/meta/hand_tracking.html">Meta Hand Tracking tutorial&lt;/a> for the full details about these features.&lt;/p>
&lt;h3 id="composition-layer-support">Composition layer support&lt;/h3>
&lt;p>Composition layers are a standard feature in OpenXR, that allow developers to add floating “panels” (either flat or curved) that have 2D content rendered onto them from a Godot SubViewport.&lt;/p>
&lt;p>The result of this approach is far sharper detail of the 2D content compared to applying this same content as a texture on a 3D mesh.&lt;/p>
&lt;p>This is ideal for in game menus, media viewing, or heads up displays. Small text is especially more readable when using this technique.&lt;/p>
&lt;p>W4 Games added both the &lt;a href="https://docs.godotengine.org/en/latest/tutorials/xr/openxr_composition_layers.html">core implementation&lt;/a> and Meta-specific extensions, which allow applying further sharpening or supersampling, advanced alpha blending or marking particular composition layers as containing “secure content”. See the &lt;a href="https://godotvr.github.io/godot_openxr_vendors/manual/meta/composition_layers.html">Meta Composition Layers tutorial&lt;/a> for more information about these Meta-specific features.&lt;/p>
&lt;h3 id="scene-discovery-and-spatial-anchors">Scene discovery and spatial anchors&lt;/h3>
&lt;p>These two closely related features are possibly the most exciting part of the work done so far. Meta’s Scene Discovery allows the Quest to scan your environment and provide your game with information about the real world.&lt;/p>
&lt;p>This can allow you to place objects on your walls, on furniture, or have NPCs interact with the real environment.&lt;/p>
&lt;p>Spatial anchors allow you to make this persistent. Create a spatial anchor that references a place on your wall, and you can show a virtual screen there anytime your user comes back to your application.&lt;/p>
&lt;p>See the &lt;a href="https://godotvr.github.io/godot_openxr_vendors/manual/meta/scene_manager.html">Meta Scene Manager&lt;/a> and &lt;a href="https://godotvr.github.io/godot_openxr_vendors/manual/meta/spatial_anchors.html">Meta Spatial Anchors&lt;/a> tutorials for more information.&lt;/p>
&lt;h2 id="newimproved-platform-support">New/Improved platform support&lt;/h2>
&lt;h3 id="pico-4">PICO 4&lt;/h3>
&lt;p>Godot has had support for PICO headsets for while but in the past year improvements were made to this. PICO has fully adopted the official Khronos Android Loader for OpenXR and deprecated their custom loader. Godot fully supports the new approach.&lt;/p>
&lt;h3 id="htc-focus-3-and-xr-elite">HTC Focus 3 and XR Elite&lt;/h3>
&lt;p>HTC provided the team with HTC Vive XR Elite units allowing us to ensure Godot runs on HTC standalone devices. We’re also working together with HTC to improve the experience on these devices.&lt;/p>
&lt;h3 id="magic-leap-2">Magic Leap 2&lt;/h3>
&lt;p>Support for the Magic Leap ecosystem was recently added to the vendor plugin as well. Magic Leap stands apart from other standalone Android devices being an optical AR device and running AMD hardware. On these devices you need to use the Vulkan mobile renderer.&lt;/p>
&lt;h3 id="qualcomm-spaces">Qualcomm spaces&lt;/h3>
&lt;p>This is still under development, we’re supporting Qualcomm’s OpenXR runtime on the Lynx R1 but we’re looking into supporting more devices in this eco system. Watch this space.&lt;/p>
&lt;h3 id="logitech-mx-ink">Logitech MX Ink&lt;/h3>
&lt;p>Not a new headset, but a pheripheral, the MX ink is a positionally tracked stylus that can be used with a Meta Quest.
Support was merged into master recently and this device will be supported in the upcoming Godot 4.4 release.
We’re looking into supporting this in a future 4.3 patch release.&lt;/p>
&lt;h2 id="whats-next">What’s next&lt;/h2>
&lt;p>Stay tuned for further blog posts focusing on XR as we start looking ahead and as new features become available.&lt;/p></content><author><name>Bastiaan Olij</name></author><category term="Progress Report"/></entry><entry><title>Godot SDK Integrations</title><link href="https://godotengine.org/article/godot-sdk-integrations/"/><updated>2024-09-24T14:30:00+00:00</updated><id>https://godotengine.org/article/godot-sdk-integrations/</id><summary>A new GitHub organization to centralize the community efforts to provide support for third-party SDKs for Godot.</summary><content type="html">&lt;h3 id="third-party-services-sdks-and-their-circumstances">Third party services SDKs and their circumstances&lt;/h3>
&lt;p>Developing and publishing games often involves relying on third-party services, middleware, or platforms. Numerous vendors offer commercial products like advertising networks, backend services, sound engines, user authentication, and more. These tools simplify the process of monetization, expanding player reach, storing data on servers, and performing other functions beyond what a game engine typically provides.&lt;/p>
&lt;p>To facilitate integration, these vendors often supply SDKs tailored for specific game engines, allowing developers to easily install them and interact with their products.&lt;/p>
&lt;p>Godot, while rapidly growing in popularity, is still relatively a newcomer. As such, while some vendors are beginning to support the engine, many others have not yet invested on it, given the necessary development and maintenance costs.&lt;/p>
&lt;p>For some, this is due to the significant resources required (finding the right developers to hire to make the SDKs), while for others, it’s simply a matter of being unaware of Godot’s growing market or dealing with internal bureaucracy that slows down the process of supporting the engine.&lt;/p>
&lt;p>As the Godot Foundation is committed to using donations solely for creating &lt;abbr title="Free and Open Source Software">FOSS&lt;/abbr> and prioritizing open standards, it does not allocate resources from the general pool of donations to integrate proprietary SDKs into the engine.&lt;/p>
&lt;p>While officially incorporating monetization SDKs into Godot might not align with the project’s goals, for example, there is still a widely recognized need within the community for such support to help developers make a living. As there is a need for many other SDKs.&lt;/p>
&lt;h3 id="community-to-the-rescue">Community to the rescue&lt;/h3>
&lt;p>To tackle this challenge, many in the Godot community have taken matters into their own hands, developing proper integrations for third-party services. Talented developers have done an incredible job to bring the most popular services into Godot, enabling the community to publish games on their desired platforms using the necessary third-party tools.&lt;/p>
&lt;p>However, this approach still presents several issues for the community:&lt;/p>
&lt;ul>
&lt;li>Not everyone is committed to creating and maintaining a full SDK integration. Often, developers only implement the features they need for their specific game.&lt;/li>
&lt;li>Developers may not have the time or inclination to support other users’ issues as long as their integration works for their project. Likewise, they may not continue developing the integration after their project has been published.&lt;/li>
&lt;li>As a result this means that, over time, multiple forks of the same integration can be found on GitHub, maintained by different individuals who needed it at different times, leading to fragmentation.&lt;/li>
&lt;/ul>
&lt;p>Adding to this, some vendors who provide SDKs for other game engines have expressed interested in supporting Godot but are not ready to allocate internal resources to develop an integration due to costs or other constraints. They might be willing to donate their integration (or donate the money to do an integration) to the Godot Foundation and collaborate with the community.&lt;/p>
&lt;p>While this is amazing, the Foundation doesn’t want to become responsible for maintaining such integrations using general funds once the specific donation runs out.&lt;/p>
&lt;h3 id="the-godot-engine-community-sdk-integrations-github-organization">The Godot Engine Community SDK Integrations GitHub organization&lt;/h3>
&lt;p>After extensive discussions with the community and various vendors, the Godot Foundation has decided to maintain its stance on not directly developing SDKs. However, recognizing the need for a more organized approach, the Foundation has established an official centralized GitHub organization for hosting SDK integrations, thereby encouraging community contributions.&lt;/p>
&lt;p>This organization eases the burden on developers who create their own SDK bindings, as they will now be able to accept contributions without bearing the sole responsibility for maintaining the integration. It also provides a clear and official platform for companies that wish to donate their SDK integrations, offering a centralized location for these contributions.&lt;/p>
&lt;p>The new &lt;a href="https://github.com/godot-sdk-integrations">&lt;strong>Godot SDK Integrations&lt;/strong>&lt;/a> organization has its own GitHub page already. Developers who have been working on SDK integrations are invited to move their work here, if they desire so. You can join the new &lt;a href="https://chat.godotengine.org/channel/sdk-integrations">&lt;code class="language-plaintext highlighter-rouge">sdk-integrations&lt;/code> channel&lt;/a> to discuss this transfer.&lt;/p>
&lt;p>Likewise, vendors interested in donating integrations for their first-party SDKs are also welcome to move them to this new organization, if they deem it preferable to hosting SDKs themselves. Please contact the &lt;a href="https://godot.foundation/">Godot Foundation&lt;/a> in order to make arrangements. Likewise, if you would like to finance the development of Godot integrations for your SDKs, the Godot Foundation can help facilitate contacts with trusted community maintainers or companies who can take on such work.&lt;/p>
&lt;p>Please note that this organization is a public space for centralizing SDK integration efforts and collecting repositories. The Foundation will not manage or update the integrations, so ongoing development will depend on the community and vendor contributions. This initiative is intended to be a collective effort.&lt;/p>
&lt;h3 id="contributing-to-the-godot-sdk-integrations-organization">Contributing to the Godot SDK Integrations organization&lt;/h3>
&lt;p>As we mentioned, the Godot Foundation is hosting this new space, but doesn’t intend to spend its resources on maintaining it.&lt;/p>
&lt;p>We are therefore calling for motivated community members to get in touch and help organize the structure of this new organization, and help support developers and vendors who want to provide new SDK integrations for Godot.&lt;/p>
&lt;p>Aside from the actual work of developing and maintaining SDK integrations, we foresee the need for contributors with a production profile who can help write common contribution guidelines, instructions on how to “recruit” new maintainers, or generally ensure some quality and fitness for purpose of the various SDKs offered by and to the community.&lt;/p>
&lt;p>For the time being, we are going to discuss and organize the work of this community organization on the &lt;a href="https://chat.godotengine.org/channel/sdk-integrations">&lt;code class="language-plaintext highlighter-rouge">#sdk-integrations&lt;/code> channel&lt;/a> of the &lt;a href="https://chat.godotengine.org/">Godot Contributors Chat&lt;/a>. See you there!&lt;/p></content><author><name>Godot Foundation</name></author><category term="News"/></entry><entry><title>Godot Rendering Priorities: September 2024</title><link href="https://godotengine.org/article/rendering-priorities-september-2024/"/><updated>2024-09-23T15:45:00+00:00</updated><id>https://godotengine.org/article/rendering-priorities-september-2024/</id><summary>4.3 is out. It's time for an update!</summary><content type="html">&lt;p>It’s time again to update everyone on the activities of the rendering team. We have been hard at work fixing countless bugs and improving the renderer. Now that 4.3 is out, we have taken the chance to re-assess our priorities.&lt;/p>
&lt;h2 id="get-involved">Get Involved&lt;/h2>
&lt;p>As a reminder, we are always in need of more help. The rendering team is very small and none of us are working on the renderer full-time. If you are interested in helping out, please consider joining the #rendering channel on &lt;a href="https://chat.godotengine.org">chat.godotengine.org&lt;/a>, joining the weekly meetings that place, or just opening a pull request!&lt;/p>
&lt;p>In addition to the priorities listed here, you can get started contributing by fixing bugs. We have been categorizing bugs by complexity and priority in the new &lt;a href="https://github.com/orgs/godotengine/projects/78">Rendering Issue triage project&lt;/a> to make it easier for new contributors to discover bugs that need attention.&lt;/p>
&lt;p>For a less organized overview on rendering priorities, you can also check out the &lt;a href="https://github.com/orgs/godotengine/projects/33">4.x Rendering Roadmap Github project&lt;/a>. This project lists a lot of the long term tasks we would like to do that don’t fit nicely in bug reports or in the blog post format. If you are performance-minded, there are also plenty of potential performance optimizations described in that project.&lt;/p>
&lt;h2 id="update-on-previous-priorities-and-43">Update on Previous Priorities and 4.3&lt;/h2>
&lt;p>The below are the priorities we identified in the last rendering priorities blog post. Some of these come from earlier blog posts as well. We are happy to report that almost all priorities from the previous posts are either finished, or ready to merge.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Background pipeline compilation + Proper multi-threading in the RenderingDevice (&lt;a href="https://github.com/godotengine/godot/pull/90400">GH-90400&lt;/a>) (Ready to merge)&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>This work was finished during the 4.3 dev cycle, but we deferred merging it to 4.4 because of its size and complexity. As a reminder, this PR implements the concept of an “ubershader” which is basically a version of the shader that contains all features and is 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.&lt;/p>
&lt;p>The early results are very promising. We are seeing reduced load times for large games as well as a reduction in shader pipeline compilation stutter when objects are seen for the first time. In fact, so far we are seeing no shader pipeline compilation stutters at run-time.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>BUGS (in progress, always)&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>We fixed over &lt;a href="https://github.com/godotengine/godot/pulls?q=is%3Apr+is%3Aclosed+label%3Atopic%3Arendering%2Ctopic%3Ashaders%2Ctopic%3Aparticles+label%3Abug+milestone%3A4.3">300&lt;/a> rendering related bugs in 4.3! We expect to fix a few hundred more in 4.4 :)&lt;/p>
&lt;ul>
&lt;li>&lt;strong>GL Compatibility renderer - 3D (Done)&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>We merged support for MSAA, LightmapGI (including baking), resolution scaling, glow, ReflectionProbes, post process adjustments and color correction in time for 4.3. At this point we consider the Compatibility renderer feature complete which means it now has all the features we planned for it when we first designed the renderer. We will continue adding some new features to achieve closer parity with the Mobile renderer, but new features will have less of a priority now.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>D3D12 rendering driver (&lt;a href="https://github.com/godotengine/godot/pull/70315">GH-70315&lt;/a>) (Done)&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>This was merged early in the 4.3 release cycle, but was improved steadily throughout the release cycle. The D3D12 rendering driver is now available for widespread use. This is especially important for ARM64 Windows devices which don’t support OpenGL or Vulkan.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>RenderingDeviceDriver refactor (&lt;a href="https://github.com/godotengine/godot/pull/83452">GH-83452&lt;/a>) (Done)&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>This was very important foundational work that has allowed us to simplify our rendering code and ease the future maintenance burden as we port to more rendering backends.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Acyclic render graph optimization (&lt;a href="https://github.com/godotengine/godot/pull/84976">GH-84976&lt;/a>) (Done)&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>As expected we merged the new Acyclic Render graph in 4.3. It significantly improved stability of the engine and resolved many hard to fix errors as well as moderately improved performance. To read more see the &lt;a href="https://godotengine.org/article/rendering-acyclic-graph/">blog post&lt;/a>.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Compositor Effects (Rendering Hooks) (&lt;a href="https://github.com/godotengine/godot/pull/80214">GH-80214&lt;/a>) (Done)&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>The new CompositorEffects API allows you to register callbacks that will be called in the middle of the rendering process. This lets you insert custom RenderingDevice commands in the middle of the render frame to customize rendering.&lt;/p>
&lt;p>Right now the API is functional and exposes almost all internal render state so you can access all the intermediate information.&lt;/p>
&lt;p>There is already an &lt;a href="https://github.com/godotengine/godot-demo-projects/tree/master/compute/post_shader">official demo&lt;/a> so you can see how it works!&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Metal rendering driver &lt;a href="https://github.com/godotengine/godot/pull/88199">GH-88199&lt;/a> (Merged for 4.4)&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>This was a work in progress for much of the 4.3 release cycle and was finished slightly too late to include in 4.3. We merged it immediately for 4.4 so we can get widespread testing before release. It’s ready to try in &lt;a href="https://godotengine.org/article/dev-snapshot-godot-4-4-dev-1/">4.4-dev1&lt;/a> or later releases.&lt;/p>
&lt;p>Metal enhances both performance and stability on Apple silicon devices. Please test it out and let us know if you run into any issues!&lt;/p>
&lt;ul>
&lt;li>&lt;strong>SDFGI refactor / HDDAGI (&lt;a href="https://github.com/godotengine/godot/pull/86267">GH-86267&lt;/a>) (In progress)&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>This is still a work in progress, but results are already quite good. Both performance and quality are better than SDFGI. Juan still has many ideas he wants to apply, so this work may continue for some time before it is ready.&lt;/p>
&lt;h2 id="new-priorities">New Priorities&lt;/h2>
&lt;p>We have completed almost all of our previous priorities, so now we get to set out new goals for the next few release cycles. Right now rendering contributors are most excited about two things:&lt;/p>
&lt;ul>
&lt;li>Unblocking advanced users (especially for advanced VFX).&lt;/li>
&lt;li>Improving performance.&lt;/li>
&lt;/ul>
&lt;p>These are rising to the top of the priority list as Godot becomes increasingly stable and the core user-experience feels quite good.&lt;/p>
&lt;p>In particular the following are areas where you can expect to see changes in the next couple of releases. Bear in mind that we don’t have dedicated people working on any of these priorities. If you are interested in contributing, please consider contributing in one of these areas.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Performance&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>Performance is our number one priority. Now that Godot 4 has been out for over a year we are seeing more games releasing with Godot and users are starting to create bigger and higher-fidelity games. A natural consequence is that Godot’s renderer is starting to become a limiting factor for some users. Accordingly, it’s time for us to prioritize speed and to start implementing all the optimizations we have been putting off for later. You can find a list of a number of them listed in our &lt;a href="https://github.com/orgs/godotengine/projects/33">4.x Rendering Roadmap Github project&lt;/a>.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Lightmapping improvements&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>We have had a lot of recurring requests to improve the quality and ease-of-use of LightmapGI. So far in 4.4 we have had a few major improvements (including &lt;a href="https://godotengine.org/article/dev-snapshot-godot-4-4-dev-1/#lightmap-bicubic-sampling">bicubic sampling&lt;/a> and a &lt;a href="https://godotengine.org/article/dev-snapshot-godot-4-4-dev-1/#betsy-texture-compressor">GPU-based texture compressor&lt;/a>), but there is a lot of work still to do to ensure that baking and using LightmapGI is as seamless as possible.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Improving VFX workflow&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>Godot 4 has brought many quality of life features to particles like &lt;a href="https://godotengine.org/article/progress-report-state-of-particles/">animated velocities&lt;/a> and &lt;a href="https://github.com/godotengine/godot/pull/55387">turbulence&lt;/a>. However, particles still fall short in term of the broader workflow. VFX artists have to come up with their own structure for VFX (often script + animation player), figure out ways to check timings of their effects outside the engine (using screen capture software, for example), modify billboarding logic manually when moving to custom particle shaders, and so on. Despite improvements to the flexibility of the engine, artists still need advanced technical knowledge to do many things (like writing post-processing effects with the new CompositorEffect API).&lt;/p>
&lt;p>We still have a lot of work to make Godot more accessible for people that are less interested in learning shaders or programming but still want juicy effects and immersive environments in their games.&lt;/p>
&lt;p>If you want to help, there are plenty of things to do. From helping by gathering knowledge and evaluating solutions from multiple perspectives, to implementing agreed &lt;a href="https://github.com/orgs/godotengine/projects/54/views/6">new features and bug fixes&lt;/a>, finally, by joining us in the &lt;a href="https://discord.gg/HX4xAGaGjm">VFX Discord server&lt;/a>.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Customized rendering&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>As Godot adoption increases, it is being used for more niche and specialized projects. However, we can’t provide everything that every user needs out of the box without becoming bloated, slow, and hard to use. So we need to provide more tools to customize rendering for projects that need more specialized effects. We started that process in 4.3 with the &lt;a href="https://docs.godotengine.org/en/latest/classes/class_compositoreffect.html">CompositorEffects API&lt;/a>. We want to continue that effort by implementing more things in the Compositor API to allow users to &lt;a href="https://github.com/godotengine/godot-proposals/issues/7916">control the order of rendering&lt;/a>, override &lt;a href="https://github.com/godotengine/godot-proposals/issues/8366">shader templates&lt;/a>, etc.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Significantly improve screen-space effects (SSAO, SSIL, SSR, SSS)&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>All of the screen-space effects in Godot 4 were designed to run without using temporal reprojection for 2 reasons: 1) we didn’t want to force anyone to enable TAA in order to have a good looking game and 2) we didn’t properly calculate motion vectors for moving objects until Godot 4.2. Temporal reprojection allows us to make our effects much higher quality for a lower base performance cost.&lt;/p>
&lt;p>Now that we have proper motion vectors, we want to provide versions of all the screen-space effects that take advantage of motion vectors to increase their quality and reduce performance cost.&lt;/p>
&lt;p>We still won’t require TAA for any of the built-in effects as we want users to be able to choose whether to enable TAA or not, but we will likely use temporal reprojection by default for most of these effects.&lt;/p>
&lt;p>This is an area that is really easy to contribute to if you are already familiar with rendering but want to get more familiar with Godot!&lt;/p>
&lt;h2 id="support">Support&lt;/h2>
&lt;p>Godot is a non-profit, open source game engine developed by hundreds of contributors in their free time, as well as a handful of part or full-time developers hired thanks to &lt;a href="https://fund.godotengine.org/">generous donations from the Godot community&lt;/a>. A big thank you to everyone who has contributed &lt;a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time&lt;/a> or &lt;a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support&lt;/a> to the project!&lt;/p>
&lt;p>If you’d like to support the project financially and help us secure our future hires, you can do so using the &lt;a href="https://fund.godotengine.org/">Godot Development Fund&lt;/a> platform managed by &lt;a href="https://godot.foundation/">Godot Foundation&lt;/a>. There are also several &lt;a href="/donate">alternative ways to donate&lt;/a> which you may find more suitable.&lt;/p></content><author><name>Clay John</name></author><category term="Progress Report"/></entry><entry><title>Godot Editor on the Meta Horizon Store</title><link href="https://godotengine.org/article/godot-editor-horizon-store-early-access-release/"/><updated>2024-09-20T16:00:00+00:00</updated><id>https://godotengine.org/article/godot-editor-horizon-store-early-access-release/</id><summary>Introducing the Godot Editor for Meta Quest (Horizon OS) devices</summary><content type="html">&lt;p>A year ago, I &lt;a href="https://godotengine.org/article/android_godot_editor_play_store_beta_release/">introduced the Android port of the Godot Editor&lt;/a>. To date, it has had over &lt;a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4">500K+ downloads on the Google Play store&lt;/a>, and has enabled developers to create and develop Godot apps and games using Android tablets, foldables and phones. Since then we have been hard at work refining the experience, improving the development workflow via picture-in-picture (PiP) support, providing the ability to build and export Godot binaries, and improving the Editor performance and reliability.&lt;/p>
&lt;p>Building on that foundation, and thanks to the &lt;a href="https://godotengine.org/article/godot-engine-receiving-new-grant-meta-reality-labs/">Meta grants&lt;/a> in support of that work and with help from &lt;a href="https://www.w4games.com/">W4 Games&lt;/a>, I was able to complete the proof of concept started by &lt;a href="https://github.com/BastiaanOlij">Bastiaan Olij&lt;/a> a couple years ago, to add support for using the Android editor in an XR context using Godot’s first class &lt;a href="https://www.khronos.org/openxr/">OpenXR&lt;/a> integration!&lt;/p>
&lt;p>Today, I am proud to release the &lt;strong>first mobile XR port&lt;/strong> of the Godot Editor on Meta Quest devices!&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.meta.com/experiences/godot-game-engine/7713660705416473/">https://www.meta.com/experiences/godot-game-engine/7713660705416473/&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>The Godot Editor is &lt;a href="https://www.meta.com/experiences/godot-game-engine/7713660705416473/">now available on the Horizon Store&lt;/a> for &lt;strong>Meta Quest 3&lt;/strong> &amp;amp; &lt;strong>Meta Quest Pro&lt;/strong> devices running &lt;a href="https://www.meta.com/blog/quest/meta-horizon-os-open-hardware-ecosystem-asus-republic-gamers-lenovo-xbox/">Horizon OS&lt;/a> &lt;strong>version 69 or higher&lt;/strong>.&lt;/p>
&lt;p>This is an early access version of the Godot Editor running natively on Meta Quest devices, enabling the creation and development of 2D, 3D and &lt;strong>immersive XR&lt;/strong> apps and games directly on device without the need for an external computer.&lt;/p>
&lt;p>As usual, this work is entirely &lt;strong>free and open source&lt;/strong>, and already merged in Godot 4.4’s development branch (&lt;a href="https://github.com/godotengine/godot/pull/96624">GH-96624&lt;/a>). The version we publish on the Horizon Store can also be downloaded as an APK directly &lt;a href="/download/preview/">from the Godot website&lt;/a>.&lt;/p>
&lt;h2 id="features--highlights">Features &amp;amp; Highlights&lt;/h2>
&lt;p>This version of the Godot Editor is a &lt;strong>Hybrid App&lt;/strong> with the ability to open and transition back and forth between multiple &lt;strong>panel&lt;/strong> (2D) and &lt;strong>immersive&lt;/strong> (XR) windows. This is used to support the Editor features as described below.&lt;/p>
&lt;h3 id="access-to-all-godot-engine-capabilities">Access to all Godot Engine capabilities&lt;/h3>
&lt;p>&lt;img src="/storage/blog/godot-editor-horizon-store-early-access-release/project_manager_panel.webp" alt="Project Manager panel in Horizon OS" />&lt;/p>
&lt;p>&lt;img src="/storage/blog/godot-editor-horizon-store-early-access-release/main_editor_panel.webp" alt="Main Editor panel in Horizon OS" />&lt;/p>
&lt;p>The &lt;a href="https://docs.godotengine.org/en/stable/getting_started/introduction/first_look_at_the_editor.html#the-project-manager">Project Manager&lt;/a> and the main &lt;a href="https://docs.godotengine.org/en/stable/getting_started/introduction/first_look_at_the_editor.html#id1">Editor&lt;/a> are rendered into panel windows as done on desktop and Android platforms. This makes the Editor readily available and usable either in the Home environment or overlaid onto a XR experience.&lt;/p>
&lt;p>This approach allows us to deliver on a core tenet of this port which is to provide developers with a familiar development interface and access to the full set of capabilities and features that the Godot Editor provides on desktop and Android platforms. This includes access to the &lt;a href="https://godotengine.org/asset-library/asset">asset library&lt;/a>, &lt;a href="https://docs.godotengine.org/en/stable/tutorials/editor/default_key_mapping.html">keyboard &amp;amp; mouse shortcuts&lt;/a>, &lt;a href="https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html">GDScript&lt;/a> code editing / highlighting / completion support, access to the &lt;a href="https://docs.godotengine.org/en/stable/classes/index.html">documentation&lt;/a>, live scene editing, live script reloading support, &lt;a href="https://docs.godotengine.org/en/stable/tutorials/scripting/debug/overview_of_debugging_tools.html">live debugging&lt;/a>, &lt;a href="https://docs.godotengine.org/en/stable/tutorials/scripting/debug/the_profiler.html">live profiling&lt;/a> and &lt;a href="https://godotengine.org/features/">many more&lt;/a>!&lt;/p>
&lt;h3 id="developing-xr-apps-and-games">Developing XR apps and games!&lt;/h3>
&lt;video autoplay="" loop="" muted="" playsinline="" title="Showcasing support for developing XR projects">
&lt;source src="/storage/blog/godot-editor-horizon-store-early-access-release/developing_xr_game.mp4?1" type="video/mp4" />
&lt;/video>
&lt;p>When developing a XR project, the immersive (XR) window is used for playtesting the project directly in the device as if it was a released app already. In that mode, the Editor panel can be summoned as an interactive overlay, which allows the developer to iterate, debug or profile the XR project while it’s running.&lt;/p>
&lt;p>Support for exporting XR project binaries will be made available via a plugin.&lt;/p>
&lt;h3 id="developing-2d-and-3d-apps-and-games">Developing 2D and 3D apps and games!&lt;/h3>
&lt;video autoplay="" loop="" muted="" playsinline="" title="Showcasing support for developing 2D and 3D projects">
&lt;source src="/storage/blog/godot-editor-horizon-store-early-access-release/developing_3d_game_2.mp4?1" type="video/mp4" />
&lt;/video>
&lt;p>Support for creating and developing 2D and 3D apps and games is available out of the box.&lt;/p>
&lt;p>The experience is improved by leveraging the Android editor’s multi-panel capability which on Horizon OS allows to playtest the project in a new panel next to the Editor panel. This allows the Editor to remain accessible for iterating, debugging or profiling the project in real-time.&lt;/p>
&lt;p>As with the Android editor, this version provides the ability to export 2D &amp;amp; 3D project binaries for all supported platforms.&lt;/p>
&lt;h3 id="leveraging-horizon-os-platform-capabilities">Leveraging Horizon OS platform capabilities&lt;/h3>
&lt;h4 id="support-for-keyboard-and-mouse">Support for keyboard and mouse&lt;/h4>
&lt;p>&lt;a href="https://www.meta.com/help/quest/articles/headsets-and-accessories/meta-quest-accessories/tracked-keyboards-meta-quest/">External keyboard and mouse support&lt;/a> allows developers to achieve the same levels of productivity as they do on desktop and laptop computers.&lt;/p>
&lt;p>Virtual keyboard, touch controllers and &lt;a href="https://www.meta.com/help/quest/articles/getting-started/getting-started-with-quest-3/direct-touch-meta-quest/">direct touch&lt;/a> are also supported for quick interactions, or when physical keyboard and mouse devices are not readily available.&lt;/p>
&lt;h4 id="seamless-multitasking">Seamless multitasking&lt;/h4>
&lt;video autoplay="" loop="" muted="" playsinline="" title="Using Meta Quest seamless multitasking to modify XR game in real-time">
&lt;source src="/storage/blog/godot-editor-horizon-store-early-access-release/xr_game_live_modifications.mp4?1" type="video/mp4" />
&lt;/video>
&lt;p>&lt;a href="https://www.uploadvr.com/seamless-multitasking-experimental-quest/">Introduced in Horizon OS v69&lt;/a>, seamless multitasking enables the Editor panel to be visible and interactable while playtesting a XR project in virtual space.&lt;/p>
&lt;p>This gives developers the ability to do live editing, debugging or profiling of XR projects in real-time, with the benefit of the depth cues and sense of scale unique to XR.&lt;/p>
&lt;h4 id="panel-resizing--theater-view-support">Panel Resizing &amp;amp; Theater View support&lt;/h4>
&lt;p>The Editor panel can be resized at will via drag and drop to fit the developer’s needs.&lt;/p>
&lt;video autoplay="" loop="" muted="" playsinline="" title="Resizing the Editor panel">
&lt;source src="/storage/blog/godot-editor-horizon-store-early-access-release/resizing_editor_panel.mp4?1" type="video/mp4" />
&lt;/video>
&lt;p>Using the &lt;a href="https://www.meta.com/blog/quest/meta-quest-v67-update-new-window-layout-creator-content-horizon-feed/">Theater View button&lt;/a>, developers can maximize the Editor panel and bring it front-and-center.&lt;/p>
&lt;video autoplay="" loop="" muted="" playsinline="" title="Maximizing the Editor panel into the Theater View">
&lt;source src="/storage/blog/godot-editor-horizon-store-early-access-release/maximize_editor_in_theater_view.mp4?1" type="video/mp4" />
&lt;/video>
&lt;h2 id="an-important-step-for-the-xr--game-communities">An important step for the XR &amp;amp; Game communities&lt;/h2>
&lt;p>Besides the technical achievements required to make this port feasible, we believe this is a significant milestone as it impacts the XR &amp;amp; Game community in a few but critical ways:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Turns the Meta Quest into a true Spatial Computer&lt;/strong>
&lt;ul>
&lt;li>The Meta Quest gains the ability to create (and distribute) its own native apps without the need for a PC or laptop computer!&lt;/li>
&lt;li>Being able to run a full game engine on a mobile XR device should serve as inspiration for the type of apps that can be brought to the mobile XR ecosystem.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Grows the OpenXR ecosystem by providing a seed for building feature rich apps&lt;/strong>
&lt;ul>
&lt;li>Godot Engine is a free and open-source software (&lt;a href="https://en.m.wikipedia.org/wiki/Free_and_open-source_software">FOSS&lt;/a>) project which means that, in partnership with the &lt;a href="https://godot.foundation/">Godot Foundation&lt;/a>, OpenXR vendors can bring similar capabilities to their devices to grow the OpenXR ecosystem.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Reduces XR development friction&lt;/strong>
&lt;ul>
&lt;li>XR development on PC and laptop devices has significant friction due to the need to switch back and forth between the development device and the target XR device (i.e. taking the headset off for development, putting back on for playtesting).&lt;/li>
&lt;li>This is not an issue when using the Godot Editor natively on XR devices since the development and target device are now the same device!&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Lowers the barrier of entry for XR and Game development&lt;/strong>
&lt;ul>
&lt;li>This version of the Godot Editor turns devices like the Meta Quest into an easily accessible development device with the ability to natively create, develop and export 2D, 3D or XR apps and games for all Godot-supported platforms.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Provides a more flexible development experience&lt;/strong>
&lt;ul>
&lt;li>Developers can leverage the virtual space to gain more screen estate than a laptop could provide.&lt;/li>
&lt;li>The &lt;a href="https://www.meta.com/blog/quest/meta-quest-v67-update-new-window-layout-creator-content-horizon-feed/">virtual floating panels&lt;/a> provide a more flexible layout than a traditional desktop + multi-monitors setup.&lt;/li>
&lt;li>The ability to playtest and modify XR projects in-headset in real-time is a capability that can’t be replicated on PC and laptop computers.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="next-steps-feedback--contributions">Next Steps, Feedback &amp;amp; Contributions&lt;/h2>
&lt;p>This is only the beginning!&lt;/p>
&lt;p>As mentioned in the previous section, we believe this is an important milestone for the XR, GameDev, and Open Source communities and we aim to build on this foundation to make Godot Engine a powerful, flexible and cross-platform tool for XR and Game development.&lt;/p>
&lt;p>To that end, we welcome feedback and contributions from partners, members of the community and interested parties.&lt;/p></content><author><name>Fredia Huya-Kouadio</name></author><category term="Pre-release"/></entry><entry><title>Dev snapshot: Godot 4.4 dev 2</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-4-dev-2/"/><updated>2024-09-10T16:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-2/</id><summary>The PR harvest keeps going strongly for Godot 4.4, with massive new features such as typed dictionaries and error-less project import!</summary><content type="html">&lt;p>It’s barely been a month since the &lt;a href="/releases/4.3/">4.3 release&lt;/a>, but we had so many goodies queued up in the PR backlog that it’s been an early Christmas (or other gift-heavy holiday season) for contributors and testers.&lt;/p>
&lt;p>We merged more than 200 PRs for the &lt;a href="/article/dev-snapshot-godot-4-4-dev-1/">first dev snapshot&lt;/a>, and just two weeks later, here we are with another batch of 350+ improvements for you to test and provide feedback on!&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>&lt;a href="#downloads">Jump to the &lt;strong>Downloads&lt;/strong> section&lt;/a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also &lt;a href="https://editor.godotengine.org/releases/4.4.dev2/">try the &lt;strong>Web editor&lt;/strong>&lt;/a> or the &lt;strong>Android editor&lt;/strong> for this release. If you are interested in the latter, please request to join &lt;a href="https://groups.google.com/g/godot-testers">our testing group&lt;/a> to get access to pre-release builds.&lt;/p>
&lt;hr />
&lt;p>&lt;em>The cover illustration is from&lt;/em> &lt;a href="https://store.steampowered.com/app/2440380/Megaloot/">&lt;strong>Megaloot&lt;/strong>&lt;/a>, &lt;em>an addictive inventory management roguelike, developed in Godot 4.3 by &lt;a href="https://axilirate.itch.io/">axilirate&lt;/a> and published by &lt;a href="https://x.com/Ravenage_games">Ravenage Games&lt;/a>. It was recently released &lt;a href="https://store.steampowered.com/app/2440380/Megaloot/">on Steam&lt;/a> with big success. You can follow the development on &lt;a href="https://x.com/playmegaloot">Twitter&lt;/a>.&lt;/em>&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>In case you missed it, check the &lt;a href="/article/dev-snapshot-godot-4-4-dev-1/">4.4 dev 1&lt;/a> release notes for an overview of some key features which were already in that snapshot, and are therefore still available for testing in dev 2.&lt;/p>
&lt;p>This new snapshot adds a lot more features which had been queued during the stabilization phase for Godot 4.3, and were thus ready for merging early on in the 4.4 development cycle.&lt;/p>
&lt;p>Introducing…&lt;/p>
&lt;h3 id="typed-dictionaries">Typed dictionaries!&lt;/h3>
&lt;p>Godot 4.0 introduced supported for typed arrays, but lacked support for typed dictionaries. This rapidly became one of the most requested features to add to the engine, and thanks to &lt;a href="https://github.com/Repiteo">Thaddeus Crews&lt;/a>, it is now implemented for Godot 4.4! This feature impacts the core engine, GDScript, and all other scripting languages when interfacing with Godot’s Dictionary type. You can now export typed dictionaries from scripts and benefit from a much improved Inspector UX to assign the right keys and values.&lt;/p>
&lt;div class="language-gdscript highlighter-rouge">&lt;div class="highlight">&lt;pre class="highlight">&lt;code>&lt;span class="err">@&lt;/span>&lt;span class="k">export&lt;/span> &lt;span class="k">var&lt;/span> &lt;span class="n">typed_key_value&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">Dictionary&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">String&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">"first value"&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">"second value"&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">"etc"&lt;/span> &lt;span class="p">}&lt;/span>
&lt;span class="err">@&lt;/span>&lt;span class="k">export&lt;/span> &lt;span class="k">var&lt;/span> &lt;span class="n">typed_key&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">Dictionary&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">Variant&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">"any value"&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">3.14&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">null&lt;/span> &lt;span class="p">}&lt;/span>
&lt;span class="err">@&lt;/span>&lt;span class="k">export&lt;/span> &lt;span class="k">var&lt;/span> &lt;span class="n">typed_value&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">Dictionary&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">Variant&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="s2">"any value"&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">123&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">456&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">null&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;p>&lt;img src="/storage/blog/dev-snapshot-godot-4-4-dev-2/typed_dictionaries_inspector.webp" alt="Examples of typed dictionaries in the Inspector" />&lt;/p>
&lt;p>As a related improvement, support for StringName dictionary keys has also been optimized by &lt;a href="https://github.com/rune-scape">Rune&lt;/a> (&lt;a href="https://github.com/godotengine/godot/pull/70096">GH-70096&lt;/a>).&lt;/p>
&lt;h3 id="error-less-first-project-import">Error-less first project import&lt;/h3>
&lt;p>It is commonplace for Godot users using version control systems to exclude the &lt;code class="language-plaintext highlighter-rouge">.godot&lt;/code> folder from their repositories, as it contains files which can be re-created by Godot the first time you edit the project.&lt;/p>
&lt;p>One drawback of this system is that this first launch of the editor without &lt;code class="language-plaintext highlighter-rouge">.godot&lt;/code> folder is typically quite noisy, with hundreds of errors spammed about missing resources, and various scripts failing to compile due to &lt;code class="language-plaintext highlighter-rouge">class_name&lt;/code>s not being known yet, addons not being registered yet, or yet unknown GDExtension classes.&lt;/p>
&lt;p>&lt;a href="https://github.com/Hilderin">Hilderin&lt;/a> valiantly fought their way through this labyrinth of dependencies and multi-threading pitfalls, and brought us back the long awaited grail: error-less first import of projects, which should work without requiring an editor restart! This took a lot of effort with &lt;a href="https://github.com/godotengine/godot/pull/92303">GH-92303&lt;/a> (for GDScript &lt;code class="language-plaintext highlighter-rouge">class_name&lt;/code>s, included in 4.3) and now &lt;a href="https://github.com/godotengine/godot/pull/93972">GH-93972&lt;/a> (for GDExtensions) and &lt;a href="https://github.com/godotengine/godot/pull/92667">GH-92667&lt;/a> (for plugins).&lt;/p>
&lt;p>Moreover, with this newfound knowledge over the depths of &lt;code class="language-plaintext highlighter-rouge">EditorFileSystem&lt;/code>, Hilderin also further improved that first project import experience to make the FileSystem dock more responsive while resources are being scanned (&lt;a href="https://github.com/godotengine/godot/pull/93064">GH-93064&lt;/a>).&lt;/p>
&lt;h3 id="editor-window-state-is-now-persistent">Editor window state is now persistent&lt;/h3>
&lt;p>Another long-awaited quality of life improvement was implemented by &lt;a href="https://github.com/spanzeri">Samuele Panzeri&lt;/a> in &lt;a href="https://github.com/godotengine/godot/pull/76085">GH-76085&lt;/a>, adding support for keeping track of the editor window’s state (fullscreen/windowed mode, screen, size, position) to restore it across sessions. This should be particularly welcome for users with big monitors or multi-monitor setups who want a different default behavior than fullscreen on the first screen.&lt;/p>
&lt;h3 id="visual-shader-goodies">Visual shader goodies&lt;/h3>
&lt;p>A few popular quality of life improvements have been implemented by &lt;a href="https://github.com/Chaosus">Yuri Rubinsky&lt;/a> for the visual shader editor:&lt;/p>
&lt;p>New material preview side dock (&lt;a href="https://github.com/godotengine/godot/pull/94215">GH-94215&lt;/a>):&lt;/p>
&lt;p>&lt;img src="/storage/blog/dev-snapshot-godot-4-4-dev-2/visual_shader_material_preview.gif" alt="Material preview in the visual shader editor" />&lt;/p>
&lt;p>Drag &amp;amp; drop of Mesh to create MeshEmitter in visual shaders (&lt;a href="https://github.com/godotengine/godot/pull/93017">GH-93017&lt;/a>):&lt;/p>
&lt;p>&lt;img src="/storage/blog/dev-snapshot-godot-4-4-dev-2/visual_shader_mesh_dnd.gif" alt="Creating a MeshEmitter in visual shaders with drag and drop" />&lt;/p>
&lt;h3 id="initial-android-editor-support-for-xr-devices">Initial Android editor support for XR devices&lt;/h3>
&lt;p>Thanks to Godot’s unique feature of having an editor made with the engine itself, we’ve been able to bring the Godot editor to unconventional places, such as &lt;a href="https://editor.godotengine.org/">the web&lt;/a> and &lt;a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4">Android devices&lt;/a>. Building upon the latter, &lt;a href="https://github.com/m4gr3d">Fredia Huya-Kouadio&lt;/a> completed the proof of concept started by &lt;a href="https://github.com/BastiaanOlij">Bastiaan Olij&lt;/a> years ago, to add support for using the Android editor in an XR context using OpenXR (&lt;a href="https://github.com/godotengine/godot/pull/96624">GH-96624&lt;/a>)! You can &lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev2/Godot_v4.4-dev2_android_editor_horizonos.apk">test the current version&lt;/a> by sideloading the APK, currently supported on Meta Quest 3 or Quest Pro.&lt;/p>
&lt;h3 id="and-more">And more!&lt;/h3>
&lt;p>There are too many exciting changes to list them all here, but here’s a curated selection:&lt;/p>
&lt;ul>
&lt;li>2D: Implement multiple occlusion polygons within each TileSet occlusion layer (&lt;a href="https://github.com/godotengine/godot/pull/93029">GH-93029&lt;/a>).&lt;/li>
&lt;li>2D: Enable &lt;code class="language-plaintext highlighter-rouge">SpriteFramesEditor&lt;/code> to “guess” the amount of rows and columns of a sprite sheet when loading it for the first time (&lt;a href="https://github.com/godotengine/godot/pull/95475">GH-95475&lt;/a>).&lt;/li>
&lt;li>3D: Add option to bake a mesh from animated skeleton pose (&lt;a href="https://github.com/godotengine/godot/pull/85018">GH-85018&lt;/a>).&lt;/li>
&lt;li>3D: Add full customization of 3D navigation controls (&lt;a href="https://github.com/godotengine/godot/pull/85331">GH-85331&lt;/a>).&lt;/li>
&lt;li>3D: Fix &lt;code class="language-plaintext highlighter-rouge">CSGShape3D&lt;/code> debug collision shapes being visible in editor (&lt;a href="https://github.com/godotengine/godot/pull/86699">GH-86699&lt;/a>).&lt;/li>
&lt;li>3D: Add ability to hide editor transform gizmo (&lt;a href="https://github.com/godotengine/godot/pull/87793">GH-87793&lt;/a>).&lt;/li>
&lt;li>Animation: Update AnimationPlayer in real-time when keyframe properties change (&lt;a href="https://github.com/godotengine/godot/pull/91599">GH-91599&lt;/a>).&lt;/li>
&lt;li>Animation: Optimize AnimationMixer blend process (&lt;a href="https://github.com/godotengine/godot/pull/92838">GH-92838&lt;/a>).&lt;/li>
&lt;li>Animation: Allow keying properties when selecting multiple nodes (&lt;a href="https://github.com/godotengine/godot/pull/92842">GH-92842&lt;/a>).&lt;/li>
&lt;li>Animation: Allow jumping to previous/next keyframe in animation player (&lt;a href="https://github.com/godotengine/godot/pull/96013">GH-96013&lt;/a>).&lt;/li>
&lt;li>Animation: Use antialiased line drawing in animation Bezier editor (&lt;a href="https://github.com/godotengine/godot/pull/96559">GH-96559&lt;/a>).&lt;/li>
&lt;li>Audio: ResourceImporterWAV: Enable QOA compression by default (&lt;a href="https://github.com/godotengine/godot/pull/95815">GH-95815&lt;/a>).&lt;/li>
&lt;li>Audio: Fix leak when using audio samples instead of streams (&lt;a href="https://github.com/godotengine/godot/pull/96572">GH-96572&lt;/a>).&lt;/li>
&lt;li>Buildsystem: Add support for compiling with VS clang-cl toolset (&lt;a href="https://github.com/godotengine/godot/pull/92316">GH-92316&lt;/a>).&lt;/li>
&lt;li>Core: Ability to convert native engine types to JSON and back (&lt;a href="https://github.com/godotengine/godot/pull/92656">GH-92656&lt;/a>).&lt;/li>
&lt;li>Core: Batch of fixes for &lt;code class="language-plaintext highlighter-rouge">WorkerThreadPool&lt;/code> and &lt;code class="language-plaintext highlighter-rouge">ResourceLoader&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/94169">GH-94169&lt;/a>).&lt;/li>
&lt;li>Core: WorkerThreadPool: Fix end-of-yield logic potentially leading to deadlocks (&lt;a href="https://github.com/godotengine/godot/pull/96225">GH-96225&lt;/a>).&lt;/li>
&lt;li>Core: ResourceLoader: Add thread-aware resource changed mechanism (&lt;a href="https://github.com/godotengine/godot/pull/96593">GH-96593&lt;/a>).&lt;/li>
&lt;li>Editor: Remember editor window mode, screen, size and position on restart (&lt;a href="https://github.com/godotengine/godot/pull/76085">GH-76085&lt;/a>).&lt;/li>
&lt;li>Editor: Fix script overwriting with external editor (&lt;a href="https://github.com/godotengine/godot/pull/96007">GH-96007&lt;/a>).&lt;/li>
&lt;li>Editor: Disable export template downloading in offline mode (&lt;a href="https://github.com/godotengine/godot/pull/96331">GH-96331&lt;/a>).&lt;/li>
&lt;li>Editor: FileSystem: Add option to show some unsupported files in the dock (&lt;a href="https://github.com/godotengine/godot/pull/96603">GH-96603&lt;/a>).&lt;/li>
&lt;li>Export: Allow adding custom export platforms using scripts / GDExtension (&lt;a href="https://github.com/godotengine/godot/pull/90782">GH-90782&lt;/a>).&lt;/li>
&lt;li>Export: Android Editor: Add support for exporting platform binaries (&lt;a href="https://github.com/godotengine/godot/pull/93526">GH-93526&lt;/a>).&lt;/li>
&lt;li>Export: macOS: Use per-architecture min. OS version for export (&lt;a href="https://github.com/godotengine/godot/pull/95885">GH-95885&lt;/a>).&lt;/li>
&lt;li>Export: Reenable macOS .app export from Windows, add warnings about Unix permissions (&lt;a href="https://github.com/godotengine/godot/pull/96669">GH-96669&lt;/a>).&lt;/li>
&lt;li>GDExtension: Allow ClassDB to create a Object without postinitialization for GDExtension (&lt;a href="https://github.com/godotengine/godot/pull/91018">GH-91018&lt;/a>).&lt;/li>
&lt;li>GDExtension: Implement &lt;code class="language-plaintext highlighter-rouge">GDExtensionLoader&lt;/code> concept (&lt;a href="https://github.com/godotengine/godot/pull/91166">GH-91166&lt;/a>).&lt;/li>
&lt;li>GDExtension: Fix editor needs restart after adding GDExtensions (&lt;a href="https://github.com/godotengine/godot/pull/93972">GH-93972&lt;/a>).&lt;/li>
&lt;li>GDScript: StringName Dictionary keys (&lt;a href="https://github.com/godotengine/godot/pull/70096">GH-70096&lt;/a>).&lt;/li>
&lt;li>GDScript: Implement typed dictionaries (&lt;a href="https://github.com/godotengine/godot/pull/78656">GH-78656&lt;/a>).&lt;/li>
&lt;li>GDScript: Autocompletion: Improve autocompletion for indices (&lt;a href="https://github.com/godotengine/godot/pull/79378">GH-79378&lt;/a>).&lt;/li>
&lt;li>GDScript: Allow live reloading of built-in scripts (&lt;a href="https://github.com/godotengine/godot/pull/94012">GH-94012&lt;/a>).&lt;/li>
&lt;li>GDScript: Autocompletion: Reintroduce enum options on assignment (&lt;a href="https://github.com/godotengine/godot/pull/96326">GH-96326&lt;/a>).&lt;/li>
&lt;li>GUI: Implement fit content width in TextEdit (&lt;a href="https://github.com/godotengine/godot/pull/83070">GH-83070&lt;/a>).&lt;/li>
&lt;li>GUI: Improve SpinBox interaction, split arrows, add theme attributes (&lt;a href="https://github.com/godotengine/godot/pull/89265">GH-89265&lt;/a>).&lt;/li>
&lt;li>GUI: TextServer: 2x performance improvement by removing redundant lookups (&lt;a href="https://github.com/godotengine/godot/pull/92575">GH-92575&lt;/a>, &lt;a href="https://github.com/godotengine/godot/pull/92581">GH-92581&lt;/a>).&lt;/li>
&lt;li>GUI: CodeEdit: Improve render time by 2x (&lt;a href="https://github.com/godotengine/godot/pull/92865">GH-92865&lt;/a>).&lt;/li>
&lt;li>GUI: Improve &lt;code class="language-plaintext highlighter-rouge">Tree&lt;/code> performance (&lt;a href="https://github.com/godotengine/godot/pull/94748">GH-94748&lt;/a>).&lt;/li>
&lt;li>GUI: Fix &lt;code class="language-plaintext highlighter-rouge">StyleBoxFlat&lt;/code> rectangles skewing independently (&lt;a href="https://github.com/godotengine/godot/pull/96285">GH-96285&lt;/a>).&lt;/li>
&lt;li>Import: Import/export GLTF extras to &lt;code class="language-plaintext highlighter-rouge">node-&amp;gt;meta&lt;/code> and back (&lt;a href="https://github.com/godotengine/godot/pull/86183">GH-86183&lt;/a>).&lt;/li>
&lt;li>Import: Fix FileSystem dock won’t show any file folders while loading large projects (&lt;a href="https://github.com/godotengine/godot/pull/93064">GH-93064&lt;/a>).&lt;/li>
&lt;li>Import: Fix slow import when window is unfocused (&lt;a href="https://github.com/godotengine/godot/pull/93953">GH-93953&lt;/a>).&lt;/li>
&lt;li>Import: Add 3D Skeleton Preview to Advanced Importer (&lt;a href="https://github.com/godotengine/godot/pull/96094">GH-96094&lt;/a>).&lt;/li>
&lt;li>Import: Add “Use Node Type Suffixes” 3D scene import option (&lt;a href="https://github.com/godotengine/godot/pull/96745">GH-96745&lt;/a>).&lt;/li>
&lt;li>Navigation: Improve pathfinding performance by using a heap to store traversable polygons (&lt;a href="https://github.com/godotengine/godot/pull/85965">GH-85965&lt;/a>).&lt;/li>
&lt;li>Navigation: Improve &lt;code class="language-plaintext highlighter-rouge">AStarGrid2D&lt;/code> performance when jumping is enabled (&lt;a href="https://github.com/godotengine/godot/pull/93319">GH-93319&lt;/a>).&lt;/li>
&lt;li>Network: mbedTLS: Fix incorrect cert pinning with &lt;code class="language-plaintext highlighter-rouge">client_unsafe&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/96172">GH-96172&lt;/a>).&lt;/li>
&lt;li>Network: Fix division by zero in network profiler (&lt;a href="https://github.com/godotengine/godot/pull/96464">GH-96464&lt;/a>).&lt;/li>
&lt;li>Particles: Add cone angle control to particle emission ring shape (&lt;a href="https://github.com/godotengine/godot/pull/91973">GH-91973&lt;/a>).&lt;/li>
&lt;li>Plugin: Fix addon requires editor restart to become functional (&lt;a href="https://github.com/godotengine/godot/pull/92667">GH-92667&lt;/a>).&lt;/li>
&lt;li>Porting: Windows: Respect integrated GPU preference in Windows Settings (&lt;a href="https://github.com/godotengine/godot/pull/93985">GH-93985&lt;/a>).&lt;/li>
&lt;li>Plugin: Add support for custom items to editor right-click context menus (&lt;a href="https://github.com/godotengine/godot/pull/94582">GH-94582&lt;/a>).&lt;/li>
&lt;li>Porting: Windows: Always use absolute UNC paths and long path aware APIs, add “long path aware” flag to the application manifest (&lt;a href="https://github.com/godotengine/godot/pull/91902">GH-91902&lt;/a>).&lt;/li>
&lt;li>Porting: Add support for non-blocking IO mode to &lt;code class="language-plaintext highlighter-rouge">OS.execute_with_pipe&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/94434">GH-94434&lt;/a>).&lt;/li>
&lt;li>Porting: Android Editor: Add support for launching the Play window in PiP mode (&lt;a href="https://github.com/godotengine/godot/pull/95700">GH-95700&lt;/a>).&lt;/li>
&lt;li>Porting: Android: Fix &lt;code class="language-plaintext highlighter-rouge">JavaClassWrapper&lt;/code> so it actually works (&lt;a href="https://github.com/godotengine/godot/pull/96182">GH-96182&lt;/a>).&lt;/li>
&lt;li>Rendering: Tune TAA disocclusion scale to avoid rejecting all samples during motion (&lt;a href="https://github.com/godotengine/godot/pull/86809">GH-86809&lt;/a>).&lt;/li>
&lt;li>Rendering: Various fixes for transmittance effect (&lt;a href="https://github.com/godotengine/godot/pull/93448">GH-93448&lt;/a>).&lt;/li>
&lt;li>Rendering: Avoid indexing instances without a base in scene cull phase (&lt;a href="https://github.com/godotengine/godot/pull/95503">GH-95503&lt;/a>).&lt;/li>
&lt;li>Rendering: LightmapGI: Pack L1 SH coefficients for directional lightmaps (&lt;a href="https://github.com/godotengine/godot/pull/96114">GH-96114&lt;/a>).&lt;/li>
&lt;li>Rendering: Metal: Enable for betsy and lightmapper modules in compatibility mode (&lt;a href="https://github.com/godotengine/godot/pull/96351">GH-96351&lt;/a>).&lt;/li>
&lt;li>Rendering: Fix GPUParticles are not rendered for older AMD GPUs with OpenGL+Angle (&lt;a href="https://github.com/godotengine/godot/pull/96413">GH-96413&lt;/a>).&lt;/li>
&lt;li>Rendering: Compatibility: Enable MSAA support for all non-web platforms (&lt;a href="https://github.com/godotengine/godot/pull/96455">GH-96455&lt;/a>).&lt;/li>
&lt;li>Shaders: Allow drag &amp;amp; drop Mesh to create MeshEmitter in visual shaders (&lt;a href="https://github.com/godotengine/godot/pull/93017">GH-93017&lt;/a>).&lt;/li>
&lt;li>Shaders: Add basic support to evaluate operator value in shader language (&lt;a href="https://github.com/godotengine/godot/pull/93822">GH-93822&lt;/a>).&lt;/li>
&lt;li>Shaders: Add a material preview to visual shader editor (&lt;a href="https://github.com/godotengine/godot/pull/94215">GH-94215&lt;/a>).&lt;/li>
&lt;li>Shaders: Add a context menu for the shader editor file list (&lt;a href="https://github.com/godotengine/godot/pull/95738">GH-95738&lt;/a>).&lt;/li>
&lt;li>Thirdparty: mbedTLS: Update to 3.6.1, fixing regressions (&lt;a href="https://github.com/godotengine/godot/pull/96385">GH-96385&lt;/a>).&lt;/li>
&lt;li>Thirdparty: thorvg: Update to 0.14.9, fixing regressions (&lt;a href="https://github.com/godotengine/godot/pull/96658">GH-96658&lt;/a>).&lt;/li>
&lt;li>XR: Android editor: Improve support for XR projects (&lt;a href="https://github.com/godotengine/godot/pull/96624">GH-96624&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h2 id="changelog">Changelog&lt;/h2>
&lt;p>&lt;strong>139 contributors&lt;/strong> submitted &lt;strong>376 improvements&lt;/strong> for this new snapshot. See our &lt;a href="https://godotengine.github.io/godot-interactive-changelog/#4.4-dev2">&lt;strong>interactive changelog&lt;/strong>&lt;/a> for the complete list of changes since the previous 4.4-dev1 snapshot.&lt;/p>
&lt;p>This release is built from commit &lt;a href="https://github.com/godotengine/godot/commit/97ef3c837263099faf02d8ebafd6c77c94d2aaba">&lt;code class="language-plaintext highlighter-rouge">97ef3c837&lt;/code>&lt;/a>.&lt;/p>
&lt;h2 id="downloads">Downloads&lt;/h2>
&lt;div class="card card-download">
&lt;a class="card-download-link" href="/download/archive/4.4-dev2">
Download Godot 4.4 dev2
&lt;/a>
&lt;div class="card-download-details">
&lt;img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-4-dev-2.webp" />
&lt;div class="card-download-platforms">
&lt;div class="download-platform platform-linux">
&lt;img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" />
Linux
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev2/Godot_v4.4-dev2_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev2/Godot_v4.4-dev2_mono_linux_x86_64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-macos">
&lt;img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" />
macOS
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev2/Godot_v4.4-dev2_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev2/Godot_v4.4-dev2_mono_macos.universal.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-windows">
&lt;img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" />
Windows
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev2/Godot_v4.4-dev2_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev2/Godot_v4.4-dev2_mono_win64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;div class="card-download-sublinks">
&lt;a class="card-download-other" href="/download/archive/4.4-dev2">
Export templates and other downloads
&lt;/a>
&lt;a class="card-download-donate" href="/donate/">
Make a Donation
&lt;/a>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Standard build&lt;/strong> includes support for GDScript and GDExtension.&lt;/p>
&lt;p>&lt;strong>.NET build&lt;/strong> (marked as &lt;code class="language-plaintext highlighter-rouge">mono&lt;/code>) includes support for C#, as well as GDScript and GDExtension.&lt;/p>
&lt;ul>
&lt;li>See also &lt;a href="https://docs.godotengine.org/en/latest/tutorials/scripting/c_sharp/index.html#c-platform-support">C# platform support&lt;/a>.&lt;/li>
&lt;/ul>
&lt;div class="card card-warning">
&lt;p>
While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition &lt;strong>a pre-release piece of software&lt;/strong>. 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.
&lt;/p>
&lt;/div>
&lt;h2 id="known-issues">Known issues&lt;/h2>
&lt;ul>
&lt;li>Typed dictionaries: Different typed keys/values are wrongly allowed when using the &lt;code class="language-plaintext highlighter-rouge">[]&lt;/code> operator (&lt;a href="https://github.com/godotengine/godot/issues/96772">GH-96772&lt;/a>). A fix is already in the pipeline for the next dev snapshot.&lt;/li>
&lt;li>Windows: Detecting newly added assets (&lt;a href="https://github.com/godotengine/godot/issues/96828">GH-96828&lt;/a>), export variables (&lt;a href="https://github.com/godotengine/godot/issues/96810">GH-96810&lt;/a>), and the last modification dates for projects (&lt;a href="https://github.com/godotengine/godot/issues/96812">GH-96812&lt;/a>) is not working in this snapshot, due to a toolchain bug exposed by a recent FileAccess change on Windows. This was already fixed by &lt;a href="https://github.com/godotengine/godot/pull/74830">GH-74830&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>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 &lt;a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug+">known bugs&lt;/a>.&lt;/p>
&lt;h2 id="bug-reports">Bug reports&lt;/h2>
&lt;p>As a tester, we encourage you to &lt;a href="https://github.com/godotengine/godot/issues">open bug reports&lt;/a> if you experience issues with this release. Please check the &lt;a href="https://github.com/godotengine/godot/issues">existing issues on GitHub&lt;/a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.&lt;/p>
&lt;p>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).&lt;/p>
&lt;h2 id="support">Support&lt;/h2>
&lt;p>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 &lt;a href="https://fund.godotengine.org/">generous donations from the Godot community&lt;/a>. A big thank you to everyone who has contributed &lt;a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time&lt;/a> or &lt;a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support&lt;/a> to the project!&lt;/p>
&lt;p>If you’d like to support the project financially and help us secure our future hires, you can do so using the &lt;a href="https://fund.godotengine.org/">Godot Development Fund&lt;/a> platform managed by &lt;a href="https://godot.foundation/">Godot Foundation&lt;/a>. There are also several &lt;a href="/donate">alternative ways to donate&lt;/a> which you may find more suitable.&lt;/p></content><author><name>Rémi Verschelde</name></author><category term="Pre-release"/></entry><entry><title>Godot 3.6 finally released!</title><link href="https://godotengine.org/article/godot-3-6-finally-released/"/><updated>2024-09-09T11:00:00+00:00</updated><id>https://godotengine.org/article/godot-3-6-finally-released/</id><summary>After 2 years of development, Godot 3.6 is finally out and it comes fully packed with features and quality of life improvements! This includes 2D physics interpolation and hierarchical culling, and 3D mesh merging, level of detail, tighter shadow culling, ORM materials, and more.</summary><content type="html">&lt;p>After 2 years of development, Godot 3.6 is finally out and it comes fully packed with features and quality of life improvements! This includes 2D physics interpolation and hierarchical culling, and 3D mesh merging, level of detail, tighter shadow culling, ORM materials, and more.&lt;/p>
&lt;p>While most of the development focus today is on 4.x releases, enthusiasts have been busy improving the 3.x branch: fixing bugs, optimizing and increasing reliability, providing quality of life improvements, and adding new features.&lt;/p>
&lt;p>As well as providing support for existing 3.x games, Godot 3 has developed into a mature and stable codebase, which is well suited to development for low-end hardware. The development emphasis is on backward compatibility. Any new features are optional and we strive to not break or alter existing functionality.&lt;/p>
&lt;p>&lt;strong>Godot 3.6 is compatible with Godot 3.5.x projects and is a recommended upgrade for all 3.5.x users.&lt;/strong>&lt;/p>
&lt;p>Please read on to learn about the most exciting additions in Godot 3.6, or click the links below to download the engine and jump straight into action!&lt;/p>
&lt;div class="card card-download">
&lt;a class="card-download-link" href="/download/archive/3.6-stable">
Download Godot 3.6 stable
&lt;/a>
&lt;div class="card-download-details">
&lt;img class="lightbox-ignore" src="/storage/blog/covers/godot-3-6-finally-released.webp" />
&lt;div class="card-download-platforms">
&lt;div class="download-platform platform-linux">
&lt;img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" />
Linux
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/3.6-stable/Godot_v3.6-stable_x11.64.zip" class="btn btn-download btn-download-primary platform-linux">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/3.6-stable/Godot_v3.6-stable_mono_x11_64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-macos">
&lt;img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" />
macOS
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/3.6-stable/Godot_v3.6-stable_osx.universal.zip" class="btn btn-download btn-download-primary platform-macos">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/3.6-stable/Godot_v3.6-stable_mono_osx.universal.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-windows">
&lt;img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" />
Windows
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/3.6-stable/Godot_v3.6-stable_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/3.6-stable/Godot_v3.6-stable_mono_win64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;div class="card-download-sublinks">
&lt;a class="card-download-other" href="/download/archive/3.6-stable">
Export templates and other downloads
&lt;/a>
&lt;a class="card-download-donate" href="/donate/">
Make a Donation
&lt;/a>
&lt;/div>
&lt;/div>
&lt;hr />
&lt;p>&lt;em>Personal note from &lt;a href="https://github.com/akien-mga">Rémi Verschelde&lt;/a> (Project Maintainer): I started the work on 3.6 back when 4.0 was still in development, but it proved quite difficult to maintain so many branches in parallel. &lt;a href="https://github.com/lawnjelly/">lawnjelly&lt;/a> thankfully volunteered to take over the release management work for 3.6 and brought it to the finish line. Kudos to him, and &lt;a href="https://github.com/timothyqiu">timothyqiu&lt;/a> who also did countless cherry-picks from 4.x to 3.6.&lt;/em>&lt;/p>
&lt;p>&lt;em>In fact, most big new features in this release were developed by lawnjelly himself, but he’s too humble to give himself a shoutout – so I do it for him with this note sneakily introduced in his blog post ;)&lt;/em>&lt;/p>
&lt;hr />
&lt;h2 id="giving-back">Giving back&lt;/h2>
&lt;p>As a community project, Godot is maintained by the efforts of volunteers. Thanks to &lt;a href="https://fund.godotengine.org/">user and company donations&lt;/a> we are able to hire and sponsor a number of core contributors to work full-time and dedicate their undivided attention to the needs of the project.&lt;/p>
&lt;p>Please consider supporting the project financially with a &lt;a href="https://fund.godotengine.org/">recurring monthly donation&lt;/a>, if you are able. Godot continues to grow with each passing month, and we are committed to bringing you reliable and feature-rich releases as often as we can, to facilitate creative work of game developers of all levels. Recurring donations make sure the project is sustainable and its development can be planned for years ahead.&lt;/p>
&lt;p>Besides financial support, you can also give back by: writing detailed bug reports, contributing to the code base, writing documentation, writing guides (for the &lt;a href="https://docs.godotengine.org/">Godot docs&lt;/a> or on your own website), and supporting others on various &lt;a href="https://docs.godotengine.org/en/latest/community/channels.html">community platforms&lt;/a> by answering questions and providing helpful tips.&lt;/p>
&lt;p>Last but not least, making games with Godot and crediting the engine goes a long way to help make it more popular and convince more people to contribute and improve Godot for everyone. Remember, we are all in this together and Godot requires community support in every area to thrive.&lt;/p>
&lt;hr />
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>Many new features have been added in Godot 3.6, both small and large. The following is a list of a few of the larger features that we are excited about in no particular order. For a complete list of all changes you can check out our &lt;a href="https://github.com/godotengine/godot/blob/3.6-stable/CHANGELOG.md">&lt;strong>curated changelog&lt;/strong>&lt;/a>, as well as the raw changelog from Git (&lt;a href="https://downloads.tuxfamily.org/godotengine/3.6/Godot_v3.6-stable_changelog_chrono.txt">chronological&lt;/a>, or sorted &lt;a href="https://downloads.tuxfamily.org/godotengine/3.6/Godot_v3.6-stable_changelog_authors.txt">by authors&lt;/a>).&lt;/p>
&lt;h3 id="2d-physics-interpolation-gh-76252">2D physics interpolation (&lt;a href="https://github.com/godotengine/godot/pull/76252">GH-76252&lt;/a>)&lt;/h3>
&lt;p>Godot 3.5 introduced 3D physics interpolation with great success, and users have been awaiting its 2D counterpart, so here it comes! 2D physics interpolation supports most objects, including &lt;code class="language-plaintext highlighter-rouge">CPUParticles2D&lt;/code>, but note that (GPU) &lt;code class="language-plaintext highlighter-rouge">Particles2D&lt;/code> is not yet supported.&lt;/p>
&lt;p>Be sure to read the &lt;a href="https://docs.godotengine.org/en/3.6/tutorials/physics/interpolation/index.html">physics interpolation documentation&lt;/a> to get started. Note that physics interpolation is disabled by default, refer to the docs for how to enable it via project settings.&lt;/p>
&lt;h3 id="2d-hierarchical-culling-gh-68738">2D hierarchical culling (&lt;a href="https://github.com/godotengine/godot/pull/68738">GH-68738&lt;/a>)&lt;/h3>
&lt;p>2D items that are off-screen don’t need to be drawn. Previously, each item was checked individually to see whether it was off-screen (this is referred to as “culling”). With hierarchical culling, entire branches of the scene tree can be culled at once, which can significantly increase performance on large 2D maps that contain a lot of off-screen items.&lt;/p>
&lt;p>Hierarchical culling defaults to on, but can be switched back to the legacy (“Item”) mode with the project setting &lt;code class="language-plaintext highlighter-rouge">rendering/2d/options/culling_mode&lt;/code>, in case of regressions.&lt;/p>
&lt;h3 id="tighter-shadow-culling-gh-84745">Tighter shadow culling (&lt;a href="https://github.com/godotengine/godot/pull/84745">GH-84745&lt;/a>)&lt;/h3>
&lt;p>Godot shadow mapping involves taking a simplified camera shot from the point of view of each shadow casting light, when objects move within this light volume. This happens every frame when objects are moving, and this can add up to a lot of draw calls for each light.&lt;/p>
&lt;p>Tighter shadow culling reduces this workload considerably by eliminating draw calls for shadow casters that cannot cast a shadow that is visible from the main camera view. This involves some clever geometry, but the upshot is you should often see significantly better frame rates when using shadows.&lt;/p>
&lt;p>This happens automatically.&lt;/p>
&lt;h3 id="mesh-merging-gh-61568">Mesh merging (&lt;a href="https://github.com/godotengine/godot/pull/61568">GH-61568&lt;/a>)&lt;/h3>
&lt;p>&lt;img src="/storage/blog/godot-3-6-finally-released/merge_group_house.webp" alt="MergeGroup example" />&lt;/p>
&lt;p>Godot 3.6 now offers a comprehensive system for mesh merging, both at design time and at runtime. OpenGL can be severely bottlenecked by draw calls and state changes when drawing lots of objects. Now you can blast through these barriers and potentially render any number of similar objects in a single draw call.&lt;/p>
&lt;p>As well as allowing you to optimize existing maps and moving objects, this also makes new procedural game types possible, as thousands of procedurally placed objects can be merged at runtime so as to render efficiently (think vegetation, rocks, furniture, houses, etc.).&lt;/p>
&lt;p>See the &lt;a href="https://docs.godotengine.org/en/3.6/tutorials/3d/merge_groups.html">MergeGroups documentation&lt;/a> for details.&lt;/p>
&lt;h3 id="discrete-level-of-detail-lod-gh-85437">Discrete level of detail (LOD) (&lt;a href="https://github.com/godotengine/godot/pull/85437">GH-85437&lt;/a>)&lt;/h3>
&lt;p>&lt;img src="/storage/blog/godot-3-6-finally-released/lod_node_scene.webp" alt="LOD node example" />&lt;/p>
&lt;p>The new LOD node provides simple but powerful LOD capabilities, allowing the engine to automatically change visual representation of objects based on the distance from the camera. An example would be simplifying trees in the distance in open world games.&lt;/p>
&lt;p>This implementation of LOD differs dramatically from how LOD is implemented in Godot 4 as we chose to use a different implementation that better fits the architecture of Godot 3. In particular, we have removed the LOD settings from GeometryInstances and instead provide an LOD node which controls the LOD behavior of its children.&lt;/p>
&lt;p>See the &lt;a href="https://docs.godotengine.org/en/3.6/tutorials/3d/level_of_detail.html">LOD documentation&lt;/a> for details.&lt;/p>
&lt;h3 id="orm-materials-gh-76023">ORM materials (&lt;a href="https://github.com/godotengine/godot/pull/76023">GH-76023&lt;/a>)&lt;/h3>
&lt;p>&lt;a href="https://github.com/Ansraer">Ansraer&lt;/a> adds support for ORM materials, which is a standard format where occlusion, roughness, and metallic are combined into a single texture. This means these standard PBR textures can be used without modification, and rendering performance will likely be increased where they are used (compared to the old workflow).&lt;/p>
&lt;h3 id="vertex-cache-optimization-gh-86339">Vertex cache optimization (&lt;a href="https://github.com/godotengine/godot/pull/86339">GH-86339&lt;/a>)&lt;/h3>
&lt;p>In the mesh import options (e.g. obj, gltf, dae) you will find a new setting for vertex cache optimization, enabled by default. This may increase rendering performance for high poly models on low-end hardware.&lt;/p>
&lt;p>You can usually take advantage of vertex cache optimization in an already completed project, simply by deleting the hidden &lt;code class="language-plaintext highlighter-rouge">.godot&lt;/code> folder (which contains imported data), and this imported data (including optimized meshes) will be recreated next time you open the editor.&lt;/p>
&lt;h3 id="light-probes-and-directional-shadows-performance-improvements">Light probes and directional shadows performance improvements&lt;/h3>
&lt;p>Among a number of other bugfixes, a couple performance improvements have been added for BakedLightmap light probes (&lt;a href="https://github.com/godotengine/godot/pull/80764">GH-80764&lt;/a>, by &lt;a href="https://github.com/mrezai">mrezai&lt;/a>) and directional shadows (&lt;a href="https://github.com/godotengine/godot/pull/75468">GH-75468&lt;/a>, by &lt;a href="https://github.com/Ansraer">Ansraer&lt;/a>).&lt;/p>
&lt;h3 id="view-selected-mesh-stats-gh-88207">View selected mesh stats (&lt;a href="https://github.com/godotengine/godot/pull/88207">GH-88207&lt;/a>)&lt;/h3>
&lt;p>&lt;img src="/storage/blog/godot-3-6-finally-released/view_mesh_stats.webp" alt="View mesh stats example" />&lt;/p>
&lt;p>The 3D view menu now offers a new (long overdue) option, “View Selected Mesh Stats”. This will display total triangle, vertex, and index counts for the selected meshes (and multimeshes).&lt;/p>
&lt;p>This is incredibly useful information for diagnosing performance and checking imported meshes, and for use in conjunction with mesh merging and level of detail.&lt;/p>
&lt;h3 id="scenetree-docks-filter-improvements-gh-67347">SceneTree dock’s filter improvements (&lt;a href="https://github.com/godotengine/godot/pull/67347">GH-67347&lt;/a>)&lt;/h3>
&lt;p>&lt;img src="/storage/blog/godot-3-6-finally-released/scene_dock_filtering.gif" alt="SceneTree dock filtering example" />&lt;/p>
&lt;p>&lt;a href="https://github.com/Mickeon">Mickeon&lt;/a> backported a number of SceneTree dock improvements from the 4.x branch. The search/filter bar now supports multiple terms, as well as filtering by node type or group using the &lt;code class="language-plaintext highlighter-rouge">type:&lt;/code> (or &lt;code class="language-plaintext highlighter-rouge">t:&lt;/code>) and &lt;code class="language-plaintext highlighter-rouge">group:&lt;/code> (or &lt;code class="language-plaintext highlighter-rouge">g:&lt;/code>) prefixes.&lt;/p>
&lt;h3 id="text-to-speech-support-gh-61316">Text-to-Speech support (&lt;a href="https://github.com/godotengine/godot/pull/61316">GH-61316&lt;/a>)&lt;/h3>
&lt;p>&lt;img src="/storage/blog/godot-3-6-finally-released/text_to_speech.webp" alt="Text-to-Speech demo" />&lt;/p>
&lt;p>&lt;a href="https://github.com/bruvzg">bruvzg&lt;/a> backported the Text-to-Speech (TTS) implementation which they originally developed for Godot 4.0, which is supported on all Godot platforms using core system APIs (with the exception of Linux, which depends on the speech-dispatcher library being installed).&lt;/p>
&lt;p>A demo is included in &lt;a href="https://github.com/godotengine/godot/pull/61316">GH-61316&lt;/a> so that you can test the functionality on your target platforms.&lt;/p>
&lt;h3 id="in-editor-documentation-for-editor-settings-gh-48548-gh-64896">In-editor documentation for Editor Settings (&lt;a href="https://github.com/godotengine/godot/pull/48548">GH-48548&lt;/a>, &lt;a href="https://github.com/godotengine/godot/pull/64896">GH-64896&lt;/a>)&lt;/h3>
&lt;p>&lt;img src="/storage/blog/godot-3-6-finally-released/editor_settings_docs.webp" alt="Editor Settings documentation tooltips" />&lt;/p>
&lt;p>&lt;a href="https://github.com/Calinou">Calinou&lt;/a> added support for documenting Editor Settings, and wrote documentation for all the exposed ones. This notably adds useful tooltips when hovering the settings to better describe what they affect, and how what the possible values mean.&lt;/p>
&lt;h3 id="updated-toolchains-for-official-builds">Updated toolchains for official builds&lt;/h3>
&lt;p>We’ve updated the toolchains (compiler, platform SDKs, etc.) for this release to match the versions used for Godot 4.2 (&lt;a href="https://github.com/godotengine/build-containers/pull/135">build-containers#135&lt;/a>).
This notably gives us the following toolchains:&lt;/p>
&lt;ul>
&lt;li>Base image: Fedora 39&lt;/li>
&lt;li>Mono version: 6.12.0.198&lt;/li>
&lt;li>SCons: 4.5.2&lt;/li>
&lt;li>Linux: GCC 13.2.0 built against glibc 2.28, binutils 2.40, from our own Linux SDK&lt;/li>
&lt;li>Windows: MinGW 11.0.0, GCC 13.2.1, binutils 2.40&lt;/li>
&lt;li>HTML5: Emscripten 3.1.39 (standard builds), Emscripten 1.39.9 (Mono builds)&lt;/li>
&lt;li>Android: Android NDK 23.2.8568313, build-tools 33.0.2, platform android-33, CMake 3.22.1, JDK 11&lt;/li>
&lt;li>macOS: Xcode 15.0 with Apple Clang (LLVM 16.0.0), MacOSX SDK 14.0&lt;/li>
&lt;li>iOS: Xcode 15.0 with Apple Clang (LLVM 16.0.0), iPhoneOS SDK 17.0&lt;/li>
&lt;li>UWP: Visual Studio 2017 (unchanged)&lt;/li>
&lt;/ul>
&lt;p>In practice this shouldn’t change much, aside from getting some better compile and linking-time optimizations thanks to newer toolchain versions, leading to potential size or performance improvements. And some bug fixes which may or may not affect our builds.&lt;/p>
&lt;h3 id="official-linux-arm-builds">Official Linux ARM builds&lt;/h3>
&lt;p>&lt;a href="https://godotengine.org/article/godot-4-2-arrives-in-style/#linux">Just like added in Godot 4.2&lt;/a>, we now have official Linux ARM builds (&lt;code class="language-plaintext highlighter-rouge">arm32&lt;/code> and &lt;code class="language-plaintext highlighter-rouge">arm64&lt;/code>) of Godot 3.6. This should allow both running the Godot editor on ARM devices (such as Raspberry Pi) and Chromebooks with the Linux subsystem, and exporting Godot projects to them. The Linux export template now lets you select the architecture at export time among the four options supported in 3.6: &lt;code class="language-plaintext highlighter-rouge">x86_64&lt;/code> (default), &lt;code class="language-plaintext highlighter-rouge">x86_32&lt;/code>, &lt;code class="language-plaintext highlighter-rouge">arm64&lt;/code>, &lt;code class="language-plaintext highlighter-rouge">arm32&lt;/code>.&lt;/p>
&lt;h3 id="update-supported-versions-for-android-ios-and-macos">Update supported versions for Android, iOS, and macOS&lt;/h3>
&lt;p>The target version for Android was updated to SDK 34 (Android 14). This also implied changing the Java version used for exporting to Java 17 (versus 11 previously). The path to the Java SDK can be configured in the Editor Settings.&lt;/p>
&lt;p>To ensure compatibility with current Apple SDKs, we had to increase the minimal supported version from iOS 10 to iOS 12 (&lt;a href="https://github.com/godotengine/godot/pull/87359">GH-87359&lt;/a>), and from macOS 10.12 to macOS 10.13 for &lt;code class="language-plaintext highlighter-rouge">x86_64&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/76394">GH-76394&lt;/a>).&lt;/p>
&lt;h3 id="other-notable-changes">Other notable changes&lt;/h3>
&lt;h4 id="2d">2D&lt;/h4>
&lt;ul>
&lt;li>Make autotiles fall back to the most similar bitmask (&lt;a href="https://github.com/godotengine/godot/pull/71533">GH-71533&lt;/a>).&lt;/li>
&lt;li>Fix AnimatedSprite normal map loading (&lt;a href="https://github.com/godotengine/godot/pull/80406">GH-80406&lt;/a>).&lt;/li>
&lt;li>Fix viewport behaviour with physics interpolation (&lt;a href="https://github.com/godotengine/godot/pull/92152">GH-92152&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h4 id="3d">3D&lt;/h4>
&lt;ul>
&lt;li>Fix OccluderPolyShape handles disappear after release click (&lt;a href="https://github.com/godotengine/godot/pull/79947">GH-79947&lt;/a>).&lt;/li>
&lt;li>Add rotation ability to material editor preview (&lt;a href="https://github.com/godotengine/godot/pull/49466">GH-49466&lt;/a>).&lt;/li>
&lt;li>Add TorusMesh (&lt;a href="https://github.com/godotengine/godot/pull/64044">GH-64044&lt;/a>).&lt;/li>
&lt;li>Make Camera3D gizmo clickable (&lt;a href="https://github.com/godotengine/godot/pull/68003">GH-68003&lt;/a>).&lt;/li>
&lt;li>SurfaceTool: Efficiency improvements (&lt;a href="https://github.com/godotengine/godot/pull/69723">GH-69723&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h4 id="audio">Audio&lt;/h4>
&lt;ul>
&lt;li>Backport text-to-speech support (&lt;a href="https://github.com/godotengine/godot/pull/61316">GH-61316&lt;/a>).&lt;/li>
&lt;li>Backport panning strength parameters (&lt;a href="https://github.com/godotengine/godot/pull/64579">GH-64579&lt;/a>).&lt;/li>
&lt;li>Fix trim when importing WAV (&lt;a href="https://github.com/godotengine/godot/pull/78048">GH-78048&lt;/a>).&lt;/li>
&lt;li>PulseAudio: Remove &lt;code class="language-plaintext highlighter-rouge">get_latency()&lt;/code> caching (&lt;a href="https://github.com/godotengine/godot/pull/80294">GH-80294&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h4 id="c">C#&lt;/h4>
&lt;ul>
&lt;li>Support explicit values in flag properties, add C# flags support (&lt;a href="https://github.com/godotengine/godot/pull/59328">GH-59328&lt;/a>).&lt;/li>
&lt;li>Print error when MethodBind call fails (&lt;a href="https://github.com/godotengine/godot/pull/79433">GH-79433&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h4 id="core">Core&lt;/h4>
&lt;ul>
&lt;li>Add boot splash minimum display time setting (&lt;a href="https://github.com/godotengine/godot/pull/41833">GH-41833&lt;/a>).&lt;/li>
&lt;li>Add a &lt;code class="language-plaintext highlighter-rouge">use_hdr&lt;/code> property to GradientTexture to allow storing HDR colors (&lt;a href="https://github.com/godotengine/godot/pull/48372">GH-48372&lt;/a>).&lt;/li>
&lt;li>Fix nested resources being cached if no-cache argument used (&lt;a href="https://github.com/godotengine/godot/pull/62408">GH-62408&lt;/a>).&lt;/li>
&lt;li>Faster queue free (&lt;a href="https://github.com/godotengine/godot/pull/62444">GH-62444&lt;/a>).&lt;/li>
&lt;li>Optimize &lt;code class="language-plaintext highlighter-rouge">String.repeat()&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/64995">GH-64995&lt;/a>).&lt;/li>
&lt;li>Add optional readahead to VariantParser (&lt;a href="https://github.com/godotengine/godot/pull/65079">GH-65079&lt;/a>, &lt;a href="https://github.com/godotengine/godot/pull/69963">GH-69963&lt;/a>).&lt;/li>
&lt;li>Add ability to pick random value from array (&lt;a href="https://github.com/godotengine/godot/pull/67444">GH-67444&lt;/a>).&lt;/li>
&lt;li>Add Color + alpha constructor for Color (&lt;a href="https://github.com/godotengine/godot/pull/74973">GH-74973&lt;/a>).&lt;/li>
&lt;li>Make MessageQueue growable (&lt;a href="https://github.com/godotengine/godot/pull/75527">GH-75527&lt;/a>).&lt;/li>
&lt;li>Backport some multi-threading goodies (&lt;a href="https://github.com/godotengine/godot/pull/72251">GH-72251&lt;/a>).&lt;/li>
&lt;li>Expose &lt;code class="language-plaintext highlighter-rouge">determinant&lt;/code> in Transform2D (&lt;a href="https://github.com/godotengine/godot/pull/76323">GH-76323&lt;/a>).&lt;/li>
&lt;li>MessageQueue: Fix max usage performance statistic (&lt;a href="https://github.com/godotengine/godot/pull/76533">GH-76533&lt;/a>).&lt;/li>
&lt;li>Fix size error in &lt;code class="language-plaintext highlighter-rouge">BitMap.opaque_to_polygons&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/76544">GH-76544&lt;/a>).&lt;/li>
&lt;li>Fix rendering tiles using nested AtlasTextures (&lt;a href="https://github.com/godotengine/godot/pull/76703">GH-76703&lt;/a>).&lt;/li>
&lt;li>Make acos and asin safe (&lt;a href="https://github.com/godotengine/godot/pull/76902">GH-76902&lt;/a>).&lt;/li>
&lt;li>Fix overwriting of Spatial’s local transform (&lt;a href="https://github.com/godotengine/godot/pull/78439">GH-78439&lt;/a>).&lt;/li>
&lt;li>Fix physics tick counter (&lt;a href="https://github.com/godotengine/godot/pull/92941">GH-92941&lt;/a>).&lt;/li>
&lt;li>Fix pausing behavior with physics interpolation (&lt;a href="https://github.com/godotengine/godot/pull/93382">GH-93382&lt;/a>)&lt;/li>
&lt;/ul>
&lt;h4 id="editor">Editor&lt;/h4>
&lt;ul>
&lt;li>Add support for documenting most editor settings in the class reference (&lt;a href="https://github.com/godotengine/godot/pull/48548">GH-48548&lt;/a>).&lt;/li>
&lt;li>Add vector value linking (&lt;a href="https://github.com/godotengine/godot/pull/59125">GH-59125&lt;/a>).&lt;/li>
&lt;li>Backport locale selection improvements (&lt;a href="https://github.com/godotengine/godot/pull/61878">GH-61878&lt;/a>).&lt;/li>
&lt;li>Mark Script button if it’s tool in Scene Tree Editor (&lt;a href="https://github.com/godotengine/godot/pull/65088">GH-65088&lt;/a>).&lt;/li>
&lt;li>Add navigation controls to the spatial editor viewport for mobile (Android editor) (&lt;a href="https://github.com/godotengine/godot/pull/67681">GH-67681&lt;/a>).&lt;/li>
&lt;li>Add built-in action toggle in Input Map settings (&lt;a href="https://github.com/godotengine/godot/pull/69331">GH-69331&lt;/a>).&lt;/li>
&lt;li>Make create folder popup support nested folders (&lt;a href="https://github.com/godotengine/godot/pull/76424">GH-76424&lt;/a>).&lt;/li>
&lt;li>Faster editor grid (&lt;a href="https://github.com/godotengine/godot/pull/92725">GH-92725&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h4 id="gdscript">GDScript&lt;/h4>
&lt;ul>
&lt;li>Fix local variables not showing in debugger when break-pointing on final line (&lt;a href="https://github.com/godotengine/godot/pull/58201">GH-58201&lt;/a>).&lt;/li>
&lt;li>Improve parser speed for very long scripts (&lt;a href="https://github.com/godotengine/godot/pull/74782">GH-74782&lt;/a>, &lt;a href="https://github.com/godotengine/godot/pull/74794">GH-74794&lt;/a>).&lt;/li>
&lt;li>Suggest &lt;code class="language-plaintext highlighter-rouge">class_name&lt;/code> in autocompletion (&lt;a href="https://github.com/godotengine/godot/pull/76346">GH-76346&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h4 id="gui">GUI&lt;/h4>
&lt;ul>
&lt;li>Support multiline strings in buttons (&lt;a href="https://github.com/godotengine/godot/pull/41464">GH-41464&lt;/a>).&lt;/li>
&lt;li>Support AtlasTexture in radial modes of TextureProgress (&lt;a href="https://github.com/godotengine/godot/pull/68246">GH-68246&lt;/a>).&lt;/li>
&lt;li>Add alignment options to flow container (&lt;a href="https://github.com/godotengine/godot/pull/68556">GH-68556&lt;/a>).&lt;/li>
&lt;li>Add &lt;code class="language-plaintext highlighter-rouge">allow_search&lt;/code> property to ItemList and Tree (&lt;a href="https://github.com/godotengine/godot/pull/76753">GH-76753&lt;/a>).&lt;/li>
&lt;li>Fix &lt;code class="language-plaintext highlighter-rouge">GridContainer&lt;/code> max row/column calculations not skipping hidden children (&lt;a href="https://github.com/godotengine/godot/pull/76833">GH-76833&lt;/a>).&lt;/li>
&lt;li>Stop dragging when Slider changes editability (&lt;a href="https://github.com/godotengine/godot/pull/77245">GH-77245&lt;/a>).&lt;/li>
&lt;li>Add tab Metadata to Tabs &amp;amp; TabContainer (&lt;a href="https://github.com/godotengine/godot/pull/75959">GH-75959&lt;/a>).&lt;/li>
&lt;li>RichTextLabel: Cache text property when toggling BBCode (&lt;a href="https://github.com/godotengine/godot/pull/77403">GH-77403&lt;/a>).&lt;/li>
&lt;li>Fix &lt;code class="language-plaintext highlighter-rouge">PopupMenu&lt;/code>’s automatic max height (&lt;a href="https://github.com/godotengine/godot/pull/77691">GH-77691&lt;/a>).&lt;/li>
&lt;li>Backport video loop property and fix for initial black frame (&lt;a href="https://github.com/godotengine/godot/pull/77979">GH-77979&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h4 id="import">Import&lt;/h4>
&lt;ul>
&lt;li>Add 16-bits TGA support (&lt;a href="https://github.com/godotengine/godot/pull/65717">GH-65717&lt;/a>).&lt;/li>
&lt;li>glTF imports &amp;amp; exports material texture filters (&lt;a href="https://github.com/godotengine/godot/pull/66856">GH-66856&lt;/a>).&lt;/li>
&lt;li>Backport the GLTFDocumentExtension system (&lt;a href="https://github.com/godotengine/godot/pull/70411">GH-70411&lt;/a>).&lt;/li>
&lt;li>Expose more compression formats in Image (&lt;a href="https://github.com/godotengine/godot/pull/76016">GH-76016&lt;/a>).&lt;/li>
&lt;li>Implement physics support in the GLTF module (&lt;a href="https://github.com/godotengine/godot/pull/76453">GH-76453&lt;/a>).&lt;/li>
&lt;li>Add vertex color support to OBJ importer (&lt;a href="https://github.com/godotengine/godot/pull/76671">GH-76671&lt;/a>).&lt;/li>
&lt;li>Bounds fixes in &lt;code class="language-plaintext highlighter-rouge">TextureAtlas&lt;/code> import (&lt;a href="https://github.com/godotengine/godot/pull/77428">GH-77428&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h4 id="input">Input&lt;/h4>
&lt;ul>
&lt;li>Add support for multiple virtual keyboard types (&lt;a href="https://github.com/godotengine/godot/pull/58537">GH-58537&lt;/a>).&lt;/li>
&lt;li>Add &lt;code class="language-plaintext highlighter-rouge">MOUSE_MODE_CONFINED_HIDDEN&lt;/code> to MouseMode enum (&lt;a href="https://github.com/godotengine/godot/pull/63643">GH-63643&lt;/a>).&lt;/li>
&lt;li>Add &lt;code class="language-plaintext highlighter-rouge">double_tap&lt;/code> attribute to InputEventScreenTouch (&lt;a href="https://github.com/godotengine/godot/pull/67607">GH-67607&lt;/a>).&lt;/li>
&lt;li>Fix just pressed and released with short presses (&lt;a href="https://github.com/godotengine/godot/pull/77040">GH-77040&lt;/a>).&lt;/li>
&lt;li>Prevent double input events on gamepad when running through steam input (&lt;a href="https://github.com/godotengine/godot/pull/79706">GH-79706&lt;/a>).&lt;/li>
&lt;li>Add support for pointer capture (&lt;a href="https://github.com/godotengine/godot/pull/68441">GH-68441&lt;/a>).&lt;/li>
&lt;li>Augment the &lt;code class="language-plaintext highlighter-rouge">InputEvent&lt;/code> class with a &lt;code class="language-plaintext highlighter-rouge">CANCELED&lt;/code> state (&lt;a href="https://github.com/godotengine/godot/pull/76715">GH-76715&lt;/a>).&lt;/li>
&lt;li>Fix mouse speed not changing fast enough (&lt;a href="https://github.com/godotengine/godot/pull/56765">GH-56765&lt;/a>).&lt;/li>
&lt;li>Fix &lt;code class="language-plaintext highlighter-rouge">InputEventAction&lt;/code>’s &lt;code class="language-plaintext highlighter-rouge">is_match&lt;/code> method ignoring &lt;code class="language-plaintext highlighter-rouge">exact_match&lt;/code> parameter (&lt;a href="https://github.com/godotengine/godot/pull/63109">GH-63109&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h4 id="particles">Particles&lt;/h4>
&lt;ul>
&lt;li>Add options for sorting transparent objects (&lt;a href="https://github.com/godotengine/godot/pull/63040">GH-63040&lt;/a>).&lt;/li>
&lt;li>Fix 2D MultiMesh hierarchical culling (&lt;a href="https://github.com/godotengine/godot/pull/80106">GH-80106&lt;/a>).&lt;/li>
&lt;li>Improve visibility rect/AABB generation usability in Particles (&lt;a href="https://github.com/godotengine/godot/pull/50180">GH-50180&lt;/a>).&lt;/li>
&lt;li>Allow negative scale in Particles and CPUParticles (&lt;a href="https://github.com/godotengine/godot/pull/53852">GH-53852&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h4 id="physics">Physics&lt;/h4>
&lt;ul>
&lt;li>Add &lt;code class="language-plaintext highlighter-rouge">ShapeCast&lt;/code> and &lt;code class="language-plaintext highlighter-rouge">ShapeCast2D&lt;/code> nodes (&lt;a href="https://github.com/godotengine/godot/pull/63659">GH-63659&lt;/a>).&lt;/li>
&lt;li>Fix RigidDynamicBody gaining momentum with bounce (&lt;a href="https://github.com/godotengine/godot/pull/76216">GH-76216&lt;/a>).&lt;/li>
&lt;li>Add area monitor callback error checking (&lt;a href="https://github.com/godotengine/godot/pull/64079">GH-64079&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h4 id="porting">Porting&lt;/h4>
&lt;ul>
&lt;li>Android: Clean-up and refactor of the input implementation (&lt;a href="https://github.com/godotengine/godot/pull/65398">GH-65398&lt;/a>).&lt;/li>
&lt;li>Android: Bump the target SDK version to 34 (Android 14) (&lt;a href="https://github.com/godotengine/godot/pull/87588">GH-87588&lt;/a>).&lt;/li>
&lt;li>iOS: Swift runtime support for iOS Plugins (&lt;a href="https://github.com/godotengine/godot/pull/49828">GH-49828&lt;/a>).&lt;/li>
&lt;li>macOS: Simplify code signing options, add support for rcodesign tool for signing and notarization (&lt;a href="https://github.com/godotengine/godot/pull/66093">GH-66093&lt;/a>).&lt;/li>
&lt;li>Windows: Enable ANSI escape code processing on Windows 10 and later (&lt;a href="https://github.com/godotengine/godot/pull/66216">GH-66216&lt;/a>).&lt;/li>
&lt;li>Add benchmark logic (&lt;a href="https://github.com/godotengine/godot/pull/71875">GH-71875&lt;/a>).&lt;/li>
&lt;li>Android: Enable granular control of touchscreen related settings (&lt;a href="https://github.com/godotengine/godot/pull/73692">GH-73692&lt;/a>).&lt;/li>
&lt;li>Android: Update the gradle build tasks to generate play store builds (&lt;a href="https://github.com/godotengine/godot/pull/74583">GH-74583&lt;/a>).&lt;/li>
&lt;li>Android: Fix UI responsiveness to touch taps (&lt;a href="https://github.com/godotengine/godot/pull/75699">GH-75699&lt;/a>).&lt;/li>
&lt;li>Android: Fix null in Android text entry system (&lt;a href="https://github.com/godotengine/godot/pull/75992">GH-75992&lt;/a>).&lt;/li>
&lt;li>Android: Downgrade Android gradle plugin to version 7.2.1 (&lt;a href="https://github.com/godotengine/godot/pull/76329">GH-76329&lt;/a>).&lt;/li>
&lt;li>Android: Allow concurrent buffering and dispatch of input events (&lt;a href="https://github.com/godotengine/godot/pull/76400">GH-76400&lt;/a>).&lt;/li>
&lt;li>Android: Fix input ANR in the Godot Android editor (&lt;a href="https://github.com/godotengine/godot/pull/76981">GH-76981&lt;/a>).&lt;/li>
&lt;li>Linux: Don’t use udev for joypad hotloading when running in a sandbox (&lt;a href="https://github.com/godotengine/godot/pull/76961">GH-76961&lt;/a>).&lt;/li>
&lt;li>Add &lt;code class="language-plaintext highlighter-rouge">audio/general/text_to_speech&lt;/code> project setting to enable/disable TTS (&lt;a href="https://github.com/godotengine/godot/pull/77352">GH-77352&lt;/a>).&lt;/li>
&lt;li>Android: Improve touchpad and mouse support for the Android editor (&lt;a href="https://github.com/godotengine/godot/pull/77497">GH-77497&lt;/a>).&lt;/li>
&lt;li>Android: Add Android editor setting to control the window used to run the project (&lt;a href="https://github.com/godotengine/godot/pull/77677">GH-77677&lt;/a>).&lt;/li>
&lt;li>Linux: Cache TTS voice list (&lt;a href="https://github.com/godotengine/godot/pull/77775">GH-77775&lt;/a>).&lt;/li>
&lt;li>Linux: Use current keyboard layout in &lt;code class="language-plaintext highlighter-rouge">OS_X11::keyboard_get_scancode_from_physical&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/78169">GH-78169&lt;/a>).&lt;/li>
&lt;li>Fix &lt;code class="language-plaintext highlighter-rouge">ProjectSettings::localize_path&lt;/code> for Windows paths (&lt;a href="https://github.com/godotengine/godot/pull/80072">GH-80072&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h4 id="rendering">Rendering&lt;/h4>
&lt;ul>
&lt;li>Take FXAA samples from half-pixel coordinates to improve quality (&lt;a href="https://github.com/godotengine/godot/pull/66466">GH-66466&lt;/a>).&lt;/li>
&lt;li>Fix GLES 2 SpotLight bug with shadow filter mode (&lt;a href="https://github.com/godotengine/godot/pull/69826">GH-69826&lt;/a>).&lt;/li>
&lt;li>Consistent render ordering for CanvasLayers (&lt;a href="https://github.com/godotengine/godot/pull/69952">GH-69952&lt;/a>).&lt;/li>
&lt;li>Batching: Add MultiRect command (&lt;a href="https://github.com/godotengine/godot/pull/68960">GH-68960&lt;/a>).&lt;/li>
&lt;li>Fix Polygon2D skinned bounds (for culling) (&lt;a href="https://github.com/godotengine/godot/pull/75612">GH-75612&lt;/a>).&lt;/li>
&lt;li>Canvas item hierarchical culling (&lt;a href="https://github.com/godotengine/godot/pull/68738">GH-68738&lt;/a>).&lt;/li>
&lt;li>2D Fixed Timestep Interpolation (&lt;a href="https://github.com/godotengine/godot/pull/76252">GH-76252&lt;/a>).&lt;/li>
&lt;li>Physics Interpolation: Add support for CPUParticles2D (&lt;a href="https://github.com/godotengine/godot/pull/80176">GH-80176&lt;/a>).&lt;/li>
&lt;li>Fix scene shader regression (&lt;a href="https://github.com/godotengine/godot/pull/92070">GH-92070&lt;/a>)&lt;/li>
&lt;li>Fix 2D skinning with physics interpolation (&lt;a href="https://github.com/godotengine/godot/pull/93309">GH-93309&lt;/a>)&lt;/li>
&lt;li>Backport additional spatial shader built-ins (&lt;a href="https://github.com/godotengine/godot/pull/63971">GH-63971&lt;/a>).&lt;/li>
&lt;li>Fix &lt;code class="language-plaintext highlighter-rouge">NODE_POSITION_VIEW&lt;/code> shader built-in (&lt;a href="https://github.com/godotengine/godot/pull/76226">GH-76226&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h4 id="miscellaneous">Miscellaneous&lt;/h4>
&lt;ul>
&lt;li>Assetlib: Add support for svg images in the asset library (&lt;a href="https://github.com/godotengine/godot/pull/70502">GH-70502&lt;/a>).&lt;/li>
&lt;li>Buildsystem: Add support for single compilation unit builds (&lt;a href="https://github.com/godotengine/godot/pull/78113">GH-78113&lt;/a>).&lt;/li>
&lt;li>Export: macOS: Backport notarytool, provisioning profile and PKG export options (&lt;a href="https://github.com/godotengine/godot/pull/80239">GH-80239&lt;/a>).&lt;/li>
&lt;li>GDNative: Add Core API 1.4, move &lt;code class="language-plaintext highlighter-rouge">Transform2D::determinant&lt;/code> there (&lt;a href="https://github.com/godotengine/godot/pull/77387">GH-77387&lt;/a>).&lt;/li>
&lt;li>Network: ENet: Better handle truncated socket messages (&lt;a href="https://github.com/godotengine/godot/pull/79704">GH-79704&lt;/a>).&lt;/li>
&lt;li>XR: Disable blending before blitting to framebuffer from WebXR (&lt;a href="https://github.com/godotengine/godot/pull/76072">GH-76072&lt;/a>).&lt;/li>
&lt;li>Documentation and translation updates.&lt;/li>
&lt;/ul>
&lt;h4 id="thirdparty-library-updates">Thirdparty library updates&lt;/h4>
&lt;p>As usual, we’re keeping thirdparty libraries updated, especially the ones which may be subject to security vulnerabilities.&lt;/p>
&lt;p>This dev snapshot includes updates to:&lt;/p>
&lt;ul>
&lt;li>Mozilla CA certificates from March 2024&lt;/li>
&lt;li>SDL GameControllerDB from April 2024&lt;/li>
&lt;li>brotli 1.1.0&lt;/li>
&lt;li>bullet 3.25&lt;/li>
&lt;li>embree 3.13.5&lt;/li>
&lt;li>enet &lt;code class="language-plaintext highlighter-rouge">c44b7d0f7&lt;/code>&lt;/li>
&lt;li>libpng 1.6.43&lt;/li>
&lt;li>libwebp 1.3.2&lt;/li>
&lt;li>mbedtls 2.28.8&lt;/li>
&lt;li>miniupnpc 2.2.7&lt;/li>
&lt;li>minizip 1.3.1&lt;/li>
&lt;li>pcre2 10.42&lt;/li>
&lt;li>recast 1.6.0&lt;/li>
&lt;li>tinyexr 1.0.8&lt;/li>
&lt;li>wslay &lt;code class="language-plaintext highlighter-rouge">0e7d106ff&lt;/code>&lt;/li>
&lt;li>zstd 1.5.5&lt;/li>
&lt;/ul>
&lt;h3 id="hundreds-of-other-improvements">Hundreds of other improvements&lt;/h3>
&lt;p>A ton of other improvements are also included in Godot 3.6. We advise interested users to dive into the &lt;a href="https://github.com/godotengine/godot/blob/3.6-stable/CHANGELOG.md">&lt;strong>curated changelog&lt;/strong>&lt;/a> to know more, or the &lt;a href="https://godotengine.github.io/godot-interactive-changelog/#3.6">&lt;strong>interactive changelog&lt;/strong>&lt;/a> for an overview of all changes in 3.6.&lt;/p>
&lt;h2 id="reporting-issues">Reporting issues&lt;/h2>
&lt;p>Godot is a complex piece of software and is not bug-free. Our contributors do their best to fix issues as they are being reported, but there’s a lot of surface to cover and you might encounter situations which we aren’t aware of yet, or couldn’t fix in time for this release. There will be 3.6.x maintenance releases focused on fixing bugs in coming weeks and months, so make sure to &lt;a href="https://github.com/godotengine/godot/issues">report any issue you encounter on GitHub&lt;/a>, so that we can make sure to fix it for our future releases.&lt;/p>
&lt;hr />
&lt;p>&lt;em>The illustration picture is a render of the &lt;a href="https://github.com/gdquest-demos/godot-4-3D-Characters">GDQuest Gobot model&lt;/a> (MIT license) in the &lt;a href="https://developer.nvidia.com/orca/amazon-lumberyard-bistro">Amazon Lumberyard Bistro&lt;/a> scene (CC BY 4.0 license), made by &lt;a href="https://github.com/adamscott">Adam Scott&lt;/a>.&lt;/em>&lt;/p></content><author><name>lawnjelly</name></author><category term="Release"/></entry><entry><title>Submissions open for Godot 2024 showreel!</title><link href="https://godotengine.org/article/submissions-open-godot-2024-showreel/"/><updated>2024-09-05T15:00:00+00:00</updated><id>https://godotengine.org/article/submissions-open-godot-2024-showreel/</id><summary>Showcase your Godot creations in 2024! We're inviting submissions of short videos featuring your published or in-progress Godot games or tools. Don't miss this chance to be a part of it!</summary><content type="html">&lt;p>Showcase your Godot Engine 2024 creations! We invite you to submit videos featuring your published or in-progress games or tools so we can make the Godot 2024 Showreel.&lt;/p>
&lt;p>The showreels are an informative and celebratory showcase, to highlight the wide array of projects developed using the Godot Engine. If you want to participate and share your Godot-made game, app or tool submit your entry starting today.&lt;/p>
&lt;h2 id="how-to-submit">How to submit&lt;/h2>
&lt;p>You can submit your entry in our &lt;a href="https://showreel.godotengine.org/">Godot Showreel website&lt;/a>. You can use your Godot account or any other account (GitHub, Discord, etc.) to log in. Before submitting, please read the &lt;a href="https://showreel.godotengine.org/about">submission guidelines&lt;/a>.&lt;/p>
&lt;ul>
&lt;li>✅ &lt;strong>&lt;a href="https://showreel.godotengine.org/">Submit your entry&lt;/a>&lt;/strong>&lt;/li>
&lt;li>📋 &lt;strong>&lt;a href="https://showreel.godotengine.org/about">Submission guidelines&lt;/a>&lt;/strong>&lt;/li>
&lt;li>📅 &lt;strong>Submissions close on November 1st 2024 at 10:00 UTC&lt;/strong>&lt;/li>
&lt;/ul>
&lt;h2 id="changes-from-previous-years">Changes from previous years&lt;/h2>
&lt;p>This year, the Godot Foundation will be selecting some games to be featured as well as the ones submitted by the community. This will be done due to the confusion caused by big titles not being present in past showreels because the developers forgot to submit or were not aware of our efforts. It shouldn’t change anything for the submission process, but we wanted to make sure we are transparent about the changes.&lt;/p>
&lt;h2 id="need-inspiration">Need inspiration?&lt;/h2>
&lt;p>Check out our &lt;a href="https://www.youtube.com/watch?v=W1_zKxYEP6Q&amp;amp;list=PLeG_dAglpVo6EpaO9A1nkwJZOwrfiLdQ8">showreel playlist&lt;/a> for some creative sparks and see what makes a great submission!&lt;/p>
&lt;p>&lt;img src="/storage/app/media/showreels.jpg" alt="2022 Showreel thumbnails" />&lt;/p>
&lt;p>Good luck! We can’t wait to see your creations!&lt;/p></content><author><name>Emi</name></author><category term="News"/></entry><entry><title>About Official Console Ports</title><link href="https://godotengine.org/article/about-official-console-ports/"/><updated>2024-09-03T18:30:00+00:00</updated><id>https://godotengine.org/article/about-official-console-ports/</id><summary>With this post we aim to address the community’s questions about the lack of official console ports through the Godot Foundation.</summary><content type="html">&lt;p>With this post we aim to address the community’s questions about the lack of official console ports through the Godot Foundation.
Unfortunately, there has been a lot of mixed messaging on this topic in the past. The truth is that a lot of important information is locked behind vendor-specific NDAs, so even those in the know are often unable to fully explain the situation. Nonetheless, here we attempt to describe the current blockers to the best of our ability, and detail what that means for you as developers looking to port to console.&lt;/p>
&lt;h2 id="the-foundation-does-not-plan-on-providing-console-ports-at-this-time">The Foundation does not plan on providing console ports at this time&lt;/h2>
&lt;p>First and foremost, with the situation being as it is, the Godot Foundation does not have active plans to work on console platform ports.&lt;/p>
&lt;p>This may change in the future, especially if it becomes possible to share console ports that are truly Free and Open Source (i.e. not locked behind any NDAs or paywalls).&lt;/p>
&lt;p>However, this does not mean you cannot bring your game to these platforms, see here for a &lt;a href="https://docs.godotengine.org/en/stable/tutorials/platform/consoles.html#third-party-support">list of unofficial vendors&lt;/a> providing porting services.&lt;/p>
&lt;h2 id="barriers-to-providing-console-ports">Barriers to providing console ports&lt;/h2>
&lt;p>We wrote a blog post a few years ago explaining the barriers to providing console ports: &lt;a href="https://godotengine.org/article/godot-consoles-all-you-need-know/">https://godotengine.org/article/godot-consoles-all-you-need-know/&lt;/a>. We want to expand on that post and include more detail about what led to our decision not to produce console ports through our non-profit organization.&lt;/p>
&lt;p>From a high level, here are three barriers we are facing:&lt;/p>
&lt;ol>
&lt;li>Legal liability&lt;/li>
&lt;li>Disproportionate cost&lt;/li>
&lt;li>Open source licensing issues&lt;/li>
&lt;/ol>
&lt;p>Of these three issues, only the inability to license ports as open source is a deal breaker for the Godot Foundation. The other two simply make it very expensive and undesirable for us to consider providing ports officially. Let’s look at these issues one by one.&lt;/p>
&lt;h3 id="legal-liability">Legal Liability&lt;/h3>
&lt;p>Broadly speaking, there are two types of console ports:&lt;/p>
&lt;ol>
&lt;li>Games developed with approved middleware (e.g. Unity, Unreal)&lt;/li>
&lt;li>Games developed with custom ports&lt;/li>
&lt;/ol>
&lt;p>Using approved middleware is ideal for game developers as they can trust that the game they develop will work on the target platform. A crucial part of approved middleware is that the engine provider accepts liability for any problems with the port. In other words: if there is a problem with the engine itself in regards to security, licensing, etc. then the middleware provider takes the liability and the game developer is safe.&lt;/p>
&lt;p>The Godot Foundation is not able to take such liability, as it does not provide commercial support for any of its projects. In fact, this refusal to accept liability is core to the MIT license that Godot uses (more on licensing later).&lt;/p>
&lt;p>From a liability perspective alone, anyone could provide source code for console ports in a closed environment only available to NDA holders that fully disclaims all sources of liability.
The great news is that the first ports of this sort are surfacing already! They are difficult to find as you often need to have the relevant NDAs to discover them. In the case of a Nintendo Switch port, &lt;a href="https://www.rawrlab.com/">RAWRLAB Games&lt;/a> was able to &lt;a href="https://www.rawrlab.com/godot_nintendo_switch_free_port.html">publicly announce&lt;/a> their open-source Nintendo Switch port for Godot Engine users. This sort of community effort is amazing and is something that the Godot Foundation heavily encourages!&lt;/p>
&lt;p>While we are very excited about this progress, we aren’t going to put our limited Godot Foundation resources behind developing such ports either, for the following reasons.&lt;/p>
&lt;h3 id="disproportionate-cost">Disproportionate Cost&lt;/h3>
&lt;p>The Godot Foundation as an entity receives donations from the community to spend on the development of the Godot Engine as a project. That being said, these resources — which currently pay for about 10 people to work on anything from release management to writing code to organizational tasks — are nothing in comparison to the amount of voluntary time that you as a community invest in making the Godot Engine as successful as it has become in the recent years. At the time of writing, 2,634 volunteer contributors are listed as authors of the project!&lt;/p>
&lt;p>We are gifted with a huge community of such passionate contributors, and put a lot of weight on enabling and encouraging new people to join into the process. Sadly, the number of potential contributors with console experience, access to console vendor NDAs, and devkits is very small in comparison.&lt;/p>
&lt;p>This would flip our current situation on its head. With console ports, nearly all the work would have to be done by the Godot Foundation, which means the cost per platform would be disproportionately higher than for all other platforms we officially maintain (i.e. Windows/Linux/Mac, web and mobile). Even more so if we want the console ports to be the same quality as the rest of our code base, including maintenance and catering to new hardware.&lt;/p>
&lt;p>This is both inefficient, and unfair to community members who don’t plan to release on consoles. A significant portion of their donation would go towards maintaining platform ports for closed systems which they don’t have access to (and can’t have access to without spending a significant amount of money).&lt;/p>
&lt;p>It is also worth keeping in mind that Godot is a very large and fully featured game engine compared to other open source game engines out there. We have extensive third party libraries, dedicated 2D and 3D renderers, networking, multiple scripting language support, external plugins, etc. It would be an undertaking of immense effort and time to create a console port that fully supports all Godot has to offer.&lt;/p>
&lt;p>Finally, because we do have limited resources, diverting any resources away from the core product to work on consoles would require slowing down development of Godot itself to create and maintain the console ports.&lt;/p>
&lt;h3 id="licensing">Licensing&lt;/h3>
&lt;p>The board of the Foundation strongly feels that we should only be using funds to develop Free and Open Source Software (FOSS). We are committed to being a fully FOSS project. Further, we credit our FOSS stance with a lot of our success. When you contribute to Godot, you become a part owner of the project and you don’t sign away your rights to your code in a CLA (contributor license agreement). This way, every contributor has assurance that they have worked to benefit all users, and that their contribution won’t be yanked away from them by the entity controlling development.&lt;/p>
&lt;p>In short, we want to develop Godot in a way that ensures that anyone who downloads Godot can be assured that they own the copy of Godot that they are using. We do that by remaining dedicated to two things:&lt;/p>
&lt;ol>
&lt;li>Using the MIT license&lt;/li>
&lt;li>FOSS principles&lt;/li>
&lt;/ol>
&lt;h4 id="mit-license">MIT license&lt;/h4>
&lt;p>We use the MIT license to distribute Godot. Unfortunately, the MIT license is incompatible with providing official middleware because it very clearly states that we won’t take on liability for the code (i.e. you can’t sue us if it turns out that Godot doesn’t work for you, or has a bug that costs you money — which is important since we only operate on &lt;a href="https://fund.godotengine.org">your donations&lt;/a> to begin with). Further it is incompatible with non-middleware ports as well because such ports would have to be limited in their distribution to authorized console developers only.&lt;/p>
&lt;p>Accordingly, any console port would have to be distributed under a modified MIT license or another license that allowed us to limit who the code could be distributed to (and potentially limit the distribution in other ways). In either case, we would have to compromise our FOSS ideals, which we feel are our strength.&lt;/p>
&lt;h4 id="foss-principles">FOSS principles&lt;/h4>
&lt;p>Further, and more importantly, we do all of our development in the open. Everything is on GitHub or our developer chat (&lt;a href="https://chat.godotengine.org">chat.godotengine.org&lt;/a>, which is open to all who want to discuss development of the project or just listen in). We don’t want to put ourselves in a situation where our development has to happen behind closed doors and away from the eyes of the community, and this is exactly what would be required by the console vendors.&lt;/p>
&lt;p>Right now, anyone can see the volume of work that is happening on Godot by visiting Godot’s &lt;a href="https://github.com/godotengine/godot">GitHub page&lt;/a>. They can also hang out on the chat and get a feel for the process of development or ask questions directly to the developers. If we shift our development behind closed doors, then you have to take our word that things are progressing and that the donations are being put to good use (unless you have the relevant NDAs).&lt;/p>
&lt;p>Finally, we want to assure every contributor and every donor that their contribution benefits all Godot users. If we put donations towards a console port that is hidden behind closed doors, then we are taking resources away from everyone and putting them into something that only benefits a select few and that isn’t something we want to do.&lt;/p>
&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>For the above reasons, the Foundation has decided not to provide console ports for now. Not because we categorically do not want to, quite the opposite actually, but because it currently is not feasible for us and would require to compromise the things that make Godot great. In the future, if console manufacturers become more open about the licensing of console ports in particular, and maybe even agree to support that endeavor financially, then we will happily reconsider. We would love to have official console ports alongside the existing ones from third-party vendors for all of our community to use.&lt;/p></content><author><name>Emi</name></author><category term="News"/></entry><entry><title>Meeting the community at gamescom 2024</title><link href="https://godotengine.org/article/review-gamescom-2024/"/><updated>2024-09-02T18:30:00+00:00</updated><id>https://godotengine.org/article/review-gamescom-2024/</id><summary>Back from gamescom, ready to report.</summary><content type="html">&lt;p>Gamescom is more popular than ever. It used to be that you could hide from the masses flooding the entertainment halls by going to the indie area, and playtest one of the few games exhibiting in that much calmer space. Squeezed between the retro, education, and job-market booths, I recall not that many people even knew of its existence - the entire hall was classified as the family-friendly one.
Nowadays, the &lt;a href="https://indiearenabooth.de/gamescom2024/games">Indie Arena Booth&lt;/a> alone featured 170 developers, and found competition in multiple other indie groups occupying similar amounts of floor space.&lt;/p>
&lt;p>Between these conglomerates and the country/state booths, we managed to count 9 Godot games, some familiar faces as well as a few surprises among them. Regrettably, we are sure to have missed some - if only events would release the exhibitor list with a note on engine technology used. One can only dream… Unless?&lt;/p>
&lt;div class="preview-image-container" style="margin-bottom: -27px;">
&lt;img alt="The developers of Kamaeru" src="/storage/blog/gamescom-cologne-2024/gc2024-g.webp" />
&lt;img alt="Planetenverteidigungskanonenkommandant's booth" src="/storage/blog/gamescom-cologne-2024/gc2024-g1.webp" />
&lt;img alt="Yarn Guardians playing booth" src="/storage/blog/gamescom-cologne-2024/gc2024-g2.webp" />
&lt;img alt="Kohlrabi Starship at the indie arena booth" src="/storage/blog/gamescom-cologne-2024/gc2024-g3.webp" />
&lt;/div>
&lt;div class="preview-image-container">
&lt;img alt="The developers of Cocolation" src="/storage/blog/gamescom-cologne-2024/gc2024-g4.webp" />
&lt;img alt="Spindle's booth" src="/storage/blog/gamescom-cologne-2024/gc2024-g5.webp" />
&lt;img alt="Developers of Koira" src="/storage/blog/gamescom-cologne-2024/gc2024-g6.webp" />
&lt;img alt="Oddventure's booth" src="/storage/blog/gamescom-cologne-2024/gc2024-g7.webp" />
&lt;/div>
&lt;p>Since most gamescom demos are still online, here our incomplete list for you to playtest:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://cocolation.com/">Cocolation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/2447980/Crown_Gambit/">Crown Gambit&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/3010900/Dunestake/">Dunestake&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/1978150/Kamaeru_A_Frog_Refuge/">Kamaeru: A Frog Refuge&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/2337990/Kohlrabi_Starship/">Kohlrabi Starship&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/1626620/Koira/">Koira&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/1235710/Oddventure/">Oddventure&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/2956040/PVKK_Planetenverteidigungskanonenkommandant/">PVKK: Planetenverteidigungskanonenkommandant&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/3079180/SIGNAL_LOST/">SIGNAL LOST&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/1386750/Spindle/">Spindle&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.steampowered.com/app/2928940/Yarn_Guardians/">Yarn Guardians&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;em>Did you too exhibit a Godot game at gamescom and want to be added to this list? Email &lt;a href="mailto:nat@godotengine.org">nat@godotengine.org&lt;/a> with a link to your demo.&lt;/em>&lt;/p>
&lt;p>Another thing we discovered in the trade area: the big players in this industry are starting to take us more seriously than ever. This is in line with our GDC experience back in March. Let’s see which of the meetings lead to future collaborations; however, even just hearing about publishers and tool providers that they are looking into supporting Godot, upon request from their developers, is amazing news.&lt;/p>
&lt;div class="preview-image-container">
&lt;img alt="Attendees standing on a private patio in front of the Haxenhaus" src="/storage/blog/gamescom-cologne-2024/meetup-1-gamescom-2024.jpg" />
&lt;img alt="Attendees sitting down to have dinner" src="/storage/blog/gamescom-cologne-2024/meetup-2-gamescom-2024.jpg" />
&lt;img alt="Juan and Emilio speaking with Chasing Carrots" src="/storage/blog/gamescom-cologne-2024/meetup-3-gamescom-2024.jpg" />
&lt;img alt="Meetup view at night" src="/storage/blog/gamescom-cologne-2024/meetup-4-gamescom-2024.jpg" />
&lt;/div>
&lt;p>On Thursday evening, we hosted our own off-site Godot mixer, and attendance was great! Sitting on the outside patio of the Haxenhaus, an old GDC Europe staple location as we were told, we got to enjoy plenty of food and drink - courtesy of our longtime sponsor &lt;a href="https://www.w4games.com/">W4 Games&lt;/a>.&lt;/p>
&lt;p>It is always a pleasure to meet our community face to face, and we are flattered that many of you seem to agree. Thank you to all attendees for sharing your personal Godot Engine stories with us, we learn a lot from these conversations every time. For the next events, we might need more sponsors to be able to accommodate more than “just” 50 of you.&lt;/p>
&lt;p>To meet a few more community members, we also assembled Friday afternoon at the aforementioned Indie Arena Booth. Despite having to yell-talk and running out of goodies to distribute, we had a lot of fun helping fellow developers network and mingling ourselves. Considering the amount of people that showed up, we were almost concerned the Germans would come after us for “unlawful assembly” or “blocking the exit paths” - luckily for us, nothing of that sort happened and instead we got to take a big happy group picture:&lt;/p>
&lt;p>&lt;img alt="Meetup picture taken at the Indie Arena Booth" src="/storage/blog/gamescom-cologne-2024/group-gamescom-2024.jpg" />&lt;/p>
&lt;p>What event would you like to see us attend next? Tell us on our official forum! Bonus points if you know a local user group or creators who would help us staff a booth, and a sponsor to help with the related expenses.&lt;/p>
&lt;style>
.preview-image-container {
display: flex;
justify-content: center;
align-items: center;
gap: 5px;
/* padding: 16px; */
background-color: transparent;
}
.preview-image-container {
background-color: transparent;
}
.preview-image-container img {
max-height: 300px;
background-color: transparent;
}
&lt;/stlye>
&lt;/style></content><author><name>Nat</name></author><category term="Events"/></entry><entry><title>Dev snapshot: Godot 4.4 dev 1</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-4-dev-1/"/><updated>2024-08-26T13:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-1/</id><summary>The first snapshot after releasing 4.3, already packed with new features!</summary><content type="html">&lt;p>This is the first dev snapshot for 4.4! During the beta and release candidate stages of 4.3, we accumulated a lot of PRs
that were of great quality, but deemed too risky to include in 4.3. We have begun merging those PRs now and have quickly
gathered a lot of changes that warrant a dev release!&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>&lt;a href="#downloads">Jump to the &lt;strong>Downloads&lt;/strong> section&lt;/a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also &lt;a href="https://editor.godotengine.org/releases/4.4.dev1/">try the &lt;strong>Web editor&lt;/strong>&lt;/a> or the &lt;strong>Android editor&lt;/strong> for this release. If you are interested in the latter, please request to join &lt;a href="https://groups.google.com/g/godot-testers">our testing group&lt;/a> to get access to pre-release builds.&lt;/p>
&lt;hr />
&lt;p>&lt;em>The cover illustration is from&lt;/em> &lt;a href="https://store.steampowered.com/app/2013730/Gourdlets/">&lt;strong>Gourdlets&lt;/strong>&lt;/a>, &lt;em>an easygoing sandbox game about building towns for cute vegetable folks. Developed in Godot 4 by &lt;a href="https://www.auntygames.com/">AuntyGames&lt;/a>, it was recently released &lt;a href="https://store.steampowered.com/app/2013730/Gourdlets/">on Steam&lt;/a> to critical acclaim. You can follow the developer on &lt;a href="https://x.com/auntygames">Twitter&lt;/a>, &lt;a href="https://www.tiktok.com/@aunty__games">TikTok&lt;/a>, and &lt;a href="https://www.instagram.com/auntygames/">Instagram&lt;/a>.&lt;/em>&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>After just 10 days of development, we are bringing you a bunch of fixes and improvements, some of which are fairly massive new features!&lt;/p>
&lt;h3 id="metal-rendering-backend">Metal rendering backend&lt;/h3>
&lt;p>We hinted that a Metal backend was in the works and it is finally here (&lt;a href="https://github.com/godotengine/godot/pull/88199">GH-88199&lt;/a>), thanks to the exceptional work of &lt;a href="https://github.com/stuartcarnie">Stuart Carnie&lt;/a>!&lt;/p>
&lt;p>Metal is a low-level graphics API similar to Vulkan or D3D12. Godot currently supports using Vulkan or D3D12, but
neither of those are available on macOS and iOS, so we use a library called &lt;a href="https://github.com/KhronosGroup/MoltenVK">MoltenVK&lt;/a>
to run Vulkan over Metal. MoltenVK is great and has worked well for us. However, having our own Metal implementation is more efficient
and allows us to have a greater control over what features we support and what performance tradeoffs we make.&lt;/p>
&lt;p>Early results show that the Metal backend on macOS is at least as fast as the Vulkan backend and in many cases, much faster.&lt;/p>
&lt;p>Right now, we only support Metal on Apple Silicon (ARM) devices. That includes all iOS devices and the M1/M2/M3 Macs. Intel-based
Apple devices will continue to work with the MoltenVK backend. Currently, this limitation is due to the fact that
few contributors working in this area have access to non-Apple Silicon devices.&lt;/p>
&lt;h3 id="3d-physics-interpolation">3D physics interpolation&lt;/h3>
&lt;p>Godot 4.3 came with physics interpolation for 2D nodes, and now the 3D counterpart has been merged (&lt;a href="https://github.com/godotengine/godot/pull/92391">GH-92391&lt;/a>), with &lt;a href="https://github.com/rburing">Ricardo Buring&lt;/a> continuing the forward-porting of &lt;a href="https://github.com/lawnjelly">lawnjelly&lt;/a>’s Godot 3.x implementation.
Not only that but support for MultiMeshes has also been merged (&lt;a href="https://github.com/godotengine/godot/pull/91818">GH-91818&lt;/a>)!&lt;/p>
&lt;p>Physics interpolation is a technique that allows you to run your physics update at a very low FPS while maintaining
smooth movement. This allows you to both save CPU overhead and make your game look much smoother.&lt;/p>
&lt;video autoplay="" loop="" muted="" playsinline="">
&lt;source src="/storage/blog/dev-snapshot-godot-4-4-dev-1/physics-interpolation.mp4?1" type="video/mp4" />
&lt;/video>
&lt;h3 id="lightmap-bicubic-sampling">Lightmap bicubic sampling&lt;/h3>
&lt;p>Bicubic sampling is a method for reading from a lightmap that smooths our sharp edges. It is especially useful when
you bake lightmaps with shadows at a low texture resolution. We supported this in Godot 3, and have now brought it back in
&lt;a href="https://github.com/godotengine/godot/pull/89919">GH-89919&lt;/a>, courtesy of &lt;a href="https://github.com/BlueCube3310">BlueCube3310&lt;/a>.&lt;/p>
&lt;p>&lt;img src="/storage/blog/dev-snapshot-godot-4-4-dev-1/bicubic-compare.webp" alt="Comparison between shadows with bicubic on and off" />&lt;/p>
&lt;p>Bicubic sampling comes with a small run-time performance cost on the GPU, so it can be disabled in a project setting if needed.&lt;/p>
&lt;p>Combined with new antialiasing for direct light samples (&lt;a href="https://github.com/godotengine/godot/pull/95828">GH-95828&lt;/a>),
low resolution static shadows now look much better in lightmaps.&lt;/p>
&lt;h3 id="betsy-texture-compressor">Betsy texture compressor&lt;/h3>
&lt;p>The &lt;a href="/article/betsy-gpu-texture-compressor/">Betsy&lt;/a> texture compressor is a tool to compress
images into various GPU texture formats. Currently, compressing images for the GPU (in Godot using the “VRAM Compressed”
import setting) can be quite slow. Betsy is a texture compressor that runs on the GPU and is able to compress images
significantly faster than our current compressors. This reduces import time dramatically.&lt;/p>
&lt;p>While Betsy was written a few years ago by &lt;a href="https://github.com/darksylinc">Matias N. Goldberg&lt;/a>, we are just beginning to integrate it into the engine now (&lt;a href="https://github.com/godotengine/godot/pull/91535">GH-91535&lt;/a>), thanks to the effort of &lt;a href="https://github.com/BlueCube3310">BlueCube3310&lt;/a>.
Currently it is only implemented for HDR images set to “high quality”. However, soon we will extend it to many more
compression types and begin to use it internally for things like lightmaps.&lt;/p>
&lt;p>The improvement is most obvious when importing HDRIs, here are a few examples from the PR:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Image&lt;/th>
&lt;th>CVTT&lt;/th>
&lt;th>Betsy&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://polyhaven.com/a/symmetrical_garden_02">Symmetrical garden 8k .hdr with mipmaps&lt;/a>&lt;/td>
&lt;td>92.4s&lt;/td>
&lt;td>475ms&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://polyhaven.com/a/cobblestone_street_night">Cobblestone Street Night .hdr 4k with mipmaps&lt;/a>&lt;/td>
&lt;td>26.5s&lt;/td>
&lt;td>217ms&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://polyhaven.com/a/laufenurg_church">Laufenurg Church 8k .hdr with mipmaps&lt;/a>&lt;/td>
&lt;td>99.3s&lt;/td>
&lt;td>440ms&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://polyhaven.com/a/little_paris_eiffel_tower">Little Paris 8k .hdr with mipmaps&lt;/a>&lt;/td>
&lt;td>92.7s&lt;/td>
&lt;td>467ms&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Dev1 also brings optimizations to other stages of loading HDRIs that should make them much faster across the board:&lt;/p>
&lt;ul>
&lt;li>Optimize converting half float and full float formats (~10× improvement) (&lt;a href="https://github.com/godotengine/godot/pull/92291">GH-92291&lt;/a>).&lt;/li>
&lt;li>Optimize loading HDRIs (~25× improvement) (&lt;a href="https://github.com/godotengine/godot/pull/95291">GH-95291&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h3 id="optimizations">Optimizations&lt;/h3>
&lt;p>Contributors have been hard at work on various optimizations across the engine. Now that Godot 4 is being used more and
the core feature set is feeling stable, we can turn our minds to optimizing the existing features. Many optimizations
were finished and tested before the 4.3 release but were too late to merge. So now we get them all in one big batch.&lt;/p>
&lt;p>Here are a few:&lt;/p>
&lt;ul>
&lt;li>Core: Reduce memory allocations when formatting strings (&lt;a href="https://github.com/godotengine/godot/pull/94558">GH-94558&lt;/a>).
This makes formatting strings about 2× faster.&lt;/li>
&lt;li>Core: Optimize &lt;code class="language-plaintext highlighter-rouge">Array.insert&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/94353">GH-94353&lt;/a>). This makes inserting new
elements into an Array about 10× faster on average.&lt;/li>
&lt;li>Core: Optimize &lt;code class="language-plaintext highlighter-rouge">String.insert&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/92555">GH-92555&lt;/a>).&lt;/li>
&lt;li>Core: Optimize &lt;code class="language-plaintext highlighter-rouge">String.join&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/92550">GH-92550&lt;/a>).&lt;/li>
&lt;li>Core: Optimize &lt;code class="language-plaintext highlighter-rouge">String.replace&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/92546">GH-92546&lt;/a>).&lt;/li>
&lt;li>Import: Disable normal raycaster by default (&lt;a href="https://github.com/godotengine/godot/pull/93727">GH-93727&lt;/a>). This makes
importing meshes with LODs approximately 2× faster. We expect that the quality of imported LODs will be the same.
If you notice any issues, please let us know. You can re-enable the raycaster in the object’s import settings under
&lt;code class="language-plaintext highlighter-rouge">lods/raycast_normals&lt;/code>.&lt;/li>
&lt;li>Editor: Optimize editor grid recalculation (&lt;a href="https://github.com/godotengine/godot/pull/92734">GH-92734&lt;/a>).&lt;/li>
&lt;li>Editor: Optimize closing the editor settings (&lt;a href="https://github.com/godotengine/godot/pull/95704">GH-95704&lt;/a>).&lt;/li>
&lt;li>Rendering: Optimize meshes for vertex cache (&lt;a href="https://github.com/godotengine/godot/pull/94241">GH-94241&lt;/a>). In scenes
with a lot of geometry, this can result in a 20% improvement in frame time.&lt;/li>
&lt;li>Rendering: Optimize materials with &lt;code class="language-plaintext highlighter-rouge">ambient_light_disabled&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/92213">GH-92213&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h3 id="and-more">And more!&lt;/h3>
&lt;p>There are too many exciting changes to list them all here, but here are a few more.&lt;/p>
&lt;ul>
&lt;li>Editor: Fix &lt;code class="language-plaintext highlighter-rouge">uid://&lt;/code> paths fail to load at editor startup (&lt;a href="https://github.com/godotengine/godot/pull/95689">GH-95689&lt;/a>).&lt;/li>
&lt;li>Editor: Correct rotation gizmo plane math for off-center perspective view (&lt;a href="https://github.com/godotengine/godot/pull/95402">GH-95402&lt;/a>).&lt;/li>
&lt;li>Editor: Make viewport grid visible on all three planes in orthogonal camera view (&lt;a href="https://github.com/godotengine/godot/pull/93869">GH-93869&lt;/a>).&lt;/li>
&lt;li>Editor: Expose GDScript syntax highlighter to editor plugins (&lt;a href="https://github.com/godotengine/godot/pull/95764">GH-95764&lt;/a>).&lt;/li>
&lt;li>Rendering: Fix generated light probes placing too close to manual light probes (&lt;a href="https://github.com/godotengine/godot/pull/83497">GH-83497&lt;/a>).&lt;/li>
&lt;li>Rendering: Antialias direct light samples in LightmapperRD (&lt;a href="https://github.com/godotengine/godot/pull/95828">GH-95828&lt;/a>).&lt;/li>
&lt;li>Rendering: Add fixed fog to the sky in the Compatibility renderer (&lt;a href="https://github.com/godotengine/godot/pull/95662">GH-95662&lt;/a>).&lt;/li>
&lt;li>Rendering: Implement visual layers for DirectionalLight3D (&lt;a href="https://github.com/godotengine/godot/pull/95379">GH-95379&lt;/a>).&lt;/li>
&lt;li>Rendering: Fix LightmapGI not taking environment sky rotation into account when baking (&lt;a href="https://github.com/godotengine/godot/pull/95000">GH-95000&lt;/a>).&lt;/li>
&lt;li>Import: Add support for loading less common DDS formats (&lt;a href="https://github.com/godotengine/godot/pull/86204">GH-86204&lt;/a>).&lt;/li>
&lt;li>Import: Add option to export Geometry Nodes Instances in Blender importer (&lt;a href="https://github.com/godotengine/godot/pull/87735">GH-87735&lt;/a>).&lt;/li>
&lt;li>Android: Memory cleanup and optimization (&lt;a href="https://github.com/godotengine/godot/pull/94799">GH-94799&lt;/a>).&lt;/li>
&lt;li>Core: Handle the smoothstep degenerate case of empty range (&lt;a href="https://github.com/godotengine/godot/pull/93149">GH-93149&lt;/a>).&lt;/li>
&lt;li>Navigation: Add triangulation partition option to 2D navigation mesh baking (&lt;a href="https://github.com/godotengine/godot/pull/92560">GH-92560&lt;/a>).&lt;/li>
&lt;li>XR: OpenXR: Add support for visibility mask (&lt;a href="https://github.com/godotengine/godot/pull/91750">GH-91750&lt;/a>).&lt;/li>
&lt;li>Physics: Fix SoftBody3D pinned points breaking when reloading scene (&lt;a href="https://github.com/godotengine/godot/pull/86310">GH-86310&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h2 id="changelog">Changelog&lt;/h2>
&lt;p>&lt;strong>99 contributors&lt;/strong> submitted &lt;strong>228 improvements&lt;/strong> for this new snapshot. See our &lt;a href="https://godotengine.github.io/godot-interactive-changelog/#4.4-dev1">&lt;strong>interactive changelog&lt;/strong>&lt;/a> for the complete list of changes since 4.3-stable.&lt;/p>
&lt;p>This release is built from commit &lt;a href="https://github.com/godotengine/godot/commit/28a72fa4344befeae251d8e9b11b84acd601a244">&lt;code class="language-plaintext highlighter-rouge">28a72fa43&lt;/code>&lt;/a>.&lt;/p>
&lt;h2 id="downloads">Downloads&lt;/h2>
&lt;div class="card card-download">
&lt;a class="card-download-link" href="/download/archive/4.4-dev1">
Download Godot 4.4 dev1
&lt;/a>
&lt;div class="card-download-details">
&lt;img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-4-dev-1.webp" />
&lt;div class="card-download-platforms">
&lt;div class="download-platform platform-linux">
&lt;img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" />
Linux
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev1/Godot_v4.4-dev1_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev1/Godot_v4.4-dev1_mono_linux_x86_64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-macos">
&lt;img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" />
macOS
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev1/Godot_v4.4-dev1_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev1/Godot_v4.4-dev1_mono_macos.universal.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-windows">
&lt;img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" />
Windows
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev1/Godot_v4.4-dev1_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.4-dev1/Godot_v4.4-dev1_mono_win64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;div class="card-download-sublinks">
&lt;a class="card-download-other" href="/download/archive/4.4-dev1">
Export templates and other downloads
&lt;/a>
&lt;a class="card-download-donate" href="/donate/">
Make a Donation
&lt;/a>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Standard build&lt;/strong> includes support for GDScript and GDExtension.&lt;/p>
&lt;p>&lt;strong>.NET build&lt;/strong> (marked as &lt;code class="language-plaintext highlighter-rouge">mono&lt;/code>) includes support for C#, as well as GDScript and GDExtension.&lt;/p>
&lt;ul>
&lt;li>See also &lt;a href="https://docs.godotengine.org/en/latest/tutorials/scripting/c_sharp/index.html#c-platform-support">C# platform support&lt;/a>.&lt;/li>
&lt;/ul>
&lt;div class="card card-warning">
&lt;p>
While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition &lt;strong>a pre-release piece of software&lt;/strong>. 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.
&lt;/p>
&lt;/div>
&lt;h2 id="known-issues">Known issues&lt;/h2>
&lt;p>There are currently no known issues introduced by this release.&lt;/p>
&lt;p>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 &lt;a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug+">known bugs&lt;/a>.&lt;/p>
&lt;h2 id="bug-reports">Bug reports&lt;/h2>
&lt;p>As a tester, we encourage you to &lt;a href="https://github.com/godotengine/godot/issues">open bug reports&lt;/a> if you experience issues with this release. Please check the &lt;a href="https://github.com/godotengine/godot/issues">existing issues on GitHub&lt;/a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.&lt;/p>
&lt;p>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).&lt;/p>
&lt;h2 id="support">Support&lt;/h2>
&lt;p>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 &lt;a href="https://fund.godotengine.org/">generous donations from the Godot community&lt;/a>. A big thank you to everyone who has contributed &lt;a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time&lt;/a> or &lt;a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support&lt;/a> to the project!&lt;/p>
&lt;p>If you’d like to support the project financially and help us secure our future hires, you can do so using the &lt;a href="https://fund.godotengine.org/">Godot Development Fund&lt;/a> platform managed by &lt;a href="https://godot.foundation/">Godot Foundation&lt;/a>. There are also several &lt;a href="/donate">alternative ways to donate&lt;/a> which you may find more suitable.&lt;/p></content><author><name>Clay John</name></author><category term="Pre-release"/></entry><entry><title>Godot 4.3, a shared effort</title><link href="https://godotengine.org/article/godot-4-3-a-shared-effort/"/><updated>2024-08-15T11:00:00+00:00</updated><id>https://godotengine.org/article/godot-4-3-a-shared-effort/</id><summary>With over 3,500 commits authored by over 500 contributors, the latest Godot Engine release comes packed full of new features and improvements.</summary><content type="html"/><author><name>Godot contributors</name></author><category term="Release"/></entry><entry><title>Design of the Skeleton Modifier 3D</title><link href="https://godotengine.org/article/design-of-the-skeleton-modifier-3d/"/><updated>2024-08-12T10:00:00+00:00</updated><id>https://godotengine.org/article/design-of-the-skeleton-modifier-3d/</id><summary>We have reworked the skeleton bone update process to add SkeletonModifier3D for modifying the Skeleton.</summary><content type="html">&lt;style>article .content img { background-color: initial; }&lt;/style>
&lt;p>In Godot 4.3 we are adding a new node called &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code>. It is used to animate &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code>s outside of &lt;code class="language-plaintext highlighter-rouge">AnimationMixer&lt;/code> and is now the base class for several existing nodes.&lt;/p>
&lt;p>As part of this we have deprecated (but not removed) some of the pose override functionality in &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code> including:&lt;/p>
&lt;ul>
&lt;li>&lt;code class="language-plaintext highlighter-rouge">set_bone_global_pose_override()&lt;/code>&lt;/li>
&lt;li>&lt;code class="language-plaintext highlighter-rouge">get_bone_global_pose_override()&lt;/code>&lt;/li>
&lt;li>&lt;code class="language-plaintext highlighter-rouge">get_bone_global_pose_no_override()&lt;/code>&lt;/li>
&lt;li>&lt;code class="language-plaintext highlighter-rouge">clear_bones_global_pose_override()&lt;/code>&lt;/li>
&lt;/ul>
&lt;h1 id="did-the-pose-override-design-have-problems">Did the pose override design have problems?&lt;/h1>
&lt;p>&lt;img src="/storage/blog/design-of-the-skeleton-modifier-3d/mod.webp" alt="modification" />&lt;/p>
&lt;p>Previously, we recommended using the property &lt;code class="language-plaintext highlighter-rouge">global_pose_override&lt;/code> when modifying the bones. This was useful because the original pose was kept separately, so blend values could be set, and bones could be modified without changing the property in &lt;code class="language-plaintext highlighter-rouge">.tscn&lt;/code> file. However, the more complex people’s demands for Godot 3D became, the less it covered the use cases and became outdated.&lt;/p>
&lt;p>The main problem is the fact that “the processing order between &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code> and &lt;code class="language-plaintext highlighter-rouge">AnimationMixer&lt;/code> is changed depending on the &lt;code class="language-plaintext highlighter-rouge">SceneTree&lt;/code> structure`.&lt;/p>
&lt;p>&lt;strong>For example, it means that the following two scenes will have different results:&lt;/strong>&lt;/p>
&lt;p>&lt;img src="/storage/blog/design-of-the-skeleton-modifier-3d/different_process_orders.webp" alt="different process orders" />&lt;/p>
&lt;p>If there is a modifier such as IK or physical bone, in most cases, it needs to be applied to the result of the played animation. So they need to be processed after the &lt;code class="language-plaintext highlighter-rouge">AnimationMixer&lt;/code>.&lt;/p>
&lt;p>In the old skeleton modifier design with bone pose override you must place those modifiers below the &lt;code class="language-plaintext highlighter-rouge">AnimationMixer&lt;/code>. However as scene trees become more complex, it becomes difficult to keep track of the processing order. Also the scene might be imported from glTF which cannot be edited without localization, so managing node order becomes tedious.&lt;/p>
&lt;p>Moreover, if multiple nodes use bone pose override, it breaks the modified result.&lt;/p>
&lt;p>&lt;strong>Let’s imagine a case in which bone modification is performed in the following order:&lt;/strong>&lt;/p>
&lt;div class="language-plaintext highlighter-rouge">&lt;div class="highlight">&lt;pre class="highlight">&lt;code>AnimationMixer -&amp;gt; ModifierA -&amp;gt; ModifierB
&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;p>Keep in mind that both &lt;code class="language-plaintext highlighter-rouge">ModifierA&lt;/code> and &lt;code class="language-plaintext highlighter-rouge">ModifierB&lt;/code> need to get the bone pose that was processed immediately before.&lt;/p>
&lt;p>The &lt;code class="language-plaintext highlighter-rouge">AnimationMixer&lt;/code> does not use &lt;code class="language-plaintext highlighter-rouge">set_bone_global_pose_override()&lt;/code>, so it transforms the original pose as &lt;code class="language-plaintext highlighter-rouge">set_bone_pose_rotation()&lt;/code>. This means that the input to &lt;code class="language-plaintext highlighter-rouge">ModifierA&lt;/code> must be retrieved from the original pose with &lt;code class="language-plaintext highlighter-rouge">get_bone_global_pose_no_override()&lt;/code> and the output must be retreived from the override with &lt;code class="language-plaintext highlighter-rouge">get_bone_global_pose_override()&lt;/code>. In this case, if &lt;code class="language-plaintext highlighter-rouge">ModiferB&lt;/code> wants to consider the output of &lt;code class="language-plaintext highlighter-rouge">ModiferA&lt;/code>, both the input and output of &lt;code class="language-plaintext highlighter-rouge">ModifierB&lt;/code> must be the override with &lt;code class="language-plaintext highlighter-rouge">get_bone_global_pose_override()&lt;/code>.&lt;/p>
&lt;p>Then, can the order of &lt;code class="language-plaintext highlighter-rouge">ModifierA&lt;/code> and &lt;code class="language-plaintext highlighter-rouge">ModifierB&lt;/code> be interchanged?&lt;/p>
&lt;p>–The answer is “NO”.&lt;/p>
&lt;p>Because &lt;code class="language-plaintext highlighter-rouge">ModifierB&lt;/code>’s input is now &lt;code class="language-plaintext highlighter-rouge">get_bone_global_pose_override()&lt;/code> which is different from &lt;code class="language-plaintext highlighter-rouge">get_bone_global_pose_no_override()&lt;/code>, so &lt;code class="language-plaintext highlighter-rouge">ModifierB&lt;/code> cannot get the original pose set by the &lt;code class="language-plaintext highlighter-rouge">AnimationMixer&lt;/code>.&lt;/p>
&lt;p>As I described above, the override design was very weak in terms of process ordering.&lt;/p>
&lt;h1 id="how-does-the-new-skeleton-design-work-with-skeletonmodifier3d">How does the new skeleton design work with SkeletonModifier3D?&lt;/h1>
&lt;p>&lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> is designed to modify bones in the &lt;code class="language-plaintext highlighter-rouge">_process_modification()&lt;/code> virtual method. This means that if you want to develop a custom &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code>, you will need to modify the bones within that method.&lt;/p>
&lt;p>&lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> does not execute modifications by itself, but is executed by the parent of &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code>. By placing &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> as a child of &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code>, they are registered in &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code>, and the process is executed only once per frame in the &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code> update process. Then, &lt;strong>the processing order between modifiers is guaranteed to be the same as the order of the children in &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code>’s child list&lt;/strong>.&lt;/p>
&lt;p>Since &lt;code class="language-plaintext highlighter-rouge">AnimationMixer&lt;/code> is applied before the &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code> update process, &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> is guaranteed to run after &lt;code class="language-plaintext highlighter-rouge">AnimationMixer&lt;/code>. Also, they do not require &lt;code class="language-plaintext highlighter-rouge">bone_pose_global_override&lt;/code>; This removes any confusion as to whether we should use override or not.&lt;/p>
&lt;p>&lt;strong>Here is a SkeletonModifier3D sequence diagram:&lt;/strong>&lt;/p>
&lt;p>&lt;img src="/storage/blog/design-of-the-skeleton-modifier-3d/skeleton_modifier_process.webp" alt="skeleton modifier process" />&lt;/p>
&lt;p>Dirty flag resolution may be performed several times per frame, but the update process is a deferred call and is performed only once per frame.&lt;/p>
&lt;p>At the beginning of the update process, it stores the pose before the modification process temporarily. When the modification process is complete and applied to the skin, the pose is rolled back to the temporarily stored pose. This performs the role of the past &lt;code class="language-plaintext highlighter-rouge">bone_pose_global_override&lt;/code> which stored the override pose separate from the original pose.&lt;/p>
&lt;p>By the way, you may want to get the pose after the modification, or you may wonder why the modifier in the later part cannot enter the original pose when there are multiple modifiers.&lt;/p>
&lt;p>We have added some signals for cases where you need to retrieve the pose at each point in time, so you can use them.&lt;/p>
&lt;ul>
&lt;li>AnimationMixer: mixer_applied
&lt;ul>
&lt;li>Notifies when the blending result related have been applied to the target objects&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>SkeletonModifier3D: modification_processed
&lt;ul>
&lt;li>Notifies when the modification have been finished&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Skeleton3D: skeleton_updated
&lt;ul>
&lt;li>Emitted when the final pose has been calculated will be applied to the skin in the update process&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Also, note that this process depends on the &lt;code class="language-plaintext highlighter-rouge">Skeleton3D.modifier_callback_mode_process&lt;/code> property.&lt;/p>
&lt;p>&lt;img src="/storage/blog/design-of-the-skeleton-modifier-3d/modifier_callback_mode_process.webp" alt="modifier callback mode process property" />&lt;/p>
&lt;p>For example, in a use case that the node uses the physics process outside of &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code> and it affects &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code>, the property must be set to &lt;code class="language-plaintext highlighter-rouge">Physics&lt;/code>.&lt;/p>
&lt;p>Finally, now we can say that &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> does not make it impossible to do anything that was possible in the past.&lt;/p>
&lt;h1 id="how-to-make-a-custom-skeletonmodifier3d">How to make a custom SkeletonModifier3D?&lt;/h1>
&lt;p>&lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> is a virtual class, so you can’t add it as stand alone node to a scene.&lt;/p>
&lt;p>&lt;img src="/storage/blog/design-of-the-skeleton-modifier-3d/add_skeleton_modifier.webp" alt="add skeleton modifier" />&lt;/p>
&lt;p>Then, how do we create a custom &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code>? Let’s try to create a simple custom &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> that points the Y-axis of a bone to a specific coordinate.&lt;/p>
&lt;h2 id="1-create-a-script">1. Create a script&lt;/h2>
&lt;p>Create a blank gdscript file that extends &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code>. At this time, register the custom &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> you created with the &lt;code class="language-plaintext highlighter-rouge">class_name&lt;/code> declaration so that it can be added to the scene dock.&lt;/p>
&lt;div class="language-gdscript highlighter-rouge">&lt;div class="highlight">&lt;pre class="highlight">&lt;code>&lt;span class="k">class_name&lt;/span> &lt;span class="n">CustomModifier&lt;/span>
&lt;span class="k">extends&lt;/span> &lt;span class="n">SkeletonModifier3D&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;p>&lt;img src="/storage/blog/design-of-the-skeleton-modifier-3d/register_custom_modifier.webp" alt="register custom modifier" />&lt;/p>
&lt;h2 id="2-add-some-declarations-and-properties">2. Add some declarations and properties&lt;/h2>
&lt;p>If necessary, add a property to set the bone by declaring &lt;code class="language-plaintext highlighter-rouge">@export_enum&lt;/code> and set the &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code> bone names as a hint in &lt;code class="language-plaintext highlighter-rouge">_validate_property()&lt;/code>. You also need to declare &lt;code class="language-plaintext highlighter-rouge">@tool&lt;/code> if you want to select it in the editor.&lt;/p>
&lt;div class="language-gdscript highlighter-rouge">&lt;div class="highlight">&lt;pre class="highlight">&lt;code>&lt;span class="err">@&lt;/span>&lt;span class="k">tool&lt;/span>
&lt;span class="k">class_name&lt;/span> &lt;span class="n">CustomModifier&lt;/span>
&lt;span class="k">extends&lt;/span> &lt;span class="n">SkeletonModifier3D&lt;/span>
&lt;span class="err">@&lt;/span>&lt;span class="k">export&lt;/span> &lt;span class="k">var&lt;/span> &lt;span class="n">target_coordinate&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">Vector3&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kt">Vector3&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="err">@&lt;/span>&lt;span class="n">export_enum&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">" "&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">var&lt;/span> &lt;span class="n">bone&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">String&lt;/span>
&lt;span class="k">func&lt;/span> &lt;span class="nf">_validate_property&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">property&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">Dictionary&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">void&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="n">property&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">name&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">"bone"&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">skeleton&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Skeleton3D&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_skeleton&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="n">skeleton&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">property&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hint&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">PROPERTY_HINT_ENUM&lt;/span>
&lt;span class="n">property&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hint_string&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">skeleton&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_concatenated_bone_names&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;p>The &lt;code class="language-plaintext highlighter-rouge">@tool&lt;/code> declaration is also required for previewing modifications by &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code>, so you can consider it is required basically.&lt;/p>
&lt;p>&lt;img src="/storage/blog/design-of-the-skeleton-modifier-3d/bones_enum.webp" alt="bones enum" />&lt;/p>
&lt;h2 id="3-coding-calculations-of-the-modification-in-_process_modification">3. Coding calculations of the modification in &lt;code class="language-plaintext highlighter-rouge">_process_modification()&lt;/code>&lt;/h2>
&lt;div class="language-gdscript highlighter-rouge">&lt;div class="highlight">&lt;pre class="highlight">&lt;code>&lt;span class="err">@&lt;/span>&lt;span class="k">tool&lt;/span>
&lt;span class="k">class_name&lt;/span> &lt;span class="n">CustomModifier&lt;/span>
&lt;span class="k">extends&lt;/span> &lt;span class="n">SkeletonModifier3D&lt;/span>
&lt;span class="err">@&lt;/span>&lt;span class="k">export&lt;/span> &lt;span class="k">var&lt;/span> &lt;span class="n">target_coordinate&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">Vector3&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kt">Vector3&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="err">@&lt;/span>&lt;span class="n">export_enum&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">" "&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">var&lt;/span> &lt;span class="n">bone&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">String&lt;/span>
&lt;span class="k">func&lt;/span> &lt;span class="nf">_validate_property&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">property&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">Dictionary&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">void&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="n">property&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">name&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">"bone"&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">skeleton&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Skeleton3D&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_skeleton&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="n">skeleton&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">property&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hint&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">PROPERTY_HINT_ENUM&lt;/span>
&lt;span class="n">property&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hint_string&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">skeleton&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_concatenated_bone_names&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="k">func&lt;/span> &lt;span class="nf">_process_modification&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">void&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">skeleton&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Skeleton3D&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_skeleton&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="n">skeleton&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="c1"># Never happen, but for the safety.&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">bone_idx&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">skeleton&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">find_bone&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bone&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">parent_idx&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">skeleton&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_bone_parent&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bone_idx&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">pose&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Transform3D&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">skeleton&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">global_transform&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">skeleton&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_bone_global_pose&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bone_idx&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">looked_at&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Transform3D&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">_y_look_at&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pose&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">target_coordinate&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">skeleton&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">set_bone_global_pose&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bone_idx&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">Transform3D&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">looked_at&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">basis&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">orthonormalized&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">skeleton&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_bone_global_pose&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bone_idx&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">origin&lt;/span>&lt;span class="p">))&lt;/span>
&lt;span class="k">func&lt;/span> &lt;span class="nf">_y_look_at&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">from&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Transform3D&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">target&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">Vector3&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">Transform3D&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">t_v&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">Vector3&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">target&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">from&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">origin&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">v_y&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">Vector3&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">t_v&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">normalized&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">v_z&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">Vector3&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">from&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">basis&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cross&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v_y&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">v_z&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">v_z&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">normalized&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">v_x&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">Vector3&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">v_y&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cross&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v_z&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">from&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">basis&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kt">Basis&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v_x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">v_y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">v_z&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="n">from&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;p>&lt;code class="language-plaintext highlighter-rouge">_process_modification()&lt;/code> is a virtual method called in the update process after the AnimationMixer has been applied, as described in the sequence diagram above. If you modify bones in it, it is guaranteed that the order in which the modifications are applied will match the order of &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> of the &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code>’s child list.&lt;/p>
&lt;video autoplay="" loop="" muted="" playsinline="">
&lt;source src="/storage/blog/design-of-the-skeleton-modifier-3d/custom_modifier.webm?1" type="video/webm" />
&lt;/video>
&lt;p>Note that the modification should always be applied to the bones at 100% amount. Because &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> has an &lt;code class="language-plaintext highlighter-rouge">influence&lt;/code> property, the value of which is processed and interpolated by &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code>. In other words, you do not need to write code to change the amount of modification applied; You should avoid implementing duplicate interpolation processes. However, if your custom &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> can specify multiple bones and you want to manage the amount separately for each bone, it makes sense that adding the amount properties for each bone to your custom modifier.&lt;/p>
&lt;p>Finally, remember that this method will not be called if the parent is not a &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code>.&lt;/p>
&lt;h2 id="4-retrieve-modified-values-from-other-nodes">4. Retrieve modified values from other Nodes&lt;/h2>
&lt;p>The modification by &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> is immediately discarded after it is applied to the skin, so it is not reflected in the bone pose of &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code> during &lt;code class="language-plaintext highlighter-rouge">_process()&lt;/code>.&lt;/p>
&lt;p>If you need to retrieve the modificated pose values from other nodes, you must connect them to the appropriate signals.&lt;/p>
&lt;p>For example, this is a &lt;code class="language-plaintext highlighter-rouge">Label3D&lt;/code> which reflects the modification after the animation is applied and after all modifications are processed.&lt;/p>
&lt;div class="language-gdscript highlighter-rouge">&lt;div class="highlight">&lt;pre class="highlight">&lt;code>&lt;span class="err">@&lt;/span>&lt;span class="k">tool&lt;/span>
&lt;span class="k">extends&lt;/span> &lt;span class="n">Label3D&lt;/span>
&lt;span class="err">@&lt;/span>&lt;span class="k">onready&lt;/span> &lt;span class="k">var&lt;/span> &lt;span class="n">poses&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kt">Dictionary&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="s2">"animated_pose"&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">""&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">"modified_pose"&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">""&lt;/span> &lt;span class="p">}&lt;/span>
&lt;span class="k">func&lt;/span> &lt;span class="nf">_update_text&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">void&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">text&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">"animated_pose:"&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">poses&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">"animated_pose"&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">"&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">"&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">"modified_pose:"&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">poses&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">"modified_pose"&lt;/span>&lt;span class="p">])&lt;/span>
&lt;span class="k">func&lt;/span> &lt;span class="nf">_on_animation_player_mixer_applied&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">void&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">poses&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">"animated_pose"&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">$&lt;/span>&lt;span class="s2">"../Armature/Skeleton3D"&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_bone_pose&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">_update_text&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="k">func&lt;/span> &lt;span class="nf">_on_skeleton_3d_skeleton_updated&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">void&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">poses&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">"modified_pose"&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">$&lt;/span>&lt;span class="s2">"../Armature/Skeleton3D"&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_bone_pose&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">_update_text&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;p>You can see the pose is different depending on the signal.&lt;/p>
&lt;p>&lt;img src="/storage/blog/design-of-the-skeleton-modifier-3d/modified_pose.webp" alt="modified pose" />&lt;/p>
&lt;h3 id="download">Download&lt;/h3>
&lt;p>&lt;a href="/storage/blog/design-of-the-skeleton-modifier-3d/skeleton-modifier-3d-demo-project.zip">skeleton-modifier-3d-demo-project.zip&lt;/a>&lt;/p>
&lt;h1 id="do-i-always-need-to-create-a-custom-skeletonmodifier3d-when-modifying-a-skeleton3d-bone">Do I always need to create a custom SkeletonModifier3D when modifying a Skeleton3D bone?&lt;/h1>
&lt;p>As explained above, the modification provided by &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> is temporary. So &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> would be appropriate for effectors and controllers as &lt;strong>post FX&lt;/strong>.&lt;/p>
&lt;p>If you want permanent modifications, i.e., if you want to develop something like a bone editor, then it makes sense that it is not a &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code>. Also, in simple cases where it is guaranteed that no other &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> will be used in the scene, your judgment will prevail.&lt;/p>
&lt;h1 id="what-kind-of-skeletonmodifier3d-nodes-are-included-in-godot-43">What kind of SkeletonModifier3D nodes are included in Godot 4.3?&lt;/h1>
&lt;p>For now, Godot 4.3 will be containing only &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> which is a migration of several existing nodes that have been in existence since 4.0.&lt;/p>
&lt;p>But, there is good news! We are planning to add some built in &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code>s in Godot 4.4, such as new IK, constraint, and springbone/jiggle.&lt;/p>
&lt;p>If you are interested in developing your own effect using &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code>, feel free to make a proposal to include it in core.&lt;/p>
&lt;h2 id="support">Support&lt;/h2>
&lt;p>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 &lt;a href="https://fund.godotengine.org/">generous donations from the Godot community&lt;/a>. A big thank you to everyone who has contributed &lt;a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time&lt;/a> or &lt;a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support&lt;/a> to the project!&lt;/p>
&lt;p>If you’d like to support the project financially and help us secure our future hires, you can do so using the &lt;a href="https://fund.godotengine.org/">Godot Development Fund&lt;/a> platform managed by &lt;a href="https://godot.foundation/">Godot Foundation&lt;/a>. There are also several &lt;a href="/donate">alternative ways to donate&lt;/a> which you may find more suitable.&lt;/p></content><author><name>Silc Renew</name></author><category term="Progress Report"/></entry><entry><title>Release candidate: Godot 4.3 RC 3</title><link href="https://godotengine.org/article/release-candidate-godot-4-3-rc-3/"/><updated>2024-08-08T14:00:00+00:00</updated><id>https://godotengine.org/article/release-candidate-godot-4-3-rc-3/</id><summary>With all known major regressions fixed, we are now publishing a third release candidate to confirm that 4.3 is ready to go stable.</summary><content type="html">&lt;p>Third time’s the charm! A few more regressions have been found and fixed thanks to our previous two &lt;a href="https://en.wikipedia.org/wiki/Software_release_life_cycle#Release_candidate">Release Candidates&lt;/a> for Godot 4.3, so we are now going for a third round to validate those last minute fixes.&lt;/p>
&lt;p>All issues and PRs which were still on the 4.3 milestone but not critical have now been retriaged and postponed, which means the release should be good to go! Of course we haven’t fixed all known bugs in the engine, but we believe we’ve addressed the ones that could prevent users from having a better experience in 4.3 than in the current 4.2 stable branch.&lt;/p>
&lt;p>Godot is a big piece of software and it’s hard for contributors and even unit tests to validate all areas of the engine when developing new features or bug fixes. So we rely on extensive testing from the community to find engine issues while testing dev, beta, and RC snapshots in your projects, and reporting them so that we can fix them prior to tagging the 4.3-stable release.&lt;/p>
&lt;p>Please, consider &lt;a href="https://fund.godotengine.org">supporting the project financially&lt;/a>, 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.&lt;/p>
&lt;p>&lt;a href="#downloads">Jump to the &lt;strong>Downloads&lt;/strong> section&lt;/a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also &lt;a href="https://editor.godotengine.org/releases/4.3.rc3/">try the &lt;strong>Web editor&lt;/strong>&lt;/a> or the &lt;strong>Android editor&lt;/strong> for this release. If you are interested in the latter, please request to join &lt;a href="https://groups.google.com/g/godot-testers">our testing group&lt;/a> to get access to pre-release builds.&lt;/p>
&lt;hr />
&lt;p>&lt;em>The cover illustration is from&lt;/em> &lt;a href="https://orama-interactive.itch.io/pixelorama">&lt;strong>Pixelorama&lt;/strong>&lt;/a>, &lt;em>an increasingly popular open source pixel art editor made with Godot by &lt;a href="https://www.oramainteractive.com/">Orama Interactive&lt;/a> and contributors. They just released their &lt;a href="https://orama-interactive.itch.io/pixelorama/devlog/773099/pixelorama-v10-is-finally-out">1.0 version&lt;/a>, and Pixelorama is now available both &lt;a href="https://orama-interactive.itch.io/pixelorama">on itch.io&lt;/a> and &lt;a href="https://store.steampowered.com/app/2779170/Pixelorama/">on Steam&lt;/a>, where you can purchase it to support developers. And of course, the full source code is available &lt;a href="https://github.com/Orama-Interactive/Pixelorama">on GitHub&lt;/a>.&lt;/em>&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>We covered the most important highlights from Godot 4.3 in the previous &lt;a href="/article/dev-snapshot-godot-4-3-beta-1/">4.3 beta 1 blog post&lt;/a>, so if you haven’t read that one, have a look to be introduced to the main new features added in the 4.3 release.&lt;/p>
&lt;p>Especially if you’re testing 4.3 for the first time, you’ll want to get a condensed overview of what new features you might want to make use of.&lt;/p>
&lt;p>This section covers changes made since the previous &lt;a href="/article/release-candidate-godot-4-3-rc-2/">RC 2 snapshot&lt;/a>, which are mostly regression fixes, or “safe” fixes to longstanding issues.&lt;/p>
&lt;p>Here’s a selection of the some of most relevant ones:&lt;/p>
&lt;ul>
&lt;li>Animation: Snap current position to the edge on animation finished (&lt;a href="https://github.com/godotengine/godot/pull/95023">GH-95023&lt;/a>).&lt;/li>
&lt;li>Animation: Fix crash on reimport scene with animations (&lt;a href="https://github.com/godotengine/godot/pull/95084">GH-95084&lt;/a>).&lt;/li>
&lt;li>Animation: Make &lt;code class="language-plaintext highlighter-rouge">Skeleton3D&lt;/code> bone simulator an internal child (&lt;a href="https://github.com/godotengine/godot/pull/95239">GH-95239&lt;/a>).&lt;/li>
&lt;li>Core: ResourceLoader: Add check to prevent double free crashes (&lt;a href="https://github.com/godotengine/godot/pull/95186">GH-95186&lt;/a>).&lt;/li>
&lt;li>Editor: Various fixes to the project manager create/import dialogs (&lt;a href="https://github.com/godotengine/godot/pull/95062">GH-95062&lt;/a>, &lt;a href="https://github.com/godotengine/godot/pull/95086">GH-95086&lt;/a>, &lt;a href="https://github.com/godotengine/godot/pull/95245">GH-95245&lt;/a>).&lt;/li>
&lt;li>Editor: Don’t drop &lt;code class="language-plaintext highlighter-rouge">PackedScene&lt;/code> as property (&lt;a href="https://github.com/godotengine/godot/pull/95090">GH-95090&lt;/a>).&lt;/li>
&lt;li>GDScript: Fix unnecessary calls to &lt;code class="language-plaintext highlighter-rouge">remove_parser&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/95115">GH-95115&lt;/a>).&lt;/li>
&lt;li>GUI: PopupMenu: Increase mouse button release timeout and reset it from &lt;code class="language-plaintext highlighter-rouge">post_popup&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/95232">GH-95232&lt;/a>).&lt;/li>
&lt;li>Import: Fix performance issue reimport file reload scene (&lt;a href="https://github.com/godotengine/godot/pull/95225">GH-95225&lt;/a>, &lt;a href="https://github.com/godotengine/godot/pull/95264">GH-95264&lt;/a>).&lt;/li>
&lt;li>Input: X11: Use motion event button state instead of async state (&lt;a href="https://github.com/godotengine/godot/pull/95008">GH-95008&lt;/a>).&lt;/li>
&lt;li>Input: Windows: Reject &lt;code class="language-plaintext highlighter-rouge">WM_POINTER(UP/DOWN)&lt;/code> messages for non pen pointer type (&lt;a href="https://github.com/godotengine/godot/pull/95155">GH-95155&lt;/a>).&lt;/li>
&lt;li>Multiplayer: ENet: Better handle disconnected peers in DTLS server (&lt;a href="https://github.com/godotengine/godot/pull/95067">GH-95067&lt;/a>).&lt;/li>
&lt;li>Multiplayer: Avoid error spam in relay protocol when clients disconnect (&lt;a href="https://github.com/godotengine/godot/pull/95192">GH-95192&lt;/a>).&lt;/li>
&lt;li>Multiplayer: Fix relay protocol routing with negative targets (&lt;a href="https://github.com/godotengine/godot/pull/95194">GH-95194&lt;/a>).&lt;/li>
&lt;li>Network: WS: Fix &lt;code class="language-plaintext highlighter-rouge">set_no_delay&lt;/code> on Windows (&lt;a href="https://github.com/godotengine/godot/pull/95233">GH-95233&lt;/a>).&lt;/li>
&lt;li>Porting: Windows: Check if transparency is enabled in the project setting before applying DWM blur (&lt;a href="https://github.com/godotengine/godot/pull/95009">GH-95009&lt;/a>).&lt;/li>
&lt;li>Porting: macOS: Attempt to terminate process normally before using &lt;code class="language-plaintext highlighter-rouge">forceTerminate&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/95191">GH-95191&lt;/a>).&lt;/li>
&lt;li>Porting: macOS: Load &lt;code class="language-plaintext highlighter-rouge">OpenGL.framework&lt;/code> by path to avoid issues with non-Latin executable names (&lt;a href="https://github.com/godotengine/godot/pull/95235">GH-95235&lt;/a>).&lt;/li>
&lt;li>Rendering: D3D12: Avoid cases of redundant render target clears (&lt;a href="https://github.com/godotengine/godot/pull/95064">GH-95064&lt;/a>).&lt;/li>
&lt;li>Rendering: D3D12: Avoid crash on exit (&lt;a href="https://github.com/godotengine/godot/pull/95074">GH-95074&lt;/a>).&lt;/li>
&lt;li>Rendering: Fix LightmapGI causes crash when using &lt;code class="language-plaintext highlighter-rouge">--headless&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/95103">GH-95103&lt;/a>).&lt;/li>
&lt;li>Shaders: VisualShader: Reduce size changes of nodes when connecting/disconnecting (&lt;a href="https://github.com/godotengine/godot/pull/95061">GH-95061&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h2 id="changelog">Changelog&lt;/h2>
&lt;p>&lt;strong>18 contributors&lt;/strong> submitted &lt;strong>40 improvements&lt;/strong> for this new snapshot. See our &lt;a href="https://godotengine.github.io/godot-interactive-changelog/#4.3-rc3">&lt;strong>interactive changelog&lt;/strong>&lt;/a> for the complete list of changes since the 4.3-rc2 snapshot. You can also review &lt;a href="https://godotengine.github.io/godot-interactive-changelog/#4.3">all changes included in 4.3&lt;/a> compared to the previous 4.2 feature release.&lt;/p>
&lt;p>This release is built from commit &lt;a href="https://github.com/godotengine/godot/commit/03afb92efa18874da19f7fc185a32c005d20aa1d">&lt;code class="language-plaintext highlighter-rouge">03afb92ef&lt;/code>&lt;/a>.&lt;/p>
&lt;h2 id="downloads">Downloads&lt;/h2>
&lt;div class="card card-download">
&lt;a class="card-download-link" href="/download/archive/4.3-rc3">
Download Godot 4.3 rc3
&lt;/a>
&lt;div class="card-download-details">
&lt;img class="lightbox-ignore" src="/storage/blog/covers/release-candidate-godot-4-3-rc-3.webp" />
&lt;div class="card-download-platforms">
&lt;div class="download-platform platform-linux">
&lt;img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" />
Linux
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.3-rc3/Godot_v4.3-rc3_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.3-rc3/Godot_v4.3-rc3_mono_linux_x86_64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-macos">
&lt;img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" />
macOS
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.3-rc3/Godot_v4.3-rc3_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.3-rc3/Godot_v4.3-rc3_mono_macos.universal.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;div class="download-platform platform-windows">
&lt;img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" />
Windows
&lt;/div>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.3-rc3/Godot_v4.3-rc3_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
&lt;div class="download-title">
Standard
&lt;/div>
&lt;/a>
&lt;a href="https://github.com/godotengine/godot-builds/releases/download/4.3-rc3/Godot_v4.3-rc3_mono_win64.zip" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows">
&lt;div class="download-title">
.NET
&lt;/div>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;div class="card-download-sublinks">
&lt;a class="card-download-other" href="/download/archive/4.3-rc3">
Export templates and other downloads
&lt;/a>
&lt;a class="card-download-donate" href="/donate/">
Make a Donation
&lt;/a>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Standard build&lt;/strong> includes support for GDScript and GDExtension.&lt;/p>
&lt;p>&lt;strong>.NET build&lt;/strong> (marked as &lt;code class="language-plaintext highlighter-rouge">mono&lt;/code>) includes support for C#, as well as GDScript and GDExtension.&lt;/p>
&lt;ul>
&lt;li>See also &lt;a href="https://docs.godotengine.org/en/latest/tutorials/scripting/c_sharp/index.html#c-platform-support">C# platform support&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>If you want to test the new Windows ARM64 builds, you will now find them listed in the usual download page.&lt;/p>
&lt;div class="card card-warning">
&lt;p>
While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition &lt;strong>a pre-release piece of software&lt;/strong>. 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.
&lt;/p>
&lt;/div>
&lt;h2 id="known-issues">Known issues&lt;/h2>
&lt;p>During the Release Candidate stage, we focus exclusively on solving showstopping regressions (i.e. something that worked in a previous release is now broken, without workaround). You can have a look at our current &lt;a href="https://github.com/orgs/godotengine/projects/61">list of regressions and significant issues&lt;/a> which we aim to address before releasing 4.3. This list is dynamic and will be updated if we discover new blocking issues after more users start testing the RC snapshots.&lt;/p>
&lt;p>With every release, we are aware that there are going to be various issues which have already been reported but haven’t been fixed yet, due to limited resources. See the GitHub issue tracker for a complete list of &lt;a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug+">known bugs&lt;/a>.&lt;/p>
&lt;h2 id="bug-reports">Bug reports&lt;/h2>
&lt;p>As a tester, we encourage you to &lt;a href="https://github.com/godotengine/godot/issues">open bug reports&lt;/a> if you experience issues with this release. Please check the &lt;a href="https://github.com/godotengine/godot/issues">existing issues on GitHub&lt;/a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.&lt;/p>
&lt;p>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).&lt;/p>
&lt;h2 id="support">Support&lt;/h2>
&lt;p>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 &lt;a href="https://fund.godotengine.org/">generous donations from the Godot community&lt;/a>. A big thank you to everyone who has contributed &lt;a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time&lt;/a> or &lt;a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support&lt;/a> to the project!&lt;/p>
&lt;p>If you’d like to support the project financially and help us secure our future hires, you can do so using the &lt;a href="https://fund.godotengine.org/">Godot Development Fund&lt;/a> platform managed by &lt;a href="https://godot.foundation/">Godot Foundation&lt;/a>. There are also several &lt;a href="/donate">alternative ways to donate&lt;/a> which you may find more suitable.&lt;/p></content><author><name>Rémi Verschelde</name></author><category term="Pre-release"/></entry></feed>