godot/CHANGELOG.md

234 KiB
Raw Blame History

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog.

4.0.4 - TBD

See the release announcement for details.

Added

C#/.NET

  • Add version defines to help users deal with breaking changes (GH-78270).

Documentation

  • Document GI techniques ignoring VisualInstance3D and Camera3D layers (GH-74688).
  • Document how to use the global animation library in GDScript (GH-74894).
  • Add more info on the nature of NAN (GH-75614).
  • Add Stretch Mode description to ProjectSettings.xml (GH-76272).
  • Document seamless caveats on small textures in NoiseTexture2D and NoiseTexture3D (GH-77017).
  • Document the database for Input.get_joy_name() and Input.get_joy_guid() (GH-77768).
  • Document the InitialAction enum in RenderingDevice (GH-77882).
  • Document ShaderInclude (GH-78562).

Editor

  • Add an editor option to copy system info to clipboard (GH-65902).

Input

  • Add support for DPAD Center key of Android TV remote controller (GH-77115).

Changed

2D

  • Make tile atlas merge dialog use filter nearest on both sides (GH-77385).
  • Don't create bones from empty scene (GH-77473).
  • Don't disable Material and PlaceholderMaterial when disable_3d=yes (GH-77654).
  • Draw materials in tile atlas view (GH-77909).

Animation

  • Hide Animation Frames section when there are no animations (GH-77221).
  • Improve Skeleton3D::find_bone() performance (GH-77307).
  • Avoid mutating the same Skin multiple times (GH-77505).

C#/.NET

  • Always decode dotnet output as UTF-8 (GH-74065).
  • Link the right build property to REAL_T_IS_DOUBLE (GH-77198).

Editor

  • Use nearest with mipmaps texture filter in SpriteFrames editor plugin (GH-74341).
  • Make sure script cache is created after reimport (GH-75798).
  • Make SpriteFrames editor toolbar a FlowContainer (GH-77034).
  • Prevent selecting unselectable EditorProperty with RMB (GH-77148).
  • Do not translate node name when assigned to an exported field (GH-77217).
  • Allow up to INT32_MAX max size in Array/Dictionary editor (GH-77225).
  • Avoid error spam on first opening of a not yet imported project (GH-77276).
  • Ensure quotes are escaped when converting built-in scripts (GH-77399).
  • Ignore the project_settings_override file when in editor (GH-77459).

GDScript

  • Treat BitField<Enum> as int (not Enum) (GH-77579).

GUI

  • Stop dragging when Slider changes editability (GH-77242).
  • Use defined key mapping for closing popups and dialogs (GH-77297).
  • TextServer: Prevent duplicate line breaks on virtual spaces when line width is significantly smaller than character width (GH-77514).
  • Cancel tooltip when mouse leaves viewport (GH-77933).
  • Preserve selection when focusing SpinBox (GH-78092).

Input

  • Improve touchpad and mouse support for the Android editor (GH-77498).
  • Skip error messages for buttons that don't exist (GH-77748).

Rendering

  • Disable AMD switchable graphics on Windows with Vulkan to fix driver issue (GH-73450).
  • Take 3D resolution scaling into account for mesh LOD (GH-77294).

Thirdparty

  • brotli updated to version ed1995b6b.
  • msdfgen updated to version 1.10.
  • recast updated to version 1.6.0.
  • tinyexr updated to version 1.0.5.
  • wslay updated to version 0e7d106ff.
  • zstd updated to version 1.5.5.
  • CA root certificates updated to 2023-06-02 bundle from Mozilla.

Fixed

2D

  • Fix crash when opening a TileSet with invalid tiles (GH-78165).
  • Fix crash with failed compatibility tiles (GH-78796).

3D

  • Fix CSGPolygon3D in path mode disappearing at runtime (GH-77118).

Animation

  • Fix type check in AnimationTrackKeyEdit for methods (GH-74948).
  • Fix AnimatedSprite3D autoplay warning (GH-77028).
  • Adjust BoneAttachment3D children/meshes during rest fixer (GH-77123).
  • Fix get_bone_pose_global_no_override() returning incorrect values (GH-77194).
  • Fix for SkeletonIK3D interpolation and bone roll (GH-77469).
  • Fix AnimationPlayer cumulative speed_scale (GH-77500).
  • Fix adding bones with the same name after calling Skeleton3D.clear_bones() (GH-77874).

Audio

  • Fix trim when importing WAV (GH-75261).
  • Fix 2D audio in multiple viewports (GH-76713).
  • Fix crash in AudioStream preview (GH-77664).
  • Fix issue causing the Android editor to crash when creating a new AudioStreamMicrophone (GH-77686).

Buildsystem

  • CI: Fix running the unit tests on windows (GH-76887).
  • Linux: Fix udev fallback logic with use_sowrap=no (GH-79111).

C#/.NET

  • Fix C# glue generation for enums with negative values (GH-77018).
  • Fix SendToScriptDebugger crash (GH-77377).

Core

  • Fix StringName comparison (GH-77197).
  • Fix calling TextureStorage::texture_3d_update() could cause a crash (GH-77266).

Editor

  • Fix theme of editor VCS dialogs (GH-75983).
  • Fix calculation bug with TextEdit::get_line_height() (GH-76605).
  • Fix Input Map key assignments missing after project conversion (GH-77134).
  • Fix Window derived nodes being unselectable for ViewportTexture NodePath (GH-77312).
  • Fix crash when using tile atlas merge with recreated alt tile (GH-77382).
  • Fix filesystem cache split error (GH-78324).
  • Fix saving size in CreateDialog (GH-78403).
  • Shaders: Exclude incorrect completion options for render_mode in shaders (GH-77086).

GDScript

  • Add missing script_type nullptr check (GH-75943).
  • Fix warning ignoring for member variables (GH-76203).
  • Fix validate_call_arg() for unresolved datatype (GH-77091).
  • Fix extraction of chained tr() calls (GH-77538).

GUI

  • Fix Range-derived nodes not redrawing after set_value_no_signal (GH-70834).
  • Fix adding colors to swatches not updating in previous ColorPickers (GH-76751).
  • Fix crash when changing node type from PopupMenu to ItemList (GH-76854).
  • Fix ItemList item text positions in RTL mode (GH-77166).
  • Fix crash when selecting lines in text edit (GH-77667).
  • Fix SVG font rendering after ThorVG update (GH-77942).
  • Fix disabled slider highlighting (GH-78776).

Input

  • Fix errors that appear while reordering input map entries (GH-77009).
  • Fix spatial viewport multitouch detection support (GH-78083).

Navigation

  • Fix agent avoidance position not updated when entering SceneTree (GH-77110).

Networking

  • Fix HTTPClient _request using wrong size (GH-75867).
  • ENet: Better handle truncated socket messages (GH-79699).

Particles

  • Correctly reset particle size and rotation in ParticlesProcessMaterial (GH-78021).
  • Avoid error spam when (un)pausing GPUParticles out of tree (GH-78143).

Physics

  • Fix width and center position of CapsuleShape2D::get_rect (GH-77065).

Porting

  • Android: Set pending intent flag to stop insta-crash (GH-78175).
  • Windows: Fix for Win+M crashing the editor (GH-78235).

Rendering

  • Fix typo in FinalAction switch statement in RenderingDevice (GH-75945).
  • Fix modulation propagation for Y-sorted CanvasItems (GH-77079).
  • Fix LightmapGI dynamic object lighting (GH-77089).
  • Fix calculation of skinned AABB for unused bones (GH-77265).
  • Fix uninitialized Y-sort modulate for CanvasItems (GH-78134).

4.0.3 - 2023-05-19

See the release announcement for details.

Added

2D

  • Add info label to TileMap editor (GH-68800).

Documentation

  • Create an "Editor-only" section in the online class reference (GH-76410).
  • Improve RenderingServer, RenderingDevice, ShaderGlobalsOverride documentation (GH-76008).

Editor

  • Properly remember snapping options per-project (GH-74682).
  • Remember directory when installing templates file (GH-74735).
  • Improve editor state initialization (GH-75563).

GUI

  • Allow entering named colors in ColorPicker's hex field (GH-75905).

Navigation

  • Expose NavigationAgent path postprocessing and pathfinding algorithm options (GH-75326).

Physics

  • Warn when a concave polygon is assigned to ConvexPolygonShape2D (GH-56671).

Rendering

  • Expose viewports render target RID (GH-75517).
  • Allow creation of rendering buffers at any time (GH-75937).

Changed

3D

  • Use physical shortcuts for freelook navigation in the editor (GH-73651).

Buildsystem

  • Err when trying to build the editor without its required modules (GH-74980).
  • Enable shadow warnings and fix raised errors (GH-76946).

C#/.NET

  • Truncate instead of round in Vector2/3/4 to Vector2I/3I/4I conversion (GH-75477).

Core

  • Lift restriction that resource load thread requester has to be the initiator (GH-73862).
  • Rename internal root canvas group to start with underscore (GH-76149).
  • Make acos and asin safe (GH-76906).

Documentation

  • Exclude overridden properties from Property Descriptions section (GH-77027).

Editor

  • Prevent off-screen controls in editor (GH-73646).
  • Re-enable script editor File menu shortcuts when the menu is hidden (GH-74319).
  • Prevent color conversion of the big Godot logo (GH-75653).
  • Set font sizes for various styles in editor output panel (GH-75780).
  • Adjust size of some dialogs (GH-75895).
  • Change cursor consistently when panning in the 2D Editor (GH-75997).
  • Validate renderer selection in project manager and expose default renderer setting as an enum (GH-76331).
  • Close built-in shaders when closing scene (GH-75864).
  • Command Palette search now also uses original English command names (GH-76523).
  • Preserve scene unique names when saving branch as scene (GH-76609).

GUI

  • Ignore invisible children of GraphNode for minimum size (GH-72240).
  • Update TextureProgressBar upon texture changes (GH-75532).
  • Keep a copy of UTF-8 XML source string during the SVG font processing (GH-75675).
  • Always cache parent visibility in CanvasItem (GH-75890).
  • Improve BiDi error handling in TextServer (GH-75922).
  • Use dedicated flag for object replacement characters in TextServer (GH-75974).
  • Improve line BiDi handling, prevent crash on recursive log updates (GH-75975).
  • Don't apply scale to autohide theme property (GH-75993).

Import

  • gltf: Remove obsolete hack to embed gltf textures in advanced import (GH-75636).
  • Expose more compression formats in Image and fix compress check (GH-76014).
  • Use DXT1 when compressing PNGs with RGB format (GH-76516).
  • gltf: Permit sparse accessors without a bufferView (GH-76875).

Networking

  • Poll LSP/DAP clients for connection status updates (GH-75850).

Particles

  • Translate inactive GPUParticles3D particles to -INF (GH-75162).
  • Use angle_rand to calculate base_angle in particles process material (GH-75999).
  • Don't store instance transform origin in RD 3D renderer unless requested (GH-76003).

Physics

  • Modify contact_max_allowed_penetration precision to 3 significant digits (GH-75665).

Porting

  • Android: Downgrade Android gradle plugin to version 7.2.1 (GH-76325).
  • Linux: Ensure WindowData minimized/maximized are mutually exclusive (GH-76868).
  • Linux: Don't use udev for joypad hotloading when running in a sandbox (GH-76961).
  • Windows: Support long path in file access (GH-76739).

Rendering

  • Recreate swap chain when suboptimal to avoid error spam (GH-72859).
  • Use MODELVIEW_MATRIX when on double precision (GH-75462).
  • Check for instancing without relying on instance_count when drawing 2D meshes (GH-75954).

Shaders

  • Write out render_mode even when mode is set to default in VisualShaders (GH-75957).

Thirdparty

  • astcenc updated to 4.4.0.
  • doctest updated to 2.4.11.
  • mbedtls updated to 2.28.3.
  • thorvg updated to 0.9.0.
  • CA root certificates updated to 2023-03-23 bundle from Mozilla.

Fixed

2D

  • Fix RemoteTransform2D could fail to update AnimatableBody2D's position or rotation (GH-75487).
  • Fix rendering odd-sized tiles (GH-74814).
  • Fix TouchScreenButton not redrawn when texture changes (GH-75016).

3D

  • 3D: Fixes to CSG robustness (GH-74771).
  • 3D: Fix infinite loop in CSG Build2DFaces::_find_edge_intersections (GH-76521).
  • 3D: Fix SurfaceTool::create_from_blend_shape() (GH-76669).

Animation

  • Fix blend_shape (shapekey) empty name import (GH-75990).

Audio

  • Fix crash caused by invalid mix_rate assignment due to bogus project settings (GH-69833).
  • Fix AudioStreamPlayer2D crash when PhysicsServer2D runs on thread (GH-75728).

Buildsystem

  • Fix the Python type error when creating the .sln file (GH-75309).
  • Fix forced optimization in dev_build (GH-75909).

Core

  • Fix the UID field of the tscn/res file is lost when the external dependency is updated (GH-70234).
  • Fix invalid global position when read outside tree (GH-75509).
  • Fix moving position indicator out of bounds in FileAccessMemory (GH-75641).
  • Fix expected argument count in Callable call error text (GH-76259).
  • Fix lerp error message (GH-76314).
  • Make LocalVector respect its tight template parameter (GH-64120).
  • Prevent errors when using ViewportTexture (GH-75751).
  • Fix size error in BitMap.opaque_to_polygons (GH-76536).

Editor

  • Fix off-by-one issue where "Go to Line" dialog shows the incorrect line number (GH-75523).
  • Fix UI responsiveness to touch taps (GH-75703).
  • Fix deserializing resource usage debug data (GH-75782).
  • Initialize editor values on first launch (GH-75799).
  • Fix connect signal dialog not allowing Unicode method name (GH-75814).
  • Fix method dialog label (GH-75844).
  • Fix editor spin slider remaining editable if set read_only while editing (GH-76122).
  • Fix layout list not resizing in editor layout dialog (GH-76364).
  • Fix line_spacing in code editor will not take effect immediately on change (GH-76396).
  • Fix inconsistent file dialog settings usage (GH-76421).
  • Fix Node arrays appear as Object arrays in the inspector (GH-76530).
  • Fix CollisionShape2D editor crashes (GH-76546, GH-76798).
  • Fix 2D shader preview draws over uniform (GH-76555).
  • Fix crash when trying to create bones from Control (GH-77160).

Export

  • Fix validation of codesigning certificate password on macOS (GH-74326).

GDExtension

  • Add missing bindings and documentation for MultiplayerPeerExtension (GH-75116).

GDScript

  • Add missing member type check when resolving extends (GH-75879).
  • Fix typo in LSP parse function parameters (GH-76090).
  • Fix inner method variable rename in LSP (GH-76095).
  • Fix multi-line string highlighting with single quotes (GH-76170).
  • Fix mixed tabs and spaces issues (GH-76286).
  • Fix wrong file name on function call error (GH-76404).
  • Don't fail when freed object is returned (GH-76483).
  • Don't send empty LSP completion command (GH-76790).

GUI

  • Fix RichTextLabel wrong selection offset in padded table cell (GH-71742).
  • Fix commenting collapsed function issue (GH-75070).
  • Fix fill align and trim with enabled dropcap in RichTextLabel (GH-75504).
  • Fix descriptions not showing for theme properties (GH-75559).
  • Fix some theme values affect the editor by setting a default value for them (GH-75566).
  • Fix several GraphEdit operations at zoom levels other than 100% (GH-75595).
  • Fix offset calculation in Tree when there are hidden items (GH-75977).
  • Add missing LineEdit constants in editor theme (GH-76123).
  • Fix blurry borders on antialiased StyleBoxFlat (GH-76132).
  • Fix fractional ascent for image fonts with odd height (GH-76136).
  • Fix right click in selection of additional caret (GH-76472).

Import

  • SVG: Fix tvg::Picture->size() and scale based errors (GH-75034).
  • Fix OBJ mesh importer smoothing handling (GH-75315).
  • Fix animation silhouette using incorrect index (GH-76499).

Input

  • Fix guide button detection with XInput and Xbox Series controllers (GH-73200).
  • Fix the issue preventing dragging in the 2D editor (GH-75113).
  • Fix keycode/physical keycode mix up on web (GH-75738).
  • Fix potential null in android text entry system (GH-75991).

Navigation

  • Fix NavigationObstacles not being added to avoidance simulation (GH-75756).
  • Fix NavigationMesh baking for HeightMapShape (GH-76212).

Networking

  • Fix crashes trying to use TLS when not available (GH-77011).

Particles

  • Properly calculate lifetime_split for particles (GH-73313).
  • Fix "error X3708: continue cannot be used in a switch" in HTML export (GH-75795).

Physics

  • Fix typo bug in convex-convex separating axis test (GH-75835).

Porting

  • Android: Fix issue with resizing the display when using the compatibility renderer (GH-76464).
  • Android: Allow concurrent buffering and dispatch of input events (GH-76399).
  • Android: Fix double tap & drag on Android (GH-76791).
  • iOS: Fix splash screen rotation (GH-76037).
  • iOS: Fix loading of GDExtension dylibs auto converted to framework (GH-76510).
  • Windows: Fix clipboard relying on focused window (GH-73878).
  • Windows: Fix queuing utterances in rapid succession (GH-75880).
  • Windows: Cleanup COM library initialization/uninitialization (GH-75881).
  • Windows: Fix StringFileInfo structure (GH-76001).
  • Windows: Add mono audio support to WASAPI (GH-76541).

Rendering

  • Fix interpolation of R0 for metallic and calculation of the Fresnel Shlick term in SSR (GH-75368).
  • Fix get_test_texture() returning an almost fully white texture (GH-75632).
  • Ensure that depth write state is updated before transparent pass in OpenGL3 renderer (GH-75968).
  • Fix editor lock on SDF collision bake on error (GH-76257).
  • Fix issues with Vulkan layout transitions (GH-76315).
  • Fix breakages of volumetric fog on voxel GI changes (GH-76437).
  • Fix GLES3 rendering on Android studio emulator (GH-74945).
  • Fix more voxel GI issues (GH-76550).
  • Use proper UV in cubemap downsampler raster (Fixes reflections in mobile renderer) (GH-76692).

Shaders

  • Fix crashes caused due to missing type specifier on visual shader editor (GH-75809).
  • Fix Shader Preprocessor line numbering when disabled (GH-76479).
  • Fix rotation issue with NODE_POSITION_VIEW shader built-in (GH-76109).

XR

  • Fix incorrect HTC action map entries (GH-74930).

4.0.2 - 2023-04-04

See the release announcement for details.

Added

Core

  • Add a missing ImageTextureLayered::_images setter for the C# bindings (GH-74668).
  • Exposing more project settings for documentation (GH-74727).

Physics

  • Expose the apply_floor_snap function to allow manual snap (GH-73749).

Porting

  • Android: Use the new API for virtual keyboard height detection on Android, bugfix for old API (GH-74398).
  • Android: Configure maven central snapshot versions for the Godot Android library (GH-74470).
  • Android: Add "filesRoot" path to Android provider paths xml (GH-74673).
  • macOS: Re-add support for the _sc_ inside app bundle (GH-73429).

Project converter

  • Add conversion for Vector2 tangent() -> orthogonal() (GH-74515).
  • Add navigation renames to the converter (GH-75513).

Shaders

  • Add drag and drop support for shader include files in shader editor (GH-74869).

XR

  • Add XRServer.world_origin property (GH-74151).
  • Enable access to the Valve Index grip force sensors (GH-74787).

Changed

2D

  • Use 8×8 default grid size for TextureRegion and 2D polygon editors (GH-73685).
  • Don't allow selecting nodes without owner in the editor (GH-75492).

Animation

  • Update property keying state without a full Inspector rebuild (GH-74564).

Buildsystem

  • Exit with non-zero status if there are issues with FreeType dependencies (GH-74645).
  • SCons: Cleanup pulseaudio defines for Linux (GH-74666).

C#/.NET

  • Encode GodotProjectDir as Base64 to prevent issues with special characters (GH-74312).
  • Do not print errors about missing references to intentionally ignored members (GH-75284).

Core

  • Make Gradient resort points on reverse (GH-75235).
  • Port robust signal (dis)connection to ShapeCast2D (GH-75266).

Editor

  • Improve POT Generation dialog (GH-74213).
  • Hide internal settings from the class reference (GH-74226).
  • Remove disabled plugins from active plugins (GH-75331).
  • More i18n improvements (GH-75385).

Export

  • Delete unused compression formats from .import files when exporting (GH-74684).

GDScript

  • Make GDScript number highlighting stricter (GH-74184).

GUI

  • Improve layout direction/locale automatic selection (GH-73716).
  • Add mutex for FreeType face creation/deletion operations in TextServer (GH-73987).

Input

  • Remove meta_mem update on keyup/keydown on Windows (GH-75172).

Physics

  • Revert attempted fix of trimesh CCD (GH-74861).

Porting

  • Android: Bump the target SDK version to 33 (Android 13) (GH-75203).

Project converter

  • Remove Tween properties/signals from renames (GH-75443).

Rendering

  • Incorporating the availability of screen and depth textures for the GLES3 backend (GH-72361).

Thirdparty

  • mymindstorm/setup-emsdk updated to 12.

XR

  • Replace OpenXR operating system alert dialog with a warning log message (GH-73144).
  • Check hardware sRGB conversion when an sRGB target is used (GH-74892).

Fixed

2D

  • Fix preview rendering and transform calculations in the tiles editor (GH-74982).
  • Fix ENTER_CANVAS / VISIBILITY_CHANGED notification order when CanvasItem enters tree (GH-75238).
  • Fix a crash in the tiles editor when merging atlases (GH-75361).

3D

  • Fix GridMap signal cell_size_changed disconnect error (GH-74890).

Animation

  • Fix AnimatedSprite2D autoplay warning (GH-75258).

Buildsystem

  • Fix xml namespace in org.godotengine.Godot.xml (GH-74920).

C#/.NET

  • Fix building projects for MSBuild before 17.3 (GH-74479).
  • Fix Array.AddRange index out of bounds (GH-75357).

Core

  • Fix some race conditions that happen during initialization (GH-73793).
  • Fix crash in resource load (GH-74166).
  • Fix randfn to prevent it from generating nan values (GH-74248).
  • Fix Variant hashing for floats (GH-74600).
  • Fix type check for max/min (GH-74770).
  • Fix Array.slice() rounding when step is other than 1 (GH-74909).

Editor

  • Fix cancelling selection while gizmo editing making uncommitted changes (GH-71156).
  • Fix EditorUndoRedoManager's handling of MERGE_ENDS (GH-74460).
  • Fix built-in scripts missing their methods on signal connection (GH-74495).
  • Fix "Download Project Source" for the Web Editor (GH-75194).
  • Fix incorrect sizes of some editor elements (GH-75379, GH-75381).

Export

  • Fix GDExtensions library export when multiple architectures are set (GH-74057).

GDScript

  • Fix "Find in Files" search results not opening built-in script (GH-74401).
  • Fix false positive REDUNDANT_AWAIT warning (GH-74949).

GUI

  • Fix scrolling behavior with zero/low page value (GH-67910).
  • Fix some ways to create inconsistent Viewport size states (GH-73188).
  • Fix GraphNode resizing when its bottom border is too thin (GH-73800).
  • Fix IME position in the single window mode sub-windows (GH-74472).
  • Fix gutter set width results in receiving only half of the desired size (GH-74537).
  • Fix get_drag_data not overridable in some Controls (GH-75122).
  • Fix block caret size at the end of the line (GH-75597).

Import

  • Fix ResourceImporterLayeredTexture::import() high_quality variable type (GH-75244).

Input

  • Fix layout bug in keyboard_get_keycode_from_physical on Linux/X11 (GH-75461).

Navigation

  • Fix GridMap free navigation RID error spam (GH-74889).
  • Fix agents with disabled avoidance getting added to avoidance simulation (GH-74893).

Networking

  • Fix list handling in SceneReplicationConfig (GH-74552).

Physics

  • Fix collide_shape return type (GH-75260).
  • Fix property hint for platform layers on 3D physics body (GH-75544).

Porting

  • Android: Fix directory access when the running app has the All files access permission (GH-75146).
  • macOS: Fix infinite loop caused by global menu callbacks which trigger EditorProgress dialog (GH-75254).

Rendering

  • Fix spotlight shadows in volumetric fog (GH-73919).
  • Fix issues with point size not functioning correctly in GLES3 (GH-73966).
  • Update GPUParticles2D/3D speed scale on ENTER_TREE (GH-75398).

Shaders

  • Fix ndc calculation for LinearSceneDepth VS node in GLES3 (GH-74910).

XR

  • Fix typo in OpenXR pose orientation check (GH-74928).

4.0.1 - 2023-03-20

See the release announcement for details.

Added

Import

  • Set the unlit / unshaded extension when importing / exporting glTF (GH-74287).

Project converter

  • Add keycode project conversion (GH-74237).
  • Add conversion for common Theme Overrides (GH-74624).
  • Move tool declarations to top (GH-74432).

Tilemaps

  • Remember previously selected TileMap tile (GH-74039).

Changed

Animation

  • Check for type mismatch in PropertyTweener.from() (GH-74112).

Buildsystem

  • Safeguard Makefile commands for documentation (GH-74042).

C#/.NET

  • Always show "Create C# solution" option (GH-73904).

Core

  • Propagate errors when creating an OpenGL context fails in X11 (GH-74563).

Editor

  • Automatically reparent editor message dialogs to avoid error spam (GH-73365).
  • Translate strings which were previously missed (GH-74211, GH-74637).
  • Disallow creating a project in the Home or Documents folder (GH-74964).

GDScript

  • Don't autocomplete numbers (GH-74466).

GUI

  • Assume outline size is 1 if it's not set, but channel for outline is defined in a BitMap font (GH-74212).
  • Do not draw virtual spaces (word break / justification points) (GH-74488).
  • Generate empty textures for theme icons if the SVG module is disabled (GH-74551).
  • Add invalid font scaling check, restrict Linux/BSD system fonts lookup to TrueType/CFF only (GH-74702).

Input

  • Update modifier key status during IME input on Windows (GH-74474).

Navigation

  • Allow negative NavigationAgent2D path debug line_width for thin lines (GH-74800).

Project converter

  • Do not convert lines that start with a comment (GH-74193).
  • Don't strip whitespace when converting (GH-74232).

Rendering

  • Use MSAA 2D texture in multipass tonemapper (GH-74150).
  • Use linear filtering without mipmaps for ProceduralSkyMaterial and PhysicalSkyMaterial (GH-74740).

Fixed

Audio

  • Improve logic related to editing audio buses and prevent crashes (GH-74560).

C#/.NET

  • Fix crash when errors occur before language initialization (GH-74127).
  • Get singleton instances using the Core name (GH-74280).
  • Ensure that script names (and therefore class names) are valid identifiers (GH-74330).
  • Ignore explicit interface implementations (GH-74375).

Core

  • Set properties of ImageTexture3D when creating (GH-74521).
  • Fix buffer overrun in CPUParticles3D in precision=double builds (GH-74555).
  • Prevent crashing on startup if project has scripted theme types (GH-74565).

Editor

  • Disable local space for Blender-style transforms (GH-59443, GH-74601).
  • Stop toaster notification circle flickering (GH-74017).
  • Fix dock name lost translation after layout change (GH-74158).
  • Fix crash when showing file in FileSystem dock (GH-74591).
  • Prevent cache corruption when saving resources in the editor (GH-74615).
  • Ensure that editor color map is initialized in the project manager (GH-74750).
  • Fix MultiNodeEdit not cleared after deleting nodes (GH-74795).
  • Fix error when opening Inspector's dots menu (GH-74974).

Export

  • Fix various issues related to remote deploy and remote execute on Windows (GH-74030).

GDExtension

  • Fix crash when dumping extension API in a non-writable directory (GH-74590).
  • Fix extension bindings for motion collision/result structs (GH-74671).

GDScript

  • Fix error spam when naming a func at the end of the script (GH-73410).
  • Fix checking if a call is awaited in compiler (GH-74147).
  • Fix autocomplete inside a block with a type test condition (GH-74689).

GUI

  • Fix RichTextLabel crash with out of bound exception (GH-68325).
  • Fix justification on punctuation characters (GH-74477).
  • Add missing handler for removing font sizes in the theme editor (GH-74547).

Import

  • Fix glTF mesh importer not freeing nodes correctly on import (GH-74018).
  • Prevent infinite loop by disabling importer when canceling FBX2glTF setup (GH-74293).
  • Fix blend-file import when using custom color management in blender (GH-74496).

Input

  • Fix InputEventConfigurationDialog modifies original event (GH-74858).

Navigation

  • Fix NavigationAgent3D debug path duplicated points (GH-74976).

Porting

  • Android: Fix null-pointer dereference when using gl_compatibility renderer (GH-74781).
  • Linux/X11: Check if required xkb functions exist before using it (GH-74222).
  • Linux/X11: Fix broken shortcut key input (GH-74535).

Project converter

  • Correct superclass constructors (GH-74354).
  • Add parentheses around arguments when converting xform (GH-74693).

Rendering

  • Add proper default texture filter and repeat modes for Canvas shaders in the OpenGL3 renderer (GH-74315).
  • Fix instance uniforms breaking when setting a new mesh (GH-74349).
  • Fix AABB calculation for meshes using Skeleton2D (GH-74416).
  • Avoid overflow when calculating ptr address for 3D textures in RenderingDevice texture update (GH-74526).
  • Fixes a canvas item set to clip children being drawn as black if no children are visible (GH-74533).
  • Avoid copying CanvasTexture when updating proxy (GH-74566).

Tilemaps

  • Fix TileSetEditor painting texture_origin Vector2i (GH-73514).

4.0 - 2023-03-01

The Godot 4.0 release was our biggest released to date, spanning 4 years of development, more than 12,000 merged Pull Requests, and 1,500 individual contributors!

It's so big that the task of writing a detailed, curated changelog of the most relevant changes like we've done for previous 3.x releases didn't seem realistic.

Instead, please refer to following resources:

3.5 - 2022-08-05

See the release announcement for details.

Added

3D

  • Add process_mode property to InterpolatedCamera (GH-41402).
  • Add Label3D node and Sprite3D material render priority (GH-61276).
  • Add TextMesh and expose dynamic font vector outlines (GH-61281).
  • Add global_translation and global_rotation to Spatial (GH-63058).

Animation

  • Add option to paste animation as duplicate (GH-60226).
  • New SceneTreeTween backported from Godot 4.0's Tween (GH-60581).

Audio

  • Allow configuring loop mode on WAV import (GH-59170).
  • Add support for 64-bit IEEE float WAV encoding (GH-61169).

Buildsystem

  • Add support for PowerPC family (GH-54490).
  • Add Visual Studio 2022 support with fallback to 2019 (GH-57609).
  • Add fast_unsafe option for faster rebuilds (GH-57806).
  • Refactor Linux linker options with linker=<bfd|gold|lld|mold> (GH-63283).

Core

  • Support deep comparison of Array and Dictionary (GH-42625).
  • Add a project setting to disable the boot splash image (GH-47568).
  • Add OS.is_process_running() method (GH-51682).
  • Add Image.fill_rect() method (GH-52457).
  • Allow pinning property values + Consistent property defaults (GH-52943).
  • Add a Time singleton (GH-54056).
  • Expose String.get_slice() method (GH-54453).
  • Backport some APIs in math structs: AABB and Rect2 get_center(), Vector2 and Vector3 limit_length() (GH-54614).
  • Add GradientTexture2D (GH-54824).
  • Add compile-time options to use handles and tracked handles to RID, to find erroneous usage patterns and leaks (GH-54907, GH-55719).
  • Add OS.crash() method for testing system crash handler (GH-55614).
  • Expose String.join() method (GH-56369).
  • Add project setting to change scene file casing (GH-56909).
  • Add OS.has_clipboard() to check clipboard content (GH-56950).
  • Add a signal to notify when children nodes enter or exit tree (GH-57541, GH-62241).
  • Add visibility to CanvasLayer (GH-57900).
  • Add OS.get_processor_name() method (GH-58157).
  • Add optional default value to get_meta() (GH-58608).
  • Add OS.get_screen_refresh_rate() method (GH-58812).
  • Add Dictionary.merge() method (GH-59883).
  • Add fill() method to Array and Pool*Array (GH-60426).
  • Expose Semaphore.try_wait() (GH-60502).
  • Add scene unique nodes (GH-60527).
  • Expose OS.move_to_trash() (GH-60542).
  • Allow AStar/AStar2D with zero point weight (GH-60812).
  • Add search methods for Pool*Arrays: has(), count(), find(), rfind() (GH-60856).
  • Add interpolation modes to Gradient (GH-60982).
  • Add option to keep or skip carriage return (CR) in File.get_as_text(), optimize implementation (GH-63733).

Editor

  • Allow pinning property values (GH-52944).
  • Add option to only redraw vital updates (GH-53463, GH-61965).
  • Add push, pull, fetch and improved diff view to VCS UI (GH-53900).
  • Implement Alt + Mouse wheel to adjust FOV in the 3D editor viewport (GH-54207).
  • Many fixes to built-in scripts support (GH-54579, GH-54662, GH-54889, GH-55286, GH-55611, GH-55728).
  • Add "Replace in Files" functionality to text editors (GH-55232).
  • Draw the filled part of the slider on float EditorSpinSliders (GH-55521).
  • Sort and group theme properties in docs, improve formatting for theme and enums (GH-55526).
  • Make overridden properties link to parent definition (GH-55560).
  • Add drag and drop for NodePaths (GH-55761).
  • Only show Particles2D visibility rect on selected nodes (GH-55782).
  • Add option to filter the stack variables of GDScript debugger (GH-58861).
  • Add property name style toggle to Inspector (GH-59313).
  • Add option to paste animation as duplicate (GH-60226).
  • Add an inspector preview for BitMap (GH-60700).
  • Add --debug-server command line option to listen for incoming connections (GH-60819).
  • Add readable export errors (GH-61624).

GDNative

  • Add Core API 1.3 with methods: Dictionary.merge(), Pool*Array has() and sort(), PoolStringArray.join(), String join(), num_uint64() and num_uint64_capitalized() (GH-55650, GH-55826, GH-63136).

GUI

  • Add option to make selection unique to TextEdit, LineEdit, RichTextLabel (GH-54353, GH-62221).
  • Add drag and drop to TextEdit, LineEdit, RichTextLabel (GH-55355).
  • Add drag start/end signals for Slider (GH-55775).
  • RichTextLabel: Add BBCode [lb] and [rb] escape sequences for square brackets (GH-56586).
  • Add alignment options to Button icons (GH-57771).
  • Add type variations to Theme (GH-57942).
  • Add FlowContainer (GH-57960).
  • Add WOFF2 font support and brotli decoder (GH-59522).
  • RichTextLabel: Add deselect() and get_selected_text() methods (GH-59894, GH-59926).
  • LineEdit: Add selection getter methods (GH-60176).
  • Add a skew property to StyleBoxFlat (GH-60592).

Input

  • Input: Allow for mapping scancodes to current layout (GH-56015).

Localization

  • Make property paths and categories translatable (GH-58634).
  • Add property name style toggle to Inspector (GH-59313).
  • Add binary MO translation file support (GH-59522).

Mono (C#)

  • Add support for file-scoped namespace declaration (GH-56427).

Navigation

  • Add NavigationServer with obstacle avoidance using RVO2 (GH-48395).
  • Lots of fixes and improvements to the new NavigationServer (Many GitHub PRs).
  • Backport more NavigationServer features to make it more flexible (GH-61996).

Networking

  • Add set_extra_headers() to WebSocketServer (GH-40975).
  • Add proxy support for HTTPClient and the editor (GH-55988).
  • Add NetworkedMultiplayerCustom so high-level multiplayer backends can be added from scripts (GH-63163).

Physics

  • Add fixed timestep interpolation for 3D (GH-52846).
    • The 2D equivalent will be added later on.
  • Expose intersect_point in 3D physics server (GH-54577).
  • VehicleWheel can now return the surface it's colliding with (GH-55723).
  • Add physics material to GridMap (GH-56006).
  • Add KinematicBody moving_platform_apply_velocity_on_leave property (GH-56569).

Porting

  • Android: Add full support for Android scoped storage (GH-51815).
  • Android: Initial port of the Godot editor (GH-57747).
  • Android: Update editor default display scale, allow resizing windows (GH-59868, GH-59861, GH-59880).
  • Android: Add method to obtain display cutouts (GH-60552).
  • HTML5: Add preliminary support for GDNative+Threads build (GH-61989).
    • Depends on cutting edge Emscripten 3.1.14, no templates provided for this export type for now.
  • HTML5: Add support for Input.vibrate_handheld() (GH-63573).
  • Linux: Add support for primary clipboard (GH-54026).
  • macOS: Implements ad-hoc signing from Linux/Windows (GH-51550).
  • macOS: Add signing of directory structure when exporting for macOS (GH-56250).
  • Windows: Implement limited surrogate pairs support (better UTF-8 support, emoji fonts) (GH-54625).
  • Windows: Add support for handling network share paths (GH-61985).
  • Add stylus inverted/eraser support to InputEventMouseMotion event (desktop platforms) (GH-62723).

Rendering

  • Add material_overlay property to MeshInstance (GH-50823).
  • Add a Viewport property to use full floating-point precision in HDR (GH-51708).
  • Asynchronous shader compilation + caching (ubershader) (GH-53411).
  • Allow changing directional shadows at runtime (GH-54165).
  • Allow using transparent background Viewports with post processing effects (GH-54585).
  • Add OccluderShapePolygon (GH-57361).
  • Add support for saving multiple Images in BakedLightmap (GH-58102).
  • VisibilityNotifier: Add max_distance feature (GH-61544).

Shaders

  • Expose VERTEX_ID and INSTANCE_ID to user created shaders (GH-54751).
  • Add const qualifier support for function arguments in shaders (GH-55103).
  • Add random initial color feature for all Particles nodes (GH-55788).
  • Add hints and default values to VisualShader uniform nodes (GH-56466).
  • Allow pass varyings as out param to the function, when it's possible (GH-56478).
  • Many improvements backported from master (GH-56794).

XR

  • WebXR: Rendering and touch events now supported on smartphone AR (GH-55869, GH-56819).
  • WebXR: Allow mapping VR controller joystick/button IDs to match other AR/VR interfaces (GH-59994).### Changed

Audio

  • Instance audio streams before AudioServer::lock call (GH-59413).

Buildsystem

Core

  • Increase VARIANT_ARG_MAX to 8 (GH-54188).
  • Change RID comparison operators to use RID_Data id instead of address (GH-59234).
  • Crash handler: Use print_error to include backtrace in logs (GH-60782).
  • Allow AStar/AStar2D zero point weight (GH-60812).
  • Command line arguments --version and --help return exit code 0 instead of 255 (GH-62550).
  • Sort SpriteFrames animations alphabetically (GH-62977).

Editor

  • Hide .gdignore'd folders in file dialogs (GH-46638).
  • Improve ColorPicker presets (GH-54439).
  • Improved region-select in the 3D editor viewport (GH-58252).
  • Make property paths and categories translatable (GH-58634).
  • Create onready variables when dropping nodes and holding Ctrl (GH-60879).
  • Only switch to node when node dragging it (GH-61162).
  • Increase the editor profiler frame history default and maximum limit (GH-61482).
  • Don't switch to 2D/3D viewports when selecting nodes while in Script Editor (GH-63344).

Export

  • Improve embedded PCK loading and exporting (GH-60580).
  • Return 0 exit code when command line export succeeds with warnings (GH-62907).

GDScript

  • Infer variable types on release (GH-57851).
  • Don't coerce default values to the export hint type (GH-58686).
  • Enable method type information on release builds (GH-59793).
  • Keep builtin method info on release builds (GH-61117).

GUI

  • Make TabContainer's tabs better blend with the panel when using the default theme (GH-56774).
  • Make the menu from Menu/OptionButton have its first option focused when triggered by a keyboard or gamepad (GH-57643).
  • Make Tree once again draw relationship lines for items offscreen (GH-60282).
  • Make various improvements to OptionButton (GH-61102).
  • Improve RichTextLabel table filling (GH-61904).

Import

  • Remove hardcoded names in generated objects in scene importer (GH-47279).

Input

  • Increase joystick max button number to 128 (GH-56666).
    • Windows and macOS support up to 128, Linux supports up to 80, and Android supports up to 36.
  • Use mouse event relative motion to calculate mouse speed (GH-56755).
  • Drop mouse focus and over when gui input is globally disabled (GH-59100).
    • This is optional and controlled by the gui/common/drop_mouse_on_gui_input_disabled project setting. For compatibility, this setting is disabled by default on pre-3.5 projects and enabled by default for new projects.
  • Add "(Physical)" label to physical scancodes in InputEventKey.as_text() (GH-62633).
  • Re-enable input accumulation disabled by error in 3.4 (GH-62826).
    • If this changes behavior in a way that doesn't fit your project, you can change it back with Input.use_accumulated_input = false.

Mono (C#)

  • Don't box params on Native->C# calls with Variant params (GH-53942).
  • String.Capitalize() now matches the behavior of the core String.capitalize() (GH-57076).

Navigation

  • Navigation APIs fully refactored to make use of the new NavigationServer with collision avoidance (see "Added" section). While we aimed to keep the APIs as compatible as possible, this is a breaking change and might impact how existing Navigation setups behave.
    • The Navigation and Navigation2D nodes were kept for compatibility but are now deprecated. Their functionality is replaced by the NavigationServer and Navigation2DServer.
  • Consider gridmap collisions in navigation bake (GH-57173).

Networking

  • ENet poll optimizations, fragmented unreliable transfer (GH-53130).
  • Make WebSocket hostname resolution non-blocking (GH-57649).
  • Increase the maximum number of concurrent DNS queries from 32 to 256 (GH-59520).
  • Use a floating-point number for the timeout property in HTTPRequest (GH-60402).

Physics

  • Bullet: Return contact points in world space in collide_shape (GH-59470).
  • Bullet: Do not set gravity and damping when Custom Integrator is enabled (GH-62708).

Porting

  • Android: Default target API level updated to 32 (GH-51815).
  • Android: Upgrade NDK to r23 LTS (GH-61692).
  • HTML5: Enable mbedTLS module for Crypto object (GH-61402).
  • iOS: Improve icon / loading screen export (GH-56861).
  • iOS: Vibrate using haptics engine on supported devices (GH-60398).
  • Linux: Use application name as PulseAudio device name (GH-54654).
  • Linux: Read and store joypad events in a separate thread (GH-56126).
  • macOS: Fix translation detection for editor and template (GH-52945, GH-57577).
  • macOS: Redraw window during resize and modal popups (GH-54757).
  • Windows: Improve console handling and execute (GH-55987).
    • This changes the editor console handling to be like on Unix systems (Linux and macOS). So Godot doesn't open with a console by default, but you can see console output if you start it from a console yourself. You can create a batch script or shortcut to automatically start Godot from a console as in previous releases.
  • Windows: Keep editor at normal priority (GH-59665).
  • Windows: Try to convert OS::execute() output to Unicode (GH-60920).

Rendering

  • Prevent use of Opaque Pre-Pass's threshold on top of Alpha Scissor (GH-45372).
  • Improve the appearance of simple parallax in SpatialMaterial (GH-51433).
  • Use early bailing to improve 3D shadow filtering performance in GLES3 (GH-54160).
  • Faster editor line drawing - Path2D and draw_line (GH-54377).
  • Bind mesh merging functionality in MeshInstance (GH-57661).
  • Sort transparent objects based on camera position when using perspective camera (GH-60381).
  • GLES2: Unpack blend shape arrays when necessary (GH-60829).
  • Portals: Show gridmaps using global mode (GH-60851).
  • CPU lightmapper: Account for ambient light settings when baking lights (GH-62260).
  • GLES3: Ignore support for S3TC texture compression on Android and iOS devices (GH-62909).
    • Few devices support this compression while they all support ETC2. Godot exports ETC2 by default and doesn't take into account that mobile devices could need S3TC.

Thirdparty

  • Bullet updated to version 3.24.
  • FreeType updated to version 2.12.1.
  • libogg updated to version 1.3.5.
  • libvorbis updated to version 1.3.7.
  • libwebp updated to version 1.2.2.
  • MbedTLS updated to version 2.28.1 (security update).
  • PCRE2 updated to version 10.40.
  • tinyexr updated to version 1.0.1.
  • zlib/minizip updated to version 1.2.12 (security update).
  • zstd updated to version 1.5.0.
  • CA root certificates updated to 2022-07-19 bundle from Mozilla.
  • SDL GameControllerDB updated to 2022-08-02 git snapshot.

XR

  • Updated Meta hand tracking version (GH-60639).

Removed

Porting

  • Android: Drop broken 32-bit framebuffer setting (GH-54431).

Shaders

  • Removed support for 1f or 0f float literal syntax which is invalid in GLSL (GH-55623). Floats should be written with a decimal separator (1.0f or 0.f).

Fixed

2D

  • Fixes to Camera2D position and first update (GH-63084, GH-63581).
  • Fix CanvasItem not exiting its canvas group on canvas exit (GH-63234).

3D

  • Fix hardcoded raycast distance in viewport object picking (GH-54369).
  • Properly handle CSGShape parent and visibility updates (GH-58938).

Animation

  • Fix cubic interpolation when looping (GH-58651).
  • Fix AnimatedSprite doesn't emit animation_finished when changing playback direction (GH-61085).

Audio

  • Fix crash in AudioServer when switching audio devices with different audio channels count (GH-59778).

Core

  • Rationalize Node removals and deletions (GH-55514, GH-56519).
  • Fix incorrect RID cleanup in Rasterizers (GH-55669, GH-55701).
  • Fix wrong RGBA channel mapping when saving OpenEXR (GH-56715).
  • Fix AtlasTexture nesting (GH-56795).
  • Clear owners when pruning even out of the tree (GH-59063).
  • Fix wrapf to correct wrap values with 0.1 stepping (GH-61812).
  • Fix platform-specific issues with OS.set_current_screen() (GH-63192).

Editor

  • Unify determination of default property values (GH-52944).
  • Ignore external editor for built-in scripts (GH-54578).
  • Fix decoding UTF-8 filenames on unzipping (GH-56517).
  • Fix inspecting nested dictionaries/arrays when debugging (GH-60737).
  • Fix editor-only visibility for lights (GH-62335).

GDNative

  • Fix StringName equal and less operators (GH-63104).

GDScript

  • Don't ignore type mismatch in setter function (GH-54117).
  • Clear pending function states when reloading GDScript (GH-56296).
  • Fix variable type inference on release (GH-57851).
  • Fix wrong parentheses for function call autocompletion in LSP (GH-59482).
  • Fix autocompletion showing core class names with an underscore (GH-62731).

GUI

  • GraphEdit: Fix toggling minimap with minimap_enabled (GH-57239).
  • GraphEdit: Fix valid connections being reversed (GH-60124).
  • GridContainer: Fix not ignoring top-level children (GH-60221).
  • Label: Fix autowrap for CJK text (GH-60294).
  • LineEdit: Fix clear button for asymmetric stylebox (GH-61496).
  • Popup: Allow changing exclusive when already popped (GH-61483).
  • RichTextLabel: Fix underlines and strikethrough not respecting visible character (GH-37656).
  • RichTextLabel: Fix shadow color when text has transparency (GH-59054).
  • RichTextLabel: Fix implementation of remove_line() (GH-60618).
  • TextureButton: Fix focus texture logic (GH-56472).
  • TextureProgress: Fix nine patch in circular mode (GH-54345).

Import

  • Fix import hints breaking node paths in animations (GH-56956).
  • glTF: Skip unsupported Draco-compressed glTF 3D format (GH-56613).
  • glTF: Fix texture filename decoding (GH-57685).
  • glTF: Allow more than 4 joints but warn and ignore them (GH-61912).
  • glTF: Fix light intensity and attenuation import (GH-62747).

Input

  • Fix InputEvent action exact match (GH-54174).

Mono (C#)

  • Fix C# get_all_delegates method for generic classes (GH-55564).
  • Fix getting properties state when reloading C# (GH-56300).
  • Fix Android AAB export failing to load native libs (GH-57420).
  • Fix Transform.Translated method affecting the original transform (GH-63685).

Networking

  • Fix HTTP limitation for large content-length (GH-56331).

Physics

  • Bullet: Update Area overlaps when Area properties or shapes change (GH-42306).
  • Bullet: Trigger RigidBody space override updates when Area properties change (GH-42374).
  • Bullet: Add shape data to Area overlap data (GH-42712).
  • Bullet: Fix Continuous Collision Detection being wrongly enabled by default (GH-43801).
  • Bullet: Ignore collision contact points with distance = 0 (GH-44726).
  • Bullet: Fix shape index in multiple physics queries (GH-55533).
  • Bullet: KinematicBody compound shape collision fix (GH-56801).
  • Bullet: Skip compound shapes without child shapes in recover_from_penetration (GH-59864).
  • Bullet: Do not set gravity and damping when Custom Integrator is enabled (GH-62708).
    • Fixes a lot of issues with KinematicBody collisions at the intersection between meshes when using Bullet.
  • GodotPhysics: Fix Area monitorable in 2D and 3D (GH-41699).
  • GodotPhysics: Handle test body motion with 0 margin (GH-55762).
  • Fix wrong collision reported on move_and_collide() (GH-59439).
  • Fix the calculation of the angular velocity (GH-63190).

Porting

  • Android: Only rotate sensor values for sensors that need them rotated (GH-55184).
  • Android: Fix flickering issues with low processor mode (GH-59606).
  • Android: Fix the logic to restart the Godot application (GH-61332).
  • Android: Fix broken scroll gesture on UI (GH-62290).
  • Android: Address slow copy performance when using the FileAccessFilesystemJAndroid implementation (GH-63223, GH-63480).
  • HTML5: Change default cursor from auto to default (GH-62608).
  • HTML5: Make locale string match other platforms (GH-63043).
  • iOS: Fix simultaneous touches for different touch types (GH-60224).
  • iOS: Flush accumulated input events (GH-62842).
  • Linux: Fix tablet tilt values returning bad values (GH-56439).
  • Linux: Fix window_maximized not working reliably (GH-59767).
  • Linux: Properly check for fullscreen toggle made through the Window Manager (GH-62543).
  • macOS: Fix OpenGL color space on HDR displays (GH-60197).
  • UWP: Fix exporting GDNative DLLs (GH-61262).
  • UWP: Flush buffered input events (GH-63341).
  • Windows: Fix wrong OEM key mappings for brackets and braces (GH-56588).
  • Windows: Fix String.http_escape() non-standard behavior with MinGW (GH-61655).
  • Improve architecture tags in OS.has_feature() and make it work on MSVC (GH-61740).
  • Improve OS.set_current_screen() on all desktop platforms (GH-63192).

Rendering

  • Many fixes to octahedral vertex attribute specification (GH-54768, GH-56161, GH-58838).
  • GLES3: Fix atlassed lightmaps not visible (GH-55676).
  • Fix GPU particles transform feedback error for WebGL 2 (GH-56465).
  • Fixed normals when using smoothed normals on CSG shapes (GH-58208, GH-59002, GH-59039).
  • Fix alpha scissor shadow casting support (GH-58959).
  • GLES3: Unbind vertex buffer before calculating blend shapes (GH-60832).

Shaders

  • Fix particle texture animation speed when using random lifetime (GH-55717).
  • Fix invalid code generation when using VisualShaderNodeUniformRef (GH-63105).

3.4 - 2021-11-05

See the release announcement for details.

Added

2D

  • Add Listener2D node (GH-53429).
  • Add a 2D Viewport scale factor property (GH-52137).

3D

  • Implement octahedral map normal/tangent attribute compression (GH-46800).
  • Add a center_offset property to both plane primitive and quad primitive (GH-48763).
  • Options to clean/simplify convex hull generated from mesh (GH-50328).
  • Allow unclamped colors in Sprite3D (GH-51462).

Animation

  • Add animation "reset" track feature (GH-44558).
  • Allow renaming bones and blend shapes (GH-42827).

Core

  • Add frame delta smoothing option (GH-48390).
    • This option is enabled by default (application/run/delta_smoothing).
  • Add option to sync frame delta after draw (GH-48555).
    • This option is experimental and disabled by default (application/run/delta_sync_after_draw).
  • Expose OS data directory getter methods (GH-49732).
  • Provide a getter for the project data directory (GH-52714).
  • Add an option to make the project data directory non-hidden (GH-52556, GH-53779).
  • Add support for numeric XML entities to XMLParser (GH-47978).
  • Add option for BVH thread safety (GH-48892).
  • Add Engine.print_error_messages property to disable printing errors (GH-50640).
  • Implement OS.get_locale_language() helper method (GH-52740).
  • Allow using global classes as project MainLoop implementation (GH-52438).
  • Add an Array.pop_at() method to pop an element at an arbitrary index (GH-52143).
  • Expose enum related methods in ClassDB (GH-52572).
  • Add Thread.is_alive() method to check if the thread is still doing work (GH-53490).
  • Allow for platform Thread implementation override (GH-52734).
  • Add support for generating OpenSimplexNoise noise images with an offset (GH-48805).

Crypto

  • Add AESContext, RSA public keys, encryption, decryption, sign, and verify (GH-48144).
  • Add HMACContext (GH-48869).

Editor

  • Automatic remote debugger port assignment (GH-37067).
  • Auto-reload scripts with external editor (GH-51828).
  • Use QuickOpen to load resources in the inspector (GH-37228).
  • Allow to create a node at specific position (GH-50242).
  • Add the ability to reorder array elements from the inspector (GH-50651).
  • Assign value to property by dropping to scene tree (GH-50700).
  • Allow dropping property path into script editor (GH-51629).
  • Save branch as scene by dropping to filesystem (GH-52503).
  • Allow creating nodes in Animation Blend Tree by dragging from in/out ports (GH-52966).
  • Allow dragging multiple resources onto exported array variable at once (GH-50718).
  • Add zoom support to SpriteFrames editor plugin (GH-48977).
  • Add EditorResourcePicker and EditorScriptPicker classes for plugins (and internal editor use) (GH-49491).
  • Add up/down keys to increment/decrement value in editor spin slider (GH-53090).
  • Implement camera orbiting shortcuts (GH-51984).
  • Add ability to copy group name (GH-53162).
  • Implement a %command% placeholder in the Main Run Args setting (GH-35992).
  • Add keyboard shortcuts to the project manager (GH-47894).
  • Add history navigation in the script editor using extra mouse buttons (GH-53067).

GDScript

  • Allow warning-ignore in the same line as the respective warning (GH-47863).
  • LSP: Implement didSave notify and rename request (GH-48616).
  • LSP: Add support for custom host setting (GH-52330).
  • LSP: Implement applyEdit for signal connecting (GH-53068).

GUI

  • Button: Add focus font color to Button and derivatives (GH-54264).
  • ButtonGroup: Add a pressed signal (GH-48500).
  • CheckBox: Add disabled theme icons (GH-37755).
  • ColorPicker: Display previous color and allow selecting it back (GH-48611, GH-48623).
  • DynamicFont: Allow using WOFF fonts (GH-52052).
  • GraphEdit: Make zoom limits and step adjustable (GH-50526).
  • ScrollBar: Add increment_pressed and decrement_pressed icons (GH-51805).
  • TextureButton: Add flip_h and flip_v properties (GH-30424).
  • TextureProgress: Add offset for progress texture (GH-38722).
  • Theme: Various improvements to the Theme API (GH-49487).
  • Theme: Add support for partial custom editor themes (GH-51648).
  • Theme: Add API to retrieve the default font, and optimize property change notification (GH-53397).

Import

  • Backport improved glTF module with scene export support (GH-49120).
  • Implement lossless WebP encoding (GH-47854).
  • Add anisotropic filter option for TextureArrays (GH-51402).
  • Add "Normal Map Invert Y" import option for normal maps (GH-48693).
  • Add optional region cropping for TextureAtlas importer (GH-52652).

Input

  • Add support for physical scancodes, fixes non-latin layout scancodes on Linux (GH-46764).
  • Add action_get_deadzone() method to InputMap (GH-50065).
  • Allow getting axis/vector values from multiple actions (GH-50788).
  • Allow checking for exact matches with action events (GH-50874).
  • Exposed setters for sensor values (GH-53742).
  • Expose Input::flush_buffered_events() (GH-53812).
  • Allow input echo when changing UI focus (GH-44456).

Localization

  • Add support for translating the class reference (GH-53511).
    • Includes Chinese (Simplified) and Spanish translations with high completion ratio, and initial translations for French, Japanese, and German.
  • Allow overriding get_message with virtual method (GH-53207).

Mono (C#)

  • iOS: Cache AOT compiler output (GH-51191).
  • Add editor keyboard shortcut (Alt+B) for Mono Build solution button (GH-52595).
  • Add support to export enum strings for Array<string> (GH-52763).
  • Support arrays of NodePath and RID (GH-53577).
  • Support marshaling generic Godot.Object (GH-53582).

Networking

  • Add support for multiple address resolution in DNS requests (GH-49020).
  • Implement String::parse_url() for parsing URLs (GH-48205).
  • Add get_buffered_amount() to WebRTCDataChannel (GH-50659).
  • Add dtls_hostname property to ENet (GH-51434).

Physics

  • Enable setting the number of physics solver iterations (GH-38387, GH-50257).
  • Heightmap collision shape support in Godot Physics 3D (GH-47349).
  • Add support for Dynamic BVH as 2D physics broadphase (GH-48314).
  • Expose body_test_motion in 3D physics server (GH-50103).
  • Add option to sync motion to physics in 3D KinematicBody (GH-49446).
  • Expose collider RID in 2D/3D kinematic collision (GH-49476).
  • Support for disabling physics on SoftBody (GH-49835).
  • Backport new methods for KinematicBody and KinematicCollision (GH-52116).
  • Expose SoftBody pin methods for scripting (GH-52369).

Porting

  • Android: Add partial support for Android scoped storage (GH-50359).
  • Android: Add initial support for Play Asset Delivery (GH-52526).
  • Android: Implement per-pixel transparency (GH-51935).
  • Android: Add basic user data backup option (GH-49070).
  • Android: Add support for prompting the user to retain app data on uninstall (GH-51605).
  • HTML5: Export as Progressive Web App (PWA) (GH-48250).
  • HTML5: Implement Godot <-> JavaScript interface (GH-48691).
  • HTML5: Implement AudioWorklet without threads (GH-52650).
  • HTML5: Implement video driver selection for Web editor (GH-53991).
  • HTML5: Add easy to use download API (GH-48929).
  • iOS: Add pen pressure support for Apple Pencil (GH-47469).
  • iOS: Add option to automatically generate icons and launch screens (GH-49464).
  • iOS: Support multiple plist types in plugin (GH-49802).
  • iOS: Implement missing OS set/get_clipboard() methods (GH-52540).
  • Linux: Add initial support for the RISC-V architecture (GH-53509).
  • macOS: Add GDNative Framework support, and minimal support for handling Unix symlinks (GH-46860).
  • macOS: Add notarization support when exporting for macOS on a macOS host (GH-49276).
  • Add support for ARM64 architecture for the Embree raycaster (Apple M1, Linux aarch64) (GH-48455).
    • Note that the OIDN denoiser is still not available on this architecture.

Rendering

  • GLES2: Add basic support for CPU blendshapes (GH-48480, GH-51363).
  • GLES2: Allow using clearcoat, anisotropy and refraction in SpatialMaterial (GH-51967).
  • GLES2: Implement Viewport.keep_3d_linear for VR applications to convert output to linear color space (GH-51780).
  • GLES3: Allow repeat flag in viewport textures (GH-34008).
  • GLES3: Add support for contrast-adaptive sharpening in 3D (GH-47416).
  • Add an editor setting to configure number of threads for lightmap baking (GH-52952).
  • Add ring emitter for 3D particles (GH-47801).
  • Add rooms and portals-based occlusion culling (GH-46130).
  • Add a new high quality tonemapper: ACES Fitted (GH-52477).
  • Add soft shadows to the CPU lightmapper (GH-50184).
  • Add high quality glow mode (GH-51491).
  • Add new 3D point light attenuation as an option (GH-52918).
  • Import option to split vertex buffer stream in positions and attributes (GH-46574).
  • Add horizon specular occlusion (GH-51416).

Shaders

  • Add support for structs and fragment-to-light varyings (GH-48075).
  • Add support for global const arrays (GH-50889).
  • Make TIME available in custom functions by default (GH-49509).

VisualScript

  • Allow dropping custom node scripts in VisualScript editor (GH-50696).
  • Expose visual script custom node type hints (GH-50705).
  • Improve and streamline VisualScriptFuncNodes Call Set Get (GH-50709).

XR

  • Add VIEW_INDEX variable in shader to know which eye/view we're rendering for (GH-48011).

Changed

2D

  • Make the most recently added current Camera2D take precedence (GH-50112).

3D

  • Implement individual mesh transform for MeshLibrary items (GH-52298).

Buildsystem

  • Refactor module defines into a generated header (GH-50466).

Core

  • Promote object validity checks to release builds (GH-51796).
  • Add detailed error messages to release builds (used to be debug-only) (GH-53405).
  • Add Node name to print() of all nodes, makes Object::to_string() virtual (GH-38819).
  • Thread callbacks can now take optional parameters (GH-38078, GH-51093).
  • Harmonize output of OS.get_locale() between platforms (GH-40708).
  • Optimize hash comparison for integer and string keys in Dictionary (GH-53557).
  • Improve the console error logging appearance: (GH-49577).
  • Implement missing stringification for PoolByteArray and PoolColorArray (GH-53655).
  • AStar.get_available_point_id() returns 0 instead of 1 when empty (GH-48958).
  • Compare connections by object ID, making .tscn order deterministic (GH-52493).

Editor

  • Refactor Theme item management in the theme editor (GH-49512).
  • Overhaul the theme editor and improve user experience (GH-49774).
  • Improve 2D editor zoom logic (GH-50490, GH-50499).
  • Make several actions in the Inspector dock more obvious (GH-50528).
  • Improve the editor feature profiles UX (GH-49643).
  • Improve the UI/UX of the Export Template Manager dialog (GH-50531).
  • Improve FileSystem dock sorting (GH-50565).
  • Improve the 3D editor manipulation gizmo (GH-50597).
  • Increase object snapping distances in the 3D editor (GH-53727).
  • Refactor layer property editor grid (GH-51040).
  • Improve the animation bezier editor (GH-48572).
  • Fix logic for showing TileMap debug collision shapes (GH-49075).
  • Add custom debug shape thickness and color options to RayCast (GH-49726).
  • Handle portrait mode monitors in the automatic editor scale detection (GH-48597).
  • Remove high radiance sizes from the editor due to issues on specific GPUs (GH-48906).

GUI

  • GraphEdit: Enable zooming with Ctrl + Scroll wheel and related fixes to zoom handling (GH-47173).
  • Button: Don't change hovering during focus events (GH-47280).
  • DynamicFont: Re-add support for kerning (GH-49377).
  • LineEdit: Double click selects words, triple click selects all the content (GH-46527).
  • LinkButton: Button text is now automatically translated like other Controls (GH-52138).
  • Theme: StyleBox fake anti-aliasing improvements (GH-51589).

Import

  • Optimize image channel detection (GH-47396).

Localization

  • Only include editor translations above a threshold to save on binary size (GH-54020).

Mono (C#)

  • macOS: Mono builds are now universal builds with support for both x86_64 and arm64 architectures (GH-49248).
  • Improve C# method listing (GH-52607).
  • Avoid modifying csproj globbing includes (GH-54262).
  • Deprecate Xform methods removed in 4.0, the * operator is preferred (GH-52762).

Networking

  • Enable range coder compression by default in NetworkedMultiplayerENet (GH-51525).

Physics

  • Port Bullet's convex hull computer to replace QuickHull (GH-48533).
  • Return RID instead of Object ID in area-/body_shape_entered/-exited signals (GH-42743).
  • Optimize area detection and intersect_shape queries with concave shapes (GH-48551).
  • Optimize raycast with large Heightmap shape data (GH-48709).
  • Reload kinematic shapes when changing PhysicsBody mode to Kinematic (GH-53118).
  • Wake up 2D and 3D bodies in impulse and force functions (GH-53113).
  • Compile Bullet with threadsafe switch on (GH-53183).

Porting

  • Android: Target API level 30, raise min API level to 19 (GH-50359).
  • Android: Improve input responsiveness on underpowered Android devices (GH-42220).
  • Android: Upgrade Android Gradle to version 7.2, now requires Java 11 (GH-53610).
  • HTML5: Debug HTTP server refactor with SSL support (GH-48250).
  • HTML5: Use 64KiB chunk size in JS HTTPClient, for consistency with native platforms (GH-48501).
  • HTML5: Raise default initial memory to 64 MiB (GH-50422).
  • HTML5: Use browser mix rate by default on the Web (GH-52723).
  • HTML5: Refactor event handlers, drop most Emscripten HTML5 dependencies (GH-52812).
  • iOS: Disable half float on GLES2 via platform override (GH-54229).
  • macOS: Prefer .app bundle icon over the default one (GH-48686).

Rendering

  • VisualServer now sorts based on AABB position (GH-43506).
  • Make Blinn and Phong specular consider albedo and specular amount (GH-51410).

Shaders

  • Default shader specular render mode to SCHLICK_GGX (GH-51401).

Thirdparty

  • Bullet updated to version 3.17.
  • Embree updated to version 3.13.0.
  • MbedTLS updated to version 2.16.11 (security update).
  • NanoSVG updated to 2021-09-03 git snapshot (security update).
  • CA root certificates updated to 2021-07-05 bundle from Mozilla.
  • SDL GameControllerDB updated to 2021-10-29 git snapshot.

XR

  • Only update render target directly if ARVR mode is off (GH-54258).

Removed

Porting

  • Android: Remove non-functional native video OS methods (GH-48537).
  • iOS: Remove duplicate orientation setting in the export preset (GH-48943).

Fixed

2D

  • TileSet: Fix selection of spaced atlas tile when using priority (GH-50886).

3D

  • CSGSphere: Fix UV mapping (GH-49195).
  • CSGPolygon: Fix multiple issues (GH-49314).
  • CSGPolygon: Fixes and features: Angle simplification, UV tiling distance, interval type (GH-52509).
  • GridMap: Fix erasing octants in the wrong order (GH-50052).
  • PathFollow: Fix forward calculation for the position at the end of the curve (GH-50986).
  • SphereMesh: Fix the normals when the sphere/hemisphere is oblong (GH-51995).
  • Update mesh AABB when software skinning is used (GH-53144).

Animation

  • Fix Tween active state and repeat after stop() and then start() (GH-47142).
  • Fix SkeletonIK root bones being twisted incorrectly when rotated (GH-48251).
  • Fix issues with BlendSpace2D BLEND_MODE_DISCRETE_CARRY (GH-48375).
  • Fixed issue where bones become detached if multiple SkeletonIK nodes are used (GH-49031).
  • Fix non functional 3D onion skinning (GH-52664).
  • Fix Animation Playback Track not seeking properly (GH-38107).
  • Fix bugs in AnimationNodeTransition's behavior (GH-52543, GH-52555).
  • Fix rendering centered odd-size texture for AnimatedSprite/AnimatedSprite3D (GH-53052).

Audio

  • Fix cubic resampling algorithm (GH-51082).

Core

  • Make all file access 64-bit (uint64_t) (GH-47254).
    • This adds support for handling files bigger than 2.1 GiB, including on 32-bit OSes.
  • Fix negative delta arguments (GH-52947).
  • Complain if casting a freed object in a debug session (GH-51095).
  • Fix read/write issues with NaN and INF in VariantParser (GH-47500).
  • Fix sub-resource storing the wrong index in cache (GH-49625).
  • Save binary ProjectSettings key length properly (GH-49649).
  • Fix ZIP files being opened with two file descriptors (GH-42337).
  • Fix Transform::xform(Plane) functions to handle non-uniform scaling (GH-50637).
  • Fix renaming directories with Directory.rename() (GH-51793).
  • Fix path with multiple slashes not being corrected on templates (GH-52513).
  • Fix String.get_base_dir() handling of Windows top-level directories (GH-52744).
  • Fix potential crash when creating thread with an invalid target instance (GH-53060).
  • Fix behavior of CONNECT_REFERENCE_COUNTED option for signal connections (GH-47442).
  • Fix swapped axes in OpenSimplexNoise.get_image() (GH-30424).
    • Breaks compat. If you need to preserve the 3.2 behavior, swap your first and second arguments in get_image().
  • Fix loading packed scene with editable children at runtime (GH-49664).
  • Quote and escape ConfigFile keys when necessary (GH-52180).
  • Write node groups on a single line when saving a .tscn file (GH-52284).

Editor

  • Rationalize property reversion (GH-51166).
  • Fix Marshalls infinite recursion crash in debugger (GH-51068).
  • Fix slow load/save of scenes with many instances of the same script (GH-49570).
  • Properly update NodePaths in the editor in more cases when nodes are moved or renamed (GH-49812).
  • Fix scale sensitivity for 3D objects (GH-52665).
  • Fix preview grid in SpriteFrames editor's "Select Frames" dialog (GH-52461).
  • Fix MeshInstance2D edit rect (GH-54070).

GDScript

  • Ignore property groups and categories in GDScript code completion (GH-54272).
  • Fix parsing multi-line preload statement (GH-52521).
  • Speedup running very big GDScript files (GH-53507).
  • LSP: Fix SymbolKind reporting wrong types and get_node() parsing (GH-50914, GH-51283).
  • LSP: Report new() as _init & fix docstrings on multiline functions (GH-53094).

GUI

  • GraphNode: Properly handle children with "Expand" flag (GH-39810).
  • Label: Fix valign with stylebox borders (GH-50478).
  • RichTextLabel: Fix auto-wrapping on CJK texts (GH-49280).
  • RichTextLabel: Fix character horizontal offset calculation (GH-52752).
  • RichTextLabel: Honor content margin when drawing font shadow (GH-54054).
  • RichTextLabel: Fix meta link detection when used inside a fill tag (GH-54114).
  • TabContainer: Fix moving dropped tab to incorrect child index (GH-51177).
  • Tabs: Fix invisible tabs not being ignored (GH-53551).
  • TextureProgress: Improve behavior with nine patch (GH-45815).
  • Theme: Fix potential crash with custom themes using BitMap fonts (GH-53410).

Import

  • Fix loading RLE compressed TGA files (GH-49603).
  • Fix issue in TextureAtlas import of images with wrong size (GH-42103).
  • Fix potential crash importing invalid BMP files (GH-46555).
  • glTF: Improved error handling around invalid images and invalid meshes (GH-48904, GH-48912).
  • glTF: Fix incorrect skin deduplication when using named binds (GH-48913).

Input

  • Fix game controllers ignoring the last listed button (GH-48934).

Mono (C#)

  • iOS: Fix P/Invoke symbols being stripped by the linker, resulting in EntryPointNotFoundException crash at runtime (GH-49248).
  • macOS: Automatically enable JIT entitlements for the Mono exports (GH-50317).
  • Fix reloading tool scripts in the editor (GH-52883).
  • Fix C# bindings generator for default value types (GH-49702).
  • Ignore paths with invalid chars in PathWhich (GH-50918).
  • Fix List<T> marshalling (GH-53628).
  • Fix hint_string for enum arrays (GH-53638).
  • Keep order for C# exported members (GH-54199).

Networking

  • Fix parsing some IPv6 URLs for WebSocket (GH-48205).
  • WebsocketPeer outbound buffer fixes and buffer size query (GH-51037).
  • Fix IP address resolution incorrectly locking the main thread (GH-51199).

Physics

  • Fix 2D and 3D moving platform logic (GH-50166, GH-51458).
  • Various fixes to 2D and 3D KinematicBody move_and_slide and move_and_collide (GH-50495).
  • Improved logic for KinematicBody collision recovery depth (GH-53451).
  • Fix RayShape recovery in test_body_ray_separation (GH-53453).
  • Apply infinite inertia checks to Godot Physics 3D (GH-42637).
  • Fix and clean disabled shapes handling in Godot physics servers (GH-49845).
  • Fix KinematicBody axis lock (GH-45176).
  • Don't override KinematicCollision reference when still in use in script (GH-52955).
  • Fix ragdoll simulation when parent was re-added to scene (GH-48823).
  • Ignore disabled shapes for mass property calculations (GH-49699).

Porting

  • Android: Add GDNative libraries to Android custom Gradle builds (GH-49912).
  • Android: Resolve issue where the Godot app remains stuck when resuming (GH-51584).
  • Android: Properly validate godot_project_name_string for Android special chars (GH-54255).
  • HTML5: Fix bug in AudioWorklet when reading output buffer (GH-52696).
  • HTML5: Release pressed events when the window is blurred on HTML5 platform (GH-52973).
  • Linux: Fix input events random delay on X11 (GH-54313).
  • Linux: Fix implementation of move_to_trash (GH-44021).
  • Linux: Fix crash when using ALSA MIDI with PulseAudio (GH-48350).
  • Linux: Fix Directory::get_space_left() result (GH-49222).
  • macOS: Allow "on top" windows to enter fullscreen mode (GH-49017).
  • macOS: Fix editor window missing events on macOS Monterey (GH-54474).
  • macOS: Fix custom mouse cursor not set after mouse mode change (GH-49848).
  • macOS: Fix Directory::get_space_left() result (GH-49222).
  • macOS: Fix Xbox controllers in Bluetooth mode on macOS (GH-51117).
  • macOS: Fix incorrect mouse position in fullscreen (GH-52374).
  • macOS: Add entitlements required by OIDN JIT for the editor build (GH-54067).
  • Windows: Fix platform file access to allow file sharing with external programs (GH-51430).
  • Windows: Fix code signing with osslsigncode from Linux/macOS (GH-49985).
  • Windows: Send error logs to stderr instead of stdout, like done on other OSes (GH-39139).
  • Windows: Fix OS.shell_open() not returning errors (GH-52842).
  • Windows: Allow renaming to change the case of Windows directories (GH-43068).
  • Windows: Disable WebM SIMD optimization with YASM which triggers crashes (GH-53959).

Rendering

  • GLES2: Fix ambient light flickering with multiple refprobes (GH-53740).
  • GLES3: Fix draw order of transparent materials with multiple directional lights (GH-47129).
  • GLES3: Fix multimesh being colored by other nodes (GH-47582).
  • GLES3: Only add emission on base pass (GH-53938).
  • GLES3: Fudge irradiance map lookup to avoid precision issues (GH-54197).
  • Fixed rotate_y property of particle shaders (GH-46687).
  • Fixed behavior of velocity spread in particles (GH-47310).
  • Fixes depth sorting of meshes with transparent textures (GH-50721).
  • Fix flipped binormal in SpatialMaterial triplanar mapping (GH-49950).
  • Fix CanvasItem bounding rect calculation in some cases (GH-49160).
  • Clamp negative colors regardless of the tonemapper to avoid artifacts (GH-51439).
  • Fix Y billboard shear when rotating camera (GH-52151).
  • Add half frame to floor() for animated particles UV to compensate precision errors (GH-53233).
  • Prevent shaders from generating code before the constructor finishes (GH-52475).

3.3 - 2021-04-21

See the release announcement for details.

Added

Audio

Build system

Core

Editor

GUI

Import

Input

Mono (C#)

Physics

Porting

Rendering

XR (Augmented Reality / Virtual Reality)

Changed

Core

Editor

GUI

Import

Mono (C#)

Networking

Rendering

Physics

Porting

Removed

Import

Fixed

Audio

Core

Editor

GDScript

GUI

Import

Mono (C#)

Network

Physics

Porting

Rendering

3.2 - 2020-01-29

Added

  • Support for pseudo-3D depth in 2D.
  • Support for importing 3D scenes using Assimp.
    • Many formats are supported, including FBX.
  • Support for generating audio procedurally and analyzing audio spectrums.
  • WebRTC support.
    • Includes support for the high-level multiplayer API.
    • Supports NAT traversal using STUN or TURN.
  • Support for automatically building Android templates before exporting.
    • This makes 3rd-party SDK integration easier.
  • Support for texture atlases in 2D.
  • Major improvements to the visual shader system (News post 1, News post 2).
    • Redesigned visual shader editor with drag-and-drop capability.
      • Textures can be dragged from the FileSystem dock to be added as nodes.
    • Most functions available in GLSL are now exposed.
    • Many constants such as Pi or Tau can now be used directly.
    • Support for boolean uniforms and sampler inputs.
    • New Sampler port type.
    • New conditional nodes.
    • New Expression node, allowing shader code to be written in visual shaders.
    • Support for plugins (custom nodes).
      • Custom nodes can be drag-and-dropped from the FileSystem dock.
    • Ability to copy and paste nodes.
    • Ability to delete multiple nodes at once by pressing Delete.
    • The node creation menu is now displayed when dragging a connection to an empty space on the graph.
    • GLES3-only functions are now distinguished from others in the creation dialog.
    • Ability to preview the code generated by the visual shader.
    • Ability to convert visual shaders to text-based shaders.
    • See the complete list of new functions.
  • Improved visual scripting.
    • Visual scripting now uses a unified graph where all functions are represented.
    • Nodes can now be edited directly in the graph.
    • Support for fuzzy searching.
    • The tool mode can now be enabled in visual scripts.
    • New Deconstruct node to deconstruct a complex value into a scalar value.
    • Miscellaneous UI improvements.
  • Support for enabling/disabling parts of the editor or specific nodes.
    • This is helpful for education, or when working with artists to help prevent inadvertent changes.
  • Language server for GDScript.
    • This can be used to get better integration with external editors.
  • Version control integration in the editor.
    • This integration is VCS-agnostic (GDNative plugins provide specific VCS support).
  • Improved GridMap editor.
    • The copied mesh is now displayed during pasting.
    • The duplication/paste indicator is now rotated correctly around the pivot point.
    • Ability to cancel paste and selection by pressing Escape.
    • Erasing is now done using RMB instead of Shift + RMB.
      • Freelook can still be accessed by pressing Shift + F.
  • Improved MeshLibrary generation.
    • When appending to an existing MeshLibrary, previews are now only generated for newly-added or modified meshes.
    • Tweaked the previews' camera angle and light directions for better results.
    • Materials assigned to the MeshInstance instead of the Mesh are now exported to the MeshLibrary.
      • This is useful when exporting meshes from an imported scene (such as glTF), as it allows materials to persist across re-imports.
  • Improved Control anchor and margin workflow.
  • Network profiler.
  • Improved NavigationMesh generation.
    • GridMaps can now be used to bake navigation meshes.
    • EditorNavigationMeshGenerator can now be used in tool scripts.
    • Support for generating navigation meshes from static colliders.
    • When using static colliders as a geometry source, a layer mask can be specified to ignore certain colliders.
    • The generator no longer relies on the global transform, making it possible to generate navmeshes on nodes that are not in the scene tree.
    • Navigation gizmos are now updated after every new bake.
  • Support for skinning in 3D skeletons.
  • CameraServer singleton to retrieve images from mobile cameras or webcams as textures.
  • A crosshair is now displayed when using freelook in the 3D editor.
  • Project camera override button at the top of the 2D and 3D editors.
    • When enabled, the editor viewport's camera will be replicated in the running project.
  • RichTextLabel can now be extended with real-time effects and custom BBCodes.
    • Effects are implemented using the ItemFX resource.
  • [img=<width>x<height>] tag to resize an image displayed in a RichTextLabel.
    • If <width> or <height> is 0, the image will be adjusted to keep its original aspect.
  • Revamped node connection dialog for improved ease of use.
  • The Signals dock now displays a signal's description in a tooltip when hovering it.
  • Input actions can now be reordered by dragging them.
  • Animation frames can now be reordered by dragging them.
  • Ruler tool to measure distances and angles in the 2D editor.
  • "Clear Guides" menu option in the 2D editor to remove all guides.
  • The 2D editor grid now displays a "primary" line every 8 lines for easier measurements.
    • This value can be adjusted in the Configure Snap dialog.
  • Projects can now have a description set in the Project Settings.
    • This description is displayed as a tooltip when hovering the project in the Project Manager.
  • All Variant types can now be added as project settings using the editor (instead of just bool, int, float and String).
  • Pressing Ctrl + F now focuses the search field in the Project Settings and Editor Settings.
  • Quick Open dialog (Shift + Alt + O) to open any resource in the project.
    • Unlike the existing dialogs, it's not limited to scenes or scripts.
  • Ability to convert a Sprite to a Mesh2D, Polygon2D, CollisionPolygon2D or LightOccluder2D.
  • MultiMeshInstance2D node for using MultiMesh in 2D.
  • PointMesh primitive.
    • Drawn as a rectangle with a constant size on screen, which is cheaper compared to using triangle-based billboards.
  • 2D polygon boolean operations and Delaunay triangulation are now available in the Geometry singleton.
  • New convex decomposition using the V-HACD library.
    • Can decompose meshes into multiple convex shapes for increased accuracy.
  • Support for grouping nodes in the 3D editor.
  • "Slow" modifier in freelook (accessed by holding Alt).
  • The 2D editor panning limits can now be disabled in the Editor Settings.
  • "Undo Close Tab" option in the scene tabs context menu.
  • The editor is now capped to 20 FPS when the window is unfocused.
    • This decreases CPU/GPU usage if something causes the editor to redraw continuously (such as particles).
  • The editor's FPS cap can now be adjusted in the Editor Settings (both when focused and unfocused).
  • Version information is now displayed at the bottom of the editor.
    • This is intended to make the Godot version easily visible in video tutorials.
  • Support for constants in the shader language.
  • Support for local and varying arrays in the shader language.
  • Support for switch statements in the shader language.
  • Support for do {...} while (...) loops in the shader language.
    • Unlike while, the expression in the do block will always be run at least once.
  • Support for hexadecimal number literals in the shader language.
  • Ported several GLES3 shader functions such as round() to GLES2.
  • SHADOW_VEC shader parameter to alter 2D shadow computations in custom shaders.
  • Filter search box in the remote scene tree dock.
  • Ability to expand/collapse nodes recursively in the scene tree dock by holding Shift and clicking on a folding arrow.
  • Support for depth of field, glow and BCS in the GLES2 renderer.
  • MSAA support in the GLES2 renderer.
  • Ability to render viewports directly to the screen in the GLES2 renderer.
    • This can be faster on low-end devices, but it comes at a convenience cost.
  • Project settings to set the maximum number of lights and reflections in the GLES3 renderer.
    • Decreasing these values can lead to faster shader compilations, resulting in lower loading times.
  • Heightmap collision shape for efficient terrain collisions.
  • AStar2D class, making A* use easier in 2D.
  • Disabled collision shapes can now be added directly, without having to disable them manually after one step.
  • Context menu options to close other scene tabs, scene tabs to the right, or all scene tabs.
  • The audio bus volumes can now be snapped by holding Ctrl while dragging the slider.
  • Hovering an audio bus' volume slider now displays its volume in a tooltip.
  • Values in the Gradient and Curve editors can now be snapped by holding Ctrl.
    • Precise snapping can be obtained by holding Shift as well.
  • Support for snapping when scaling nodes in the 2D editor.
  • Precise snapping in the 3D editor when holding Shift.
  • "Align Rotation with View" in the 3D editor.
    • Unlike "Align Transform with View", only the selected node's rotation will be modified.
    • "Align Selection with View" has been renamed to "Align Transform with View".
  • All 3D gizmos now make use of snapping if enabled.
  • CSG shapes are now highlighted with a translucent overlay when selected.
    • Shapes in Union mode will use a blue overlay color by default.
    • Shapes in Subtraction mode will use an orange overlay color by default.
    • Shapes in Intersection mode will use a white overlay color.
  • Ability to move a vertex along a single axis when holding Shift in polygon editors.
  • Support for binary literals in GDScript (e.g. 0b101010 for 42).
  • AutoLoads can now be used as a type in GDScript.
  • Ability to define script templates on a per-project basis.
    • Template files should be placed into a script_templates/ directory in the project and have an extension that matches the language (.gd for GDScript, .cs for C#).
    • The path to the script templates directory can be changed in the Project Settings.
  • Ability to limit the minimum and maximum window size using OS.set_min_window_size() and OS.set_max_window_size().
  • Node.process_priority property to set or get a node's processing priority.
    • This was previously only available as Node.set_process_priority() (without an associated getter).
  • Node.editor_description property for documentation purposes.
    • When hovering a node with a description in the scene tree dock, the description will be displayed in a tooltip.
  • Button.keep_pressed_outside property to keep a button pressed when moving the pointer outside while pressed.
  • Button.expand_icon property to make a button's icon expand/shrink with the button's size.
  • Popup.set_as_minsize() method to shrink a popup to its minimum size.
  • Tree.get_icon_modulate() and Tree.set_icon_modulate() methods to change an icon's color in a Tree.
  • Tree.call_recursive() method to call a method on a TreeItem and its children recursively.
  • Light.use_gi_probe property to exclude specific lights from GIProbe computations.
  • TranslationServer method get_loaded_locales() to retrieve the list of languages with a translation loaded.
  • FRUSTUM 3D camera mode to create tilted frustums for mirror or portal effects.
  • CanvasItem.draw_rect() now has width and antialiased properties to match draw_line()'s functionality.
  • Engine.get_idle_frames() and Engine.get_physics_frames() to get the number of idle and physics frame iterations since the project started.
    • Unlike Engine.get_frames_drawn(), Engine.get_idle_frames() will be incremented even if the render loop is disabled.
  • Engine.get_physics_interpolation_fraction() to get the fraction through the current physics tick at the time of the current frame.
    • This can be used to implement fixed timestep interpolation.
  • Support for shadow-to-opacity in 3D to render shadows in augmented reality contexts.
  • Ability to change a Position2D gizmo's size.
  • New Vector2 and Vector3 methods:
    • move_toward() to retrieve a vector moved towards another by a specified number of units.
    • direction_to() to retrieve a normalized vector pointing from a vector to another.
      • This is a shorter alternative to (b - a).normalized().
  • AStar functions set_point_disabled() and is_point_disabled() to selectively disable points.
  • Tween now emits a tween_all_completed signal when all tweens are completed.
  • Input.get_current_cursor_shape() to retrieve the current cursor shape.
  • InputEventAction now has a strength property to simulate analog inputs.
  • String.repeat() method to repeat a string several times and return it.
  • String.count() method to count the number of occurrences of a substring in a string.
  • String.humanize_size() method to display a file size as an human-readable string.
  • String.strip_escapes() to strip non-printable escape characters from a string, including tabulations and newlines (but not spaces).
  • String.sha1_text() and String.sha1_buffer() methods to return a string's SHA-1 hash.
  • Line2D clear_points() method to clear all points.
  • Line2D now has a "Width Curve" property to make its width vary at different points.
  • assert() now accepts an optional second parameter to display a custom message when the assertion fails.
  • posmod() built-in GDScript function that behaves like fposmod(), but returns an integer value.
  • smoothstep() built-in GDScript function for smooth easing of values.
  • lerp_angle() built-in GDScript function to interpolate between two angles.
  • ord() built-in GDScript function to return the Unicode code point of an 1-character string.
  • PoolByteArray.hex_encode() method to get a string of hexadecimal numbers.
  • Font.get_wordwrap_string_size() method to return the rectangle size needed to draw a word-wrapped text.
  • Camera.get_camera_rid() method to retrieve a Camera's RID.
  • Array.slice() method to duplicate a subset of an Array and return it.
  • The GraphEdit box selection colors can now be changed by tweaking the selection_fill and selection_stroke theme items.
  • Toggleable HSV mode for ColorPicker.
  • ColorPicker properties to toggle the visibility and editability of presets.
  • The default ColorPicker mode (RGB, HSV, RAW) can now be changed in the Editor Settings.
  • ColorPicker now displays an indicator to denote "overbright" colors (which can't be displayed as-is in the preview).
  • Hovering a Color property in the editor inspector now displays a tooltip with the exact values.
  • Color.transparent constant (equivalent to Color(1, 1, 1, 0)).
  • KinematicBody.get_floor_normal() and KinematicBody2D.get_floor_normal() to retrieve the collided floor's normal.
  • VehicleWheel.get_rpm() method to retrieve a vehicle wheel's rotations per minute.
  • Per-wheel throttle, brake and steering in VehicleBody.
  • GeometryInstance.set_custom_aabb() to set a custom bounding box (used for view frustum culling).
  • FuncRef.call_funcv() to call a FuncRef with an array containing arguments.
    • In contrast to FuncRef.call_func(), only a single array argument is expected.
  • Mesh.get_aabb() is now exposed to scripting.
  • PhysicalBone.apply_impulse() and PhysicalBone.apply_central_impulse() methods to push ragdolls around.
  • ProjectSettings.load_resource_pack() now features an optional replace_files argument (defaulting to true), which controls whether the loaded resource pack can override existing files in the virtual filesystem.
  • SpinBox.apply() method to evaluate and apply the expression in the SpinBox's value immediately.
  • ConfigFile.erase_section_key() method to remove a single key from a ConfigFile.
  • OS.execute() now returns the process' exit code when blocking mode is enabled.
  • OS.is_window_focused() method that returns true if the window is currently focused.
    • Tracking the focus state manually using NOTIFICATION_WM_FOCUS_IN and NOTIFICATION_WM_FOCUS_OUT is no longer needed to achieve this.
  • OS.low_processor_mode_sleep_usec is now exposed as a property.
    • This makes it possible to change its value at runtime, rather than just defining it once in the Project Settings.
  • SceneTree.quit() now accepts an optional argument with an exit code.
    • If set to a value greater than or equal to 0, it will override the OS.exit_code property.
  • VisualServer.get_video_adapter_name() and VisualServer.get_video_adapter_vendor() methods to retrieve the user's graphics card model and vendor.
  • VisualServer.multimesh_create() is now exposed to scripting.
  • Ability to override how scripted objects are converted to strings by defining a _to_string() method.
  • Export hints for 2D and 3D physics/render layers.
  • Editor plugins can now add new tabs to the Project Settings.
  • Standalone ternary expression warning in GDScript.
  • Variable shadowing warning in GDScript.
    • Will be displayed if:
      • a block variable shadows a member variable,
      • a subclass variable shadows a member variable,
      • a function argument shadows a member variable.
  • Script reflection methods are now exposed to GDScript.
    • See Script.get_script_property_list(), Script.get_script_method_list(), Script.get_script_signal_list(), Script.get_script_constant_map() and Script.get_property_default_value().
  • randfn(mean, deviation) method to generate random numbers following a normal Gaussian distribution.
  • Ability to read the standard error stream when using OS.execute() (disabled by default).
  • Option to disable boot splash filtering (nearest-neighbor interpolation).
  • The GridMap editor now offers a search field and size slider.
  • DynamicFont resources now have a thumbnail in the editor.
  • Minimap in the script editor.
  • Bookmarks in the script editor for easier code navigation.
  • Filter search box for the script list and member list.
  • Singletons and class_name-declared classes are now highlighted with a separate color in the script editor.
  • The editor help now displays class properties' default and overridden values.
  • The script editor's Find in Files dialog can now search in user-defined file types (editor/search_in_file_extensions in the Project Settings).
  • The script editor search now displays the number of matches.
  • The script editor search now selects the current match for easier replacing.
  • "Evaluate Expression" contextual option in the script editor.
    • This option evaluates the selected expression and replaces it (e.g. 2 + 2 becomes 4).
  • Autocompletion support for change_scene().
  • Ability to skip breakpoints while debugging.
  • Drag-and-drop support in the TileSet editor.
  • Ability to attach scripts to nodes by dragging a name from the script list to a node in the scene tree.
  • Icons are now displayed next to code completion items, making their type easier to distinguish.
  • TileMap property centered_textures can be used to center textures on their tile, instead of using the tile's top-left corner as position for the texture.
  • "Ignore" flag to ignore specific tiles when autotiling in the TileMap editor.
  • Keyboard shortcuts to rotate tiles in the TileMap editor.
    • Default shortcuts are A (rotate left), S (rotate right), X (flip horizontally), Y (flip vertically).
  • Ability to keep a node's local transform when reparenting it by holding Shift.
  • Basis constants IDENTITY, FLIP_X, FLIP_Y, FLIP_Z.
  • Ability to create sprite frames in AnimatedSprite from a sprite sheet.
  • frame_coords property in Sprite and Sprite3D to set/get the coordinates of the frame to display from the sprite sheet.
  • billboard property in Sprite3D.
  • Reimplemented support for editing multiple keys at once in the animation editor.
  • Support for FPS snapping in the Animation editor.
  • Autokeying in the Animation editor.
    • Keyframes will be created automatically when translating, rotating or scaling nodes if a track exists already.
    • Keys must be inserted manually for the first time.
  • AnimationNodeBlendTreeEditor improvements.
    • Ability to exclude multiple selected nodes at once.
    • Context menu to add new nodes (activated by right-clicking).
  • The AnimationPlayer Call Method mode is now configurable.
    • Method calls can be "deferred" or "immediate", "deferred" being the default.
  • OccluderPolygon2D is now draggable in the editor.
  • The tooltip position offset is now configurable.
  • The default cursor used when hovering RichTextLabels can now be changed.
  • "Dialog Autowrap" property in AcceptDialog to wrap the label's text automatically.
  • The 2D editor's panning shortcut can now be changed.
  • The shortcuts to quit the editor can now be changed.
  • Support for emission masks in CPUParticles2D.
  • direction property in CPUParticles and ParticlesMaterial.
  • lifetime_randomness property in CPUParticles and ParticlesMaterial.
  • CPUParticles now uses a different gizmo icon to distinguish them from Particles.
  • "Restart" button to restart particle emission in the editor.
  • AnimatedSprites' animations can now be played backwards.
  • TextureRects can now have their texture flipped horizontally or vertically.
  • StyleBoxFlat shadows can now have an offset.
  • StyleBoxFlat now computes UV coordinates for its canvas_item vertices, which can be used in custom shaders.
  • Profiler data can now be exported to a CSV file.
  • The 2D polygon editor now displays vertex numbers when hovering vertices.
  • RectangleShapes now have a third handle to drag both axes at once.
  • Global class resources are now displayed in the Resource property inspector.
  • Double-clicking an easing property in the inspector will now make the editor display a numeric field.
    • This makes it easier to enter precise values for properties such as light attenuation.
  • interface/editor/default_float_step editor setting to configure floating-point values' default step in the Inspector.
  • Audio buses are now stylized to look like boxes that can be dragged.
  • The default audio bus layout file path can now be changed in the Project Settings.
  • The LineEdit and TextEdit controls now display their contextual menu when pressing the Menu key.
  • shortcut_keys_enabled and selecting_enabled LineEdit and TextEdit properties to disable keyboard shortcuts and selecting text.
  • The LineEdit "disabled" font color can now be changed.
  • The TextEdit "readonly" font color can now be changed.
  • LineEdit can now have its right_icon set in scripts.
  • The nine_patch_stretch TextureProgress property now enables stretching when using a radial fill mode.
  • Support for loading and saving encrypted files in ConfigFile.
  • get_path() and get_path_absolute() are now implemented in FileAccessEncrypted.
  • "Disabled" attenuation model for AudioStreamPlayer3D, making the sound not fade with distance while keeping it positional.
  • AudioEffectPitchShift's FFT size and oversampling are now adjustable.
  • TextEdit's tab drawing and folding is now exposed to GDScript.
  • Orphan node monitor in the Performance singleton.
    • Counts the number of nodes that were created but aren't instanced in the scene tree.
  • Ability to change eye height in VR.
  • CSV files can now be imported as non-translation files.
  • Scene resources such as materials can now be imported as .tres files.
  • Support for importing 1-bit, 4-bit and 8-bit BMP files.
    • Size dimensions must be a multiple of 8 for 1-bit images and 2 for 4-bit images.
  • use_lld=yes flag to link with LLD on Linux when compiling with Clang.
    • This results in faster iteration times when developing Godot itself or modules.
  • use_thinlto=yes flag to link with ThinLTO when using Clang.
  • Multicast support in PacketPeerUDP.
  • NetworkedMultiplayerEnet.server_relay property to disable server relaying.
    • This can be used to increase security when building a fully-authoritative server.
  • Automatic timeout for TCP connections (defaults to 30 seconds, can be changed in the Project Settings).
  • HTTPRequest.timeout property (defaults to 0, which is disabled).
  • HTTPRequest.download_chunk_size property.
    • This value can be adjusted to reduce the allocation overhead and file writes when downloading large files.
    • The default value was increased for faster downloads (4 KB → 64 KB).
  • WebSocket improvements.
    • Support for SSL in WebSocketServer.
    • WebSocketClient can now use custom SSL certificates (except on HTML5).
    • WebSocketClient can now define custom headers.
  • The editor now features a built-in Web server for testing HTML5 projects.
  • Button to remove all missing projects in the Project Manager.
  • Reimplemented support for embedding project data in the PCK file.
  • Ability to take editor screenshots by pressing Ctrl + F12.
  • Editor plugins can now set the current active editor as well as toggle the distraction-free mode.
  • Android: Support for adaptive icons.
    • All icon densities are now generated automatically by the exporter.
    • Only 3 images now need to be supplied to support all icon formats and densities (legacy icon, adaptive foreground, adaptive background).
  • Android: Support for the Oculus Mobile SDK.
  • Android: Support for requesting permissions at runtime.
  • Android: NOTIFICATION_APP_PAUSED and NOTIFICATION_APP_RESUMED notifications are now emitted when the app is paused and resumed.
  • Android: Support for pen input devices.
  • Android/iOS: Support for vibrating the device.
  • HTML5: Partial clipboard support.
  • iOS: Support for ARKit.
  • iOS: OS.get_model_name() now returns a value with the device name.
  • iOS: The Home indicator is now hidden by default to avoid being in the way of the running project.
    • It can be restored in the Project Settings.
  • Windows: Ability to toggle the console window in the Editor Settings.
  • Windows: Project setting to enable Vsync using the compositor (DWM), disabled by default.
    • On some hardware, this may fix stuttering issues when running a project in windowed mode.
  • Windows: Support for code signing using signtool on Windows and osslsigncode on other platforms.
  • Windows: Support for using Clang and ThinLTO when compiling using MinGW.
  • Windows/macOS: OS.set_native_icon() method to set an .ico or .icns window/taskbar icon at runtime.
  • Windows/macOS/X11: Support for graphic tablet pen pressure and tilt in InputEventMouseMotion.
  • macOS: LineEdit now supports keyboard shortcuts commonly available on macOS.
  • macOS: Multiple instances of the editor can now be opened at once.
  • macOS: Recent and favorite projects are now listed in the project manager dock menu.
  • macOS: The list of open scenes is now displayed in the editor dock menu.
  • macOS: Support for modifying global and dock menus.
  • macOS: Improved support for code signing when exporting projects.
  • macOS: Support for defining camera and microphone usage descriptions when exporting a project.
  • macOS/X11: A zsh completion file for the editor is now available.
  • X11: The instance PID is now set as the _NET_WM_PID window attribute, so that external programs can easily access it.
  • Mono: Support for exporting to Android and HTML5.
  • Mono: Support for using Rider as an external editor.
  • Mono: Support for attaching external profilers like dotTrace using the MONO_ENV_OPTIONS environment variable.
  • Mono: New DynamicGodotObject class to access dynamic properties from scripts written in GDScript.
  • Mono: Support for resource type hints in exported arrays.
  • Mono: New mono/unhandled_exception_policy project setting to keep running after an unhandled exception.
  • Mono: New Godot constants to conditionally react to system variables at compile-time.
  • Mono: Support for Visual Studio 2019's MSBuild.

Changed

  • Tween and Timer now display an error message if they are started without being added to the scene tree first.
  • Tweaked Timer's wait time property hint to allow values with 3 decimals and above 4096.
  • Functions called from a signal can no longer disconnect the node from the signal they're connected to (unless using call_deferred()).
  • Tabs and space indentation can no longer be mixed in the same GDScript file.
    • Each file must now use only tabs or spaces for indentation (not both).
  • assert() in GDScript must now always be used with parentheses.
    • assert(true) is still valid, but assert true isn't valid anymore.
    • This is to account for the optional second parameter that defines a custom message.
  • The "Trim" and "Normalize" WAV import options are now disabled by default.
    • This makes the default behavior more consistent with Ogg import.
  • Ogg samples now have an icon in the editor, like WAV samples.
  • Camera2D drag margins are now disabled by default.
    • If porting a project from Godot 3.1 where drag margins were used, these must be enabled manually again.
  • The Camera2D Offset property now ignores the Limit property.
    • To get the old behavior back, move the camera itself instead of changing the offset.
  • Camera.project_position() now requires a second depth argument to determine the distance of the point from the camera.
    • To get the old behavior back, pass the Camera's near property value as the second argument.
  • Skeleton.set_bone_global_pose() was replaced by Skeleton.set_bone_global_pose_override().
  • UDP broadcasting is now disabled by default and must be enabled by calling set_broadcast_enabled(true) on the PacketPeerUDP instance.
  • The editor and project manager now open slightly faster.
  • Improved the Project Manager user interface.
    • New, simpler design with more space available for the project list.
    • Improved reporting of missing projects.
    • The search field is now focused when starting the Project Manager if there is at least one project in the list.
    • The search field now searches in both the project name and path.
      • If the search term contains a /, the whole path will be used to match the search them. Otherwise, only the last path component will be searched in.
  • Refactored the Project Manager to be more efficient, especially with large project lists.
  • Images in the Project Manager and Asset Library are now resized with Lanczos filtering for a smoother appearance.
  • The editor now uses the font hinting algorithm that best matches the OS' default.
    • Hinting is set to "None" on macOS, and set to "Light" on Windows and Linux.
    • This can be changed in the Editor Settings.
  • The editor window dimming when a popup appears is now less intense (60% → 50%).
    • The animation was also removed as it made the editor feel sluggish at lower FPS.
  • Several editor menus have been reorganized for consistency and conciseness.
  • Undo/Redo now supports more actions throughout the editor.
  • Increased the height of the ItemList editor popup.
    • This makes it easier to edit large amounts of items.
  • Opening a folder in FileDialog will now scroll back to the top.
  • Folder icons in FileDialog can now be displayed with a different color using the folder_icon_modulate constant, making them easier to distinguish from files.
    • Folder icons in editor file dialogs are now tinted with the accent color.
  • Improved colors in the light editor theme for better readability and consistency.
  • Improved A* performance significantly by using a binary heap and OAHashMap.
  • Tweaked the AABB transform algorithm to be ~1.2 times faster.
  • Optimized the variant reference function, making complex scripts slightly faster.
  • Disabled high-quality voxel cone tracing by default.
    • This makes GIProbe much faster out of the box, at the cost of less realistic reflections.
  • Lowered the default maximum directional shadow distance (200 → 100).
    • This makes directional shadow rendering consistent between the editor and running project when using the default Camera node settings.
  • Tweaked the default depth fog maximum distance to be independent of the Camera's far value (0..100).
    • This makes fog display consistent between the editor and a running project.
  • Tweaked the default height fog values to be more logical (0..100 → 10..0).
    • This means height fog will be drawn from top-to-bottom, instead of being drawn from bottom-to-top.
  • Significantly improved SSAO performance by using a lower sample count.
    • SSAO now uses 3×3 blurring by default, resulting in less visible noise patterns.
  • When "Keep 3D Linear" is enabled, colors are no longer clamped to [0, 1] when using Linear tonemapping.
    • This allows rendering HDR values in floating-point texture targets for further processing or saving HDR data into files.
  • The lightmap baker now calculates lightmap sizes dynamically based on surface area.
  • Improved 3D KinematicBody performance and reliability.
  • Orbiting in the 3D editor can now be done while holding Alt, for better compatibility with graphics tablets.
  • Keys and actions are now released when the window loses focus.
  • Tweens can now have a duration of 0.
  • Particles and CPUParticles' Sphere emission shape now uses an uniform density sphere.
  • Viewport.size_override_stretch is now exposed as a property (rather than just setter/getter methods).
  • One-click deploy to Android now requires just one click if only one device is connected.
  • The Project Manager will now infer a project name from the project path if the name was left to the default value.
  • The WebSockets implementation now uses the smaller wslay library instead of libwebsockets.
  • Box selections in the editor now use a subtle outline for better visibility.
  • Most 2D lines are now antialiased in the editor.
  • CheckButtons now use a simpler design in the editor.
  • Messages originating from the editor are now faded in the editor log.
    • This makes messages printed by the project stand out more.
  • Folding arrows in the editor inspector are now displayed at the left for consistency with other foldable elements.
  • Hovering or dragging guides in the 2D editor will now turn the cursor into a "resizing" shape.
  • The editor update spinner is now hidden by default.
    • It can be enabled again in the Editor Settings.
  • The "Update Always" option is now editor-wide instead of being project-specific.
  • ColorPicker, OptionButton and MenuButton now use toggle mode, making them appear pressed when clicked.
  • The ColorPicker preview was moved below the picker area to be closer to the sliders.
  • Increased the Light2D height range from -100..100 to -2048..2048.
    • Lower and higher values can be entered manually too.
  • Decreased the rotation_degrees range in various nodes to -360..360 to be easier to adjust using the slider.
    • Lower and higher values can still be entered manually, which is useful for animation purposes.
  • The default RichTextLabel color is now #ffffff, matching the default Label color for better consistency.
  • SpinBoxes now calculate the entered value using the Expression class.
    • For example, writing 2 + 2 in a SpinBox then pressing Enter will result in 4.
  • Saved resources no longer contain dependency indices and metadata such as node folding, resulting in more VCS-friendly files.
  • The script editor's line length guideline is now enabled by default.
  • The script editor state (such as breakpoints or the current line) is now preserved across editor sessions.
  • The script editor's "Auto Brace Complete" setting is now enabled by default.
  • The scripts panel toggle button is now located at the bottom-left of the script editor (instead of the File menu).
  • Editor plugins can now be enabled without having an init script defined.
  • Custom nodes added by plugins now have a translucent script icon in the scene tree dock.
  • EditorInterface.get_current_path() to get the full path currently displayed in the FileSystem dock in an editor plugin.
  • Copy constructors are now allowed for built-in types in GDScript.
    • This allows constructs such as Vector2(Vector2(12, 34)), which may be useful to simplify code in some cases.
  • weakref(null) is now allowed in GDScript.
    • This makes checking for a valid reference more concise, as if my_ref.get_ref() is now sufficient (no need for if my_ref and my_ref.get_ref()).
  • The number of signal connections and groups is now displayed in a tooltip when hovering the associated buttons in the scene tree dock.
  • The right mouse button can now be used to pan in the 2D editor.
    • This is to improve usability when using a touchpad.
    • The middle mouse button can still be used to pan in the 2D editor.
  • Zooming is now allowed while panning in the 2D editor.
  • When the "Scroll To Pan" editor setting is enabled, the 2D editor can now be zoomed in by holding Ctrl and scrolling the mouse wheel.
  • Zoom percentages in the 2D editor are now relative to the editor scale if the editor scale is higher than 100%.
  • The 2D editor now displays the current zoom percentage.
    • The zoom percentage can be clicked to reset the zoom level to 100%.
  • Improved sorting options in the Asset Library.
  • Images now load faster in the Asset Library.
  • A loading placeholder is now displayed while icons are loading in the Asset Library.
  • Images failing to load in the Asset Library display a "broken file" icon.
  • Improved the Asset Library page loading transitions.
  • Tweaked the Asset Library detail page layout for better readability.
  • Audio mixer faders now use a non-linear algorithm to better fit human hearing.
  • Tooltips now appear faster when hovering elements in the editor (0.7 seconds → 0.5 seconds).
  • Increased the low-processor usage mode's default maximum refresh rate (125 FPS → 144 FPS).
    • This makes the editor feel slightly smoother on 144 Hz displays.
  • Tree scrolling when dragging now uses a larger drag margin, making drag-and-drop more convenient.
  • Holding Ctrl now toggles snapping in GraphEdit.
  • Improved the timeline's appearance in the animation editor.
  • Improved snapping in the animation editor.
    • Snapping can be toggled temporarily by holding the Ctrl key.
    • Snapping can be made more precise by holding the Shift key.
    • Timeline snapping is now toggled by the Snap setting (like when moving keyframes).
  • Keyframes are now easier to select in the animation editor.
  • Selected keyframes now appear slightly larger in the animation editor.
  • Boolean and color keyframe icons are now aligned to other keyframes in the animation editor.
  • The Animation editor's line widths are now resized to match the editor scale.
  • BPTC compression is now available for all HDR image formats.
  • Image.save_exr() to save an image in EXR format, which supports high bit depths.
  • Improved path and polygon editors.
    • New handle icons for path and polygon points.
    • Smooth path point and curve tangents now use different icons to be distinguished from sharp points.
    • Tangent lines are now gray in the Path2D and Path editors.
    • Path2D lines are now antialiased.
  • Increased the TileSet and polygon UV editor's maximum zoom levels (400% → 1600%).
  • Decreased the maximum allowed StyleBoxFlat corner detail (128 → 20).
    • This prevents slowness and glitches caused by using overly detailed corners.
  • 3D collision shapes and RayCasts are now drawn in gray when disabled.
  • Improved RayCast2D and one-way collision drawing.
    • Disabled RayCast2Ds are now displayed in gray.
    • One-way collision arrows are now orange by default, making them easier to distinguish them from RayCast2Ds.
    • Tweaked RayCast2D and one-way collision line shapes to look more like arrows.
  • Improved rendering in the curve editor.
    • The grid is now rendered correctly when using a light theme.
    • The main line and edge line colors have been swapped for better visibility.
    • Tangent line widths are now resized to match the editor scale.
  • Improved rendering in the performance monitor.
    • Dark colors are now used on light backgrounds for better visibility.
    • Graph lines are now thinner and opaque.
    • Graph line widths are now resized to match the editor scale.
    • Rounded values now display trailing zeroes to make their precision clearer.
  • TileMap support for transform operations on cell textures bigger than the cell size has been reworked to properly support isometric tiles.
    • Breaks compatibility with some TileMaps from previous Godot versions. An opt-in compatibility_mode property can be used to restore the previous behavior.
  • Some TileMap editor options were moved to the toolbar.
  • The TileMap editor now displays coordinate information in the 2D viewport's bottom-left corner.
    • This fixes the TileMap editor width changing when hovering tiles in a small window.
  • Brackets are now only inserted when necessary when autocompleting methods in the script editor.
  • Improved dialogs when saving or removing an editor layout.
  • Whitespace-only selections no longer cause the script editor to highlight all occurrences.
  • Saving a script will now add a newline at the end of file if none was present already.
  • Reorganized sections in the editor help to be in a more logical order.
  • The editor help now uses horizontal margins if the screen is wide enough.
    • This makes sure lines keep a reasonable length for better readability.
  • Increased line spacing in the editor help and asset library descriptions.
  • The editor help now displays bold text using a bold font (instead of using a monospace font).
  • The editor help now displays code using a slightly different color to be easier to distinguish.
  • The editor help now displays types after parameter names to follow the GDScript static typing syntax.
  • Editor help is now accessed using Shift + F1, for consistency with other applications.
    • Contextural help is now accessed using Alt + F1 to accommodate for this change.
  • The script editor's Find in Files dialog is now always available, even when no script is opened.
  • Pressing Shift + Enter in the script editor Find dialog will now go to the previous match.
  • Improved the node deletion confirmation message.
    • If there is only one node to delete, its name is displayed in the message.
    • If there is more than one node to delete, the number of nodes to delete is displayed.
  • Improved the "Snap Object to Floor" functionality in the 3D editor.
    • An error message is now displayed if no nodes could be snapped.
    • Increased the maximum snapping height (10 → 20).
    • Increased the maximum snapping tolerance (0.1 → 0.2).
  • 2D/3D selections, rotations and selected texts are now highlighted with the editor theme's accent color.
  • 3D light gizmos are now tinted using the light's color, making navigation easier while using the unshaded display mode.
  • Improved the 3D light and AudioStreamPlayer3D gizmos to better represent their depth in the 3D world.
  • Tweaked the 3D manipulator gizmo's colors for better visibility.
  • Tweaked the 2D and 3D axis colors for consistency with gizmo colors.
  • Increased the default 3D manipulator gizmo opacity (0.2 → 0.4).
  • The multiline text editor popup dialog's width is now capped on large displays.
    • This prevents lines from becoming very long, which could hamper text readability.
  • Non-printable escape characters are now stripped when pasting text into a LineEdit.
  • The TextEdit caret color now matches the default font color, making it easier to see.
  • Empty exported NodePath properties now return null instead of self.
  • Built-in scripts are no longer allowed to use class_name as it wasn't working properly.
  • The second parameter of substr() is now optional and defaults to -1.
  • More editor actions can now have shortcuts assigned (such as Revert Scene or Export).
  • The project export path may now be written in a relative path.
    • Directories will be created recursively if the target directory doesn't exist.
  • Items in the FileSystem dock can now be deselected by clicking empty space.
  • "Set as Main Scene" context option for scenes in the FileSystem dock.
  • The unused class variable GDScript warning is now disabled by default due to false positives.
  • Warning-ignore comments now allow whitespace after the # character.
  • Improved error reporting in the Particles emission point creation dialog.
  • The number of warnings and errors that can be received in the remote debugger is now capped per second rather than per frame.
    • The default limit is 100 errors and 100 warnings per second, making it possible for the script editor to report up to 100 warnings before having messages hidden.
  • UTF-8 characters are now supported in input action names.
  • All platforms now use the custom_template property in each export preset to store the path to the custom export template (instead of custom_package for some platforms).
  • Tween methods' trans_type and ease_type arguments are now optional, defaulting to TRANS_LINEAR and EASE_IN_OUT respectively.
  • PCKPacker.pck_start() and PCKPacker.flush()'s alignment and verbose arguments (respectively) are now optional, defaulting to 0 and false.
  • Exported PCK files now contain the Godot patch version in their header.
    • This can be used by external tools to detect the Godot version more accurately.
  • Exporting a project PCK or ZIP from the command line must now be done with the new --export-pack command-line argument.
    • This was done to remove the ambiguity when exporting a project to macOS from the command line.
  • Updated FreeType to 2.10, which changes how font metrics are calculated.
    • This may affect the appearance of some Controls, see this issue for details.
  • The SCons build system now automatically detects the host platform.
    • platform=<platform> is no longer required when compiling for the host platform.
    • platform=list can be used to list the supported target platforms.
  • Windows: Drive letters in file paths are now capitalized.
  • macOS: Control + H and Control + D in TextEdit now delete the character at the left and right of the cursor (respectively).
  • macOS: Command + Left in TextEdit now moves the cursor to the first non-whitespace character.
  • macOS: Non-resizable windows are now allowed to enter fullscreen mode.
  • macOS: The editor's title bar now uses dark mode on Mojave.
  • X11: OS.set_window_postion() now takes window decorations into account.

Removed

  • Unused Panel panelf and panelnc styles.
  • thekla_atlas dependency, as light baking now relies on xatlas for UV unwrapping.
  • Rating icons in the Asset Library, as this feature isn't implemented in the backend.
  • Some editor languages are no longer available due to missing support for RTL and text shaping in Godot:
    • Affected languages are Arabic, Bengali, Persian, Hebrew, Hindi, Malayalam, Sinhalese, Tamil, Telugu and Urdu.
    • These languages will be re-added once Godot supports RTL and text shaping.
  • Android: ARMv6 support.
  • iOS: ARMv7 support.
    • ARMv7 export templates can still be compiled from source to support the iPhone 5 and older.

Fixed

  • The Project Manager now remembers the sorting option that was previously set.
  • The editor and project manager now have a minimum window size defined.
    • This prevents controls from overlapping each other by resizing the window to a very small size.
  • Fixed radiance map generation, resulting in improved 3D performance and visual quality.
  • Fixed issues with PBR environment mapping.
    • Materials should now look closer to what they look like in Substance Designer/Painter.
  • Depth of field now affects transparent objects.
  • Radiance is now generated when using a clear color sky.
  • Contact shadows no longer display when shadow casting is disabled.
  • Larger data types can now be constructed by swizzling in the shader language.
    • For instance, vec2 test2 = vec2(0.0, 1.0); vec3 test3 = test2.xxx; now works as in GLSL.
  • The AMBIENT_LIGHT_DISABLED and SHADOWS_DISABLED flags now work when using the GLES2 renderer.
  • The Keep background mode now works when using the GLES2 renderer.
  • Several fixes to the GLES2 renderer:
    • Fixed transparency order.
    • Fixed vertex lighting being too bright.
    • Fixed occasional light flickering.
    • Fixed shadows cast from transparent materials.
    • Fog is no longer computed on unshaded materials.
      • This matches the GLES3 renderer's behavior.
    • GLES2 shader uniforms now use highp precision by default.
      • This prevents linking issues on some Android devices.
    • Negative OmniLights and SpotLights now work as expected.
    • The 3D editor's View Information pane now displays statistics correctly when using the GLES2 renderer.
  • Textures compressed with ETC now support transparency by falling back to RGBA4444 or LA8.
  • Alternate display modes are now marked as disabled in the editor when using the GLES2 renderer, as these are only supported when using GLES3.
  • Fixed several inconsistencies between Particles and CPUParticles.
  • Fixed particles scale randomization.
  • Particles are now set to emit correctly when restarting.
  • CheckBox and CheckButton now use the check_vadjust custom constant to adjust the icon Y position as intended.
  • Fixed various issues with tab-related icons.
  • Fixed issues in WebM colorspace corrections, resulting in better color output.
  • CSG is now taken into account when generating navigation meshes.
  • Curve2D and Curve3D interpolated values now behave as expected.
  • Numeric slider grabbers in the editor inspector now update when scrolling using the mouse wheel.
  • Scene modifications are no longer lost when renaming a file in the FileSystem dock.
  • "Show in FileSystem" now clears the current search, so that the selected item can be seen immediately.
  • LineEdit and TextEdit's context menus no longer display editing options if they are read-only.
  • SpinBox mouse events are now correctly triggered by its LineEdit part.
  • Per-word navigation in LineEdit and TextEdit now handles UTF-8 characters correctly.
  • LineEdit placeholders, Tabs' names and WindowDialog titles now react correctly to translation changes.
  • Fixed UI navigation when using gamepad analog sticks.
  • Buttons' state is now reset when they exit the scene tree.
    • This prevents them from lingering in a "hovered" or "pressed" state.
  • Tooltips now disappear when hiding the node they belong to.
  • Encoded packet flags are no longer sent in the ENet multiplayer protocol, as ENet itself already sends that data.
    • This saves 4 bytes per packet.
  • Audio trimming is now less aggressive, cutting at -50 dB instead of -30 dB.
  • Audio trimming now has a small fade-out period, preventing audible pops.
  • Audio mix rate and output latency settings are now consistently applied on all platforms.
  • Fixed multichannel panning for AudioStreamPlayer3D.
  • Opening a recent built-in script will now load the associated scene automtaically since doing so is required to edit the script.
  • Declaring a class with class_name that has the same name as a singleton will now display a clearer error message.
  • script is no longer allowed as a member variable name in GDScript, as that conflicts with the internal script property used by Object.
  • Assigning a variable with a function index will no longer evaluate the function twice.
    • For instance, doing a[function()] += 1 will no longer evaluate function() twice.
    • If the function has side effects, this may change the resulting program behavior.
  • GDScript type checks are now enabled in release export templates.
  • The Label font shadow now draws the font outline as well (if the base font has one).
  • Font.draw_char() now draws the font outline as well (if the base font has one).
  • The editor no longer redraws continuously when selecting a Control in a Container.
  • Added some missing feature tags to the Project Settings "Override For..." menu.
  • The low_processor_mode_sleep_usec project setting no longer affects the editor.
  • Typed arrays and dictionaries no longer have their values shared across instances.
  • self and object types can now be indexed as a dictionary again (like in Godot 3.0 and prior).
  • Fixed to_lower() conversion with Cyrillic characters.
  • The Find in Files replace dialog now allows empty replacement texts.
  • The bottom panel no longer disappears when opening the theme editor on small displays.
  • The script editor's color picker now changes only one color if multiple colors are present on the same line.
  • The script editor's line length guideline is now drawn behind text.
  • The script editor's line length guideline is now drawn at the correct position when font hinting is disabled.
  • The script editor now automatically indents a line if the previous one ends with [ or (.
    • This makes it possible to wrap arrays or function declarations/calls without pressing Tab every line.
  • Fixed autocompletion in the script editor.
    • The script editor can now autocomplete enum values.
    • The script editor can now autocomplete node paths starting with $" or $'.
  • Custom script editor templates can now use type hints.
  • Shift operators with a number not between 0 and 63 (inclusive) will now result in a compile-time error in GDScript.
  • Warnings no longer count towards the "Too many errors!" message.
  • AnimationTrackEdit now displays invalid value keys again (as it did in 3.0).
  • Fixed the display of function/audio/animation tracks in the blend tree animation filter.
  • The editor shortcuts menu no longer displays all unassigned shortcuts when searching for a substring of "None".
  • The editor's performance monitor now displays memory/file sizes larger than 2 GB correctly.
  • The editor debugger now displays keyboard shortcuts when hovering the "Step Into", "Step Over", "Break" and "Continue" buttons.
  • The editor debugger now always handles connections.
    • Subsequent connections will be dropped immediately to avoid locking.
  • Large rotation offset/snap values no longer appear to be cut off in the Configure Snap dialog.
  • Documentation tooltips in the editor now wrap to multiple lines correctly.
  • Locked 3D nodes are no longer selectable in the 3D viewport, matching the 2D editor's behavior.
  • All 3D gizmos now notify changes correctly, which means the inspector now displays up-to-date properties after using them.
  • The 3D manipulator gizmo's size is now capped at low viewport heights, preventing it from outgrowing the viewport's bounds.
  • The editor filesystem now refreshes on file changes if the project is located on an exFAT filesystem.
  • Fixed many cases of colors not changing correctly when switching the editor from a dark theme to a light theme (or vice versa) without restarting.
  • The Show in File Manager context menu option now works with files marked as favorite.
  • The random number generator's seed is now properly set up.
  • Antialiased and rounded StyleBoxFlat corners now handle different border widths correctly.
  • The StyleBox preview now accounts for shadows and content margins.
    • This fixes the preview going out of bounds in the inspector.
  • Text resources no longer contain an extraneous line break at the end of file.
  • Transform's FLIP_Y and FLIP_Z constants now work as expected.
  • Fixed importing BMP images.
  • The positional command-line argument is now only considered to be a scene path if it ends with .scn, .tscn or .escn.
    • This makes it possible to parse command-line arguments in a standard fashion (--foo bar now works, not just --foo=bar).
    • This also makes it possible to use file associations or drag-and-drop and have the positional argument parsed by the project.
  • The --audio-driver and --video-driver command-line arguments are now validated; an error message will be printed if an invalid value is passed.
  • The --check-only command-line argument now returns a non-zero exit code if an invalid script is passed using --script.
  • Exporting a project via the command-line now returns a non-zero exit code if an error occurred during exporting.
  • Console output is no longer colored when standard output isn't a TTY.
    • This prevents Godot from writing ANSI escape codes when redirecting standard output or standard error to a file.
  • Android: Gamepads are now correctly detected when the application starts.
  • Android: Fix some keyboards being detected as gamepads and not working as a result.
  • Android: The editor now detects if the device is connected using wireless adb and will debug using Wi-Fi in this case.
  • HTML5: Fixed the pointer position on hiDPI displays.
  • HTML5: OS.get_system_time_msec() now returns the correct value like on other platforms.
  • iOS: On iOS 11 or later, gestures near screen edges are now handled by Godot instead of the OS.
  • Windows: Line endings are now converted to CRLF when setting clipboard content.
  • Windows: Getting the path to the Downloads directory using OS.get_system_dir() now works correctly.
    • This fixes line endings being invisible when pasting into other applications.
  • macOS: OS.get_real_window_size() and OS.set_window_size() are now handled correctly on hiDPI displays.
  • X11: OS.get_window_position() now returns absolute coordinates.
  • X11: Fixed audio playing on the wrong speakers when using PulseAudio on 5.1 setups.
  • X11: OS.set_window_maximized() now gives up after 0.5 seconds.
    • This makes the editor no longer freeze on startup when using fvwm.

3.1 - 2019-03-13

Added

  • OpenGL ES 2.0 renderer.
  • Visual shader editor.
    • New PBR output nodes.
    • Conversion between Vector3 and scalar types is now automatic.
    • Ability to create custom nodes via scripting.
    • Ports can now be previewed.
  • 3D soft body physics.
  • 3D ragdoll system.
  • Constructive solid geometry in 3D.
  • 2D meshes and skeletal deformation.
  • Various improvements to KinematicBody2D.
    • Support for snapping the body to the floor.
    • Support for RayCast shapes in kinematic bodies.
    • Support for synchronizing kinematic movement to physics, avoiding an one-frame delay.
  • WebSockets support using libwebsockets.
  • UPnP support using MiniUPnP.
  • Revamped inspector.
    • Improved visualization and editing of numeric properties.
    • Vector and matrix types can now be edited directly (no pop-ups).
    • Subresources can now be edited directly within the same inspector.
    • Layer names can now be displayed in the inspector.
    • Proper editing of arrays and dictionaries.
    • Ability to reset any property to its default value.
  • Improved animation editor.
    • Simpler, less cluttered layout.
    • New Bezier, Audio and Animation tracks.
    • Several key types can be previewed directly in the track editor.
    • Tracks can now be grouped and filtered on a per-node basis.
    • Copying and pasting tracks between animations is now possible.
    • New Capture mode to blend from a node's current value to the first key in a track.
  • Improved animation tree and new state machine.
    • More visual feedback in the blend tree editor.
    • 1D and 2D blend spaces are now supported.
    • Ability to write custom blending logic.
    • Support for root motion.
  • New FileSystem dock.
    • Unified view of folders and files in the same panel.
    • Files can now be marked as favorites, not only folders.
    • Files now have icons representing their type, or thumbnail previews when relevant.
    • New search field to filter entries in the tree.
  • OpenSimplexNoise and NoiseTexture resources.
  • Optional static typing in GDScript.
    • Does not currently improve performance, but helps write more robust code.
  • Warning system in GDScript.
    • Reports potential code issues such as:
      • unused variables,
      • standalone expressions,
      • discarded return values from functions,
      • unreachable code after a return statement,
    • Warnings can be disabled in the Project Settings or by writing special comments.
  • GDScript keyword class_name to register scripts as classes.
  • Simple expression language independent from GDScript, used by inspector boxes that accept numeric values.
    • Can also be used in projects.
  • C# projects can now be exported for Windows, Linux, and macOS targets.
  • The server platform is back as it was in Godot 2.1.
    • It is now again possible to run a headless Godot instance on Linux.
  • Support for BPTC texture compression on desktop platforms.
  • New properties for SpatialMaterial.
    • Dithering-based distance fade, for fading materials without making them transparent.
    • Disable ambient light on a per-material basis.
  • Option to link Mono statically on Windows.
  • Unified class and reference search in the editor.
  • Revamped TileSet editor with support for undo/redo operations.
  • Various quality-of-life improvements to the Polygon2D and TextureRegion editors.
  • RandomNumberGenerator class that allows for multiple instances at once.
  • Array methods min() and max() to return the smallest and largest value respectively.
  • Dictionary method get(key[, default]) where default is returned if the key does not exist.
  • Node method print_tree_pretty() to print a graphical view of the scene tree.
  • String methods trim_prefix(), trim_suffix(), lstrip(), rstrip().
  • OS methods:
    • get_system_time_msecs(): Return the system time with milliseconds.
    • get_audio_driver_name() and get_audio_driver_count() to query audio driver information.
    • get_video_driver_count() and get_video_driver_name() to query renderer information.
    • center_window(): Center the window on the screen.
    • move_window_to_foreground(): Move the window to the foreground.
  • StreamPeerTCP method set_no_delay() to enable the TCP_NODELAY option.
  • EditorPlugin method remove_control_from_container().
  • Ability to set Godot windows as "always on top".
  • Ability to create windows with per-pixel transparency.
  • New GLSL built-in functions in the shader language:
    • radians()
    • degrees()
    • asinh()
    • acosh()
    • atanh()
    • exp2()
    • log2()
    • roundEven()
  • New command-line options:
    • --build-solutions: Build C# solutions without starting the editor.
    • --print-fps: Display frames per second to standard output.
    • --quit: Quit the engine after the first main loop iteration.
  • Debugger button to copy error messages.
  • Support for .escn scenes has been added for use with the new Blender exporter.
  • It is now possible to scale an OBJ mesh when importing.
  • popup_closed signal for ColorPickerButton.
  • Methods that are deprecated can now print warnings.
  • Input actions can now provide an analog value.
  • Input actions can now be mapped to either a specific device or all devices.
  • DNS resolution for high-level networking.
  • Servers can now kick/disconnect peers in high-level networking.
  • Servers can now access IP and port information of peers in high-level networking.
  • High-level multiplayer API decoupled from SceneTree (see SceneTree.multiplayer_api/SceneTree.custom_multiplayer_api), can now be extended.
  • Input.set_default_cursor_shape() to change the default shape in the viewport.
  • Custom cursors can now be as large as 256×256 (needed to be exactly 32×32 before).
  • Support for radio-looking items with icon in PopupMenus.
  • Drag and drop to rearrange Editor docks.
  • TileSet's TileMode is now exposed to GDScript.
  • OS.get_ticks_usec() is now exposed to GDScript.
  • Normals can now be flipped when generated via SurfaceTool.
  • TextureProgress bars can now be bilinear (extending in both directions).
  • The character used for masking secrets in LineEdit can now be changed.
  • Improved DynamicFont:
    • DynamicFonts can now use high-quality outlines generated by FreeType.
    • DynamicFonts can now have their anti-aliasing disabled.
    • DynamicFonts can now have their hinting tweaked ("Normal", "Light" or "None").
    • Colored glyphs such as emoji are now supported.
  • Universal translation of touch input to mouse input.
  • AudioStreamPlayer, AudioStreamPlayer2D, and AudioStreamPlayer3D now have a pitch scale property.
  • Support for MIDI input.
  • Support for audio capture from microphones.
  • GROW_DIRECTION_BOTH for Controls.
  • Selected tiles can be moved in the tile map editor.
  • The editor can now be configured to display the project window on the previous or next monitor (relative to the editor).
    • If either end is reached, then the project will start on the last or first monitor (respectively).
  • Signal in VideoPlayer to notify when the video finished playing.
  • Image.bumpmap_to_normalmap() to convert bump maps to normal maps.
  • File.get_path() and File.get_path_absolute().
  • Unselected tabs in the editor now have a subtle background for easier identification.
  • The depth fog's end distance is now configurable independently of the far plane distance.
  • The alpha component of the fog color can now be used to control fog density.
  • The 3D editor's information panel now displays the camera's coordinates.
  • New options to hide the origin and viewport in the 2D editor.
  • Improved 3D editor grid:
    • The grid size and number of subdivisions can now be configured.
    • Its primary and secondary colors can now also be changed.
  • Ctrl now toggles snapping in the 3D viewport.
  • Find & replace in files (Ctrl + Shift + F by default).
  • Batch node renaming tool (Ctrl + F2 by default).
  • More editor scaling options to support HiDPI displays.
  • Type icons can now be enabled in the editor again.
  • Buttons in the editor to open common directories in the OS file manager:
    • project data directory,
    • user data directory,
    • user settings directory.
  • Projects can now be sorted by name or modification date in the project manager.
  • Projects can now be imported from ZIP archives in the project manager.
  • Improved autocompletion.
    • Keywords are now present in autocompletion results.
  • editor and standalone feature tags to check whether the project is running from an editor or non-editor binary.
  • android_add_asset_dir("...") method to Android module Gradle build configuration.
  • iOS: Support for exporting to the iPhone X.
  • iOS: Re-added support for in-app purchases.

Changed

  • Built-in vector types now use copy-on-write mode as originally intended, resulting in increased engine performance.
  • The mbedtls library is now used instead of OpenSSL.
  • Renamed several core files.
    • Third-party modules may have to be updated to reflect this.
  • SSL certificates are now bundled in exported projects unless a custom bundle is specified.
  • Improved buffer writing performance on Windows and Linux.
  • Removed many debugging prints in the console.
  • Export templates now display an error dialog if no project was found when starting.
  • DynamicFont oversampling is now enabled by default.
  • Nodes' internal logic now consistently uses internal physics processing.
  • Allow attaching and clearing scripts on multiple nodes at once.
  • Default values are no longer saved in scene and resource files.
  • The selection rectangle of 2D nodes is now hidden when not pertinent (no more rectangle for collision shapes).
  • SSE2 is now enabled in libsquish, resulting in improved S3TC encoding performance.
  • Tangent and binormal coordinates are now more consistent across mesh types (primitive/imported), resulting in more predictable normal map and depth map appearance.
  • Better defaults for 3D scenes.
    • The default procedural sky now has a more neutral blue tone.
    • The default SpatialMaterial now has a roughness value of 1 and metallic value of 0.
    • The fallback material now uses the same values as the default SpatialMaterial.
  • Text editor themes are now sorted alphabetically in the selection dropdown.
  • The 3D manipulator gizmo now has a smoother, more detailed appearance.
  • The 3D viewport menu button now has a background to make it easier to read.
  • QuadMeshes are now built using two triangles (6 vertices) instead of one quad (4 vertices).
    • This was done because quads are deprecated in OpenGL.
  • Controls inside containers are no longer movable or resizable but can still be selected.
  • The is GDScript keyword can now be used to compare a value against built-in types.
  • Exported variables with type hints are now always initialized.
    • For example, export(int) var a will be initialized to 0.
  • Named enums in GDScript no longer create script constants.
    • This means enum Name { VALUE } must now be accessed with Name.VALUE instead of VALUE.
  • Cyclic references to other scripts with preload() are no longer allowed.
    • load() should be used in at least one of the scripts instead.
  • switch, case and do are no longer reserved identifiers in GDScript.
  • Shadowing variables from parent scopes is no longer allowed in GDScript.
  • Function parameters' default values can no longer depend on other parameters in GDScript.
  • Indentation guides are now displayed in a more subtle way in the script editor.
    • Indentation guides are now displayed when indenting using spaces.
  • Multi-line strings are now highlighted as strings rather than as comments in the script editor.
    • This is because GDScript does not officially support multiline comments.
  • Increased the script editor's line spacing (4 pixels → 6 pixels).
  • Increased the caret width in the script editor (1 pixel → 2 pixels).
  • The project manager window is now resized to match the editor scale.
  • The asset library now makes use of threading, making loading more responsive.
  • Line spacing in the script editor, underlines and caret widths are now resized to match the editor scale.
  • Replaced editor icons for checkboxes and radio buttons with simpler designs.
  • Tweaked the editor's success, error, and warning text colors for better readability and consistency.
  • Android: Custom permissions are now stored in an array and their amount is no longer limited to 20.
    • Custom permissions will have to be redefined in projects imported from older versions.
  • Android: Provide error details when an in-app purchase fails.
  • Linux: OS.alert() now uses Zenity or KDialog if available instead of xmessage.
  • Mono: Display stack traces for inner exceptions.
  • Mono: Bundle mscorlib.dll with Godot to improve portability.

Removed

  • Removed the RtAudio backend on Windows in favor of WASAPI, which is the default since 3.0.
  • macOS: Support for 32-bit and fat binaries.

Fixed

  • move_and_slide() now behaves differently at low velocities, which makes it function as originally intended.
  • AnimatedSprite2D's animation_finished signal is now triggered at the end of the animation, instead of as soon as the last frame displays.
  • Audio buses can now be removed in the editor while they are used by AudioStreamPlayer2D/3D nodes.
  • Do not show the project manager unless no project was found at all.
  • The animation editor time offset indicator no longer "walks" when resizing the editor.
  • Allow creation of a built-in GDScript file even if the filename suggested already exists.
  • Show tooltips in the editor when physics object picking is disabled.
  • Button shortcuts can now be triggered by gamepad buttons.
  • Fix a serialization bug that could cause TSCN files to grow very large.
  • Gizmos are now properly hidden on scene load if the object they control is hidden.
  • Camera gizmos in the 3D viewport no longer look twice as wide as they actually are.
  • Copy/pasting from the editor on X11 will now work more reliably.
  • libgcc_s and libstdc++ are now linked statically for better Linux binary portability.
  • The FPS cap set by force_fps in the Project Settings is no longer applied to the editor.
    • Low FPS caps no longer cause the editor to feel sluggish.
  • hiDPI is now detected and used if needed in the project manager.
  • The Visual Studio Code external editor option now recognizes more binary names such as code-oss, making detection more reliable.
  • The -ffast-math flag is no longer used when compiling Godot, resulting in increased floating-point determinism.
  • Fix spelling of apply_torque_impulse() and deprecate the misspelled method.
  • Escape sequences like \n and \t are now recognized in CSV translation files.
  • Remove spurious errors when using a PanoramaSky without textures.
  • The lightmap baker will now use all available cores on Windows.
  • Bullet physics now correctly calculates effective gravity on KinematicBodies.
  • Setting the color v member now correctly sets the s member.
  • RichTextLabels now correctly determine the baseline for all fonts.
  • SpinBoxes now correctly calculate their initial size.
  • OGG streams now correctly signal the end of playback.
  • Android exporter no longer writes unnecessary permissions to the exported APK.
  • Debugger "focus stealing" now works more reliably.
  • Subresources are now always saved when saving a scene.
  • Many fixes related to importers (glTF, Collada, audio), physics (Bullet), Mono/C#, GDNative, Android/iOS.
  • Mono: Many fixes and improvements to C# support (including a [Signal] attribute).
  • WebAssembly: Supply proper CORS headers.

Security

  • Fixed a security issue relating to deserializing Variants.

3.0 - 2018-01-29

Added

  • Physically-based renderer using OpenGL ES 3.0.
    • Uses the Disney PBR model, with clearcoat, sheen and anisotropy parameters available.
    • Uses a forward renderer, supporting multi-sample anti-aliasing (MSAA).
    • Parallax occlusion mapping.
    • Reflection probes.
    • Screen-space reflections.
    • Real-time global illumination using voxel cone tracing (GIProbe).
    • Proximity fade and distance fade (useful for creating soft particles and various effects).
    • Lightmapper for lower-end desktop and mobile platforms, as an alternative to GIProbe.
  • New SpatialMaterial resource, replacing FixedMaterial.
    • Multiple passes can now be specified (with an optional "grow" property), allowing for effects such as cel shading.
  • Brand new 3D post-processing system.
    • Depth of field (near and far).
    • Fog, supporting light transmittance, sun-oriented fog, depth fog and height fog.
    • Tonemapping and Auto-exposure.
    • Screen-space ambient occlusion.
    • Multi-stage glow and bloom, supporting optional bicubic upscaling for better quality.
    • Color grading and various adjustments.
  • Rewritten audio engine from scratch.
    • Supports audio routing with arbitrary number of channels, including Area-based audio redirection (video).
    • More than a dozen of audio effects included.
  • Rewritten 3D physics using Bullet.
  • UDP-based high-level networking API using ENet.
  • IPv6 support for all of the engine's networking APIs.
  • Visual scripting.
  • Rewritten import system.
    • Assets are now referenced with their source files, then imported in a transparent manner by the engine.
    • Imported assets are now cached in a .import directory, making distribution and versioning easier.
    • Support for ETC2 compression.
    • Support for uncompressed Targa (.tga) textures, allowing for faster importing.
  • Rewritten export system.
    • GPU-based texture compression can now be tweaked per-target.
    • Support for exporting resource packs to build DLC / content addons.
  • Improved GDScript.
    • Pattern matching using the match keyword.
    • $ shorthand for get_node().
    • Setters and getters for node properties.
    • Underscores in number literals are now allowed for improved readability (for example,1_000_000).
    • Improved performance (+20% to +40%, based on various benchmarks).
  • Feature tags in the Project Settings, for custom per-platform settings.
  • Full support for the glTF 2.0 3D interchange format.
  • Freelook and fly navigation to the 3D editor.
  • Built-in editor logging (logging standard output to a file), disabled by default.
  • Improved, more intuitive file chooser in the editor.
  • Smoothed out 3D editor zooming, panning and movement.
  • Toggleable rendering information box in the 3D editor viewport.
    • FPS display can also be enabled in the editor viewport.
  • Ability to render the 3D editor viewport at half resolution to achieve better performance.
  • GDNative for binding languages like C++ to Godot as dynamic libraries.
    • Community bindings for D, Nim and Python are available.
  • Editor settings and export templates are now versioned, making it easier to use several Godot versions on the same system.
  • Optional soft shadows for 2D rendering.
  • HDR sky support.
  • Ability to toggle V-Sync while the project is running.
  • Panorama sky support (sphere maps).
  • Support for WebM videos (VP8/VP9 with Vorbis/Opus).
  • Exporting to HTML5 using WebAssembly.
  • C# support using Mono.
    • The Mono module is disabled by default, and needs to be compiled in at build-time.
    • The latest Mono version (5.4) can be used, fully supporting C# 7.0.
  • Support for rasterizing SVG to images on-the-fly, using the nanosvg library.
    • Editor icons are now in SVG format, making them better-looking at non-integer scales.
    • Due to the library used, only simpler SVGs are well-supported, more complex SVGs may not render correctly.
  • Support for oversampling DynamicFonts, keeping them sharp when scaled to high resolutions.
  • Improved StyleBoxFlat.
    • Border widths can now be set per-corner.
    • Support for anti-aliased rounded and beveled corners.
    • Support for soft drop shadows.
  • VeryLoDPI (75%) and MiDPI (150%) scaling modes for the editor.
  • Improved internationalization support for projects.
    • Language changes are now effective without reloading the current scene.
  • Implemented missing features in the HTML5 platform.
    • Cursor style changes.
    • Cursor capturing and hiding.
  • Improved styling and presentation of HTML5 exports.
    • A spinner is now displayed during loading.
  • Rewritten the 2D and 3D particle systems.
    • Particles are now GPU-based, allowing their use in much higher quantities than before.
    • Meshes can now be used as particles.
    • Particles can now be emitted from a mesh's shape.
    • Properties can now be modified over time using an editable curve.
    • Custom particle shaders can now be used.
  • New editor theme, with customizable base color, highlight color and contrast.
    • A light editor theme option is now available, with icons suited to light backgrounds.
    • Alternative dark gray and Arc colors are available out of the box.
  • New adaptive text editor theme, adjusting automatically based on the editor colors.
  • Support for macOS trackpad gestures in the editor.
  • Exporting to macOS now creates a .dmg disk image if exporting from an editor running on macOS.
    • Signing the macOS export now is possible if running macOS (requires a valid code signing certificate).
  • Exporting to Windows now changes the exported project's icon using rcedit (requires WINE if exporting from Linux or macOS).
  • Improved build system.
    • Support for compiling using Visual Studio 2017.
    • SCons 3.0 and Python 3 are now supported (SCons 2.5 and Python 2.7 still work).
    • Link-time optimization can now be enabled by passing use_lto=yes to the SCons command line.
      • Produces faster and sometimes smaller binaries.
      • Currently only supported with GCC and MSVC.
    • Added a progress percentage when compiling Godot.
    • .zip archives are automatically created when compiling HTML5 export templates.
  • Easier and more powerful way to create editor plugins with EditorPlugin and related APIs.

Changed

  • Increased the default low-processor-usage mode FPS limit (60 → 125).
    • This makes the editor smoother and more responsive.
  • Increased the default 3D editor camera's field of view (55 → 70).
  • Increased the default 3D Camera node's field of view (65 → 70).
  • Changed the default editor font (Droid Sans → Noto Sans).
  • Changed the default script editor font (Source Code Pro → Hack)
  • Renamed engine.cfg to project.godot.
    • This allows users to open a project by double-clicking the file if Godot is associated to .godot files.
  • Some methods from the OS singleton were moved to the new Engine singleton.
  • Switched from GLEW to GLAD for OpenGL wrapping.
  • Changed the SCons build flag for simple logs (colored=yesverbose=no).
  • The HTML5 platform now uses WebGL 2.0 (instead of 1.0).
  • Redesigned the Godot logo to be more legible at small sizes.

Deprecated

  • opacity and self_opacity are replaced by modulate and self_modulate in all 2D nodes, allowing for full color changes in addition to opacity changes.

Removed

  • Skybox support.
    • Replaced with panorama skies, which are easier to import.
  • Opus audio codec support.
    • This is due to the way the new audio engine is designed.
  • HTML5 export using asm.js.
    • Only WebAssembly is supported now, since all browsers supporting WebGL 2.0 also support WebAssembly.