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.
- 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#
Navigation
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.
- 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.
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.