Godot v3.1 Release Notes

Release Date: 2019-03-13 // over 3 years ago
  • ➕ 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.
    • 0️⃣ 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.
    • 0️⃣ 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.
    • 0️⃣ Find & replace in files (Ctrl + Shift + F by default).
    • 0️⃣ 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.
    • 0️⃣ 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.
    • 0️⃣ 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.
    • 0️⃣ 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.