Changelog

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

The format is based on Keep a Changelog.

[Unreleased] (4.0-dev at commit ad8081216c73b8a0ace555eeb96c1d4fbcb3e50e)

Added

Core

  • New Vector2i, Vector3i and Rect2i types.
    • These are integer variants of Vector2, Vector3 and Rect2.
  • Rect2 can now be interpolated using the Tween node.
  • New PackedArrays to replace PoolArrays.
    • 64-bit integer and float arrays are now available in addition to the existing 32-bit ones.
  • ConfigFile.parse(data: String) method to load a string as if it was a ConfigFile on disk.

Editor

  • Support for multiple windows.
    • Docks can be moved out of the main window into separate windows.
    • Single-window mode can be enabled in the Editor Settings to revert to the old behavior.
  • New dynamic infinite 3D grid, replacing the fixed 3D grid.
  • Movement and scaling handles in the 2D editor (similar to the 3D editor).
  • New Replace in Files dialog in the script editor to complement Find in Files.
  • New settings to change the freelook navigation scheme:
    • Default.
    • Partially axis-locked (similar to id Tech and Source's noclip modes). The Up and Down keys won't take the current view pitch into account.
    • Fully axis-locked (similar to Minecraft). The Forward, Backward, Up and Down keys won't take the current view pitch into account.
  • macOS: More built-in mouse cursors are now exposed (such as diagonal resize cursors).
  • macOS: Support for building Godot with Clang sanitizers.
  • HTML5: Support for profiling projects exported to HTML5.

GDScript

  • GDScript was rewritten from scratch with a cleaner approach.
  • See individual progress reports for more information: #1, #2, #3.

GUI

  • Support for multiple windows on desktop platforms. Projects can spawn additional windows, each with their own viewport.
  • RichTextLabel property fit_content_height to make the label's height fit its content automatically (not always reliable).

Import

  • Support for importing lights from glTF scenes.

Input

  • Support for physical (keyboard layout-independent) key codes.
    • This can be used to provide W/A/S/D controls that work on any keyboard layout.
  • DisplayServer.keyboard_get_current_layout() and DisplayServer.keyboard_get_layout_*() methods to get information about keyboard layouts.

Mono/C#

Networking

Rendering

  • New Vulkan renderer.
  • Specular mapping in 2D.
  • Support for light projectors/"cookies" in OmniLight3D and SpotLight3D.
    • Only supported for lights with shadows enabled.
  • 3D lights now have a Size property which can be set to simulate area lights.
    • This property also affects how fast shadow penumbras will grow over distance.
    • A shadow blur property is also available to set a constant blurring factor on a per-light basis.
  • Shadow mapping with improved filtering and PCSS-like penumbra simulation.
  • New, fully real-time GIProbe.
    • Support for anisotropy to reduce leaks (at the cost of performance, disabled by default).
    • Dynamic objects can receive GI and contribute to it.
  • Volumetric fog with optional GI contribution.
  • Exponential fog to replace the old distance-based fog.
  • New signed distance field-based global illumination for open world lighting.
    • Dynamic objects can receive GI, but not contribute to it.
  • New GPU-based lightmapper with built-in denoising.
    • Improved support for dynamic objects with better performance and quality.
    • Generated UV2s are now cached across reimports.
  • Physical sky material and custom sky shaders, both supporting real-time updates.
  • Global and per-instance shader uniforms.
    • This can be used to better reuse shaders, leading to improved performance.
  • See individual progress reports for more information: #1, #2, #3, #4, #5, #6, #7.

Miscellaneous

  • The engine is now unit-tested using doctest.
  • Switched from Travis CI and AppVeyor to GitHub Actions.
  • A Fish shell completion file is now available for the Godot editor's command line interface.

Changed

Core

  • Increased the maximum number of OpenSimplexNoise octaves (6 → 9).
  • Running a project from a debug build will now append (DEBUG) to the window title.
    • This is to ensure the implications of running from a debug build (such as lower performance) are well-understood.
    • The window title can be set manually to remove this suffix.

Editor

  • Improved the Video RAM debugger usability.
    • The Video RAM tab is now refreshed automatically when switching to it.
  • Hovering layer checkboxes in the inspector now results in visual feedback.
    • Clicking between two checkboxes will now enable the checkbox that was last highlighted instead of doing nothing.
  • Leaving freelook mode will now restore the mouse to the position it was before entering freelook mode.
    • The crosshair was removed as a result of this change.
  • CSV profiler measures can now be saved anywhere on the filesystem, not just in the project folder.
  • Improved the 2D zooming algorithm to always visit powers of two (50%, 100%, 200%, …) and avoid floating-point precision issues.
  • Times are now displayed as milliseconds in the profiler and performance monitors (instead of seconds).
  • Improved the batch rename dialog usability and design consistency.
    • Clarified error messages when there are regular expression errors.
  • Optimized editor icon generation to speed up editor startup.
  • The number of replaced results now appears in place of the matches counter when replacing text in the script editor.
  • Pressing Enter (or Shift + Enter) in the script editor replacement dialog now performs a forwards (or backwards) replacement operation.
  • Pressing Ctrl + F now focuses the search field in the AssetLib tab.
  • The Sync Scene Changes and Sync Script Changes settings' values now persist on a per-project basis instead of being always enabled by default.
  • Various tooltips have been added or modified to clarify the editor operation.
  • Various visual and formatting changes to the editor help to improve readability and be closer to the online class reference.
  • Renamed "Identifier" to "Bundle Identifier" in the macOS and iOS export presets for clarity.

GUI

  • Improve drive letter handling in EditorFileDialog and FileDialog.
  • Container nodes (except PanelContainer) now use the Pass mouse mode by default.
  • Pressing the left/right arrows while having selected text will now move the cursor to the beginning/end of the selection in LineEdit (while unselecting the text as usual).
  • macOS: The Ctrl + A and Ctrl + E navigation shortcuts now work in LineEdit.

Input

  • Renamed InputEventKey's scancode to keycode.

Networking

  • Optimized bandwidth usage in the high-level multiplayer API.

Physics

  • Renamed PlaneShape to WorldMarginShape.

Rendering

  • Some Environment settings such as depth of field have been moved to a CameraEffects resource which is assigned to individual Camera nodes.
  • Quality settings have been moved from individual nodes and resources to the Project Settings for better centralization.
  • Quality settings now have performance hints in their values' names, such as "Fast" or "Slow".

Miscellaneous

  • Renamed the x11 platform to linuxbsd to prepare for Wayland support.
  • The engine is now written in C++17.
  • Python 3 and SCons 3.1 are now required to build Godot from source.

Removed

Core

  • Removed the deprecated Color.gray() method.
    • Use Color.v() for a better grayscale approximation instead.
  • Removed built-in HQ2X implementation (used for crude hiDPI support in the default project theme).
    • This helps with binary size as HQ2X is made of particularly large functions.

Editor

  • Camera3D nodes no longer have a gizmo billboard icon as it could confuse people due to their constant orientation.

Input

  • DisplayServer.get_latin_keyboard_variant() method (replaced by the more flexible DisplayServer.keyboard_get_current_layout()).

Networking

  • Removed the deprecated allow_object_decoding property from PacketPeer.
  • Removed the deprecated sync and slave high-level multiplayer keywords.

Physics

  • Removed the deprecated PhysicsBody friction and bounce properties (replaced by PhysicsMaterial).

Fixed

Core

  • Windows: Godot can now kill its own PID using OS.kill().

Editor

  • The Android exporter no longer reports progress on each file, greatly speeding up the exporting process.
  • Searching with the Whole Words option enabled in the script editor is no longer exceedingly slow.

GUI

  • Fixed OptionButton minimum size.
  • TabContainer is no longer too large when tabs are hidden.