Files
godot-website/rss.xml
2025-01-16 21:41:59 +00:00

2661 lines
279 KiB
XML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Godot Engine Official</title><link/><description/><atom:link href="https://godotengine.org/rss.xml" rel="self" type="application/rss+xml"/><item><title>Dev snapshot: Godot 4.4 beta 1</title><link>https://godotengine.org/article/dev-snapshot-godot-4-4-beta-1/</link><summary>Godot 4.4 is on its way! Please lend a hand by testing this beta release and reporting your findings.</summary><description>&lt;p>We have reached the first beta release for the 4.4 release cycle. This officially marks the start of feature freeze for 4.4. This means contributors are encouraged to focus their efforts on fixing &lt;a href="https://github.com/godotengine/godot/issues?q=is%3Aopen+is%3Aissue+label%3Aregression+milestone%3A4.3">regressions&lt;/a> and other outstanding bugs. We wont risk merging any new features or risky bug fixes until after we release 4.4 and begin preparing for 4.5.&lt;/p>
&lt;p>We will aim to release 4.4 in around a month, but as usual, this timeline will depend on how quickly we are able to fix the outstanding bugs and what new bugs are identified in the beta process. We ask that users test these beta releases and report bugs as soon as you spot them to help us ensure a quick beta period and a timely release of 4.4.&lt;/p>
&lt;p>Please, consider &lt;a href="#support">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.beta1/">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/3146520/WEBFISHING/">&lt;strong>WEBFISHING&lt;/strong>&lt;/a>, &lt;em>a multiplayer online casual fishing game where you relax, hang out, make friends, and catch fish! You can buy the game &lt;a href="https://store.steampowered.com/app/3146520/WEBFISHING/">on Steam&lt;/a>, and follow the development on &lt;a href="https://x.com/westthewerst">Twitter&lt;/a>.&lt;/em>&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>Many features originally intended for 4.3 ended up making it into 4.4 meaning that Godot 4.4 is jam-packed with new features
despite having a much shorter development period than 4.3.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="#new-in-beta-1">New in Beta 1!&lt;/a>&lt;/li>
&lt;li>&lt;a href="#breaking-changes">Breaking changes&lt;/a>&lt;/li>
&lt;li>&lt;a href="#animation">Animation&lt;/a>&lt;/li>
&lt;li>&lt;a href="#audio">Audio&lt;/a>&lt;/li>
&lt;li>&lt;a href="#c">C#&lt;/a>&lt;/li>
&lt;li>&lt;a href="#core">Core&lt;/a>&lt;/li>
&lt;li>&lt;a href="#editor">Editor&lt;/a>&lt;/li>
&lt;li>&lt;a href="#gdscript">GDScript&lt;/a>&lt;/li>
&lt;li>&lt;a href="#import">Import&lt;/a>&lt;/li>
&lt;li>&lt;a href="#input">Input&lt;/a>&lt;/li>
&lt;li>&lt;a href="#physics">Physics&lt;/a>&lt;/li>
&lt;li>&lt;a href="#platforms">Platforms&lt;/a>&lt;/li>
&lt;li>&lt;a href="#rendering-and-shaders">Rendering and shaders&lt;/a>&lt;/li>
&lt;li>&lt;a href="#xr">XR&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="new-in-beta-1">New in Beta 1!&lt;/h3>
&lt;p>Normally our Beta 1 release notes summarize all the most exciting changes from the previous dev releases. But the team managed to merge an unusually large number of exciting PRs right before the beta this time around, so we would like to first introduce some of the exciting changes that are new in this beta.&lt;/p>
&lt;p>A short word of warning, new means “untested”, so consider the following the most untested part of the beta release and make sure to let us know if you run into any issues!&lt;/p>
&lt;h4 id="game-window-embedding">Game window embedding&lt;/h4>
&lt;p>Game window embedding makes it possible to run the game while being able to interact with the full editor window, without needing to move the game window to the side of the editor window. This is particularly useful on single-monitor setups and laptops where screen real estate is at a premium. However, this was challenging to implement as Godot runs the game as a separate process from the editor for two reasons:&lt;/p>
&lt;ul>
&lt;li>The game process uses its own address space and therefore doesnt have to share CPU/GPU resources with the editor (or at least, not as much as if it was the same process).&lt;/li>
&lt;li>Most importantly, if the game crashes for any reason, the editor does not crash at the same time (which could cause data loss).&lt;/li>
&lt;/ul>
&lt;p>The approach we decided upon relies on window management tricks instead, so that the game window is still a separate process, but it &lt;em>looks&lt;/em> like its embedded within the editor. Contributor Hilderin took upon this task and implemented seamless window embedding on Windows and Linux. Support in Android is coming in Beta 2 while support in macOS will require a different approach for technical reasons.&lt;/p>
&lt;p>Game window embedding was implemented to support our recent interactive in-game editing feature. Now you can easily run your game, override the game camera, and select objects in game, all from the editor!&lt;/p>
&lt;p>&lt;img src="/storage/blog/godot-4-4-beta-1/embedded-editor.webp" alt="Embedding game window in main editor" />&lt;/p>
&lt;p>For more information and a handy video, check out the PR &lt;a href="https://github.com/godotengine/godot/pull/99010">GH-99010&lt;/a>.&lt;/p>
&lt;h4 id="use-property-editors-instead-of-labels-to-display-keys">Use property editors instead of labels to display keys&lt;/h4>
&lt;p>With the addition of typed dictionaries, one glaring issue quickly revealed itself in the inspector: keys were always displayed as strings! While this was the case even before typed dictionaries, the issue only became more pronounced as it undermined the benefits of static-typing. bruvzg came to the rescue with &lt;a href="https://github.com/godotengine/godot/pull/100512">GH-100512&lt;/a>, which allows the inspector to treat ALL dictionary keys as a read-only field for their respective types.&lt;/p>
&lt;h4 id="apple-game-controller-improvements">Apple Game Controller improvements&lt;/h4>
&lt;p>Weve made some improvements to how Game Controllers work on iOS and macOS. Weve unified the code to make sure it works the same on both platforms, and weve fixed some bugs. These changes improve reliability of controller discovery and manipulating the rumble motors, which should make the gaming experience even better. You can learn more about these changes in &lt;a href="https://github.com/godotengine/godot/pull/94580">GH-94580&lt;/a>.&lt;/p>
&lt;h4 id="add-2d-shader-instance-uniforms">Add 2D shader instance uniforms&lt;/h4>
&lt;p>Previously, Godot only supported shader instance uniforms in Spatial shaders. Thanks to KoBeWi, EIREXE, huwpascoe, and Patrick Exner this release will add support for shader instance uniforms for CanvasItem shaders (&lt;a href="https://github.com/godotengine/godot/pull/99230">GH-99230&lt;/a>). Shader instance uniforms allow you to assign a different value to the uniform for each CanvasItem that uses it. Importantly, this works without breaking batching, so it can be used as a performant way to add unique effects to CanvasItems without having to juggle materials.&lt;/p>
&lt;h4 id="add-visualization-of-3d-particle-emission-shapes">Add visualization of 3D particle emission shapes&lt;/h4>
&lt;p>Up until now, users of the particle system had to guess from the emission shape properties where particles would appear. This improvement (&lt;a href="https://github.com/godotengine/godot/pull/100113">GH-100113&lt;/a>) by Patrick Exner adds a visualization of the emission shapes for 3D CPU and GPU particle systems.&lt;/p>
&lt;video autoplay="" loop="" muted="" playsinline="">
&lt;source src="/storage/blog/godot-4-4-beta-1/particle-emission.webm?1" type="video/webm" />
&lt;/video>
&lt;h4 id="add-support-for-metalfx-upscaling-on-macos-and-ios">Add support for MetalFX upscaling on macOS and iOS&lt;/h4>
&lt;p>Weve added support for MetalFX upscaling as an option for Apple platforms using the Metal driver. MetalFX provides a high-performance alternative to FSR1 or FSR2, leveraging Apples optimized GPU pipeline to deliver smooth upscaling and enhanced visual fidelity with minimal overhead.&lt;/p>
&lt;p>This integration ensures developers targeting macOS or iOS can achieve excellent rendering quality and performance on supported Apple hardware. For more details, check out &lt;a href="https://github.com/godotengine/godot/pull/99603">GH-99603&lt;/a>.&lt;/p>
&lt;h4 id="add-support-for-agx-tone-mapping">Add support for AgX tone mapping&lt;/h4>
&lt;p>AgX is the cool, new kid on the block when it comes to tone mapping algorithms. Last year Blender made waves by replacing their previous “filmic” tone mapper with AgX. We have implemented a version of AgX that closely matches Blenders while being not quite as high quality, but much more suitable for real time. AgX is a stylized tone mapper intended to give a filmic quality to images that handles very bright scenes much better than our other tone mappers.&lt;/p>
&lt;p>&lt;img src="/storage/blog/godot-4-4-beta-1/tonemap.webp" alt="ACES tone mapping left, AgX right" />&lt;/p>
&lt;h4 id="add-transparency-support-for-lightmapgi">Add transparency support for LightmapGI&lt;/h4>
&lt;p>Currently when baking lightmaps users have to choose between transparent objects casting shadows as if they were fully opaque, or not casting shadows at all. This has been a major limitation in both the quality of lightmap baking and the ergonomics of the lightmap baking workflow.&lt;/p>
&lt;p>In &lt;a href="https://github.com/godotengine/godot/pull/99538">GH-99538&lt;/a>, Hendrik Brucker added support for baking with transparent objects, including having tinted shadows (something that dynamic shadows dont support yet). Since this is brand new in Beta 1, please test it carefully and report any issues.&lt;/p>
&lt;p>&lt;img src="/storage/blog/godot-4-4-beta-1/lightmap-color.webp" alt="Lightmap shaders with color" />&lt;/p>
&lt;h3 id="breaking-changes">Breaking changes&lt;/h3>
&lt;p>We try to minimize breaking changes, but sometimes they are necessary in order to fix high priority issues. Where we do break compatibility, we do our best to make sure that the changes are minimal and require few changes in user projects.&lt;/p>
&lt;p>You can find a list of such issues by filtering the merged PRs in the 4.3 milestone with the &lt;a href="https://github.com/godotengine/godot/issues?q=milestone%3A4.4%20is%3Amerged%20label%3A%22breaks%20compat%22">&lt;code class="language-plaintext highlighter-rouge">breaks compat&lt;/code> label&lt;/a>. Here are some which are worth being aware of:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://godotengine.org/article/uid-changes-coming-to-godot-4-4/">Universal UID support.&lt;/a> This will create several &lt;code class="language-plaintext highlighter-rouge">.uid&lt;/code> files for resources that lacked this metadata. &lt;strong>These should be added to version control&lt;/strong>, much like &lt;code class="language-plaintext highlighter-rouge">.import&lt;/code> files. (&lt;a href="https://github.com/godotengine/godot/pull/97352">GH-97352&lt;/a>)&lt;/li>
&lt;li>Floats converted to strings now display as a decimal by default, even for whole numbers. This makes printed types more explicit, which can be used to catch bugs that were previously invisible. That is: &lt;code class="language-plaintext highlighter-rouge">print(1.0)&lt;/code> will now print &lt;code class="language-plaintext highlighter-rouge">1.0&lt;/code> instead of &lt;code class="language-plaintext highlighter-rouge">1&lt;/code>. (&lt;a href="https://github.com/godotengine/godot/pull/47502">GH-47502&lt;/a>)&lt;/li>
&lt;li>Changed &lt;code class="language-plaintext highlighter-rouge">KEY_MODIFIER_MASK&lt;/code> to correct value. Unlikely to directly affect any projects, as the previous value was simply wrong. (&lt;a href="https://github.com/godotengine/godot/pull/98441">GH-98441&lt;/a>)&lt;/li>
&lt;li>Controls &lt;code class="language-plaintext highlighter-rouge">offset_*&lt;/code> get/set type changed from &lt;code class="language-plaintext highlighter-rouge">int&lt;/code> to &lt;code class="language-plaintext highlighter-rouge">float&lt;/code>. This matches the behavior described in the documentation. (&lt;a href="https://github.com/godotengine/godot/pull/98443">GH-98443&lt;/a>)&lt;/li>
&lt;li>&lt;code class="language-plaintext highlighter-rouge">OpenXR&lt;/code> action maps opened in Godot 4.4 arent compatible with earlier versions. (&lt;a href="https://github.com/godotengine/godot/pull/98163">GH-98163&lt;/a>)&lt;/li>
&lt;li>&lt;code class="language-plaintext highlighter-rouge">CSGMesh3D&lt;/code> now explicitly requires the mesh to be manifold. A manifold mesh must be closed, have each edge connected to only two faces, and have volume. Commonly, this means that it needs to be a “watertight” mesh without any holes and where you can never see the backside of the triangles. (&lt;a href="https://github.com/godotengine/godot/pull/100014">GH-100014&lt;/a>)&lt;/li>
&lt;li>StringName Dictionary keys are saved as-is, without being converted to String beforehand. For the majority of cases this shouldnt cause breakage, as String &amp;amp; StringName are largely interchangeable. This should only be relevant when performing type-checking (&lt;code class="language-plaintext highlighter-rouge">is&lt;/code>, &lt;code class="language-plaintext highlighter-rouge">is_instance_of()&lt;/code>, &lt;code class="language-plaintext highlighter-rouge">typeof()&lt;/code>) and/or strict comparison (&lt;code class="language-plaintext highlighter-rouge">is_same()&lt;/code>). (&lt;a href="https://github.com/godotengine/godot/pull/70096">GH-70096&lt;/a>)&lt;/li>
&lt;li>Remove “Raycast Normals” and associated “Normal Split Angle” settings from LOD import. We removed this because the quality is almost always better now without it and import time is much faster without it. (&lt;a href="https://github.com/godotengine/godot/pull/93727">GH-93727&lt;/a>)&lt;/li>
&lt;li>Make PopupMenu/Panel shadows properly visible again. This makes PopupMenu/Panels transparent by default now. When using non-embedded popups, you will still need to enable &lt;code class="language-plaintext highlighter-rouge">display/window/per_pixel_transparency/allowed&lt;/code> to see the shadows. (&lt;a href="https://github.com/godotengine/godot/pull/91333">GH-91333&lt;/a>)&lt;/li>
&lt;li>The names of imported blend shapes and animation libraries from glTF files have changed as unsupported characters are automatically removed. All “&lt;code class="language-plaintext highlighter-rouge">:&lt;/code>” for blendshapes are now removed, and any of “&lt;code class="language-plaintext highlighter-rouge">/&lt;/code>”, “&lt;code class="language-plaintext highlighter-rouge">:&lt;/code>”, “&lt;code class="language-plaintext highlighter-rouge">,&lt;/code>”, and “&lt;code class="language-plaintext highlighter-rouge">[&lt;/code>” are removed for animation libraries. (&lt;a href="https://github.com/godotengine/godot/pull/94783">GH-94783&lt;/a>)&lt;/li>
&lt;li>Change NavigationMesh to also parse collision shapes by default. This is part of an effort to encourage users to use collision shapes for NavigationMesh instead of visual meshes as collision shapes are much simpler and thus more efficient for Navigation. (&lt;a href="https://github.com/godotengine/godot/pull/95013">GH-95013&lt;/a>)&lt;/li>
&lt;li>XR: Disable hand tracking by default. This has a non-trivial performance cost and is not needed for many games. Users need to enable the setting if they want to use hand tracking now. (&lt;a href="https://github.com/godotengine/godot/pull/95153">GH-95153&lt;/a>)&lt;/li>
&lt;li>Automatically resolve initial and final action for draw lists. &lt;code class="language-plaintext highlighter-rouge">RenderingDevice.draw_list_begin()&lt;/code> has been vastly simplified and so it will be much easier to use. The old method signature will continue to work, but we recommend using the new method since it is much simpler. (&lt;a href="https://github.com/godotengine/godot/pull/98670">GH-98670&lt;/a>)&lt;/li>
&lt;li>Editor camera override has moved from the editor viewport to the “Game” tab. (&lt;a href="https://github.com/godotengine/godot/pull/97257">GH-97257&lt;/a>)&lt;/li>
&lt;/ul>
&lt;p>UIDs in particular are a pretty massive shake-up to existing project structures, and have understandably been among the more contentious changes of the 4.4 development cycle. Read this blog post to better understand the rationale behind that change, as well as the benefits it brings to the table: &lt;a href="https://godotengine.org/article/uid-changes-coming-to-godot-4-4/">UID changes coming to Godot 4.4&lt;/a>&lt;/p>
&lt;h3 id="animation">Animation&lt;/h3>
&lt;p>One of our newest additions to the animators toolkit is markers (&lt;a href="https://github.com/godotengine/godot/pull/91765">GH-91765&lt;/a>) by ChocolaMint. Markers allow you to create sub regions of an animation that can be jumped to, or looped without playing the entire animation. This functionality is even supported inside AnimationTree, where you can easily create an AnimationNodes custom timeline based on the markers.&lt;/p>
&lt;p>Weve also added &lt;code class="language-plaintext highlighter-rouge">LookAtModifier3D&lt;/code> (&lt;a href="https://github.com/godotengine/godot/pull/98446">GH-98446&lt;/a>) to handle 3D model procedural animation, partially replacing the deprecated &lt;code class="language-plaintext highlighter-rouge">SkeletonIK3D&lt;/code>. Thanks to the efforts of animation expert Silc Renew (Tokage), users no longer need to rely on specific bone structures and arbitrary layouts; this new tool allows for angle limitations, forward axis settings, etc., and is specialized for making a 3D character model look in the target direction.&lt;/p>
&lt;p>Sneaking in right before the feature freeze, the Animation team added &lt;code class="language-plaintext highlighter-rouge">SpringBoneSimulator3D&lt;/code>(&lt;a href="https://github.com/godotengine/godot/pull/101409">GH-101409&lt;/a>) as well. The spring bone is an open source cross-platform module that is distributed by the &lt;a href="https://vrm-consortium.org/en/">VRM consortium&lt;/a> under the MIT license. It has been available in Godot as an &lt;a href="https://godotengine.org/asset-library/asset/2031">add-on&lt;/a> for a while now, but there were some difficulties in stability and complex setup due to the complicated data structure. Tokage refined it based on &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code> with some improvements by leaning on existing core functionality, so it is now much improved and easier to use!&lt;/p>
&lt;video autoplay="" loop="" muted="" playsinline="">
&lt;source src="/storage/blog/godot-4-4-beta-1/springbone.webm?1" type="video/webm" />
&lt;/video>
&lt;h3 id="audio">Audio&lt;/h3>
&lt;p>First-time contributor what-is-a-git 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="c">C#&lt;/h3>
&lt;p>Paul Joannon and Raul Santos 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. For more details, check out the recent article on &lt;a href="https://godotengine.org/article/godotsharp-packages-net8/">Godot C# packages moving to .NET 8&lt;/a>.&lt;/p>
&lt;p>For C# developers targeting Android platforms, exported projects will now use the &lt;code class="language-plaintext highlighter-rouge">android&lt;/code> runtime identifier (&lt;a href="https://github.com/godotengine/godot/pull/88803">GH-88803&lt;/a>). This means C# Android exports now support all available architectures (arm32, arm64, x32, and x64) whereas previously it only supported 64-bit architectures. The necessary Java library to bind the .NET cryptography implementation to the Android OS functions is now also included in exported projects, which fixes issues such as crashing when using SSL with the BCL-provided &lt;code class="language-plaintext highlighter-rouge">HttpClient&lt;/code>.&lt;/p>
&lt;h3 id="core">Core&lt;/h3>
&lt;p>As mentioned in our &lt;a href="https://godotengine.org/article/dev-snapshot-godot-4-4-dev-7/">last development update&lt;/a>, the improvements to the core of our codebase have been absolutely staggering! Lukas Tenbrink has spearheaded optimizations to strings and the speed/efficiency at which theyre parsed. Adam Scott opened the door for tool makers to take advantage of temporary files and directories (&lt;a href="https://github.com/godotengine/godot/pull/98397">GH-98397&lt;/a>). Ocean has broadened the scope in which &lt;code class="language-plaintext highlighter-rouge">Curve&lt;/code> can be applied, allowing 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;/p>
&lt;p>But perhaps the biggest highlight of them all is Typed Dictionaries. After the introduction of Typed Arrays in 4.0 by George Marques (&lt;a href="https://github.com/godotengine/godot/pull/46830">GH-46830&lt;/a>), Typed Dictionaries rapidly became one of the engines most requested features. Thanks to the efforts of Thaddeus Crews (&lt;a href="https://github.com/godotengine/godot/pull/78656">GH-78656&lt;/a>), this is finally a reality! This feature being implemented at the core of the engine means that all scripting languages (GDScript, C#, C++) can take advantage by interfacing with Godots 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;h3 id="editor">Editor&lt;/h3>
&lt;p>Thanks to the contribution from YeldhamDev of Lone Wolf Technology and W4 Games we now have a new “Game” tab along with the existing “2D”, 3D”, “Script”, and “AssetLib” tabs that allows users to have fine-tuned control over the running game from the editor. This includes overriding the in-game camera and selecting objects in game.&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;p>See also &lt;em>game window embedding&lt;/em> further above, which works in tandem with this feature. Note that these features can be used separately: you can still make use of interactive in-game editing even if the game is split to a separate window.&lt;/p>
&lt;p>Manipulating Camera3Ds in the editor is also improved! With Haoyu Qius new feature in &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;p>Hilderin valiantly fought their way through a labyrinth of dependencies and multi-threading pitfalls, and brought us back the long awaited grail: error-less first import of projects. This took a lot of effort between multiple PRs (&lt;a href="https://github.com/godotengine/godot/pull/92303">GH-92303&lt;/a>, &lt;a href="https://github.com/godotengine/godot/pull/93972">GH-93972&lt;/a>, and &lt;a href="https://github.com/godotengine/godot/pull/92667">GH-92667&lt;/a>), but resolves a major annoyance faced by any user who downloaded an existing project from online.&lt;/p>
&lt;p>Moreover, with this newfound knowledge, Hilderin also further improved the 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>) and improve the overall editor startup 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;p>HP van Braam was able to make a similar performance improvement when moving or renaming nodes in the SceneTree (&lt;a href="https://github.com/godotengine/godot/pull/99700">GH-99700&lt;/a>). Godot should now feel much faster when editing large scenes with hundreds or thousands of nodes.&lt;/p>
&lt;p>The debugger panel now features an expression evaluator which adds a new tab to the debugger 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 REPL debuggers. 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 Oğuzhan, Erik, and Tomek for bringing it across the finish line.&lt;/p>
&lt;p>To further improve your debugging experience Hendrik introduced a checkbox that allows you to start the profiler automatically when you run your game from the editor and capture valuable profiling data immediately (&lt;a href="https://github.com/godotengine/godot/pull/96759">GH-96759&lt;/a>).&lt;/p>
&lt;p>The editor has become more ergonomic for everyone! Ryevdokimov added object snapping for moving 3D objects in the editor (&lt;a href="https://github.com/godotengine/godot/pull/96740">GH-96740&lt;/a>) which allows you to snap existing objects to other objects when you move them. This can be toggled on by selecting an object and pressing Shift+G.&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;p>To reduce clutter in your inspector and highlight the properties you care the most about, YeldhamDev brings us the long-awaited ability to pin ones favorite properties in the inspector! Check out the implementation in PR &lt;a href="https://github.com/godotengine/godot/pull/97352">GH-97352&lt;/a>.&lt;/p>
&lt;p>Thanks to Danil Alexeev, 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;h3 id="gdscript">GDScript&lt;/h3>
&lt;p>This release GDScript saw quite a few quality of life features to improve your development experience. For example, you can now create buttons in the inspector seamlessly using the new &lt;code class="language-plaintext highlighter-rouge">@export_tool_button&lt;/code> annotation in &lt;code class="language-plaintext highlighter-rouge">@tool&lt;/code> scripts. This was added by Macksaur in &lt;a href="https://github.com/godotengine/godot/pull/96290">GH-96290&lt;/a>.&lt;/p>
&lt;p>Danil Alexeev brings us &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> (&lt;a href="https://github.com/godotengine/godot/pull/76020">GH-76020&lt;/a>) to suppress warnings in a safely scoped manner across entire sections of code. Similarly, &lt;code class="language-plaintext highlighter-rouge">@warning_ignore&lt;/code> no longer works when applied to a function. This is because it previously had undocumented functionality which applied the warning to the &lt;em>entire function&lt;/em> unexpectedly. Now users have much more control and the annotations should function more like what you would expect.&lt;/p>
&lt;h3 id="import">Import&lt;/h3>
&lt;p>4.4 is coming with huge improvements to texture importing quality and speed thanks to new maintainer Bluecube3310. The import times of textures using the “VRAM Compressed” import setting have been greatly improved by integrating the GPU-based Betsy texture compressor. The biggest difference is observable when importing HDR images (such as HDRIs or lightmaps), which used to take up to several minutes before. Thanks to Betsy, as well as other optimizations to the import process (&lt;a href="https://github.com/godotengine/godot/pull/92291">GH-92291&lt;/a> and &lt;a href="https://github.com/godotengine/godot/pull/95291">GH-95291&lt;/a>), that time has gone down significantly. Additionally, textures not using the “High Quality” import setting should look better by default, since previously we had to trade the quality for faster import times. Further, there have been countless improvements to the texture import process to improve compatibility across devices and the number of texture formats supported. Overall, texture importing should feel faster and more stable than ever before.&lt;/p>
&lt;p>The new retargeting method, RetargetModifier3D, a new feature from Tokage allows users to use animation retargeting without discarding the original bone rests that were set in the external DCC (&lt;a href="https://github.com/godotengine/godot/pull/97824">GH-97824&lt;/a>).&lt;/p>
&lt;p>Godot now supports the &lt;a href="https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_animation_pointer">&lt;code class="language-plaintext highlighter-rouge">KHR_animation_pointer&lt;/code>&lt;/a> glTF extension thanks to the efforts of Aaron Franke (&lt;a href="https://github.com/godotengine/godot/pull/94165">GH-94165&lt;/a>). This allows imported animations to target custom properties in addition to position, rotation, scale, and mesh blend shape weights (which were all it previously supported). For example, you can now animate the color of a light, the FOV of a camera, the albedo color of a material, the UV offset of a material, and more.&lt;/p>
&lt;h3 id="input">Input&lt;/h3>
&lt;p>Input saw a lot of incremental improvements and polish this dev cycle. Notably, rptfrg made their first contribution by lowering the default deadzone for new actions from 0.5 down to 0.2 (&lt;a href="https://github.com/godotengine/godot/pull/97281">GH-97281&lt;/a>). This should make input feel much more responsive by default. And, after several years of diligent effort, Markus Sauermann has expanded the Drag-and-Drop system to support dragging and dropping across different &lt;code class="language-plaintext highlighter-rouge">Viewports&lt;/code> and even &lt;code class="language-plaintext highlighter-rouge">Windows&lt;/code>. For more information, see &lt;a href="https://github.com/godotengine/godot/pull/67531">GH-67531&lt;/a>.&lt;/p>
&lt;h3 id="navigation">Navigation&lt;/h3>
&lt;p>Navigation contains some of the oldest code in the engine. While it continues to serve its purpose, much of it is getting dated and needs to be cleaned up. Accordingly, the Navigation team, especially smix8, have bravely stepped up and begun the difficult process of improving legacy code. Fortunately, their work has already begun to bear fruit in the form of a cleaner codebase and faster Navigation features.&lt;/p>
&lt;p>Notably, the navigation map synchronization now happens asynchronously and in a background thread so it has a much smaller impact on framerate. Instead of making the entire game slow down on lower end systems, updates will just happen less frequently.&lt;/p>
&lt;p>There have also been many quality of life improvements such as debug indicators to show the direction of NavigationLinks (&lt;a href="https://github.com/godotengine/godot/pull/101010">GH-101010&lt;/a>) and support for transforming NavigationObstacle nodes using the nodes transform (&lt;a href="https://github.com/godotengine/godot/pull/96730">GH-96730&lt;/a>).&lt;/p>
&lt;h3 id="physics">Physics&lt;/h3>
&lt;p>Ever since its inception in late 2022, godot-jolt has slowly become the de-facto 3D physics engine for many of our developers. So it is no surprise that the Godot Jolt maintainers, Mikael Hermansson and Jorrit Rouwe, have taken things a step further and integrated Jolt as part of the engine directly. There was already a symbiosis between their team and Godot, with many features being added to Godot and 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 thousand lines of code!&lt;/p>
&lt;p>Note: At time of writing, this does not 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 it isnt a full drop-in replacement. If your interests/use-case are supported, the tool can be enabled by changing the &lt;strong>Physics &amp;gt; 3D &amp;gt; Physics Engine&lt;/strong> project setting to &lt;strong>Jolt Physics&lt;/strong>.&lt;/p>
&lt;p>Our hope is that many users opt to use Jolt as their 3D physics backend and give us valuable feedback so we can improve our integration with Jolt and eventually make it the default physics engine for all new projects.&lt;/p>
&lt;h3 id="platforms">Platforms&lt;/h3>
&lt;h4 id="linux">Linux&lt;/h4>
&lt;p>pkowal1982s long-running pull request, &lt;a href="https://github.com/godotengine/godot/pull/53666">GH-53666&lt;/a>, was finally merged adding camera support for the Linux platform, allowing developers to access connected cameras from within their game.&lt;/p>
&lt;h4 id="android">Android&lt;/h4>
&lt;p>Thanks to the tireless efforts of Fredia Huya-Kouadio and Anish Mishra (our newest Android maintainer), the development experience on Android devices for Android devices has become significantly better. In &lt;a href="https://github.com/godotengine/godot/pull/93526">GH-93526&lt;/a> Fredia added support for exporting games from the Android editor. Previously developers had to leave their Android device when they exported their game. Fredia also added support for launching the Play window in PiP mode (in &lt;a href="https://github.com/godotengine/godot/pull/95700">GH-95700&lt;/a>) allowing developers to more easily take advantage of the tight integration between the editor and running game while developing on Android devices.&lt;/p>
&lt;p>To further improve the development experience on Android, Anish added support for the native file picker (in &lt;a href="https://github.com/godotengine/godot/pull/98350">GH-98350&lt;/a>) so now Android game and app developers can benefit from using the file picker that Android provides and Android users are accustomed to. Similarly, Fredia added the new AndroidRuntime plugin which exposes the Android Runtime, making it easier to access Android libraries and SDKs in games/apps. For example, for APIs bundled in the Android OS, no additional setup is required and they can be accessed directly using this new plugin. For more details, see &lt;a href="https://github.com/godotengine/godot/pull/97500">GH-97500&lt;/a>.&lt;/p>
&lt;h3 id="rendering-and-shaders">Rendering and shaders&lt;/h3>
&lt;p>Many monumental rendering changes were finished towards the end of the 4.3 dev cycle slightly too late to be included in 4.3. As a result, 4.4 contains a massive amount of exciting features, too many to include here, but here are a few.&lt;/p>
&lt;p>For Apple users, Stuart Carnie has been hard at work ensuring that you get the benefit of the best performance by incorporating the Metal rendering backend (&lt;a href="https://github.com/godotengine/godot/pull/88199">GH-88199&lt;/a>, &lt;a href="https://godotengine.org/article/dev-snapshot-godot-4-4-dev-1/">Dev snapshot: Godot 4.4 dev 1&lt;/a>) and the MetalFX upscaler (mentioned above).&lt;/p>
&lt;p>DarioSamo spent several months last year perfecting the Ubershader system which was earlier designed by Juan Linietsky and Clay John in the early days of building Godot 4. The Ubershader allows the engine to compile a flexible, but slow version of shaders at load time which can be used as a fallback while the optimized shaders compile in the background. The technique allows users to ship games &lt;strong>without shader stutter&lt;/strong> and without resorting to manually displaying every possible material and object combination behind a loading screen.&lt;/p>
&lt;p>Shadow caster masks, a long awaited improvement from EMBYRDEV, allow 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;p>After tackling the Metal rendering backend merged in an earlier snapshot, Stuart took on another impressive rendering contribution: 2D batching! 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>Continuing their excellent work on texture import and the Betsy texture compressor, BlueCube has made huge improvements to the lightmapper by adding:&lt;/p>
&lt;ul>
&lt;li>Support for bicubic sampling to smooth out the results of low resolution lightmap bakes (&lt;a href="https://github.com/godotengine/godot/pull/89919">GH-89919&lt;/a>)&lt;/li>
&lt;li>Shadow masks, to allow falling back on baked lighting when outside of the range of dynamic lights (&lt;a href="https://github.com/godotengine/godot/pull/85653">GH-85653&lt;/a>)&lt;/li>
&lt;li>Compression for lightmap textures to reduce the memory use and rendering overhead of large lightmap textures (&lt;a href="https://github.com/godotengine/godot/pull/100327">GH-100327&lt;/a>).&lt;/li>
&lt;/ul>
&lt;p>Hendrik Brucker, a long time contributor, also decided that lightmaps deserved some attention this release and carried the work of Hugo Locurcio and Guerro323 over the finish line by implementing lightmap supersampling (which bakes the lightmap at a higher resolution to reduce aliasing and capture finer details) and adding support for transparent objects to lightmap baking (including semi-transparent shadows).&lt;/p>
&lt;p>Ricardo Buring continued his amazing work in bringing physics interpolation to Godot 4. This time around he added support for 3D objects (include Multimesh!). 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;p>After pointing out the many limitations that exist with ReflectionProbes, Lander-vr decided to take matters into his own hands and personally overhaul the blending logic for ReflectionProbes in &lt;a href="https://github.com/godotengine/godot/pull/100241">GH-100241&lt;/a> to make smaller probes automatically take priority over larger probes, which avoids the “double reflection” effects that can look strange. Additionally, in &lt;a href="https://github.com/godotengine/godot/pull/99958">GH-99958&lt;/a>, he added a blend distance property so you can now configure the distance at which the reflection starts fading. The default distance at which reflections start fading is now much lower than before, which ensures the full reflection can be seen when inside the ReflectionProbes bounds.&lt;/p>
&lt;p>Not content to stop there, Lander-vr also significantly improved the editor UX for ReflectionProbe and VoxelGI by making their gizmos less intrusive (in &lt;a href="https://github.com/godotengine/godot/pull/99920">GH-99920&lt;/a>, &lt;a href="https://github.com/godotengine/godot/pull/99969">GH-99969&lt;/a>, and &lt;a href="https://github.com/godotengine/godot/pull/100370">GH-100370&lt;/a>).&lt;/p>
&lt;p>&lt;img src="/storage/blog/godot-4-4-beta-1/reflection-probes.webp" alt="Sponza with reflective floor" />&lt;/p>
&lt;p>After many requests and years of patient waiting from many within the community, we have finally re-introduced vertex shading which is both a significant performance optimization and and integral part of recreating PSX-style graphics (&lt;a href="https://github.com/godotengine/godot/pull/83360">GH-83360&lt;/a>). This turned out to be a significant endeavor for ywmaa who enlisted the help of veteran rendering contributor Clay John to get the feature over the finish line.&lt;/p>
&lt;p>Currently when trying to run Godot with the Forward+ or Mobile backend on a device that doesnt support Vulkan, D3D12, or Metal, the engine will provide the user with an OS alert notifying them that they dont 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. Now with &lt;a href="https://github.com/godotengine/godot/pull/97142">GH-97142&lt;/a>, the first contribution from SheepYhangCN, 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>Rendering contributors have been relentless in identifying and implementing performance enhancements this release cycle. Many areas of the renderers, both 2D and 3D have been optimized and we expect that many users will notice an improvement to performance this release cycle, especially for 2D lighting, rendering on mobile devices, and general 2D rendering.&lt;/p>
&lt;h3 id="xr">XR&lt;/h3>
&lt;p>Thanks to Godots unique feature of its editor being made with the engine itself, weve been able to bring the Godot editor to unconventional places, such as the web and Android devices. Building upon the latter, Fredia Huya-Kouadio completed the proof of concept started by Bastiaan Olij years ago, to add support for using the Android editor on XR devices using OpenXR (&lt;a href="https://github.com/godotengine/godot/pull/96624">GH-96624&lt;/a>)! The XR editor is currently available on the Meta Quest 3 and Quest Pro through the &lt;a href="https://www.meta.com/experiences/godot-game-engine/7713660705416473/">Horizon Store&lt;/a>. Support for the PICO 4 Ultra is also in progress and will be available soon.&lt;/p>
&lt;p>OpenXR support for Metal (&lt;a href="https://github.com/godotengine/godot/pull/98872">GH-98872&lt;/a>) has been added, improving the developer experience for MacOS developers using the Meta XR Simulator.&lt;/p>
&lt;p>Some OpenXR runtimes support applying modifiers to the action map, for example, applying thresholds or haptic triggers, and now you can configure those in Godot as well (&lt;a href="https://github.com/godotengine/godot/pull/97140">GH-97140&lt;/a>)!&lt;/p>
&lt;p>Support for OpenXR composition layers was added in Godot 4.3, allowing developers to show crisp and clear 2D panels that show content from a Godot &lt;strong>SubViewport&lt;/strong>. Now, in Godot 4.4, weve added the ability to show content from an Android surface as well, allowing for performant media playback in XR on Android (&lt;a href="https://github.com/godotengine/godot/pull/96185">GH-96185&lt;/a>).&lt;/p>
&lt;h2 id="changelog">Changelog&lt;/h2>
&lt;p>&lt;strong>140 contributors&lt;/strong> submitted &lt;strong>406 improvements&lt;/strong> for this release. See our &lt;a href="https://godotengine.github.io/godot-interactive-changelog/#4.4-beta1">&lt;strong>interactive changelog&lt;/strong>&lt;/a> for the complete list of changes since the 4.4-dev7 snapshot. You can also review &lt;a href="https://godotengine.github.io/godot-interactive-changelog/#4.4">all changes included in 4.4&lt;/a> compared to the previous 4.3 feature release.&lt;/p>
&lt;p>This release is built from commit &lt;a href="https://github.com/godotengine/godot/commit/d33da79d3f8fe84be2521d25b9ba8e440cf25a88">&lt;code class="language-plaintext highlighter-rouge">d33da79d3&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-beta1">
Download Godot 4.4 beta1
&lt;/a>
&lt;div class="card-download-details">
&lt;img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-4-beta-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-beta1/Godot_v4.4-beta1_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-beta1/Godot_v4.4-beta1_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-beta1/Godot_v4.4-beta1_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-beta1/Godot_v4.4-beta1_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-beta1/Godot_v4.4-beta1_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-beta1/Godot_v4.4-beta1_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-beta1">
Export templates and other downloads
&lt;/a>
&lt;a class="card-download-donate" href="https://fund.godotengine.org/">
Make a Donation
&lt;/a>
&lt;/div>
&lt;/div>
&lt;style>
.thankyou-wrapper {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.85);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
z-index: 10;
}
.thankyou {
background: var(--base-color);
box-shadow: var(--more-shadow);
padding: 30px;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
position: relative;
border-radius: 13px;
}
.thankyou-reading {
font-size: 16px;
}
.thankyou-reading-list {
font-size: 16px;
margin: 0;
margin-left: 48px;
padding-left: 0;
}
.thankyou-donate {
margin-bottom: 24px;
text-align: center;
}
.btn.btn-donate {
background-color: var(--primary-color);
color: hsla(0, 0%, 100%, 0.9);
font-size: 22px;
font-weight: 600;
margin-bottom: 26px;
}
.thankyou h2 {
text-shadow: var(--base-shadow);
font-size: 36px;
font-weight: 800;
margin-bottom: 12px;
}
.thankyou h2 .anchored-link {
/* Hiding the anchored text automatically added on blogposts */
display: none !important;
}
.thankyou p {
max-width: 620px;
font-size: 25px;
}
@media (max-width: 768px) {
.thankyou-wrapper {
display: block;
}
.thankyou {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
overflow: scroll;
padding: 30px 40px 18px 40px;
}
.thankyou-reading-list {
margin-left: 24px;
}
.btn-close-thankyou-popup {
width: 48px;
height: 48px;
display: flex;
justify-content: center;
align-items: center;
}
}
.btn-close-thankyou-popup {
cursor: pointer;
position: absolute;
top: 12px;
right: 12px;
}
.btn-close-thankyou-popup img {
background: transparent !important; /* for overwriting the style in the blogposts img */
}
@media (prefers-color-scheme: light) {
.btn-close-thankyou-popup img {
filter: invert(1);
opacity: 0.75;
}
}
&lt;/style>
&lt;script>
document.addEventListener('DOMContentLoaded', () => {
const thankYouWrapper = document.getElementById('thank-you');
// Close itself, when clicked outside of the popup area.
thankYouWrapper.addEventListener('click', (e) => {
if (e.target === thankYouWrapper) {
thankYouWrapper.style.display = 'none';
}
});
// Close with a close button.
const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup');
thankYouBackButton.addEventListener('click', () => {
thankYouWrapper.style.display = 'none';
});
// Open from the main download buttons.
const downloadButtons = document.querySelectorAll('.btn-download');
downloadButtons.forEach((it) => {
it.addEventListener('click', () => {
thankYouWrapper.style.display = '';
document.querySelector('.btn.btn-donate').focus();
});
});
// Open from the all downloads list.
const downloadLinks = document.querySelectorAll('.download-link');
downloadLinks.forEach((it) => {
it.addEventListener('click', () => {
thankYouWrapper.style.display = '';
});
});
// Close the dialog when the user presses the escape key.
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
thankYouWrapper.style.display = 'none';
}
});
});
&lt;/script>
&lt;div class="thankyou-wrapper" id="thank-you" style="display: none;">
&lt;div class="thankyou">
&lt;h2>Godot is downloading...&lt;/h2>
&lt;p class="thankyou-donate">
Godot exists thanks to donations from people like you. Help us continue our work:
&lt;/p>
&lt;a href="https://fund.godotengine.org" class="btn btn-donate">
Make a Donation
&lt;/a>
&lt;div class="btn-close-thankyou-popup">
&lt;img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" />
&lt;/div>
&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>During the beta stage, we focus on solving both regressions (i.e. something that worked in a previous release is now broken) and significant new bugs introduced by new features. 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.4. This list is dynamic and will be updated if we discover new showstopping issues after more users start testing the beta snapshots.&lt;/p>
&lt;p>With every release, we accept that there are going to be various issues which have already been reported but havent 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;ul>
&lt;li>
&lt;p>Baking a Lightmap3D is more prone to crash after we added support for transparency. The issue is tracked in &lt;a href="https://github.com/godotengine/godot/issues/101391">GH-101391&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Changes to scenes are not reflected in APK exports after the initial export in the Android editor. The issue is tracked in &lt;a href="https://github.com/godotengine/godot/issues/101007">GH-101007&lt;/a>.&lt;/p>
&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 youd 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></description><category>Pre-release</category><guid>https://godotengine.org/article/dev-snapshot-godot-4-4-beta-1/</guid><dc:creator>Godot contributors</dc:creator><pubDate>Thu, 16 Jan 2025 18:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/dev-snapshot-godot-4-4-beta-1.webp</image></item><item><title>UID changes coming to Godot 4.4</title><link>https://godotengine.org/article/uid-changes-coming-to-godot-4-4/</link><summary>Godot's resource UID system is changing to better support scripts and shaders. Read on to know what's required on your part to fully benefit from it.</summary><description>&lt;h2 id="why-use-uids-in-godot">Why use UIDs in Godot?&lt;/h2>
&lt;p>Until Godot 4.0, the engine exclusively relied on file paths to refer to scenes, scripts and other resources. While this means references in scenes and scripts use human-readable paths, these paths will break if files are moved to a different location in the project (regardless of whether the move was done using the FileSystem dock or outside Godot). This is especially problematic for large projects where filesystem organization often changes regularly.&lt;/p>
&lt;p>Since Godot 3.x, the editor already updates path references if files are moved within the FileSystem dock. This works more or less, but has drawbacks: the process is slow in large projects (as files need to be scanned and modified), file paths in scripts are left unchanged, and a single file move can result in a large amount of modified files in commits. Its also not fully reliable, and veteran Godot users probably remember various situations where moving a file seemingly corrupted a scene or resource.&lt;/p>
&lt;p>Additionally, it is common for users to move these files outside Godot (e.g. using the OS file manager, an IDE or the command line). If the editor is not open, it has no way to know the change happened. Even if the editor is open, when working with version control, files may change or be moved and the editor has no way to know where files have gone, resulting in all sorts of errors.&lt;/p>
&lt;p>With the aim of making Godot better suited for large projects and significantly more resilient to external filesystem changes, ensuring this is a fully supported workflow has become a priority. External file manager programs often have more features than Godots own FileSystem dock, making them more convenient for many use cases. This means we need an approach that can reliably track files being moved, even if the Godot editor isnt open.&lt;/p>
&lt;p>Partial “Unique IDentifier” (UID) support was therefore introduced in Godot 4.0, which made it possible for users to safely move files outside Godot if they have UID support implemented. The editor will automatically store resource references as UIDs, with the path still being stored alongside for displaying in the editor UI (and as a fallback if the UID reference becomes invalid). However, UID support wasnt completely finished by the time Godot 4.0 released, which means many file types didnt benefit from the UID system entirely (if at all).&lt;/p>
&lt;h2 id="limitations-of-uids-before-godot-44">Limitations of UIDs before Godot 4.4&lt;/h2>
&lt;p>Each imported resource in Godot has a &lt;code class="language-plaintext highlighter-rouge">.import&lt;/code> file, which allows for storing a UID. Additionally, Godots own scene and resource file formats store a UID in their header. However, scripts and shaders are not imported resources and they are “plain text” formats, without any Godot-specific information stored within. In practice, this meant that UIDs could be used for scenes and most resources, but not scripts and shaders. The UID implementation was therefore not covering every resource type Godot support (&lt;a href="https://docs.godotengine.org/en/stable/classes/class_script.html">scripts&lt;/a> and &lt;a href="https://docs.godotengine.org/en/stable/classes/class_shader.html">shaders&lt;/a> are resources too).&lt;/p>
&lt;p>Moreover, the editor support for making use of UIDs and relying primarily on them was lacking, so UIDs didnt yet fulfill their promise of enabling seamless refactoring of project files.&lt;/p>
&lt;h2 id="whats-changing-with-uids-in-godot-44">Whats changing with UIDs in Godot 4.4&lt;/h2>
&lt;p>To resolve the issue of scripts and shaders not being able to benefit from the UID system, dedicated UID files are being introduced in Godot 4.4. These files are automatically generated by Godot when saving a script or shader and are placed besides the source file with the &lt;code class="language-plaintext highlighter-rouge">.uid&lt;/code> extension as a suffix. For example, if you have &lt;code class="language-plaintext highlighter-rouge">some_file.gd&lt;/code> and &lt;code class="language-plaintext highlighter-rouge">some_file.shader&lt;/code>, Godot will generate the files &lt;code class="language-plaintext highlighter-rouge">some_file.gd.uid&lt;/code> and &lt;code class="language-plaintext highlighter-rouge">some_file.shader.uid&lt;/code>. This avoids conflicts in case a script and shader file have the same name (but a different extension) within the same folder.&lt;/p>
&lt;p>This now means you can use UID references in your own scripts if you wish. While using file paths is still the primary approach for now, using UIDs means that the paths to other referenced resources can safely change without breaking the script, even if the files are moved outside Godot.&lt;/p>
&lt;div class="language-gdscript highlighter-rouge">&lt;div class="highlight">&lt;pre class="highlight">&lt;code>&lt;span class="k">extends&lt;/span> &lt;span class="n">Node&lt;/span>
&lt;span class="c1"># These references point to the same Script resource.&lt;/span>
&lt;span class="c1"># `other_script.gd` contains a `static func greet()` that prints some text.&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">other_script&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">preload&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">"res://other_script.gd"&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="c1"># TIP: You can copy any resource's UID from the FileSystem dock's context menu.&lt;/span>
&lt;span class="k">var&lt;/span> &lt;span class="n">other_script_uid&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">preload&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">"uid://fkjlqx8er2sg"&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">func&lt;/span> &lt;span class="nf">_ready&lt;/span>&lt;span class="p">():&lt;/span>
&lt;span class="n">other_script&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">greet&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="n">other_script_uid&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">greet&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;p>Thanks to &lt;a href="https://github.com/godotengine/godot/pull/100803">GH-100803&lt;/a>, you can see the underlying &lt;code class="language-plaintext highlighter-rouge">res://&lt;/code> path and resource type when hovering the &lt;code class="language-plaintext highlighter-rouge">uid://&lt;/code> path with the mouse in the script editor. (This feature also works when hovering &lt;code class="language-plaintext highlighter-rouge">res://&lt;/code> paths, so it is not exclusive to &lt;code class="language-plaintext highlighter-rouge">uid://&lt;/code> paths.)&lt;/p>
&lt;h2 id="what-should-i-change-in-my-project-or-workflow">What should I change in my project or workflow?&lt;/h2>
&lt;p>The most important step is to &lt;strong>make sure &lt;code class="language-plaintext highlighter-rouge">.uid&lt;/code> files are committed to version control&lt;/strong>. In other words, &lt;code class="language-plaintext highlighter-rouge">*.uid&lt;/code> should &lt;strong>not&lt;/strong> be added to &lt;code class="language-plaintext highlighter-rouge">.gitignore&lt;/code>.&lt;/p>
&lt;p>Secondly, when you move a script or shader outside Godot, &lt;strong>you should also move the &lt;code class="language-plaintext highlighter-rouge">.uid&lt;/code> file along with it&lt;/strong>. When you remove a script or shader outside Godot, you should also remove the &lt;code class="language-plaintext highlighter-rouge">.uid&lt;/code> file, although this is less important not removing the &lt;code class="language-plaintext highlighter-rouge">.uid&lt;/code> file wont break anything.&lt;/p>
&lt;p>Moving files externally will produce warnings when opening scenes referencing said files. You need to re-save all depending scenes to remove warnings.&lt;/p>
&lt;p>After upgrading the project to 4.4, you should re-save all scenes and resources to add any missing UID references. The editor will add them automatically as you save scenes/resources for the first time with 4.4, but its better to do it all at once to avoid random diffs appearing in version control later on.&lt;/p>
&lt;h2 id="frequently-asked-questions">Frequently asked questions&lt;/h2>
&lt;h3 id="why-not-use-another-approach-to-track-file-references-like-checksums">Why not use another approach to track file references like checksums?&lt;/h3>
&lt;p>Godot already keeps track of checksums in &lt;code class="language-plaintext highlighter-rouge">.import&lt;/code> files. This is used to detect whether the file has actually changed, and can therefore reimport the file if it has changed while Godot wasnt open.&lt;/p>
&lt;p>Unfortunately, checksums are the wrong tool for the job to keep track of &lt;strong>unique&lt;/strong> file references. If you have two files with the exact same content, they would have the same checksum, but these files are still separately referenced by other scenes or resources in the project (with the expectation that these remain separate). If we relied on the files checksum to determine file references, then the references would break once the file contents change.&lt;/p>
&lt;p>There could still be value to computing a checksum and storing it in &lt;code class="language-plaintext highlighter-rouge">.uid&lt;/code> files, so that Godot can automatically move the UID file if the source file was moved without its UID file. This is something that should be tackled separately though, as this approach comes with its downsides too.&lt;/p>
&lt;h3 id="why-not-use-replace-import-files-with-meta-files-and-use-them-for-all-resources-that-have-an-uid">Why not use replace &lt;code class="language-plaintext highlighter-rouge">.import&lt;/code> files with &lt;code class="language-plaintext highlighter-rouge">.meta&lt;/code> files and use them for all resources that have an UID?&lt;/h3>
&lt;p>While Godot must import many resource types before they can be used in a project, not all types actually need to be imported to be used. Resources that dont need to be imported to be used dont have properties that you could set on import, as they are directly loaded by Godot with no remapping system in place. Instead, everything about the file is inferred from the file itself. This approach makes more sense for files that you expect to be able to copy-paste around (or even copy directly from websites), while making sure the file remains functional without needing a separate metadata file. Its a common workflow from users to copy scripts or shaders from websites such as &lt;a href="https://godotshaders.com/">Godot Shaders&lt;/a> after all.&lt;/p>
&lt;p>The main examples of resources that dont need to be imported are scripts and shaders, hence the dedicated &lt;code class="language-plaintext highlighter-rouge">.uid&lt;/code> files.&lt;/p>
&lt;p>It has been suggested that we could still use &lt;code class="language-plaintext highlighter-rouge">.meta&lt;/code> files for scripts and shaders, and use them to store more information than just UIDs, such as user-defined metadata. For the time being we prefer to focus on the problem at hand (the need of UIDs for better refactoring possibility) and not future-proof things. If we ever change our mind, it would be easy enough to migrate information from &lt;code class="language-plaintext highlighter-rouge">.uid&lt;/code> files to whichever new container we decide to use.&lt;/p>
&lt;h3 id="why-not-use-a-single-centralized-file-to-store-all-the-projects-uids">Why not use a single centralized file to store all the projects UIDs?&lt;/h3>
&lt;p>Many other programs use a centralized database to store UIDs for all files in the project. While this approach makes for a leaner filesystem, it also has several downsides:&lt;/p>
&lt;ul>
&lt;li>With a centralized file for all UIDs, the purpose of being able to move scripts or shaders outside of Godot would not be fulfilled. When moving a script outside of Godot, the centralized UID mapping would not be updated, and thus it would lose the connection between the previous path and its UID. For this use case to be supported, the UID needs to be close to the file being moved - either alongside it in a &lt;code class="language-plaintext highlighter-rouge">.uid&lt;/code> or &lt;code class="language-plaintext highlighter-rouge">.import&lt;/code> file, or embedded in it (e.g. for &lt;code class="language-plaintext highlighter-rouge">.tscn&lt;/code> or &lt;code class="language-plaintext highlighter-rouge">.tres&lt;/code> files).&lt;/li>
&lt;li>This file would be subject to frequent merge conflicts in version control systems. For example, if you have two branches that add or edit different scripts/shaders, they would each add their own lines to the UID database file. Both of these branches would add these lines at the same location in the file (probably at the end). However, once you try to merge those two branches together, your version control system wouldnt be able to know what to keep automatically. This is where a merge conflict occurs.
&lt;ul>
&lt;li>In contrast, using separate files ensures merge conflicts dont happen quite as often. If conflicts do arise, they can be resolved by just including the file (or removing it if the source file has also been removed).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Centralizing UID information is problematic for add-ons. For example, if a developer refactors their addon and moves files around, then someone downloads the new version of their addon into an existing project of theirs, references to files in the addon in their project get updated automatically. If UIDs are stored in a centralized fashion, there wouldnt be a way to do this as the addons UIDs wouldnt be stored in the addon. This would result in UID references breaking.&lt;/li>
&lt;/ul>
&lt;p>While using separate UID files is not perfect by any means, we felt it was a better compromise for Godots design and to ensure version control remains as seamless as possible.&lt;/p>
&lt;h3 id="why-not-embed-the-uid-directly-in-the-scripts-as-a-comment-or-annotation">Why not embed the UID directly in the scripts as a comment or annotation?&lt;/h3>
&lt;p>We evaluated it, but we saw a lot of pushback against having this kind of magic string injected as a comment or annotation in all script files, as testers found it to be quite disruptive.&lt;/p>
&lt;p>On the technical side, there are also implementation hurdles. All scripting languages supported by Godot (including community bindings via GDExtension) would need to implement this kind of magic comment or annotation (if they have such a concept) with an appropriate syntax. The Godot editor would need to know how to extract these UIDs from all types of scripts in an efficient manner (without having to parse it).&lt;/p>
&lt;p>Additionally, external IDEs and tools may not play nice with such Godot-specific comments or annotations in various scripting languages, and if Godot-specific plugins want to implement UID support, they would also need to manually implement how to extract the UIDs from the scripts in an efficient manner (as opposed to just reading a file with a predictable name).&lt;/p>
&lt;p>Finally, its not only scripts and shaders that need UIDs, but all resources. While most other builtin resource types can store UID information as described above, this system is also relevant for custom resource formats that users can implement. Having &lt;code class="language-plaintext highlighter-rouge">.uid&lt;/code> files generated for such resources makes the system work out of the box.&lt;/p>
&lt;h3 id="what-happens-if-i-dont-commit-uid-files-to-version-control">What happens if I dont commit &lt;code class="language-plaintext highlighter-rouge">.uid&lt;/code> files to version control?&lt;/h3>
&lt;p>If you forget to commit &lt;code class="language-plaintext highlighter-rouge">.uid&lt;/code> files to version control, the project will still work locally. However, as soon as you clone the project on another device, the UID references will break. Godot will still be able to resolve them if the paths havent changed (since paths are also saved as a fallback), but a warning will be printed for every resource where a path fallback had to be used to infer the reference. This behavior should not be relied upon intentionally, as it is possible for two resources to be swapped around without either of their paths changing. This can occur if the path of one of the resources was changed to be identical to another resource that was relocated elsewhere.&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 youd 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></description><category>Progress Report</category><guid>https://godotengine.org/article/uid-changes-coming-to-godot-4-4/</guid><dc:creator>Hugo Locurcio</dc:creator><pubDate>Wed, 15 Jan 2025 14:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/uid-changes-coming-to-godot-4-4.webp</image></item><item><title>Godot C# packages move to .NET 8</title><link>https://godotengine.org/article/godotsharp-packages-net8/</link><summary>On moving to the latest .NET LTS release, and what it means for users.</summary><description>&lt;p>A new version of .NET is released in November each year, alternating Long Term Support (LTS) and Standard Term Support (STS) releases. The quality of all releases is the same. The only difference is the length of support. LTS releases are supported for 3 years, while STS releases are supported for 18 months.&lt;/p>
&lt;p>With the release of Godot 4.0, we moved our C# packages from targeting Mono to .NET 6. This version of .NET was released on November 8, 2021 and ended support on November 12, 2024.&lt;/p>
&lt;p>With .NET 6 ending support, Godot C# packages in 4.4 will target the current LTS release, .NET 8. Thanks to &lt;a href="https://github.com/RedworkDE">RedworkDE&lt;/a> and &lt;a href="https://github.com/paulloz">Paul Joannon&lt;/a> for their great work in &lt;a href="https://github.com/godotengine/godot/pull/92131">GH-92131&lt;/a>.&lt;/p>
&lt;figure>
&lt;picture>
&lt;source srcset="/storage/blog/dotnet/release-schedule-dark.svg" media="(prefers-color-scheme: dark)" />
&lt;img class="lightbox-ignore" style="background-color: transparent;" src="/storage/blog/dotnet/release-schedule-light.svg" />
&lt;/picture>
&lt;figcaption>&lt;small>.NET release cadence from the &lt;a href="https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core">.NET official support policy&lt;/a>.&lt;/small>&lt;/figcaption>
&lt;/figure>
&lt;h2 id="what-does-this-mean-for-users">What does this mean for users?&lt;/h2>
&lt;p>Starting with Godot 4.4, your project will need to target .NET 8 or newer, otherwise it will be incompatible with the new &lt;code class="language-plaintext highlighter-rouge">GodotSharp&lt;/code> packages. You will still be able to use other libraries that target older .NET versions.&lt;/p>
&lt;p>Existing projects will be automatically upgraded to target &lt;code class="language-plaintext highlighter-rouge">net8.0&lt;/code> when they are opened with Godot 4.4. If your project already targets .NET 8 or newer, nothing will change. This was implemented in &lt;a href="https://github.com/godotengine/godot/pull/100195">GH-100195&lt;/a>.&lt;/p>
&lt;h2 id="what-took-so-long">What took so long?&lt;/h2>
&lt;p>The version of .NET that a library targets becomes the minimum required version for consumers of that library. That is, if the &lt;code class="language-plaintext highlighter-rouge">GodotSharp&lt;/code> package targets &lt;code class="language-plaintext highlighter-rouge">net7.0&lt;/code>, your game project needs to target &lt;code class="language-plaintext highlighter-rouge">net7.0&lt;/code> or newer. We didnt want to force our users to upgrade to a non-LTS release.&lt;/p>
&lt;p>When .NET 8 was released in November 2023, it wouldve been a good time to bump the target version in Godot C# packages, since .NET 8 is an LTS release. Unfortunately, there were some breaking changes in .NET 7&lt;sup id="fnref:1" role="doc-noteref">&lt;a href="#fn:1" class="footnote" rel="footnote">1&lt;/a>&lt;/sup> that prevented us from upgrading, and making the required changes took us longer than we hoped.&lt;/p>
&lt;p>However, users could always use the latest version of .NET in their projects. Up until now, .NET 6 has been the minimum required version, but newer versions have always been supported from day one (even the pre-releases&lt;sup id="fnref:2" role="doc-noteref">&lt;a href="#fn:2" class="footnote" rel="footnote">2&lt;/a>&lt;/sup>). In 4.4, the new minimum is now .NET 8, but as always, your projects can target the recent STS release .NET 9 and any newer version that is released in the future.&lt;/p>
&lt;p>Libraries tend to stay on older versions of .NET to support as many consumers as possible. But upgrading to the latest version of .NET brings benefits that we want to take advantage of.&lt;/p>
&lt;h2 id="what-about-older-godot-releases">What about older Godot releases?&lt;/h2>
&lt;p>We encourage users to upgrade to the latest version of Godot. We work hard to prevent breaking compatibility, to ensure you can safely upgrade to new versions of Godot when they are released. Please, make sure to test the pre-releases and let us know if you find some bugs so we can fix them before the stable release.&lt;/p>
&lt;p>Older versions of Godot will keep targeting .NET 6; we wont change the target version in patch updates, since that would be a big breaking change. If you still need to target .NET 6, you can stay on an older version of Godot, but we strongly encourage you to update to benefit from all the fixes and improvements included in the latest version of Godot and the .NET runtime.&lt;/p>
&lt;h2 id="what-about-future-net-releases">What about future .NET releases?&lt;/h2>
&lt;p>Godot always supports the latest .NET version. The version targeted by Godots C# packages is only the minimum version that your project can target, but you are always free to target a newer .NET version. To target the latest .NET 9 release in your project, you just need to install the latest version of the .NET SDK and change the &lt;code class="language-plaintext highlighter-rouge">TargetFramework&lt;/code> property in your &lt;code class="language-plaintext highlighter-rouge">.csproj&lt;/code>:&lt;/p>
&lt;div class="language-xml highlighter-rouge">&lt;div class="highlight">&lt;pre class="highlight">&lt;code>&lt;span class="nt">&amp;lt;Project&lt;/span> &lt;span class="na">Sdk=&lt;/span>&lt;span class="s">"Godot.NET.Sdk/4.3.0"&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span>
&lt;span class="nt">&amp;lt;PropertyGroup&amp;gt;&lt;/span>
&lt;span class="c">&amp;lt;!-- Target .NET 9 --&amp;gt;&lt;/span>
&lt;span class="nt">&amp;lt;TargetFramework&amp;gt;&lt;/span>net9.0&lt;span class="nt">&amp;lt;/TargetFramework&amp;gt;&lt;/span>
&lt;span class="nt">&amp;lt;EnableDynamicLoading&amp;gt;&lt;/span>true&lt;span class="nt">&amp;lt;/EnableDynamicLoading&amp;gt;&lt;/span>
&lt;span class="nt">&amp;lt;/PropertyGroup&amp;gt;&lt;/span>
&lt;span class="nt">&amp;lt;/Project&amp;gt;&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;div class="card card-warning">
&lt;p>You should always use the latest version of the .NET SDK even when targeting an older .NET version in your projects.&lt;/p>
&lt;/div>
&lt;p>Well keep updating our C# packages to the latest LTS version as they are released. The next LTS release will be .NET 10, due in November 2025.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;ol>
&lt;li id="fn:1" role="doc-endnote">
&lt;p>.NET 7 introduced the new &lt;code class="language-plaintext highlighter-rouge">scoped&lt;/code> keyword. This feature breaks compatibility in some low-level scenarios that affected Godot. &lt;a href="#fnref:1" class="reversefootnote" role="doc-backlink">&amp;#8617;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2" role="doc-endnote">
&lt;p>While pre-releases are usually supported by Godot, they may require users to enable them by setting the &lt;code class="language-plaintext highlighter-rouge">DOTNET_ROLL_FORWARD_TO_PRERELEASE&lt;/code> environment variable to &lt;code class="language-plaintext highlighter-rouge">1&lt;/code>. Keep in mind pre-releases are still a work-in-progress so there may be bugs. &lt;a href="#fnref:2" class="reversefootnote" role="doc-backlink">&amp;#8617;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description><category>Progress Report</category><guid>https://godotengine.org/article/godotsharp-packages-net8/</guid><dc:creator>Raul Santos</dc:creator><pubDate>Thu, 02 Jan 2025 17:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/godotsharp-packages-net8.webp</image></item><item><title>Dev snapshot: Godot 4.4 dev 7</title><link>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-7/</link><summary>One last build before the holidays!</summary><description>&lt;p>Seasons 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 its been up, itd 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 isnt 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 engines 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 heres 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 Editors 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="https://fund.godotengine.org/">
Make a Donation
&lt;/a>
&lt;/div>
&lt;/div>
&lt;style>
.thankyou-wrapper {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.85);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
z-index: 10;
}
.thankyou {
background: var(--base-color);
box-shadow: var(--more-shadow);
padding: 30px;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
position: relative;
border-radius: 13px;
}
.thankyou-reading {
font-size: 16px;
}
.thankyou-reading-list {
font-size: 16px;
margin: 0;
margin-left: 48px;
padding-left: 0;
}
.thankyou-donate {
margin-bottom: 24px;
text-align: center;
}
.btn.btn-donate {
background-color: var(--primary-color);
color: hsla(0, 0%, 100%, 0.9);
font-size: 22px;
font-weight: 600;
margin-bottom: 26px;
}
.thankyou h2 {
text-shadow: var(--base-shadow);
font-size: 36px;
font-weight: 800;
margin-bottom: 12px;
}
.thankyou h2 .anchored-link {
/* Hiding the anchored text automatically added on blogposts */
display: none !important;
}
.thankyou p {
max-width: 620px;
font-size: 25px;
}
@media (max-width: 768px) {
.thankyou-wrapper {
display: block;
}
.thankyou {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
overflow: scroll;
padding: 30px 40px 18px 40px;
}
.thankyou-reading-list {
margin-left: 24px;
}
.btn-close-thankyou-popup {
width: 48px;
height: 48px;
display: flex;
justify-content: center;
align-items: center;
}
}
.btn-close-thankyou-popup {
cursor: pointer;
position: absolute;
top: 12px;
right: 12px;
}
.btn-close-thankyou-popup img {
background: transparent !important; /* for overwriting the style in the blogposts img */
}
@media (prefers-color-scheme: light) {
.btn-close-thankyou-popup img {
filter: invert(1);
opacity: 0.75;
}
}
&lt;/style>
&lt;script>
document.addEventListener('DOMContentLoaded', () => {
const thankYouWrapper = document.getElementById('thank-you');
// Close itself, when clicked outside of the popup area.
thankYouWrapper.addEventListener('click', (e) => {
if (e.target === thankYouWrapper) {
thankYouWrapper.style.display = 'none';
}
});
// Close with a close button.
const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup');
thankYouBackButton.addEventListener('click', () => {
thankYouWrapper.style.display = 'none';
});
// Open from the main download buttons.
const downloadButtons = document.querySelectorAll('.btn-download');
downloadButtons.forEach((it) => {
it.addEventListener('click', () => {
thankYouWrapper.style.display = '';
document.querySelector('.btn.btn-donate').focus();
});
});
// Open from the all downloads list.
const downloadLinks = document.querySelectorAll('.download-link');
downloadLinks.forEach((it) => {
it.addEventListener('click', () => {
thankYouWrapper.style.display = '';
});
});
// Close the dialog when the user presses the escape key.
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
thankYouWrapper.style.display = 'none';
}
});
});
&lt;/script>
&lt;div class="thankyou-wrapper" id="thank-you" style="display: none;">
&lt;div class="thankyou">
&lt;h2>Godot is downloading...&lt;/h2>
&lt;p class="thankyou-donate">
Godot exists thanks to donations from people like you. Help us continue our work:
&lt;/p>
&lt;a href="https://fund.godotengine.org" class="btn btn-donate">
Make a Donation
&lt;/a>
&lt;div class="btn-close-thankyou-popup">
&lt;img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" />
&lt;/div>
&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 havent 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 youd 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></description><category>Pre-release</category><guid>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-7/</guid><dc:creator>Thaddeus Crews</dc:creator><pubDate>Thu, 19 Dec 2024 18:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/dev-snapshot-godot-4-4-dev-7.webp</image></item><item><title>Godot XR community - December 2024</title><link>https://godotengine.org/article/godot-xr-community-nov-2024/</link><summary>Interesting projects from the Godot XR community.</summary><description>&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.
Its a fun way for participants to get introduced to Godots 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”).
Dont let the thumbnail of this entry fool you. Its 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.
Its 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">Whos 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 players and dogs 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 youve 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.
Its 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 teddybear082s 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>Weve showcased XR Tools before, but with version 4.4 of the plugin nearly ready for release, its worth quickly looking at whats 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 plugins GitHub&lt;/a>.&lt;/p></description><category>News</category><guid>https://godotengine.org/article/godot-xr-community-nov-2024/</guid><dc:creator>Bastiaan Olij</dc:creator><pubDate>Wed, 18 Dec 2024 12:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/december-2024-update-godot-xr-community.webp</image></item><item><title>Meet the creator behind the Godot Game Awards</title><link>https://godotengine.org/article/godot-game-awards-stayathomedev/</link><summary>StayAtHomeDev has been sharing his passion on YouTube for over two years and now he's running the awards.</summary><description>&lt;h2 id="update-the-godot-game-awards-winners-have-been-announced-you-can-watch-the-video-here">Update: The Godot Game Awards winners have been announced! You can watch the video &lt;a href="https://www.youtube.com/watch?v=mUzAHrpjwl4">here&lt;/a>.&lt;/h2>
&lt;hr />
&lt;p>If youve watched Godot-related content on YouTube, &lt;a href="https://www.youtube.com/@stayathomedev">StayAtHomeDev&lt;/a> needs no introduction. Hes 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, hes 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 years 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>Im 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, its 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, youll 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 cant do them means you likely wont.&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 thats 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. Dont try to make an entire 2D platformer controller, make it move left and right first. And dont think youre going to sell your first game and make tons of money. Youll put too much pressure on yourself and it wont be fun anymore, youll get frustrated, and youll quit.&lt;/p>
&lt;p>For content creation, its a marathon so the most important thing is dont 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 wont 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, youll 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. Im also a music therapist so I have seen the effect creativity and expression can have on a persons 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 Ill 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></description><category>Showcase</category><guid>https://godotengine.org/article/godot-game-awards-stayathomedev/</guid><dc:creator>Emi</dc:creator><pubDate>Mon, 09 Dec 2024 18:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/godot-awards-stayathomedev.webp</image></item><item><title>Dev snapshot: Godot 4.4 dev 6</title><link>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-6/</link><summary>New snapshot on the road to beta, with a lot of 3D workflow goodies!</summary><description>&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 whats 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 wasnt 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 Godots 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 Godots 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 heres 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/3Ds &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: Dont 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: Dont 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: Dont 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 dont 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="https://fund.godotengine.org/">
Make a Donation
&lt;/a>
&lt;/div>
&lt;/div>
&lt;style>
.thankyou-wrapper {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.85);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
z-index: 10;
}
.thankyou {
background: var(--base-color);
box-shadow: var(--more-shadow);
padding: 30px;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
position: relative;
border-radius: 13px;
}
.thankyou-reading {
font-size: 16px;
}
.thankyou-reading-list {
font-size: 16px;
margin: 0;
margin-left: 48px;
padding-left: 0;
}
.thankyou-donate {
margin-bottom: 24px;
text-align: center;
}
.btn.btn-donate {
background-color: var(--primary-color);
color: hsla(0, 0%, 100%, 0.9);
font-size: 22px;
font-weight: 600;
margin-bottom: 26px;
}
.thankyou h2 {
text-shadow: var(--base-shadow);
font-size: 36px;
font-weight: 800;
margin-bottom: 12px;
}
.thankyou h2 .anchored-link {
/* Hiding the anchored text automatically added on blogposts */
display: none !important;
}
.thankyou p {
max-width: 620px;
font-size: 25px;
}
@media (max-width: 768px) {
.thankyou-wrapper {
display: block;
}
.thankyou {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
overflow: scroll;
padding: 30px 40px 18px 40px;
}
.thankyou-reading-list {
margin-left: 24px;
}
.btn-close-thankyou-popup {
width: 48px;
height: 48px;
display: flex;
justify-content: center;
align-items: center;
}
}
.btn-close-thankyou-popup {
cursor: pointer;
position: absolute;
top: 12px;
right: 12px;
}
.btn-close-thankyou-popup img {
background: transparent !important; /* for overwriting the style in the blogposts img */
}
@media (prefers-color-scheme: light) {
.btn-close-thankyou-popup img {
filter: invert(1);
opacity: 0.75;
}
}
&lt;/style>
&lt;script>
document.addEventListener('DOMContentLoaded', () => {
const thankYouWrapper = document.getElementById('thank-you');
// Close itself, when clicked outside of the popup area.
thankYouWrapper.addEventListener('click', (e) => {
if (e.target === thankYouWrapper) {
thankYouWrapper.style.display = 'none';
}
});
// Close with a close button.
const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup');
thankYouBackButton.addEventListener('click', () => {
thankYouWrapper.style.display = 'none';
});
// Open from the main download buttons.
const downloadButtons = document.querySelectorAll('.btn-download');
downloadButtons.forEach((it) => {
it.addEventListener('click', () => {
thankYouWrapper.style.display = '';
document.querySelector('.btn.btn-donate').focus();
});
});
// Open from the all downloads list.
const downloadLinks = document.querySelectorAll('.download-link');
downloadLinks.forEach((it) => {
it.addEventListener('click', () => {
thankYouWrapper.style.display = '';
});
});
// Close the dialog when the user presses the escape key.
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
thankYouWrapper.style.display = 'none';
}
});
});
&lt;/script>
&lt;div class="thankyou-wrapper" id="thank-you" style="display: none;">
&lt;div class="thankyou">
&lt;h2>Godot is downloading...&lt;/h2>
&lt;p class="thankyou-donate">
Godot exists thanks to donations from people like you. Help us continue our work:
&lt;/p>
&lt;a href="https://fund.godotengine.org" class="btn btn-donate">
Make a Donation
&lt;/a>
&lt;div class="btn-close-thankyou-popup">
&lt;img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" />
&lt;/div>
&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 havent 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. Well 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 youd 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></description><category>Pre-release</category><guid>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-6/</guid><dc:creator>Thaddeus Crews</dc:creator><pubDate>Thu, 05 Dec 2024 17:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/dev-snapshot-godot-4-4-dev-6.webp</image></item><item><title>Beyond #100000: You're breathtaking!</title><link>https://godotengine.org/article/beyond-100000-you-re-breathtaking/</link><summary>As we reach issue #100,000 on GitHub, we celebrate with a little retrospective on our issue and pull request growth.</summary><description>&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>Its 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 cant keep enumerating.&lt;/p>
&lt;p>All these people brought Juan and Ariels 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>Thats no small achievement, so I encourage all contributors to take a minute to contemplate the progress that weve 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., its 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 Godots 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 Godots 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 its 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 doesnt 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 isnt 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 peoples issues that you stumble upon, especially if their last update was a long time ago. In this case you cant 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 didnt 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 (thats 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. Thats 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>Thats 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 its 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>Ill 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, weve 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></description><category>News</category><guid>https://godotengine.org/article/beyond-100000-you-re-breathtaking/</guid><dc:creator>Rémi Verschelde</dc:creator><pubDate>Wed, 04 Dec 2024 19:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/beyond-100000-you-re-breathtaking.webp</image></item><item><title>Godot Foundation Update December 2024</title><link>https://godotengine.org/article/godot-foundation-update-dec-2024/</link><summary>Weve made progress on several key initiatives for the organization and the Godot ecosystem. Heres what weve been up to.</summary><description>&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 dont 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 wont 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 Foundations role in the project&lt;/h2>
&lt;p>We also wanted to take this chance to muse about the Foundations 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 arent 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 youd 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></description><category>News</category><guid>https://godotengine.org/article/godot-foundation-update-dec-2024/</guid><dc:creator>Godot Foundation</dc:creator><pubDate>Mon, 02 Dec 2024 17:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/godot-foundation-update-2024.webp</image></item><item><title>Statement on GodLoader malware loader</title><link>https://godotengine.org/article/statement-on-godloader-malware-loader/</link><summary>Godot security team clarifies the risk exposed by Check Point Research's report.</summary><description>&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 dont have to do anything. You are not at risk.&lt;/strong>
We encourage people to only execute software from trusted sources whether its 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 cant confirm that their account hasnt 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></description><category>News</category><guid>https://godotengine.org/article/statement-on-godloader-malware-loader/</guid><dc:creator>Godot Security Team</dc:creator><pubDate>Thu, 28 Nov 2024 11:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/statement-on-godloader-malware-loader.webp</image></item><item><title>Dev snapshot: Godot 4.4 dev 5</title><link>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-5/</link><summary>With GodotCon behind us and our developers recuperated, we're thrilled to return to a more frequent release-cycle.</summary><description>&lt;p>With &lt;a href="https://godotengine.org/article/review-godotcon24/">GodotCon&lt;/a> behind us and our developers recuperated, were thrilled to return
to a more frequent release-cycle. Its only been two weeks since we last checked in, yet theres 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 thats 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 shouldnt 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 didnt 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 theyre 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 theres 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 ones 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 heres a curated selection:&lt;/p>
&lt;ul>
&lt;li>2D: Add a way to know when a TileMapLayers 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="https://fund.godotengine.org/">
Make a Donation
&lt;/a>
&lt;/div>
&lt;/div>
&lt;style>
.thankyou-wrapper {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.85);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
z-index: 10;
}
.thankyou {
background: var(--base-color);
box-shadow: var(--more-shadow);
padding: 30px;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
position: relative;
border-radius: 13px;
}
.thankyou-reading {
font-size: 16px;
}
.thankyou-reading-list {
font-size: 16px;
margin: 0;
margin-left: 48px;
padding-left: 0;
}
.thankyou-donate {
margin-bottom: 24px;
text-align: center;
}
.btn.btn-donate {
background-color: var(--primary-color);
color: hsla(0, 0%, 100%, 0.9);
font-size: 22px;
font-weight: 600;
margin-bottom: 26px;
}
.thankyou h2 {
text-shadow: var(--base-shadow);
font-size: 36px;
font-weight: 800;
margin-bottom: 12px;
}
.thankyou h2 .anchored-link {
/* Hiding the anchored text automatically added on blogposts */
display: none !important;
}
.thankyou p {
max-width: 620px;
font-size: 25px;
}
@media (max-width: 768px) {
.thankyou-wrapper {
display: block;
}
.thankyou {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
overflow: scroll;
padding: 30px 40px 18px 40px;
}
.thankyou-reading-list {
margin-left: 24px;
}
.btn-close-thankyou-popup {
width: 48px;
height: 48px;
display: flex;
justify-content: center;
align-items: center;
}
}
.btn-close-thankyou-popup {
cursor: pointer;
position: absolute;
top: 12px;
right: 12px;
}
.btn-close-thankyou-popup img {
background: transparent !important; /* for overwriting the style in the blogposts img */
}
@media (prefers-color-scheme: light) {
.btn-close-thankyou-popup img {
filter: invert(1);
opacity: 0.75;
}
}
&lt;/style>
&lt;script>
document.addEventListener('DOMContentLoaded', () => {
const thankYouWrapper = document.getElementById('thank-you');
// Close itself, when clicked outside of the popup area.
thankYouWrapper.addEventListener('click', (e) => {
if (e.target === thankYouWrapper) {
thankYouWrapper.style.display = 'none';
}
});
// Close with a close button.
const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup');
thankYouBackButton.addEventListener('click', () => {
thankYouWrapper.style.display = 'none';
});
// Open from the main download buttons.
const downloadButtons = document.querySelectorAll('.btn-download');
downloadButtons.forEach((it) => {
it.addEventListener('click', () => {
thankYouWrapper.style.display = '';
document.querySelector('.btn.btn-donate').focus();
});
});
// Open from the all downloads list.
const downloadLinks = document.querySelectorAll('.download-link');
downloadLinks.forEach((it) => {
it.addEventListener('click', () => {
thankYouWrapper.style.display = '';
});
});
// Close the dialog when the user presses the escape key.
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
thankYouWrapper.style.display = 'none';
}
});
});
&lt;/script>
&lt;div class="thankyou-wrapper" id="thank-you" style="display: none;">
&lt;div class="thankyou">
&lt;h2>Godot is downloading...&lt;/h2>
&lt;p class="thankyou-donate">
Godot exists thanks to donations from people like you. Help us continue our work:
&lt;/p>
&lt;a href="https://fund.godotengine.org" class="btn btn-donate">
Make a Donation
&lt;/a>
&lt;div class="btn-close-thankyou-popup">
&lt;img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" />
&lt;/div>
&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 havent 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 youd 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></description><category>Pre-release</category><guid>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-5/</guid><dc:creator>Thaddeus Crews</dc:creator><pubDate>Thu, 21 Nov 2024 18:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/dev-snapshot-godot-4-4-dev-5.webp</image></item><item><title>GodotCon 24: Berlin Edition</title><link>https://godotengine.org/article/review-godotcon24/</link><summary>Our biggest conference yet!</summary><description>&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 couldnt 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 wouldnt 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 “W4s 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; lets 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, wed 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">Skyes 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></description><category>Events</category><guid>https://godotengine.org/article/review-godotcon24/</guid><dc:creator>Nat</dc:creator><pubDate>Wed, 13 Nov 2024 18:30:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/godotcon-2024-post.webp</image></item><item><title>Dev snapshot: Godot 4.4 dev 4</title><link>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-4/</link><summary>After a short delay due to GodotCon, we are back with another exciting update.</summary><description>&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 projects 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 wont 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 heres 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="https://fund.godotengine.org/">
Make a Donation
&lt;/a>
&lt;/div>
&lt;/div>
&lt;style>
.thankyou-wrapper {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.85);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
z-index: 10;
}
.thankyou {
background: var(--base-color);
box-shadow: var(--more-shadow);
padding: 30px;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
position: relative;
border-radius: 13px;
}
.thankyou-reading {
font-size: 16px;
}
.thankyou-reading-list {
font-size: 16px;
margin: 0;
margin-left: 48px;
padding-left: 0;
}
.thankyou-donate {
margin-bottom: 24px;
text-align: center;
}
.btn.btn-donate {
background-color: var(--primary-color);
color: hsla(0, 0%, 100%, 0.9);
font-size: 22px;
font-weight: 600;
margin-bottom: 26px;
}
.thankyou h2 {
text-shadow: var(--base-shadow);
font-size: 36px;
font-weight: 800;
margin-bottom: 12px;
}
.thankyou h2 .anchored-link {
/* Hiding the anchored text automatically added on blogposts */
display: none !important;
}
.thankyou p {
max-width: 620px;
font-size: 25px;
}
@media (max-width: 768px) {
.thankyou-wrapper {
display: block;
}
.thankyou {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
overflow: scroll;
padding: 30px 40px 18px 40px;
}
.thankyou-reading-list {
margin-left: 24px;
}
.btn-close-thankyou-popup {
width: 48px;
height: 48px;
display: flex;
justify-content: center;
align-items: center;
}
}
.btn-close-thankyou-popup {
cursor: pointer;
position: absolute;
top: 12px;
right: 12px;
}
.btn-close-thankyou-popup img {
background: transparent !important; /* for overwriting the style in the blogposts img */
}
@media (prefers-color-scheme: light) {
.btn-close-thankyou-popup img {
filter: invert(1);
opacity: 0.75;
}
}
&lt;/style>
&lt;script>
document.addEventListener('DOMContentLoaded', () => {
const thankYouWrapper = document.getElementById('thank-you');
// Close itself, when clicked outside of the popup area.
thankYouWrapper.addEventListener('click', (e) => {
if (e.target === thankYouWrapper) {
thankYouWrapper.style.display = 'none';
}
});
// Close with a close button.
const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup');
thankYouBackButton.addEventListener('click', () => {
thankYouWrapper.style.display = 'none';
});
// Open from the main download buttons.
const downloadButtons = document.querySelectorAll('.btn-download');
downloadButtons.forEach((it) => {
it.addEventListener('click', () => {
thankYouWrapper.style.display = '';
document.querySelector('.btn.btn-donate').focus();
});
});
// Open from the all downloads list.
const downloadLinks = document.querySelectorAll('.download-link');
downloadLinks.forEach((it) => {
it.addEventListener('click', () => {
thankYouWrapper.style.display = '';
});
});
// Close the dialog when the user presses the escape key.
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
thankYouWrapper.style.display = 'none';
}
});
});
&lt;/script>
&lt;div class="thankyou-wrapper" id="thank-you" style="display: none;">
&lt;div class="thankyou">
&lt;h2>Godot is downloading...&lt;/h2>
&lt;p class="thankyou-donate">
Godot exists thanks to donations from people like you. Help us continue our work:
&lt;/p>
&lt;a href="https://fund.godotengine.org" class="btn btn-donate">
Make a Donation
&lt;/a>
&lt;div class="btn-close-thankyou-popup">
&lt;img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" />
&lt;/div>
&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 havent 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 youd 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></description><category>Pre-release</category><guid>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-4/</guid><dc:creator>Clay John</dc:creator><pubDate>Fri, 08 Nov 2024 12:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/dev-snapshot-godot-4-4-dev-4.webp</image></item><item><title>Dev snapshot: Godot 4.4 dev 3</title><link>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-3/</link><summary>We haven't slowed down and are bringing you another feature-packed update!</summary><description>&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>Lets 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 doesnt support Vulkan, D3D12,
or Metal, the engine will provide the user with an OS alert notifying them that they dont 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 heres 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="https://fund.godotengine.org/">
Make a Donation
&lt;/a>
&lt;/div>
&lt;/div>
&lt;style>
.thankyou-wrapper {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.85);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
z-index: 10;
}
.thankyou {
background: var(--base-color);
box-shadow: var(--more-shadow);
padding: 30px;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
position: relative;
border-radius: 13px;
}
.thankyou-reading {
font-size: 16px;
}
.thankyou-reading-list {
font-size: 16px;
margin: 0;
margin-left: 48px;
padding-left: 0;
}
.thankyou-donate {
margin-bottom: 24px;
text-align: center;
}
.btn.btn-donate {
background-color: var(--primary-color);
color: hsla(0, 0%, 100%, 0.9);
font-size: 22px;
font-weight: 600;
margin-bottom: 26px;
}
.thankyou h2 {
text-shadow: var(--base-shadow);
font-size: 36px;
font-weight: 800;
margin-bottom: 12px;
}
.thankyou h2 .anchored-link {
/* Hiding the anchored text automatically added on blogposts */
display: none !important;
}
.thankyou p {
max-width: 620px;
font-size: 25px;
}
@media (max-width: 768px) {
.thankyou-wrapper {
display: block;
}
.thankyou {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
overflow: scroll;
padding: 30px 40px 18px 40px;
}
.thankyou-reading-list {
margin-left: 24px;
}
.btn-close-thankyou-popup {
width: 48px;
height: 48px;
display: flex;
justify-content: center;
align-items: center;
}
}
.btn-close-thankyou-popup {
cursor: pointer;
position: absolute;
top: 12px;
right: 12px;
}
.btn-close-thankyou-popup img {
background: transparent !important; /* for overwriting the style in the blogposts img */
}
@media (prefers-color-scheme: light) {
.btn-close-thankyou-popup img {
filter: invert(1);
opacity: 0.75;
}
}
&lt;/style>
&lt;script>
document.addEventListener('DOMContentLoaded', () => {
const thankYouWrapper = document.getElementById('thank-you');
// Close itself, when clicked outside of the popup area.
thankYouWrapper.addEventListener('click', (e) => {
if (e.target === thankYouWrapper) {
thankYouWrapper.style.display = 'none';
}
});
// Close with a close button.
const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup');
thankYouBackButton.addEventListener('click', () => {
thankYouWrapper.style.display = 'none';
});
// Open from the main download buttons.
const downloadButtons = document.querySelectorAll('.btn-download');
downloadButtons.forEach((it) => {
it.addEventListener('click', () => {
thankYouWrapper.style.display = '';
document.querySelector('.btn.btn-donate').focus();
});
});
// Open from the all downloads list.
const downloadLinks = document.querySelectorAll('.download-link');
downloadLinks.forEach((it) => {
it.addEventListener('click', () => {
thankYouWrapper.style.display = '';
});
});
// Close the dialog when the user presses the escape key.
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
thankYouWrapper.style.display = 'none';
}
});
});
&lt;/script>
&lt;div class="thankyou-wrapper" id="thank-you" style="display: none;">
&lt;div class="thankyou">
&lt;h2>Godot is downloading...&lt;/h2>
&lt;p class="thankyou-donate">
Godot exists thanks to donations from people like you. Help us continue our work:
&lt;/p>
&lt;a href="https://fund.godotengine.org" class="btn btn-donate">
Make a Donation
&lt;/a>
&lt;div class="btn-close-thankyou-popup">
&lt;img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" />
&lt;/div>
&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 havent 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 youd 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></description><category>Pre-release</category><guid>https://godotengine.org/article/dev-snapshot-godot-4-4-dev-3/</guid><dc:creator>Clay John</dc:creator><pubDate>Thu, 03 Oct 2024 12:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/dev-snapshot-godot-4-4-dev-3.webp</image></item><item><title>Godot XR update - October 2024</title><link>https://godotengine.org/article/godot-xr-update-oct-2024/</link><summary>Looking back at a year of XR development.</summary><description>&lt;p>It has been a very busy year on the XR front and seeing we havent given a proper update for well over a year, its 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 were doing a bit of a deep dive here.&lt;/p>
&lt;p>Were 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 Godots 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 Godots 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 users 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 users 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. Metas 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. Were 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, were supporting Qualcomms OpenXR runtime on the Lynx R1 but were 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.
Were looking into supporting this in a future 4.3 patch release.&lt;/p>
&lt;h2 id="whats-next">Whats 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></description><category>Progress Report</category><guid>https://godotengine.org/article/godot-xr-update-oct-2024/</guid><dc:creator>Bastiaan Olij</dc:creator><pubDate>Wed, 02 Oct 2024 12:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/october-2024-xr-progress-update.webp</image></item></channel></rss>