<track id="5sipw"><track id="5sipw"><span id="5sipw"></span></track></track><delect id="5sipw"></delect>

<meter id="5sipw"></meter>

  • <meter id="5sipw"><ins id="5sipw"><strike id="5sipw"></strike></ins></meter><nobr id="5sipw"><input id="5sipw"><ruby id="5sipw"></ruby></input></nobr>

      1. <cite id="5sipw"></cite>

          Unreal Engine 4.22 Release Notes

          Release Notes for Unreal Engine 4.22

          On this page

          image alt text

          What's New

          Unreal Engine 4.22 continues to push the boundaries of photorealism in real-time environments whether you are making immersive and engaging games, broadcasting live television, visualizing groundbreaking products, or creating the next blockbuster film. We don't believe significant advances in technology should result in increases in development time for you to take advantage of them, so we have once again set our sights on making workflows for users from all disciplines even faster and more accessible.

          Unreal Engine delivers unbridled power to build realistic worlds with the most accurate real-time lighting and shadowing effects - including dynamic global illumination, pixel perfect reflections and physically accurate refraction - thanks to real-time ray tracing on Nvidia RTX graphics cards. Soft area shadows and ambient occlusion provide the finishing touches to ground your scenes firmly in reality.

          Our vast suite of virtual production features enables you to speed up your workflow on set with the ability to capture and record complex live performances and composite them in real-time. Entire teams can work in concert to orchestrate and direct scenes live using the new multi-user editing feature.

          Every second spent waiting to see your latest creation come to life has a cost - a cost to you, a cost to your users, a cost to your vision - so we strive to make Unreal Engine easier and faster to go from iteration to iteration with each release so you can spend more time tweaking and polishing the experience for consumers. Live Coding brings Live++ support to Unreal Engine so you can go from idea to reality in seconds while you are running your project. Build times have been optimized across the board making iteration times for incremental builds up to 3x faster and freeing up valuable resources in your pipeline.

          This release includes 174 improvements submitted by the incredible community of Unreal Engine developers on GitHub! Thanks to each of these contributors to Unreal Engine 4.22:

          0xmono, Adam Moss (adamnv), Ahsan Muzaheed (muzaheed57), Alessio Sgarro (cmp-), Alexander Stevens (MilkyEngineer), AlexTimeFire, AlSafty, Andrzej K. Haczewski (ahaczewski), Anton Rassadin (Antonrr), Ben Peck (bpeck), BinaryRK, Branislav Grujic (grujicbr), Cameron Angus (kamrann), Cengiz Terzibas (yaakuro), Chris Conway (Koderz), Chris Gallegos (Chrispykins), Clinton Freeman (freemancw), Cristiano Carvalheiro (ccarvalheiro), Dan Ogles (dogles), Daniele Benegiamo (kafumanto), David Aylaian (davidaylaian), David Nadaski (GlassBeaver), David Sauve (notanumber), Deep Silver Dambuster Studios (DSDambuster), Dmitriy Donskoy (sentik), doodoori2, Dorgon Chang (dorgonman), Doug Moscrop (dougmoscrop), Doug Richardson (drichardson), Dzuelu, Erik Dubbelboer (erikdubbelboer), H1X4Dev, Hargreawe, hkozachkov2, Ilyin Aleksey (IlinAleksey), improbable-valentyn, Ivan Popelyshev (ivanpopelyshev), IvanKuzavkov, James Cahill (Prouser123), Jan Kaniewski (getnamo), Jin Hyung Ahn (zenoengine), jkinz3, Joe Best-Rotheray (cajoebestrotheray), joemmett, Josef Gluyas (Josef-CL), Kalle H?m?l?inen (kallehamalainen), Kartik Saranathan (Kartiku), korkuveren, Kory Postma (korypostma), Leon Rosengarten (lion03), locus84, lotodore, Marat Radchenko (slonopotamus), Marcel (Zaratusa), Mark Whitty (Mosel3y), mastercoms, Mathias Hübscher (user37337), Michael K?sel (TheCodez), Michael Samiec (m-samiec), Mike Bell (MichaelBell), Mike Slegeir (tehpola), Mimus1, Mitsuhiro Koga (shiena), momboco, Morva Kristóf (KristofMorva), Muhammad A. Moniem (mamoniem), Nick (eezstreet), Nick Edwards (nedwardsnae), Nick Pruehs (npruehs), Ondrej Hrusovsky (skylonxe), Paul Hampson (TBBle), Philippe Chaintreuil (Philippe23), Phillip Baxter (PhilBax), projectgheist, RDIL, Riley Labrecque (rlabrecque), Roman K. (CrispMind), Robin Zoň (ZonRobin), roidanton, ruzickajason, ryugibo, Sam Hocevar (samhocevar), Satheesh (ryanjon2040), Scott Fries (ScottFries), Sébastien Rombauts (SRombauts), ShalokShalom, spoiltos, stanley1108, Stephen A. Imhoff (Clockwork-Muse), stkrwork, sturcotte06, Takashi Suzuki (wankotank), tgroll, Thang To (thangt), Tim Lincoln (Ratherbflyin), TommyTesla, Vladimir Ziablitskii (rainlabs), whoisfpc, YanaPIIDXer, Yannick Comte (demonixis), yhase7, Zeblote

          Major Features

          New: Real-Time Ray Tracing and Path Tracing (Beta)

          With this release, we're excited to announce Beta support for Ray Tracing and Path Tracing using Windows 10 RS5 update that takes full advantage of the DirectX 12 and DirectX Raytracing (DXR) with NVIDIA RTX series cards.

          image alt text

          Real-Time Ray Tracer

          The Ray Tracing features are composed of a series of ray tracing shaders and ray tracing effects. With each of these, we're able to achieve natural realistic looking lighting effects in real-time which are comparable to modern offline renderers for shadowing, ambient occlusion, reflections, and more.

          image alt text

          We introduced a number of ray tracing features and will continue to expand the feature set in upcoming versions of the Unreal Engine. Some of the features in this release include:

          • Soft area shadowing for Directional, Point, Spot, and Rect light types.

          • Accurate reflections for objects in and outside of the camera frustum.

          • Soft ambient occlusion to ground objects in the scene.

          • Physically correct refraction and reflection results for translucent surfaces.

          • Indirect lighting from dynamic global illumination from light sources.

          • And more!

          For additional details, see Real Time Ray Tracing for a full breakdown of currently supported features for this release.

          Path Tracer

          In addition to the Ray Tracer, we've included an unbiased Path Tracer with a full global illumination path for indirect lighting that creates ground truth reference renders right inside of the engine. This can improve workflow content in your scene in Unreal without needing to export to a third-party offline path tracer for comparison.

          For additional details, see Path Tracer .

          New: High-Level Rendering Refactor

          In this release, we have completely rewritten mesh drawing in Unreal Engine to have better drawing performance and support for Real-Time Ray Tracing. In the future, we'll continue to move additional rendering work to the GPU.

          Mesh Drawing Pipeline Refactor:

          With the new mesh drawing pipeline, drawing information for static scene elements are cached more aggressively than before, and automatic instancing merges draw calls where possible. This enables new implementations of mesh passes to be four to six times fewer lines of code!

          This refactor mostly affects mesh drawing inside the Renderer with custom scene proxies and the interface to the Renderer being marginally affected. Any Custom Drawing Policies will need to be rewritten as FMeshPassProcessors in the new architecture, meaning that backwards compatibility for Drawing Policies was not possible with a change as big as this one.

          New: C++ Iteration Time Improvements

          Live Coding (Experimental)

          We've licensed Molecular Matters' Live++ for all developers to use on their Unreal Engine projects, and we've integrated it as the new Live Coding feature. With Live coding, you can make C++ code changes in your development environment and compile and patch it into a running editor or standalone game within seconds. Unlike the legacy hot reload mechanism, Live Coding will patch individual functions without requiring any special consideration for object re-instancing, making it much more reliable and scalable for large projects.

          To use it, check the Live Coding (Experimental) option from the drop down next to the compile button in the editor, and hit Ctrl+Alt+F11 to compile and apply your changes. To enable from a cooked game, type "LiveCoding" into a console window.


          • Modifying class layouts while the engine is running is not supported. We intend to address this in a future release.

          • Only Windows is currently supported.

          Build Times

          We optimized UnrealBuildTool and UnrealHeaderTool to make C++ iteration times up to 3x faster!

          Full build (UE4Editor Win64 Development):

          Unreal Engine 4.21

          Unreal Engine 4.22


          Total Build Time:



          30% faster

          Compiling UnrealHeaderTool:



          Generating headers



          60% faster

          Compiling UE4Editor



          25% faster

          UnrealBuildTool overhead



          600% faster

          Incremental build (UE4Editor Win64 Development):

          Unreal Engine 4.21

          Unreal Engine 4.22


          Total Build Time:



          340% faster

          Compiling UE4Editor



          UnrealBuildTool overhead



          590% faster

          No code changes (UE4Editor Win64 Development)

          Unreal Engine 4.21

          Unreal Engine 4.22


          UnrealBuildTool overhead



          520% faster

          Additionally, we significantly improved the accuracy of dependency checking for incremental builds, including detecting files being added and removed from a project and using compiler-driven include dependency checking.

          New: Virtual Production Pipeline Improvements

          Unreal Engine continues to lead the way for real-time virtual production with significant improvements to all aspects of the pipeline.

          Real-Time Compositing with Composure(Beta)

          The Composure compositing system has been significantly improved to make it easier than ever to composite images, video feeds, and CG elements directly within the Unreal Engine.

          With built-in compositing, you can easily visualize the results of combining green-screened scenes with your Unreal Engine Level content in real time. This can be helpful for pre-visualization, giving directors on set a good sense of what the final scene will look like after the captured film has been enhanced by digital content from Unreal Engine and the green backgrounds replaced. These in-engine results can also be a valuable reference for compositors working offline in other third-party software.

          Improvements include:

          • Use Materials to drive layer blending.

          • Leverage the post-processing pipeline for effects like "Light Wrap".

          • Use the Media Framework and Professional Video I/O systems to capture video input and render output.

          • Use built-in render passes for chroma-keying, despill, tonemapping, and more. Or, or build your own custom passes.

          The Composure system also offers support for a more traditional offline compositing workflow enabling you to export renders of selected Unreal Engine objects in order to composite them with other sources in external applications.

          OpenColorIO (OCIO) Color Profiles (Experimental)

          You can now use OpenColorIO (OCIO) color profiles to transform the color space of any Texture or Composure Element directly within the Unreal Engine. This can help you keep the colors of your video and computer generated elements consistent from initial capture, through compositing, to final output.

          Hardware-Accelerated Video Decoding (Experimental)

          On Windows platforms, you can now use your GPU to speed up the processing of H.264 video streams. This reduces the strain on the CPU when playing back video streams, which may result in smoother video and may allow you to use higher resolution movie files and more simultaneous input feeds.

          To use hardware decoding, enable the Hardware Accelerated Video Decoding (Experimental) setting in the Plugins - WMF Media section of the Project Settings window.

          New Media I/O Formats

          We added even more Professional Video I/O input formats and devices:

          • 4K UHD inputs for both AJA and Blackmagic.

            • Supports both 8bit and 10bit inputs.

            • Supports single-link, dual-link, and quad-link.

          • Supports AJA Kona 5 devices.

            • HDMI 2.0 input.

            • UHD at high frame rates (up to 60fps).

          nDisplay Improvements

          This release adds several new features that make the nDisplay multi-display rendering system more flexible, handling new kinds of hardware configurations and inputs.

          • Each cluster node's application window can now contain multiple viewports at defined screen-space coordinates. This allows a single Unreal Engine instance, running on a single computer, to handle multiple offset displays.

          • In previous releases, the only way to provide input to the nodes in an nDisplay system was through VRPN. This release adds a new communication mechanism called cluster events, which you can use to trigger synchronized responses on all connected computers.

          • More of the possibilities of the input subsystem have been exposed in the nDisplay configuration file, allowing you to change attributes and mappings without repackaging your Project.

          • If you're already using nDisplay, your configuration file may need some adjustments to match the new schema. However, the nDisplay Launcher can now upgrade your configuration file automatically.

          For details, see the nDisplay documentation .

          New: Hololens Remote Streaming Support

          Unreal Engine 4 now supports Holographic Remoting through the Windows Mixed Reality plugin! This allows Unreal applications to run on a Windows desktop PC and stream the rendered result wirelessly to a Hololens over a Wi-Fi connection in real time.

          image alt text

          New: Audio System Improvements

          TimeSynth (Beta)

          TimeSynth is a new audio component focused on providing sound designers with sample accurate starting, stopping, and concatenation of audio clips. TimeSynth enables precise and synchronous event audio event queuing, which is essential for interactive music applications.

          image alt text

          Layered Sound Concurrency

          The Sound Concurrency System now observes multiple settings or groups. Now, if a sound object (AudioComponent, SoundBase, or SynthComponent) does not satisfy all of the requirements specified in their ConcurrencySet property, the new sound will not play. In addition, if the new sound satisfies all concurrency set resolution rules and begins playback, one or more sounds may be stopped.

          Spectral Analyzer for Submixes (new Engine)

          Designers can now analyze the spectral energy of a Submix during gameplay to drive modulations in gameplay, material, or any number of possible destinations based on the frequency content of the currently playing audio.

          image alt text

          Baked Spectral Analysis Curves and Envelopes on Sound Waves

          Sound waves can now be pre-analyzed for envelope and spectral energy to drive Blueprints during playback. This allows sound designers to create compelling audio-driven systems, while offloading the spectral analysis work to improve runtime performance. In addition, analysis data from a proxy sound wave can be substituted for a sound wave's analysis data, allowing designers to spoof isolated sound events when trying to drive gameplay.

          Improvements to Sound Asset Importingc

          We have made significant improvements to sound asset importing. In addition to our current support for multi-channel WAV files, the Unreal Audio Engine now supports importing a wide variety of sound file formats, including AIFF, FLAC, and Ogg Vorbis.

          Improvements to MIDI Device Plugin

          The MIDI Device Plugin now allows users to send MIDI messages to external MIDI devices in addition to processing MIDI Device input. In addition, improvements to the Plugin's Blueprint API simplify parsing MIDI messages. These changes allow sound designers to more effectively integrate MIDI I/O into their project.

          New: Sequencer Improvements

          The industry-leading Sequencer linear animation toolset once again received significant updates with new tools and enhancements that benefit virtual production projects along with a host of quality of life improvements.

          Sequencer Take Recorder

          Take Recorder enables fast iteration of recording performances and quickly reviewing previous takes for virtual production workflows! Building upon the foundations of Sequence Recorder, we improved what you can record and how the data is handled as well as made the system extendable to fit the needs of different use cases. You can easily record animations from motion capture linked to characters in the scene as well as actual Live Link data for future playback. By recording Actors into subsequences and organizing them by Take metadata, productions of all sizes and any number of takes can easily be accommodated.

          For more information, see the Take Recorder documentation

          Composure Sequencer Track

          The new Composure track enables you to easily export a Sequence as layers defined in Composure. Multiple tracks can be added to export more than one layer at a time. You can drag layers straight from Composure into Sequencer to generate tracks for those layers.

          Layered Animation Workflows in Sequencer

          You can now create layered animations using multiple weighted sections in a single track. Layered animations are supported in Transform tracks as well as several other property tracks.

          Live Link Sequencer Track

          You can now record incoming live link data onto sequencer tracks and play them back. Live link data that comes with timecode and multiple samples per engine tick can be saved at a resolution higher than the sequencer playback rate.

          Object Binding Sequencer Track

          You can now change the Object - Static Mesh, Skeletal Mesh, Material, etc - assigned to a property on an Actor in Sequencer. Once the Actor is added to Sequencer, these Object reference properties are available like other properties in the Track menu for that Actor.

          Network Replication in Sequencer

          Level sequence actors that are set to replicate using the Replicate Playback property on Level Sequence Actors now synchronize their playback time between server and client.

          Enhanced Python Support for Sequencer

          Python support for Sequencer has been improved for movie scene functionality:

          • Movie scene section and key data manipulation

          • Movie scene capture

          Misc Sequencer Improvements

          • You can now assign multiple objects to a single track.

          • You can now copy/paste sections from multiple tracks at once.

          • You can now mark frames with a label and quickly jump to that mark to play the sequence. A color can be set for each mark to make them easily identifiable.

          • Expose Track/Section to Blueprints - Todo, ie. Runtime toggling of subsections/takes

          New: Animation Budgeting System (Beta)

          The new Anim Budgeter tool enables you to set a fixed budget per platform (ms of work to perform on the gamethread), and it works out if it can do it all, or if it needs to cut down on the work done. IT works by measuring the total cost of animation updates, and calculating the cost of a single work unit. If work needs to be cut down to meet the budget, it does it based on significance and targets several areas: stop ticking and use Master Pose Component, update a lower rate, interpolate (or not) between updates, etc. The goal is to dynamically adjust load to fit within fixed (gamethread) budget.

          New: Animation Sharing Plugin

          Added a new Animation Sharing plugin that reduces the overall amount of animation work required for a crowd of actors. It is based upon the Master-Pose Component system, while adding blending and additive Animation States. The Animation states are buckets for which animation instances are evaluated. The resulting poses are then transferred to all child components part of the bucket. See the diagram below for a breakdown of the system.

          image alt text

          The video below shows Skeletal Mesh components representing the individual states and additionally instances used for blending between states. It also shows the crowd, which are all individual actors for which an Animation State is determined. According to the Animation State the Skeletal Mesh Components are connected to the Master Components for driving their Animation. In the video only the Poses for the Animation States are evaluated, the Crowd Actors only copy the resulting bone transforms.

          New: Support for long filenames (Experimental)

          We added support for long file paths for users with Windows 10 Anniversary Update! Historically, paths in windows have been limited to 260 characters, which can cause problems for projects with complex naming conventions and deep hierarchies of assets. The Windows 10 Anniversary Update adds support for much longer filenames, on the condition that the user and each application opt-in to it. To enable long file paths in Windows 10:

          Note: Support for long paths is not universal, and third party tools - even parts of the operating system, like Windows Explorer - may not support them correctly.

          New: Blueprint Indexing Optimizations

          Changes to how we index Blueprint search data have significantly improved Editor and Play-In-Editor startup times. We now defer search data updates until a Find-in-Blueprint tab is opened, perform updates asynchronously, and separate Blueprint re-indexing from the Asset loading process.

          New: Improved Steamworks support

          Using UE4 with Steam has never been easier! We've made several improvements to usability and quality of life for developers of multiplayer games on Steam.

          • Dedicated Servers on Steam can now receive custom names (up to 63 characters) with the new "-SteamServerName" launch argument.

          • Projects can now override the Steam network layer by deactivating the "bUseSteamNetworking" configuration value and setting their NetDriver configurations to the preferred underlying network layer.

          • We have greatly improved the usability of Steam NetDrivers with UE4 Beacons in addition to standard game networking.

          • You can now set certain required Steam values, such as dedicated server names, or the application ID, in your project's Target.cs file. Making changes to these values will no longer require recompiling the engine.

          New: Preview Scene Settings Improvements

          We added functionality to Preview Scene Settings that enables you to hide Environment Cubemap (Show Environment) without disabling lighting. See the Use Sky Lighting property in the Preview Scene Settings panel.

          New: Skeletal Mesh LOD Reduction

          Use the Skeletal Mesh Reduction Tool to generate versions of a Skeletal Mesh with reduced complexity for use as levels of detail (LODs) all within Unreal Editor! You no longer need to rely on external Digital Content Creation (DCC) programs or third party tools that can be very time consuming and error prone. Create accurate, high-quality levels of detail and see the results immediately in the viewport.

          For additional information, see Skeletal Mesh Reduction Tool .

          New: Per Platform Properties Improvements

          Per Platform Properties have been extended to allow for setting values based on Target Platform in addition to the Platform Groups.

          image alt text

          New: Gauntlet Automation Framework Improvements

          The Gauntlet automation framework received several improvements focusing on usability, documentation, and examples to learn from.

          Expanded documentation & samples

          • Documentation about Gauntlet architecture and getting started

          • Additional ActionRPG and Profile Guided Optimization examples

          • Example of tracking editor load and PIE times

          iOS Support

          Gauntlet now supports installing and running IPA files on iOS. (requires Mac host). This takes our device support to PC, Mac, PS4, XB1, Switch, Android, and iOS.

          Profile Guided Optimization

          An example script for automation of Profile Guided Optimization (PGO) file generation on PS4, XboxOne, and Switch for your project.

          Report Creation

          Added HTML and Markdown builders for creating custom reports as part of automation scripts.

          New: Visual Studio 2019 Support

          image alt text

          Support for Visual Studio 2019 has been added. To use Visual Studio 2019 by default, select "Visual Studio 2019" as the IDE from the editor's source control settings.

          We've also added support for switching to newer C++ standard versions. To change the version of the C++ standard that your project supports, set the CppStandard property to one of the following values from your .target.cs file.









          At the same time, we've deprecated support for Visual Studio 2015. If you want to force your project to compile with the Visual Studio 2015 compiler, you can set WindowsPlatform.Compiler = WindowsCompiler.VisualStudio2015 from your project's .target.cs file. Note that the version of the engine downloaded from the Epic Games Launcher does not support Visual Studio 2015, and we no longer test it internally.

          New: Subsystems

          Subsystems are automatically instanced classes with managed lifetimes that provide easy to use extension points without the complexity of modifying or overriding engine classes, while simultaneously getting Blueprint and Python exposure out of the box.

          Currently Supported Subsystem Lifetimes


          class UMyEngineSubsystem : public UEngineSubsystem { ... };

          When the Engine Subsystem's module loads, the subsystem will Initialize() after the module's Startup() function has returned. The subsystem will Deinitialize() after the module's Shutdown() function has returned.

          These subsystems are accessed through GEngine:

          UMyEngineSubsystem MySubsystem = GEngine->GetEngineSubsystem<UMyEngineSubsystem>();


          class UMyEditorSubsystem : public UEditorSubsystem { ... };

          When the Editor Subsystem's module loads, the subsystem will Initialize() after the module's Startup() function has returned. The subsystem will Deinitialize() after the module's Shutdown() function has returned.

          These subsystems are accessed through GEditor:

          UMyEditorSubsystem MySubsystem = GEditor->GetEditorSubsystem<UMyEditorSubsystem>();

          Note: These Editor Only subsystems are not accessible to regular Blueprints, they are only accessible to Editor Utility Widgets and Blutility Classes.


          class UMyGameSubsystem : public UGameInstanceSubsystem { ... };

          This can be accessed through UGameInstance:

          UGameInstance* GameInstance = ...;
          UMyGameSubsystem* MySubsystem = GameInstance->GetSubsystem<UMyGameSubsystem>();


          class UMyPlayerSubsystem : public ULocalPlayerSubsystem { ... };

          This can be accessed through ULocalPlayer:

          ULocalPlayer* LocalPlayer = ...;
          UMyPlayerSubsystem * MySubsystem = LocalPlayer->GetSubsystem<UMyPlayerSubsystem>();

          Accessing Subsystems from Blueprints

          Subsystems are automatically exposed to Blueprints, with smart nodes that understand context and don't require casting.

          You're in control of what API is available to Blueprints with the standard UFUNCTION() markup and rules.

          image alt text

          image alt text

          Subsystems from Python

          If you are using Python to script the editor, you can use built-in accessors to get at subsystems:

          my_engine_subsystem = unreal.get_engine_subsystem(unreal.MyEngineSubsystem)
          my_editor_subsystem = unreal.get_editor_subsystem(unreal.MyEditorSubsystem)

          Note: Python is currently an experimental feature.

          New: Editor Utility Widgets

          Editor Utility Widgets enable you to extend the functionality of Unreal Editor with new user interfaces created entirely using the UMG UI Editor and Blueprint Visual Scripting logic! These are Editor-only UI panels that can be selected from the Windows menu like other Unreal Editor panels.

          To create an Editor Utility Widget, right-click in the Content Browser and select Editor Utilities > Editor Widget.

          To edit the Blueprint, double-click on the Editor Widget Asset. Once you've edited the Blueprint for your Editor Widget Asset, right-click the Editor Widget and select Run Editor Utility Widget to open the UI in a tab. The tab is only dockable with Level Editor tabs. It appears in the Level Editor's Windows dropdown, under the Editor Utility Widgets category. This is an experimental feature.

          New: Material Analyzer

          The Material Analyzer enables you to get a holistic view of parameter usage in Materials and Material Instances so you can quickly find opportunities to consolidate and optimize your Material Instances to minimize switching render state and save memory. The Material Analyzer can be found under Window > Developer Tools.

          image alt text

          Materials are listed in a tree with a list of suggestions which show groups of material instances with the same set of static overrides so you can make optimizations. You can also place all the related instances into a local collection, so you can easily find and update them.

          New: Select Child and Descendant Actors

          You can now extend your selection to all the immediate children or all the descendants of your selected Actor using the context menu in the World Outliner and the Level Viewport, making it easier to work with large, complex scene hierarchies.

          New: Scaled Camera Zoom and Pan

          When you have one or more objects selected in the Level Viewport, the sensitivity of camera zoom and pan operations now scales automatically with the distance between the objects and the camera. This makes your camera movements feel more natural, especially when you're working with objects at extreme sizes, such as tiny mechanical parts or large landscapes.

          You can return to the previous behavior by disabling the new Use distance-scaled camera speed setting in the Level Editor > Viewports section of the Editor Preferences window.

          New: Orbit Around Selection

          You can now make the camera orbit around the pivot of the selected objects - as opposed to orbiting around the center of the screen - when one or more objects are selected in the Level Viewport.

          To activate this mode, enable the new Orbit camera around selection setting in the Level Editor > Viewports section of the Editor Preferences window.

          New: Toggle Multiple Layer Visibility

          You can now toggle the visibility of multiple Layers at the same time. Hold CTRL and click each Layer to build your selection. Then click the eye icon next to any of those selected Layers to toggle visibility of all selected Layers.

          image alt text

          New: Multi-User Editing (Beta)

          Multiple level designers and artists can now connect multiple instances of Unreal Editor together to work collaboratively in a shared editing session, building the same virtual world together in real time.

          • A dedicated server keeps track of all the modifications made by all users, and synchronizes the state of the Editor between all connected computers.

          • When you make changes in your Levels and Sequences on one computer, the changes are automatically mirrored, live, to all other computers that are part of the same session.

          • When you make changes to other types of Assets, like Materials, the changes are replicated to all other computers when you save those Assets.

          • Before leaving an editing session, each user can choose whether they want to apply the changes made during that session to their local copy of the Project.

          New: Preview Rendering Level Improvements

          The workflow for the Mobile Previewer has improved when working with different devices and platform's shading models in order to consistently use the same shading model across all Editor viewports and to enable you to instantly switch between the default Shader Model 5 (SM5) and a selected Preview Rendering Level.

          Start by selecting a Preview Rendering Level from the main toolbar Settings drop-down to compile shaders for a platform. Once compiled, use the added Preview Mode button in the main toolbar to toggle the view mode.

          For additional details, see Mobile Previewer.

          New: Dynamic Spotlight Support on Mobile

          We now support non-shadow casting Dynamic Spot Lights on high-end mobile devices.

          You can enable dynamic Spot Lights from the Project Settings > Rendering > Mobile Shader Permutations by setting Support Movable Spotlights to true.

          For additional information, see Lighting for Mobile Platforms .

          New: SaveGame System iCloud Support

          UE4 now supports saving games to iCloud using the ISaveGameSystem interface, on both iOS and tvOS. You can enable saving games to iCloud by going to Project Settings > Platforms > iOS > Online and enabling the Enable Cloud Kit Support option.Then from the iCloud save files sync strategy option, you can select the sync strategy that works best for your project. The currently available iCloud sync options are as follows:

          • Never (Do not use iCloud for Load/Save Game)

          • At game start only (iOS)

          • Always (Whenever LoadGame is called)

          New: Device Output Window Improvements

          Major improvements have been made to the Device Output Log window, bringing it out of the Experimental state. You can use the Device Output Log window to send console commands to iOS devices from the PC. To access the Device Output Log, from the main menu click Window > Developer Tools > Device Output Log.

          New: HTML5 Platform Improvements (Experimental)

          We have added experimental multithreaded support for HTML 5 projects. Please note you need access to the Unreal Engine 4 source code to enable this functionality.

          Some browsers will need special flags enabled in order to run in multithreaded mode. See https://github.com/emscripten-core/emscripten/wiki/Pthreads-with-WebAssembly for more information.

          • For Chrome: run chrome with the following flags:

            --js-flags=--experimental-wasm-threads --enable-features=WebAssembly,SharedArrayBuffer

            These can alternatively be enabled/disabled in chrome://flags/#enable-webassembly-threads as "WebAssembly threads support"

          • In Firefox nightly, SharedArrayBuffer can be enabled in about:config by setting the javascript.options.shared_memory preference to true.

          New: iOS Preferred Orientation

          You can now set the preferred orientation to be used as the initial orientation at launch for iOS devices when both Landscape Left and Landscape Right orientations are supported.

          New: Niagara Vector Field Data Interface

          The Vector Field Data Interface now works the same for both CPU and GPU particles! You can use the Sample Vector Field module to sample vector fields. It exposes three primary inputs:

          • VectorField: This is the Vector Field Data Interface instance, containing the static vector field object itself, and per-axis tiling flags.

          • SamplePoint: This is the point where the vector field is sampled. This defaults to Particles.Position, but this can be customized.

          • Intensity: This scales the sampled vector.

          There are also multiple optional inputs:

          • ApplyFalloff: Check this to apply a falloff function to the sampled vector, so the influence of the vector field approaches zero towards the edges of the vector field's bounding box.

          • UseExponentialFalloff: Check this to make the falloff function be exponential instead of linear.

          • FalloffDistance: When applying a falloff function, this parameter determines how far from the bounding box edges the falloff applies.

          • FieldCoordinates: This makes it possible to override the Emitter's Localspace parameter. It has three options:

            • Simulation: Uses the Emitter.Localspace parameter.

            • World: This overrides the position and transform of the vector field so that it is always relative to the world origin, regardless of the Emitter.Localspace parameter.

            • Local: This overrides the position and transform of the vector field so that it is always relative to the System itself, regardless of the Emitter.Localspace parameter.

          • FieldTranslate: This offsets the vector field relative to the origin as defined by FieldCoordinates.

          • FieldRotate: This reorients the vector field relative to the origin as defined by FieldCoordinates.

          • FieldScale: This rescales the vector field.

          The SampleVectorField module provides a lot of utility functionality, and therefore it might include some overhead. You can use specialized vector field sampling, by including the SampleField node on a Vector Field Data Interface object in the script editor.

          The input expected here will be relative to the volume of the vector field itself, as no transformations are applied for you.

          An example for easily visualizing and using a vector field is included, called VectorFieldVisualizationSystem.

          New: Niagara Curl Noise Data Interface

          The Curl Noise Data Interface now generates procedural curl noise based on an underlying simplex noise function and the results are identical for both CPU and GPU emitters. It is recommended to use the SampleCurlNoiseField module to generate curl noise for your particles. This module has two primary inputs exposed:

          • Strength: This scales the output vector generated by the module.

          • Length Scale: This describes the approximate size of the vortices generated by the curl noise.

          and three optional inputs:

          • Offset: This is used to pan the noise field.

          • Noise Field: This is the Data Interface object itself, primarily used for adjusting seeds.

          • Sample Point: This specifies where to sample from. Defaults to Particles.Position, but other values can also be used.

          The curl noise field does not inherently tile, and does not suddenly end due to its procedural nature. To get a tiling curl noise field, consider using the Vector Field Data Interface instead, with a periodic volume texture curl noise as a vector field.

          New: Deterministic Random Number Generation in Niagara

          We added support for deterministic random number generation for both CPU and GPU Niagara emitters. The behavior of the random number generated can be controlled globally from the Emitter Properties module, with the following options:

          • Determinism: A flag to toggle between deterministic or non-deterministic random numbers for the entire emitter.

          • Random Seed: A global seed used by the deterministic random number generator.

          The RandomRange Niagara function is the recommended way to generate random numbers inside scripts. It now accepts the following:

          • Min: This defines the lower bound of the random numbers generated. It can be any integer or float type.

          • Max: This defines the upper bound of the random numbers generated. It can be any integer or float type.

          • RandomnessMode: This is an enum controlling the determinism mode of the random number generator, and it can be:

            • Simulation Defaults: This is the default behavior; it inherits the value of Emitter.Determinism.

            • Deterministic: Uses the deterministic random number generator.

            • Non-deterministic: Uses the non-deterministic random number generator.

          • OverrideSeed: This determines whether or not to override the seed specified by Emitter.GlobalSeed.

          • Seed: This value is used to override Emitter.GlobalSeed if OverrideSeed is enabled.

          The last three, RandomnessMode, OverrideSeed and Seed are initially hidden, but they can be revealed by clicking the arrow at the bottom of the node.

          image alt text

          An alternative way to generate deterministic random numbers is by explicitly passing seeds to the Seeded Random node. For example, a specialization of the Random Range functionality could look something like the following:

          image alt text

          The deterministic random numbers are slightly more expensive than the non-deterministic counterparts: somewhere between 1.5 and 2.0 times, depending on the type generated. In general, if you need more than one random number in a script, we recommend that you generate them with a single call, and split the result if you need to handle them separately.

          image alt text

          New: Additional Inputs for Niagara Math Operations

          Many of the script math operations now support an arbitrary number of input pins which can be added by clicking the Add (+) button or by connecting to the pin next to the Add button.

          image alt text

          New: Support for Deprecating Niagara Scripts

          Scripts for modules, dynamic inputs, and functions can now be marked as deprecated in the script editor. Emitters and systems using deprecated scripts will now display errors in the UI, and deprecated scripts will not show up in the menus used to add them.

          image alt text

          image alt text

          New: Niagara Initialization Modules

          New modules have been added which expose the most common attributes used when initializing particles.

          image alt text

          New: Select by Simulation Target Node for Niagara

          The new Select by Simulation Target node enables you to execute different logic depending on whether an emitter is running in the CPU vector machine or in a GPU compute script. In general, most scripts should run identically on both simulation targets. However, this is not always possible, especially when making data interface calls. In cases where exact parity isn't available, this new node gives the module author more tools to build consistent behavior. For an example of how this is used, see the new collision response module.

          New: Collision System for Niagara

          Niagara collisions have been completely rewritten to support ray-trace-based CPU collisions, CPU+GPU analytical plane collisions, GPU scene depth, and distance field collisions.

          Additional features include:

          • Stability has been vastly improved across the board, in comparison to previous Niagara and Cascade implementations.

          • CPU collisions support the incorporation of the scene's physical material characteristics, such as restitution and friction coefficients, and offers several integration schemes.

          • The system has been written as a single module to improve usability.

          • Collisions now work in combination with all renderers.

          • A configurable "rest" state allows particles to remain stable in particularly challenging situations.

          • The equations are physically based/inspired, and work with mass and other system properties.

          • A number of advanced options have been exposed, including static, sliding and rolling friction.

          • Collision radii are automatically calculated for sprites and meshes. Optionally, you can specify this parameter directly.

          New: Platform SDK Upgrades

          In every release, we update the Engine to support the latest SDK releases from platform partners.

          image alt text

          • IDE Version the Build farm compiles against

            • Visual Studio - Visual Studio 2017 v15.6.3 toolchain (14.13.26128) and Windows 10 SDK (10.0.16299.0)

              • Minimum Supported versions

                • Visual Studio 2017 v15.6

              • Requires NET 4.6.2 Targeting Pack

            • Xcode - Xcode 10.1

          • Android

            • Android NDK r14b (New CodeWorks for Android 1r7u1 installer will replace previous CodeWorks on Windows and Mac; Linux will use 1r6u1 plus modifications)

            • Note: Permission requests are now required on a per feature basis. (for example: RECORD_AUDIO, CAMERA). For more information, see Android Upgrade Notes .

          • HTML5

            • Emscripten 1.37.19

          • Linux "SDK" (cross-toolchain)

          • Lumin

            • 0.19.0

          • Steam

            • 1.39

          • SteamVR

            • 1.0.16

          • Oculus Runtime

            • 1.32

          • Switch

            • SDK 7.3.0 + optional NEX 4.4.2 (Firmware 7.x.x-x.x)

            • SDK 6.4.0 + optional NEX 4.6.2 (Firmware 6.x.x-x.x)

              • Supported IDE: Visual Studio 2017, Visual Studio 2015

          • PS4

            • 6.008.061

            • Firmware Version 6.008.021

            • Supported IDE: Visual Studio 2017, Visual Studio 2015

          • XboxOne

            • XDK: July 2018 QFE-4

            • Firmware Version: December 2018 (version 10.0.17763.3066)

            • Supported IDE: Visual Studio 2017

          • macOS

            • SDK 10.14

          • iOS

            • SDK 12

          • tvOS

            • SDK 12

          Release Notes


          • Crash Fix: Fixed FEnvQueryInstance::FItemIterator::StoreTestResult crashes occurring when NumPassedForItem was 0

          • New: Added a concept of "AISubsystem" that acts as a tickable object but can be used to batch-tick all subsystems by another piece of code (for example the AISystem instance). AISubsystems live as part AISystem which controls their life cycle. EQS manager and AIPerceptionSystem are now AISubsystems.

          Behavior Tree

          • Bug Fix: Fixed FEQSParametrizedQueryExecutionRequest::InitForOwnerAndBlackboard sometimes erroneously complaining about not being able to resolve a blackboard key when no BB key was being used.

          • Crash Fix: Switched nav octree element ID over from uint64 to uint32 and changed how we assign it - it's now set to Object.GetObjectID(). This is aimed at addressing occasional nav octree crashes when streaming out levels.

          • Bug Fix: UPathFollowingComponent::Cleanup now clears out the MovementComponent it points to, to ensure it is full hands-off when AIController::Unpossess is called.

          • Bug Fix: Changed the way we store UNavigationSystemV1.CrowdManagerClass so that it works with game-specific crowd manager class implementations.

          • Bug Fix: Changed how we initialize FNavigationSystem::CoordTypeTransformsTo. The old initialization order resulted in bad initialization on some platforms.

          • Bug Fix: Fixed the nav bounds calculation bug for InstancedStaticMeshComponents and HierarchicalInstancedStaticMeshComponents.

          • Bug Fix: Fixed RecastNavMesh not recreating default nav query when loaded instance has a different querying properties than the CDO.

          • Bug Fix: Made sure we clear out the EInternalObjectFlags::Async flag for UBodySetup instances that have been created off-game thread via UShapeComponent::CreateShapeBodySetupIfNeeded. This fixes a memory leak resulting from UShapeComponent::CreateShapeBodySetupIfNeeded sometimes being called as part of async navigation collision gathering.

          • Bug Fix: Fixed a bug forcing RecastNavMesh's default query recreation when query-related properties get changed in the editor.

          • Bug Fix: Fixed recast navigation queries' capabilities to limit the the available node pool size. The bug was noticeable when using shared queries.

          • Bug Fix: Fixed a navmesh generation bug that resulted in removing and not rebuilding parts of navmesh when a new navmesh bounds volume had been added.

          • Bug Fix: Fixed a bug in how/when FRecastNavMeshGenerator::RcNavMeshOrigin is being set. It sometimes ended up uninitialized.

          • Bug Fix: Fixed backtracking pathfinding issues resulting from reversing the path too late - it needed to be reversed before the string pulling to gather all the area information properly.

          • Bug Fix: Added special handling (including logging) when there are no walkable areas while generating recast navmesh tiles. We used to report those as errors while those are pretty normal circumstances.

          • New: Added a way to configure Recast pathfinding to restrict A from reopening nodes that have already been placed on closed list. Can be used to optimize A cost at the price of not-optimal paths.

          • New: Let NavigationSystem instances override "NavigationAutoUpdateEnabled" behavior.

          • New: Added an 'invert' function to FNavMeshPath

          • Improvement: Made it easier to extend navmesh generators (override ARecastNavMesh::CreateGeneratorInstance).

          • Improvement: Extended NavigationTestingActor with a way to do 'backtracking' pathfinding.

          • Deprecated: WorldSettings.bEnableNavigationSystem has been deprecated. Use WorldSettings.NavigationSystemConfig instead.


          • Bug Fix: Fixed physical animation automation test.

          • Bug Fix: Fixed UAnimSequence::CopyNotifies & exposed it to Animation Blueprint Library.

          • Bug Fix: Fixed custom Stencil/Depth not working on GeometryCache actors.

          • Bug Fix: Updated Header's signature to match body for AnimationEditorUtils::CreateNewAnimBlueprint

          • New: Added ability for Skeletal Mesh Component to propagate morph and or curve values to its slave components.

          • New: Added Per Subject delays to Live Link with Time Synchronization (Timecode Synchronizer).

          • New: Exposed FAnimMontageInstance to ENGINE_API.

          • New: Added Animation Budget library to allow for testing.

          • New: ControlRig: Added more options for GetJointTransform, Distance, and Clamp

          • Improvement: Optimized deferred kinematic updates

          Animation Assets

          • Crash Fix: Fixed crash in BlendSpace editor when sample data being used is deleted

          • Bug Fix: Changing types of an Anim Notify will now try to copy over as many properties as possible from the old type to the new one.

          Animation Blueprints

          • Crash Fix: Fixed crash on blend multi node due to invalid link node id.

          • Crash Fix: Fixed issue with crashing when switching to different a mesh while using copy pose node.

          • Crash Fix: Fixed crash when a curve hasn't been updated before updating the animation. Ensures to update curves prior to update animation, not just before evaluate.

          • Crash Fix: Fixed a crash with curves of the skeleton when joint has been removed.

          • Crash Fix: Fixed a crash with LiveLink nodes

          • Bug Fix: Fixed properties copied into sub anim instances being one frame out of date.

          • Bug Fix: Fixed setting name by pin in PoseByName node not being correctly updated.

          • Bug Fix: Improved anim node data packing and audited properties.

          • Bug Fix: Fixed incorrect spawn location for dragged assets in Anim Blueprints.

          • Bug Fix: Fixed assets being dragged over animation node pins displaying an incorrect error message.

          • Bug Fix: CopyPoseFromMesh node is now thread-safe

          • Bug Fix: Fixed to support correct Source for CurveSource node

          • New: Added an Experimental hook to UAnimInstance called ApplyAnimOverridesToCDO, which allows subclasses to do their own animation modifications as part of the Anim BP compilation process.

          • New: Added stricter range checks to AnimNode_CopyPoseFromMesh::Evaluate_AnyThread

          • New: RigidBody.ClampLinearTranslationLimitToRefPose - If rigid body node is set to lock a linear limit, this option clamps to the default translation. Only works if you set all axes to lock.

          • New: Support clamping input DeltaTime in AnimNode Trail

          Animation Tools

          • Crash Fix: Fixed a crash converting a sequencer possessed actor to spawnable when it uses the rigid body anim node

          • Crash Fix: Fixed crash undoing the renaming of a deleted animation curve

          • Crash Fix: Fixed a crash reordering a preview mesh collection from inside an animation editor

          • Crash Fix: Fixed crash when editing notifies in a montage when one of its child montages is also open for editing

          • Bug Fix: Implemented a fix for Live Link disconnecting when the Editor is busy. The root cause was that FHeartbeatManager would send the heartbeat on a separate thread however we were only receiving the response on the Game Thread causing replies to be dropped during a slow task. This was resolved by calling the ReceivingOnAnyThread function in the Builder function in FMessageEndpoint and updating the relevant handlers to be Threadsafe.

          • Bug Fix: Fixed anim timeline scrub ticks extending outside of their track when zoomed.

          • Bug Fix: Animation Recorder now checks for curve validity before blending. Checking the element count wasn't enough, since the UIDToArrayIndexLUT could be null.

          • Bug Fix: Fixed anim viewport pinned command widgets being added incorrectly (when not holding shift).

          • Bug Fix: LiveLink: Modified FHeartbeatManager so that its thread is correctly killed during the manager's destructor.

          • Bug Fix: Bone selection is now cleared when entering section selection mode in skeletal mesh editor.

          • Bug Fix: Fixed pinned viewport commands being searchable in animation editors.

          • Bug Fix: Fixed incorrect displayed LOD level when editing skeletal mesh LOD counts in external sub-editors

          • Bug Fix: Animation Editor: Fixed when Reset to Default doesn't clear additional meshes

          • Bug Fix: Animation Editor: The mesh editor doesn't show any additional meshes

          • Bug Fix: Animation Editor: Fixed a bug with Apply to Asset where it doesn't show sometimes

          • New: Added Asset details panel to Skeleton Editor.

          • New: Added restriction to the value of Base LOD (to always be lower than the current LOD index) when generating a Skeletal Mesh LOD.

          • New: Animations and Pose Assets can now be created from Skeletal Mesh, Skeleton and Animation Blueprint Editors.

          • New: Bone drawing code now uses mesh bound to scale the thickness of the line.

          • New: Experimental: Live Link Curve Debug plugin

            • This provides a tool to quickly see what the output is of various LiveLink curves in an easy to debug manner.

            • Editor : Go to Window > Developer Tools > Live Link Curve Debugger once you enable the plugin

            • Type LiveLinkDebugger Show in the command-line

            • This may only work in editor or PIE.

          • Improvement: Displaying Vertex Colors in the Skeletal Mesh Editor has moved from 'Character / Mesh' to 'Show/Advanced' in line with other viewports.


          • Bug Fix: Fixed a potential crash when opening the master sequence due to UMovieSceneGeometryCacheSection::PostLoad() not properly calling the base function Super::PostLoad().

          • New: Added top-level checkbox to include/exclude all tracks when importing an Alembic File.

          Skeletal Mesh

          • Crash Fix: Fixed a crash when setting skeletal meshes while tasks are in flight

          • Bug Fix: Fixed an issue when render bound doesn't get an update on Slave Component while Master Component is moving.

          • Bug Fix: Fixed motion vector issue (for motion blur/temporal AA) on PoseableMeshComponent

          • Bug Fix: Fixed one-off bone visibility changes causing flicker

          • Bug Fix: Moved ClearMorphTarget to SetSkeletalMesh from Initialize Animation, which gets called unnecessarily often.

          • New: Added OnBoneTransformsFinalized delegate to USkeletalMeshComponent.

          • New: You can modify Skeletal Mesh reference pose in the Editor with this change. Use normal bone manipulators to modify and call Update Reference Pose option in the Edit menu in Mesh Editor.

          • New: Support BakePose on LODSetting asset

            • This only works if the bakepose shares the same skeleton with the applied mesh

            • You can override per mesh using BakePoseOverride


          • Crash Fix: Fixed crashes with Flexiverb DSP initialization.

          • Crash Fix: Fixed a crash in FVorbisAudioInfo when attempting to get compressed info if the library was not loaded/found.

          • Crash Fix: A rare crash on cook was fixed for streaming USoundWaves.

          • Crash Fix: Fixed a crash when releasing reverb.

          • Crash Fix: Fixed a crash when playing TimeSynth that hasn't been activated.

          • Bug Fix: Releasing reverb no longer causes an indefinite hang when baking.

          • Bug Fix: Fixed an issue where Media Sound Component would play at level origin instead of the actor's location.

          • Bug Fix: Fixed the delay ratio for stereo delays source effects.

          • Bug Fix: Fixed the clamp min and ui min values on the DelayRatio property.

          • Bug Fix: Some minor issues were fixed with panning logic for the Granulator Synth Component.

          • Bug Fix: Fixed AttachTo and SnapTo enums for SpawnSoundAttached.

          • Bug Fix: Fixed a bug with duplicate speaker entries in SoundFactory for the left surround speaker.

          • Bug Fix: Several issues with the modular synth were fixed.

          • Bug Fix: Removed an invalid assert on the submix weak reference pointer.

          • Bug Fix: Fixed the optimization flag on synthesis plugin.

          • Bug Fix: Reverb dry-level channel pan was fixed.

          • Bug Fix: Fixed an issue with re-importing over an existing audio file.

          • Bug Fix: An issue was fixed where streaming USoundWave would not play if play was called right after it was loaded.

          • Bug Fix: Fixed log output for duration with Audio Recording.

          • Bug Fix: SpawnSoundAttached now treats location input as relative when EAttachLocation is KeepRelativeOffset.

          • Bug Fix: Hash collisions no longer causing unintended audio playback behavior.

          • Bug Fix: Fixed an issue in Pitch Bend MIDI-parsing where MSB/LSB was flipped.

          • New: Spectrum analysis for submixes is now available using the following Blueprint functions:

            • Start Analyzing Output

            • Get Magnitude For Frequencies

            • Get Phase For Frequencies

            • Stop Analyzing Output

          • New: An easy to use, cross-platform FFT implementation has been added to the AudioMixer module. DSP/PassiveFilter.h has been added as a simple example of using it for spectral signal processing.

          • New: An ITD Spatialization plugin has been added to the engine.

          • New: Support for reading/decoding of audio files to arbitrary paths has been added to the AudioMixer module as FAudioFileReader.

          • New: Generic encoding of audio signals to Ogg Vorbis, Opus, and WAV has been added to the Audio Mixer module for all platforms (except HTML5) using the DSP/Encoders folder.

          • New: Audio Importer now uses LibSoundFile to support importing AIF, FLAC, and Ogg Vorbis file formats. Re-import now supports multiple source file format extensions, and warns if source files of different formats (ex. Folder/Sound.wav & Folder/Sound.aif) are attempting to overwrite one another.

          • New: Add an opt-in smooth interpolation feature to the Doppler SoundCue node.

          • Improvement: Moved priority settings on USoundBase (and inheriting children) to its own category outside of concurrency.

          • Improvement: Added the option to automatically stream all USoundWaves above a set duration on mobile platforms. This option can be found in Project Settings, in the Audio category for each platform.

          • Improvement: Added the ability to adjust sound cue/wave trim volume by command line/ini file. This allows hotfixing volumes without cooked content or code changes.

          • Improvement: Added edit conditions for bDelayBasedOnDistance and SpeedOfSound.

          • Improvement: Added the ability for AudioMixer to render out audio when no audio output device exists on Windows.

          • Improvement: Added comments on stereo delay source effect.

          • Improvement: Renamed the synthesis plugin for clarity.

          • Removed: Removed unneeded whitelisting from the AudioCapture plugin.


          • Bug Fix: Addressed image comparison using the wrong image with EStructuralSimilarity::Color. #4806

          • New: PS4 now defaults to running from host. Previous deploy behavior is still available through "-deploy".

            • Cleaned up TargetDevicePS4, commented a number of things, and moved some code to a PS4Utils module.

            • Added utilities for marking/cleaning up old directories.

          • Improvement: Increased the speed and removed code bloat from automation tests.

            • Smoke tests now run about eight times faster in an internal project.


          • Crash Fix: Fixed a crash when dragging from the Blueprint Editor components list if there is no corresponding property.

          • Crash Fix: Fixed a crash in UpdateAnimation after compiling a Blueprint.

          • Crash Fix: Fixed crashes happening after reloading a Blueprint asset that had native default sub-objects.

          • Crash Fix: Nativized UMG widgets that include a custom button no longer crash.

          • Crash Fix: Fixed a crash when reparenting a Blueprint.

          • Crash Fix: DataAssets made out of Blueprint classes now properly reference their source.

          • Crash Fix: Fixed a crash when a Blueprint graph is in the process of being closed due to deletion.

          • Crash Fix: No longer crashing when diffing Blueprints with missing properties.

          • Crash Fix: Fixed a crash when compiling Blueprints with sub-objects created in C++.

          • Crash Fix: Fixed crashes when reloading a Blueprint that has children types also loaded.

          • Crash Fix: Fixed a crash in SGraphNode related to tooltips.

          • Crash Fix: Fixed a crash when loading a child Blueprint class after previously swapping component names in the parent Blueprint class.

          • Crash Fix: Fixed an editor crash on load of a Blueprint asset after switching a child component node's type to be a non-scene component type in C++ code.

          • Crash Fix: Fixed a crash when promoting an output pin on a "Get Class Defaults" node.

          • Crash Fix: Fixed a crash after force deleting a User Defined Struct that was being used in a Blueprint.

          • Crash Fix: Fixed a crash after loading a user defined structure with circular references to Blueprint classes.

          • Crash Fix: Fixed a crash when the Blueprint Editor Utilities (blutilties) window is open and a blueprint is compiled.

          • Bug Fix: GetQueryResultsAsActors and GetQueryResultsAsLocations now clear their output arrays. This means these functions will no longer append data to a non-empty array, which would likely be undesired behavior.

          • Bug Fix: Because literal Soft Object/Class Reference pins are now properly tracked, some packages may be getting pulled into a cooked build that were not before.

          • Bug Fix: Improved all tooltips for blueprint callable functions with single line documentation strings

          • Bug Fix: Fixed potential data loss in components when only part of a blueprint class hierarchy is nativized.

          • Bug Fix: Fixed UnrealBuildTool warnings about the PCH when building or packaging with Blueprint Nativization enabled.

          • Bug Fix: We now properly construct any native 'noexport' struct-typed literal term in a nativized Blueprint class.

          • Bug Fix: Compilation manager now correctly remaps old DefaultSubobjects to new instances of those DefaultSubobjects.

          • Bug Fix: An empty UFunction is no longer generated for empty User Construction Scripts.

          • Bug Fix: Adding an output to a collapsed node graph by dragging a pin to it now updates properly.

          • Bug Fix: Graph Editor alignment shortcuts now conform to the de-facto standard by default.

          • Bug Fix: Fixed UInheritableComponentHandler::PostLoad() to avoid some unnecessary loop iterations on load in a cooked build.

          • Bug Fix: A typo was fixed in the tooltip of "Pass-by-Reference."

          • Bug Fix: Fixed a Blueprint Nativization compile failure due to one or more unconnected "soft" class reference input pins on an event or function call node.

          • Bug Fix: Fixed uninitialized user defined struct fields in nativized, cooked builds.

          • Bug Fix: Warning spam fixed from an abstract or deprecated Blueprint trying to render a thumbnail.

          • Bug Fix: Fixed a circular dependency issue between converted Blueprint class/struct types and non-nativized Blueprint class assets.

          • Bug Fix: Only Blueprint-generated classes are allowed to be excluded from nativization by folder path.

          • Bug Fix: The display name of variable accesses now update correctly when changing the type of the variable to or from boolean.

          • Bug Fix: Categories no longer appear if they don't contain any visible properties.

          • Bug Fix: Fixed compilation error when delegate properties reference function signatures on out of date classes.

          • Bug Fix: Fixed loss of references to instances of Blueprints that are simultaneously compiled.

          • Bug Fix: Fixed an issue where dragging assets to Blueprint nodes incorrectly displayed - as if it was not the correct type.

          • Bug Fix: Break Link, Jump, and Straighten Connection menu options are now consistent in their display. Also, no longer shows empty parentheses if connected to a pin with no name.

          • Bug Fix: Opening GameplayAbilityBlueprints that have no GeneratedClass is allowed but warns if it's missing ParentClass.

          • Bug Fix: References to the old CDO referenced in other Blueprints now get updated by the Blueprint Compilation Manager.

          • Bug Fix: GameplayTags are now properly filtered in Blueprint SET nodes.

          • Bug Fix: Added code to keep orphan pins around for any links lost during backwards compatible node conversion.

          • Bug Fix: ActorComponent-derived visualisers now receive a HandleInputDelta() call in the Blueprint Editor's viewport.

          • Bug Fix: Multiple undo transactions for renaming no longer generated when setting the comment text on a comment box.

          • Bug Fix: Adding output pins to a Sequence node no longer removes the Then 0 pin.

          • Bug Fix: Fixed an invalid cast of a nativized enum term to its underlying pointer type in generated Blueprint C++ code.

          • Bug Fix: Levels that are unloaded (or if they failed to load) can now be removed from the Levels tab.

          • Bug Fix: Fixed Keys variables getting into an inconsistent state when set using a variable Set node in Blueprints.

          • Bug Fix: Fixed the graph displaying incorrectly after shift-dragging to select nodes and releasing the mouse button over a connection spline.

          • Bug Fix: Copy and Paste of components in MyBlueprints now correctly maintain relative hierarchy, duplicate of components, and per instance component window.

            • The per instance component window now maintains the name of the source component where possible and a modified version of the name when already taken instead of using the component class as name.

          • Bug Fix: EDL at cook time is now required when Blueprint component data for runtime spawning is enabled in the project settings.

          • Bug Fix: Fixed an ensure when compiling a Blueprint interface after changing a function signature.

          • Bug Fix: Fixed Alt+RMB zooming in UMG Designer and Blueprint Graph.

          • Bug Fix: Arrays of text properties no longer fail to propagate new default values to component instances

          • Bug Fix: Fixed UKismetMathLibrary::Hypotenuse returning NaN for a 0x0 triangle.

          • Bug Fix: Closing the "Blutility Details" panel is no longer possible as it cannot be re-summoned if lost.

          • Bug Fix: Fixed invalid pins not being removed when refreshing a 'select' node after an Enum option is removed.

          • Bug Fix: Fixed a compilation error describing undetermined type when calling an interface function with Set or Map properties.

          • Bug Fix: Conversion of a TWeakObjectPtr property value when referencing an instanced subobject in a nativized Blueprint class now works properly.

          • Bug Fix: Blueprint functions with a single output parameter now use full function descriptions for their tooltip if there is no explicit return value documentation.

          • Bug Fix: Changing a User Struct's defaults correctly propagates those changes to open Blueprints using that struct.

          • New: Added an equality operator for arrays in Blueprints.

          • New: Now enforcing rules about editor-only functions being called in runtime Blueprints.

          • New: Included Blueprint int64 support.

          • New: Can now call GetOuterObject from Blueprints to query the outer of a given object.

          • New: Created an asset picker for selecting external timeline curves.

          • New: Can now use home, end, page up, and page down in a filtered Blueprint action menu.

          • New: Get Console Variable Bool Value can be used to query the boolean state of a console variable from Blueprints.

          • New: Editor only functions can't be added to runtime Blueprints, only Blutilities and Editor Widgets.

          • New: Dragging from a class pin to a string will now automatically create a GetClassDisplayName node.

          • New: "Create" and "New" added as keywords to Construct Object node.

          • New: Added Hide Unconnected Pins button to Class Defaults.

          • New: Nativized Blueprint types can now instance other nativized Blueprint types as subobjects when there are one or more non-Blueprint asset preload dependencies.

          • New: Added scrolling to CreateEvent node method list.

          • New: Added Blueprint graph action name to the error message for "by ref" pin.

          • Improvement: Improved editor startup/load times by deferring Blueprint search data re-indexing work until a global Find-in-Blueprint tab is opened.

          • Improvement: ExpandEnumsAsExecs metadata for Blueprint exposed UFUNCTION can now be used for multiple pins. Limited to a single input pin, but can handle multiple output pins.

          • Improvement: Improved backward compatibility Blueprint node fix-up logic when using reroute nodes.

          • Improvement: Reduced overhead of calling blueprint functions with return values.

          • Removed: Removed overzealous ensure from UBlueprintGeneratedClass::FindArchetype

          • Improvement: Reduced overhead related to function 'callspaces' when calling script functions.

          • Removed: Removed legacy Blueprint code that triggered a copy of the skeleton CDO to the generated CDO based on a serialized flag.

          • Improvement: Game projects that rely on legacy include paths are now compatible with Blueprint Nativization.

          • Improvement: Added code to ensure that sequence assets are fully loaded before they are compiled.

          • Improvement: Now ensuring UserWidget bindings are created in packaged builds for child Blueprints.

          • Deprecated: GetCategoriesMetaFromStruct has been deprecated in favor of GetCategoriesMetaFromField.

          • Improvement: Call macro node titles now display with the same format that call function nodes, variable accesses, and others use.

          • Improvement: Renamed bSpawnPawn to bSpawnPlayerController for UGameplayStatics::CreatePlayer.

            • Also clarified the parameter name for UGameInstance::CreateLocalPlayer.

          • Improvement: Nativized replication of a child actor component's internal actor template in a cooked client/server build.

          • Deprecated: To avoid build/cook warnings, deprecated UEnvQueryInstanceBlueprintWrapper::GetResultsAsActors and replaced it with GetQueryResultsAsActors.

          • Deprecated: To avoid build/cook warnings, deprecated UEnvQueryInstanceBlueprintWrapper::GetResultsAsLocations and replaced it with GetQueryResultsAsLocations.

          • Deprecated:Deprecated pure blueprint functions on UEnvQueryInstanceBlueprintWrapper: GetResultsAsActors(), GetResultsAsLocations() and replaced them with new impure functions GetQueryResultsAsActors(), GetQueryResultsAsLocations(). Deprecated pure blueprint functions on UEnvQueryInstanceBlueprintWrapper: GetResultsAsActors(), GetResultsAsLocations() and replaced them with new impure functions GetQueryResultsAsActors(), GetQueryResultsAsLocations().

          • The new functions will prevent accidentally doing the work of building the array more than once since they aren't pure. Also, they return false if the Query status was not a success to prevent possible bugs caused by trying to return results from unsuccessful queries. Returning the success state (having found at least one result) as well as outputting the array will also improve UX.


          • Crash Fix: Fixed a crashing issue due to the invocation list getting cleared while delegates were being invoked.

          • Crash Fix: Fixed a crash that occurs when loading a UObject that has a missing outer.

          • Crash Fix: Fixed a crash when GFastPathUniqueNameGeneration was true (when enabled, saves ~50 MB on Win64 and faster execution time for MakeUniqueObjectName). It can be enabled in non-editor build by setting FAST_PATH_UNIQUE_NAME_GENERATION define to 1.

          • Crash Fix: Allowed MallocBinned2 to allocate up to 2^36-1 bytes without crashing.

          • Crash Fix: Fixed an underrun mode in mallocstomp not properly aligning FAllocationData for use by the Free function, causing a crash.

          • Crash Fix: Disabled GC clustering support for SoundCues, SoundNodes, and SoundWaves. This resolves a crash that was being experienced.

          • Crash Fix: Fixed EDL crash when terminating the Engine while initializing.

          • Crash Fix: Stopped a crash when saving a package with duplicate asset registry tag names.

          • Crash Fix: Fixed cooked skeletal meshes crashing when opened in the editor.

          • Crash Fix: Fixed a crash when loading cooked asset in the Editor that was caused by seeking past the header before uexp file was loaded.

          • Crash Fix: Fixed a potential crash when saving packages and fixing up Soft Object Paths.

          • Crash Fix: We now Create/Destroy pak platform file on startup and shutdown of pak module, rather than on first access and at some random time during global destruction. This fixes a shutdown crash on linux where threads were being destroyed during global destruction which is too late.

          • Crash Fix: Fixed a potential crash in FStructuredArchive when loading thumbnail data.

          • Crash Fix: Addressed a potential crash when verifying imports while async loading and resolving deferred exports.

          • Crash Fix: Fixed a crash in structured archive when using enum resolver archives.

          • Crash Fix: Fixed a potential crash when flushing linker cache when async loading.

          • Crash Fix: Resolved a crash when data encryption options are enabled but no key is set.

          • Crash Fix: IsValidLowLevelFast can fail during initial load so skip it when getting an archetype of an object early in Engine init. This fixes a crash when enabling default subobject checks in cooked builds.

          • Crash Fix: Stopped UBT and UAT from crashing when DefaultCrypto.ini was missing.

          • Crash Fix: Fixed TNonRelocatableInlineAllocator not switching to heap allocator correctly, due to the CalculateSlackGrow function not increasing to contain the requested number of elements. This was causing crashes in FStructuredArchive serializers with deeply nested objects.

          • Bug Fix: Corrected misleading or incorrect header comments in CoreUObject classes.

          • Bug Fix: Fixed Ctrl-C handling on Windows so that it always ends execution when there is a valid terminal.

          • Bug Fix: Corrected a typo in TaggedBinaryArchiveOutputFormatter: uint16->uint32

          • Bug Fix: Fixed a type mismatch issue in StringToArray function.

          • Bug Fix: The actual TargetPlatform name will now be printed instead of the module.

          • Bug Fix: Fixed some instances of string literals being passed as bool instead of FString as expected.

          • Bug Fix: Fixed Config file parsing to properly handle things like \' in quoted strings.

          • Bug Fix: Corrected a TAtomic compiler error caused by changes to VS2017's template parsing.

          • Bug Fix: Fixed a bug with alignment padding in compressed and encrypted pak files.

          • Bug Fix: CrashReportClient will no longer be started to report an ensure() in a non-Editor build.

          • Bug Fix: Fixed LITERAL macro so that it works with 16-bit TCHARs.

          • Bug Fix: Corrected race condition in Async testcase (FAsyncCompletionCallbackTest).

          • Bug Fix: Fixed a bug with spaces in filenames for stable shader cache generation during cook.

          • Bug Fix: It is now possible to load dependent modules located in platform subdirectories.

          • Bug Fix: MallocProfiler now uses a less complicated TArray instead of FCompressedBuffer to prevent deadlocks in stats.

          • Bug Fix: Fixed gc.LowMemory.TimeBetweenPurgingPendingKillObjects. This was pointing to the wrong global, causing us to always GC at this rate if the cvar was specified.

          • Bug Fix: Fixed a bug in Low Level Memory tracker (LLM) when using asset tags, which caused incorrect results.

          • Bug Fix: Changed it so a missing import class package does not crash the Engine. It will now report an error instead.

          • Bug Fix: Changed the CancelHandle function in FStreamableHandle to correctly stop the callback from happening if the handle has already completed loading but is in the delayed callback queue.

          • Bug Fix: Fixed an assert which fired for classes with no properties but was larger than its superclass.

          • Bug Fix: Disabled inter-property delta serialization in TSet and TMap when duplicating UObjects to force all elements through the object redirection process.

          • Bug Fix: Fixed the FindAndSetLastZeroBit and FindLast functions in TBitArray for containers of a multiple of 64 elements.

          • Bug Fix: Corrected a signed/unsigned mismatch in the GetVarArgs function.

          • Bug Fix: Fixed Visual Studio debugger visualization of FWeakObjectPtr and TWeakObjectPtr.

          • Bug Fix: Corrected TMap element replication in PIE which was caused by bad property comparisons.

          • Bug Fix: Fixed inconsistent behavior in the GetVarArgs functions in FGenericWidePlatformString and FStandardWidePlatformString where they don't completely fill the buffer before returning -1 when the buffer is too short.

          • Bug Fix: Fixed the GetVarArgs function in FPlatformString to make it return -1 correctly in ANSI mode.

          • Bug Fix: The CLion source code accessor will now wrap the path in quotes when opening a solution, and made it open the CMakeLists.txt file instead of the project file.

          • Bug Fix: Fixed a buffer overrun in the operator< overload in TBitArray.

          • Bug Fix: Added a potential thread-safety fix in the ClearFunctionMapsCaches function in UClass.

          • Bug Fix: Fixed Unreal Header Tool's code generation of const return types of interface functions.

          • Bug Fix: BulkData now supports data larger than 2GB - this allows very large meshes to be imported without problems.

          • Bug Fix: Const-corrected the TArrayView constructor from a std::initializer_list.

          • Bug Fix: Fixed TEnumAsByte to generate an error when a const instance is left uninitialized.

          • Bug Fix: Corrected a race condition in an Async testcase (FAsyncCompletionCallbackTest).

          • Bug Fix: Fixed an obscure bug in map list parsing in DDC commandlet.

          • Bug Fix: Addressed some timers being removed too early when removing all timers associated with a given object.

          • Bug Fix: Fixed aligned load of unaligned memory.

          • Bug Fix: Fixed C vararg usage which didn't call the va_end function to close the va_list.

          • Bug Fix: Corrected the ReallocExternal function in FMallocBinned2 that was storing the unaligned size of an OS allocation.

          • Bug Fix: Cleaned up some memory leaks in the stats system.

          • Bug Fix: Fixed some skipped security checks in FString caused by negated integer overflow.

          • Bug Fix: Fixed the wrong delegate being used to broadcast an OOM condition.

          • Bug Fix: Corrected the propagation of instanced property flags from TMap keys to the outer.

          • Bug Fix: Added missing support for the TimerManager and compactability in the weak lambda delegates.

          • Bug Fix: Fixed LoadPackageInternal returning the wrong package in the EDL case if an Outer package was supplied.

          • Bug Fix: Corrected an issue where new line character wasn't being inserted after PCH when generating new C++ classes.

          • Bug Fix: Cleaned up a stats memory leak.

          • Bug Fix: Made GetCleanFilename return an empty string if a directory is passed in.

          • Bug Fix: Fixed an issue where failure to load a plugin was a silent failure with unattended. It now results in a fatal error.

          • Bug Fix: Fixed incorrect path to Engine DDC when running an executable built with a unique build environment that's more than one path deep.

          • Bug Fix: We now only force all pending unreachable objects to have ConditionalBeginDestroy called on them when async loading when we're actually loading something.

          • Bug Fix: Enforced 2 worker threads as the minimum spawn count on Windows which resolves a potential initialization deadlock on low-end CPUs.

          • Bug Fix: Made sure the Editor custom version is serialized with package file summary in cases where the package doesn't have UMetaData object. Otherwise the package may get corrupted because the localization gather code already forces the Editor custom version on the linker after the file summary has been serialized. This fixes package redirects not being able to save.

          • Bug Fix: Avoided calling the strlen function when appending a single char in the ToString and AppendString functions in FName.

          • Bug Fix: Fixed bad string formatting when detecting issues with package dependencies.

          • Bug Fix: MaterialInstanceDynamic created by WidgetComponent will now be properly added to the component's GC cluster.

          • Bug Fix: Made sure that GC's incremental ConditionBeginDestroy is not running when async loading in editor builds as this may result in the async loading code getting unreachable imports from linkers that haven't been detached yet.

          • Bug Fix: Fixed Garbage Collector potentially destroying objects that were added to the "disregard for GC" pool after the Engine has been initialized.

          • Bug Fix: Fixed a hang when entering PIE when Background Streaming is disabled.

          • Bug Fix: Added a missing mutex lock to RemoveLoaderFromObjectLoadersAndLoadersWithNewImports.

          • Bug Fix: Fixed the HasProperty function in UClass returning false positives for properties that belong to a child class of the one being tested.

          • Bug Fix: Made sure that cooked materials work in the Editor.

          • Bug Fix: Fixed 'Missing DDC Key' log spam when interacting with a cooked texture in the Editor.

          • Bug Fix: When attempting to load an animation to make sure it doesn't exist on disk, the Engine will no longer log warnings as it's expected the animation may not exist.

          • Bug Fix: Fixed some cases of Garbage Collector hitches on some platforms.

          • Bug Fix: The archive created by FOutputDeviceFile will no longer try to log errors as in case of an error it would redirect logging back to itself or, in some cases, cause threading deadlocks.

          • Bug Fix: Target platforms now report secure package formats for windows/linux/mac dedicated servers, and for all other consoles. This works around the fact that some platforms don't return correct data for the IsClientOnly and IsServerOnly functions.

          • Bug Fix: Fixed unexpected custom version errors when re-saving Niagara particles.

          • Bug Fix: Changed the UObjectArray chunk size to 64K (down from 65K which was a mistake).

          • Bug Fix: Made sure MediaPlayer and MediaPlaylist don't get added to GC clusters as they violate GC assumptions.

          • Bug Fix: Fixed soft object paths not resolving the package name properly in some cases when loading.

          • Bug Fix: Made sure any files that are assigned to an encrypted pak file are duplicated into all other encrypted paks that reference them.

          • New: Added GetParentNativeClass util function to UObjectBaseUtility.

          • New: Added support for generating mapping file with UnrealPak by using GeneratePixMappingFile, which can be imported into PIX IO Trace capture to view loose file name directly in PIX.

          • New: Made TWeakObjectPtr's assignment operators return a reference to themselves.

          • New: Modernized unaligned reads so that sanitizers work and any potential optimization hazards are avoided.

          • New: Added support for JSON serialization of maps of FString keys with int64 values.

          • New: Added Reserve function to FLargeMemoryData.

          • New: Implemented USE_BOOT_PROFILING, which is used to profile the very early boot process.

          • New: Added a new define (AGGRESSIVE_MEMORY_SAVING) for some aggressive memory savings techniques. This is not enabled by default since there is some performance cost.

          • New: Added the ability to have "DisallowedClasses" metadata to prevent certain assets from being assigned to references. A current use case of this is that SlateBrush no longer allows UMediaTextures.

          • New: Added SQLiteCore:

            • SQLiteCore provides a UE4 friendly C++ wrapper around an embedded version of SQLite (currently 3.26.0) that is compiled using a custom "OS" that uses the UE4 HAL to provide consistent support on all of our platforms.

            • The UE4 HAL has some limitations (see below) compared to the native OS implementations of SQLite, however the native OS implementations don't compile on every platform supported by UE4. If SQLite compiles natively on every platform you want to target, then you can set bCompileCustomSQLitePlatform to false in your .Target.cs file. Note that this requires a source build of UE4 as the SQLiteCore plug-in must be recompiled.

            • The primary limitation of using the UE4 HAL with SQLite is concurrent database access, as the UE4 HAL doesn't provide an implementation of shared memory (as not all platforms implement it), nor does it provide an implementation of granular file locks. These two things mean that only one FSQLiteDatabase can have the same database file open at the same time.

            • The embedded version of SQLite is compiled with FTS4 and FTS5 enabled, and with extension loading support disabled. It is also compiled with ICU support enabled when bCompileICU is set to true for your target.

            • SQLiteCore provides lower-level access to the SQLite API than SQLiteSupport does, which allows you to take full advantage of things like prepared statements and data binding. SQLiteSupport is now internally implemented using SQLiteCore.

          • New: Added IsStale function to TWeakInterfacePtr in order to match IsValid.

          • New: Added support for garbage collection at a higher frequency if we're low on physical memory using the cvars gc.LowMemory.TimeBetweenPurgingPendingKillObjects and gc.LowMemory.MemoryThresholdMB.

            • gc.LowMemory.TimeBetweenPurgingPendingKillObjects is time in seconds we should wait between purging object references to objects that are pending kill when we're low on memory.

            • gc.LowMemory.MemoryThresholdMB is the threshold in MB for low memory mode GCs to kick in (this defaults to 0, which is disabled).

          • New: Enabled string pooling in optimized builds.

          • New: Exposed working directory in FMonitoredProcess.

          • New: Alignas() parsing in UnrealHeaderTool is now supported.

          • New: Added new experimental MallocBinned3 for 64bit platforms.

          • New: Added RemoveIf and StableRemoveIf algorithm functions to the Algo class.

          • New: Changed compile time PLATFORM_CACHE_LINE_SIZE to 64 on all platforms.

          • New: Added move support for the Add function in the TSparseArray class.

          • New: Added support for Default/BasePakFileRules.ini.

            • Allows specifying rules for overriding pak/chunk behavior.

            • Moved mobile bloom content stripping to BasePakFileRules.ini so it can be overridden by games.

          • New: Changed pak code to allow placing the same file into multiple paks if requested by the cooker. This can be disabled with bForceOneChunkPerFile.

          • New: Added StaticClass() and StaticStruct() non-member functions as an alternative to T::StaticClass() and T::StaticStruct(). Also added StaticEnum() for enumerated types.

          • New: Added CountBytes method to FString to match other Core and Container types.

          • New: Made ensure()s fire with a configurable chance.

          • New: Added an experimental option to use a compact version of the runtime asset registry. This saves about 3-13MB depending on the config.

          • New: Added CONDITIONAL_SCOPE_LOG_TIME*() macros, which only log when the condition is true.

          • New: Exposed LTCG and PGO settings to Core module (for logs and analytics).

          • New: Added support for priority for UObject loading to help tune streaming performance in scenarios where texture and audio requests are starving level streaming. This is controlled with s.AsyncLoadingPrecachePriority. Note: AIOP_MIN is still the default, but this can be adjusted per platform or project as required.

          • New: Added a conversion path for deserializing interface properties as object properties.

          • New: Added a simple TBasicArray RAII dynamic array type for low level code that can't use TArray because of its dependencies.

          • New: Updated Linux to now use C locale like all other UE platforms.

          • New: We now provide the file path of the ICU DLL that failed to load.

          • New: Added support for SetThreadDescription thread naming API. This API is better than the old SEH style thread naming since the names also show up in crash dumps and ETW traces.

          • New: Enabled std::aligned_storage to build under VS 2017 15.8.

          • New: Added asserts to the Reserve functions in TArray and FString in order to ensure the requested sizes are legal.

          • New: Added UE_STATIC_DEPRECATE() macros which conditionally display a deprecation warning.

          • New: Added UE_DEPRECATED() which uses C++14's [[deprecated]] attribute syntax and deprecated the old DEPRECATED() macro.

          • New: Implemented FGuardValue_Bitfield variant to make guarding bitfield values more convenient as TGuardValue cannot take them by reference.

          • New: Added comments to the reflection mirror of FPolyglotTextData so they show up when using it in the editor. Also added the note "(it should be the same as the originally authored text you are trying to replace)" to the NativeString description in both places.

          • New: The warning 'Calling StaticLoadObject during PostLoad of ...' will now also include the parameters passed to StaticLoadObject for easier debugging.

          • New: Added some Serialize function parsing tests to UHT's internal test cases.

          • New: Added optimization to stat UObjects to prevent excessive rendering off of the screen. This gave us at least a 10x improvement.

          • New: Allowed overriding the thread pool to use when starting the background task with FAutoDeleteAsyncTask.

          • New: Added TargetRules option bAllowNonUFSIniWhenCooked which, when true, will disable non-UFS ini files from loading in cooked builds, except for GameUserSettings.ini.

          • New: Implemented utility for creating JSON DOMs manually.

          • New: Added gc.DumpRefsToCluster Name=ClusterRootObjectName command to dump references to all objects within a cluster. This is useful for determining if clusters are indeed 'stale.'

          • New: Implemented a new override for LoadPackageLinker that takes a lambda that can be used to process the linker before EndLoad is being called.

          • New: Added code that now dumps the callstack (including the specific function) from Engine or game code that unexpectedly added a new custom version in serialization code in a non-deterministic way.

          • New: It's now possible to enable support for cooked data in the editor in project settings. The ini setting moved from [Core.System] AllowCookedDataInEditorBuilds=True to [/Script/UnrealEd.CookerSettings] cook.AllowCookedDataInEditorBuilds=True.

          • New: Added an %\ENGINEDIR% variable that can be expanded from config files.

          • New: Implemented the != operator to FJsonValue and made both == and != symmetrical.

          • New: Added Unit Test for Timecode.

          • Improvement: Improved the performance of MallocBinned3 slightly and fixed some static analysis warnings.

          • Improvement: Improved memory of UObject hash tables

          • Improvement: Removed the redundant re-opening of .module files when calling the FindModulePaths function of FModuleManager.

          • Improvement: Optimized TSet assignment operator and copy constructor.

          • Improvement: Optimized Str[n]icmp function and ToLower/ToUpper functions in TChar. Replaced expensive CRT to[w]lower() / to[w]upper function calls with locale-independent implementations. The semantics match standard C locale that all UE platforms use - only ASCII characters are considered.

          • Improvement: CSV profiler improvements:

            • Added CSV_TIMING_STATS_EMIT_NAMED_EVENTS and CSV_EXCLUSIVE_TIMING_STATS_EMIT_NAMED_EVENTS defines so we can analyze Csv stats in PIX/Razor (disabled by default).

            • Further optimized the CSV processing thread by getting rid of the exclusive stat temp array copy by processing the stats inline.

          • Improvement: Changed implementation of check, verify, and ensure macros to generate much less code on the hot path. Assert sites can now be as little as four instructions. This improves instruction cache utilization, gives the optimizer more opportunity to inline, and improves debugging as more non-volatile registers are preserved. The cold path instructions were also moved to a separate section in the binary to further separate hot from cold.

          • Improvement: Implemented better packing for FNameEntry on 64-bit platforms to reduce memory usage.

          • Improvement: Updated Framepro captures taken using the framepro.startrec and framepro.stoprec console commands to now have the process ID added to the filename.

          • Improvement: Reduced the time locks are held during allocation and reallocation in MallocBinned2.

          • Improvement: Implemented several improvements to Asset Registry memory and load times in cooked builds.

          • Improvement: Allowed platform specific math test function implementations as well as the generic implementations.

          • Improvement: Refactored UnrealHeaderTool-generated structs to reduce executable space.

          • Improvement: Improved CSV profiler exclusive stats (better instrumentation for effects time, broke down WorldTickMisc further).

          • Improvement: Added a few drive-by optimizations to game startup times that yielded ~15% speedup in an internal project.

          • Improvement: Optimized size and and performance of TFunctions.

          • Improvement: Reduced CPU usage for Cook-on-the-fly server by not busy-waiting for assets to cook. Also added an event which is signaled when a network request has been received. The main COTF loop blocks on this event when the cook request queue is empty. This reduces CPU usage while keeping the request latency low.

          • Improvement: Optimized TSet's copy assignment operator to copy the existing hash rather than rehash all the elements.

          • Improvement: MD5 and SHA1 Update functions now handle input lengths of up to 61 bits.

          • Improvement: Improved MallocBinned2 reporting.

          • Improvement: Allow console variable changed callbacks to be defined inline in their declaration.

          • Improvement: Improved reporting of bad TimerManager internal state.

          • Improvement: Moved UObject serialization state out of FUObjectThreadContext to a local-only (to the current FAsyncPackage/LoadPackage call) FUObjectSerializeContext. This will allow more advanced changes to the old serialization paths and prevent objects from being added to random FAsyncPackages when async loading (and that will allow package prioritization).

          • Improvement: Moved TWeakInterfacePtr into CoreUObject, and added a lot more functionality to it and made it work more closely with TScriptInterface so that they're easier to compare and interchange.

          • Improvement: Added default Engine textures to root set in cooked builds (even though they are referenced by a root set Engine object) to prevent them from being added to clusters which would result in these clusters always staying in memory.

          • Improvement: Disabled the checks against adding or removing objects from the UObject hash tables when iterating over them in shipping builds to reduce their memory overhead.

          • Improvement: During asset registry generation in the cooker, we now pass the list of cooked files to the AssetManager when calling the PreSaveAssetRegistry function.

          • Improvement: Changed TEncryptedAssetSet to be a map of group-name to a set of package names, rather than primary asset ids.

          • Improvement: The cooker will now attempt to collect garbage when the Engine is getting close to running out of available UObject indices.

          • Improvement: Allowed JSON_SERIALIZE_OBJECT_SERIALIZABLE object to be an expression.

          • Improvement: Added various updates to the WIP dynamic content encryption system.

          • Improvement: Editor only data is not excluded from totals gathered from GetResourceSizeEx.

          • Improvement: When reporting ensures, ThreadHeartBeat will now be suspended for all threads to prevent detecting hangs on threads that are waiting for the thread that triggered and is now processing the ensure.

          • Improvement: Avoided a strlen function call in the AppendInt function in FString since we already know the length of the string we built. This was used frequently when converting FName to FString.

          • Improvement: Made sure there are no dependencies that are pending load when trying to create GC clusters when async loading.

          • Improvement: Cooker settings will now automatically update console variables associated with them so that they take immediate effect instead of after restarting the editor.

          • Deprecated: Deprecated TIndirectArray's placement new syntax, which can cause new/free or malloc/delete mismatches.

          • Removed: Removed ArchiveAsync.h since it didn't contain anything useful anymore.

          • Removed: Removed unnecessary startup scan in cooked games/server.

          • Removed: Removed invalid postcondition check in the Trim function in TLockFreeFixedSizeAllocator.

          • Removed: Removed a redundant buffer length argument from the GetVarArgs functions in FPlatformString and TCString, and deprecated old overloads.

          • Removed: Removed the SecureCRT mode from our string functions as it makes the implementation inconsistent with other platforms.

          • Removed: Removed redundant checks when allocating a small block in the ResizeExternal function in FMallocBinned2.

          • Removed: Removed NTSC 23.976 from the timecode drop frame list.

          • Removed: Removed the functionality to merge GC clusters as it was never used and generally could lead to keeping all assets in memory forever.


          • Crash Fix: Added a fix for a rare crash that occurred when the mouse entered or left a game viewport while it didn't have an underlying SceneViewport.

          • Crash Fix: We now check asset validity to avoid rare crashes when reopening a level.

          • Crash Fix: Fixed a crash related to registering an editor mode after startup.

          • Crash Fix: Fix for rare crash when world settings weren't available during thumbnail rendering.

          • Crash Fix: Fixed a crash when importing a static mesh and the parent package is null.

          • Crash Fix: Fixed a Hot Reload crash related to maps containing streaming levels.

          • Crash Fix: Input action/axis mapping details customization will no longer display the remove from array icon if the input action or axis mapping is not in an array as pressing it could cause the editor to crash.

          • Crash Fix: Fixed a crash caused by re-importing assets in unattended mode.

          • Crash Fix: Fixed OOM issue when rendering SplineMeshComponent with a huge tangent vector.

          • Crash Fix: Fixed a bug that could make the editor crash when previewing LODs in the Skeletal Mesh Editor after importing a new LOD from the Content Browser.

          • Crash Fix: Fixed a crash that could happen when selecting instances.

          • Crash Fix: Fixed a crash when running with Instancing in some levels on a dedicated server.

          • Crash Fix: Fixed a crash where material was not valid when computing adjacency information.

          • Crash Fix: Fixed a crash when having a material with tessellation enabled but no layer painted.

          • Crash Fix: Fixed a crash that happened when using Change Component Settings on a setup where landscape is split between streaming level.

          • Crash Fix: Fixed a crash that could happen when force deleting a level with a landscape actor in it and using world composition.

          • Crash Fix: Fixed a possible crash that could happen if you tried editing a landscape streaming proxy when the landscape actor was not loaded.

          • Crash Fix: Fixed a crash that would happen when using a material with tessellation.

          • Crash Fix: Added another conditional to guard against crash with comment pasting.

          • Crash Fix: Fixed a crash in the blueprint debugger watch window.

          • Crash Fix: Fixed a crash in the case of the FrameRate being invalid. GetFirstFrameRate() could sometimes return a nullptr.

          • Crash Fix: Fixed a Crash when Cast to UStructProperty failed.

          • Crash Fix: Added AudioTrack::CreateNewSection() to fix crashes when adding an audio track through Python.

          • Crash Fix: Opening the static mesh editor while the socket manager has not been initialized no longer causes a crash.

          • Crash Fix: Fixed VR editor crash when spamming trigger press.

          • Bug Fix: Fixed a small memory leak in the CryptoKeys editor module.

          • Bug Fix: Fixed issues where "Use Mouse For Touch" was generating incorrect sets of event with incorrect positions. It is now a much better simulation of touch events.

          • Bug Fix: Fixed it so that Data Tables can be reimported from csv/json again if they were originally created in the editor.

          • Bug Fix: Updated tab key functionality in the output log's console box to not leave behind unwanted tab characters.

          • Bug Fix: When replacing an actor, we now make sure that its Owner and Instigator are correctly maintained.

          • Bug Fix: Added a fix for an issue where instanced EditInlineNew properties were being improperly linked after copying.

          • Bug Fix: Updated ResetToDefault widget to only mark properties as having a custom reset handler if one is passed in.

          • Bug Fix: A fix was added for a rare race condition in startup movies due to invalidating a texture while getting its size.

          • Bug Fix: The Static Mesh thumbnail will now always display LOD 0.

          • Bug Fix: Adding the same collision primitive more than once when importing them from an FBX is no longer allowed.

          • Bug Fix: Texture Editor: Fixed HSV controls to work correctly with HDR textures.

          • Bug Fix: Fixed an infinite loop that was caused when selecting an actor that has a component parented to the actor's parent.

          • Bug Fix: In the Details Panel for objects, the Collision Presets Object Type now immediately updates when toggling Simulate Physics.

          • Bug Fix: World Outliner: Search results now update properly after pressing ESC to clear search filter.

          • Bug Fix: Mask is now applied to fill color when filling LOD color data.

          • Bug Fix: Fixed issues with array handling in details panel when multiple actors are selected.

          • Bug Fix: Fixed new asset not being able to create objects if another window had focus.

          • Bug Fix: Disabled skeletal mesh sections are now restored when re-importing.

          • Bug Fix: Fixed an issue with 'Ambiguous search' warnings appearing that were unrelated to actual warnings or errors during cooking.

          • Bug Fix: Animation curves created within the editor can now be exported to an FBX.

          • Bug Fix: Fixed an issue with exporting to FBX with a skeletal mesh using cloth.

          • Bug Fix: Fixed a vertex painting migration issue with old skeletal mesh assets (from before 4.18).

          • Bug Fix: Details view is now properly refreshed when a locked actor is deleted.

          • Bug Fix: Fbx Importer: PostEditChange is now called on extra Static Meshes when importing without the combine flag. PostEditChange was previously called only on the first imported mesh.

          • Bug Fix: The Fbx importer now supports animation layers when computing the time span, the merge layer operation is done before the conversion.

          • Bug Fix: Targeted RHI ordering is now preserved when changing values.

          • Bug Fix: World Outliner: Fixed a bug causing deleted folders to reappear when a map is reopened.

          • Bug Fix: Skeletal Mesh LODs section data is now restored after when re-importing.

          • Bug Fix: Popup menus are now prevented from unexpectedly overlapping mouse position.

          • Bug Fix: Fixed an issue with visibility when Copy-Pasting actors from hidden layers.

          • Bug Fix: Fixed an issue with the naming of Materials generated by the Merge Actor tool to have a single 'M_' prefix.

          • Bug Fix: Fixed the material ID when auto-generating LODs from a mesh where the materials were re-ordered to the FBX order.

          • Bug Fix: Git Plugin: Fixed an issue where the directory was not being found using the git worktree.

          • Bug Fix: World Outliner: Fixed the Select All Descendants menu option to select all children rather than just the immediate children.

          • Bug Fix: The FBX re-import skeleton comparison now compares the incoming FBX skeleton bones with the bones used by the re-import asset. Before it was comparing the incoming with the full skeleton asset.

          • Bug Fix: Skeletal Mesh Editor: Fixed an issue where the Preview Asset was becoming detached when socket was renamed.

          • Bug Fix: Editor: Moved overridden public EditorViewportClient functions to public.

          • Bug Fix: Fixed an issue with connecting reroute nodes for enum types in Niagara graphs.

          • Bug Fix: Fixed DataTableRowHandle display name in Details panel when copy/pasting property.

          • Bug Fix: Fixed-size array properties will now copy/paste all array values.

          • Bug Fix: Level text in viewport will now correctly display names with trailing numbers.

          • Bug Fix: Fixed unit parsing bugs that would always choose first matching unit type instead of a complete match ("1.3cd" would match Celsius rather than Candela). White space between number and unit (like "10 cm") is also now correctly parsed.

          • Bug Fix: We no longer use the legacy localized fallback fonts in the font editor preview.

          • Bug Fix: The default vertex color is now white and not red.

          • Bug Fix: Fixed the FBX Static Mesh socket import to remove the extra conversion.

          • Bug Fix: Made a fix for Setting focus not working in Fast Path for WidgetComponents in world space. Also added a fix for a rare assert caused by widget components creating MID's in async tasks (alongside screen proxy creation) moved it out.

          • Bug Fix: Fixed an issue where editor utility widgets would stay in the windows menu after being closed.

          • Bug Fix: Fixed an issue with array builders used in details customizations not allowing copying/pasting of the property.

          • Bug Fix: Never hide the filter bar if there is a filter active.

          • Bug Fix: Feature level switching is now disabled when a lighting build is in progress.

          • Bug Fix: Fixed command line arguments passed through the project launcher not being escaped properly.

          • Bug Fix: Fixed Replace Selected Actors action when replacing Brushes. This now correctly rebuilds geometry instead of leaving a copy of the brush behind in the world.

          • Bug Fix: RHIs need frames in order to handle all their book-keeping - even when debugging a blueprint - without this they will leak memory into their internal pools.

          • Bug Fix: The sub-level view now shows the correct locked state instead of random locked states.

          • Bug Fix: Changed the texture details panel to allow maximum texture size to go up to the maximum supported size of the selected texture type.

          • Bug Fix: Fixed the Message Bus Source timing out when connecting with a large number of characters. Resolved by correctly initializing ConnectionLastActive variable when the Message Bus Source receives a Client.

          • New: World Outliner: Added Duplicate Folder Hierarchy menu option and Edit menu/hotkey functionality for folders (Cut/Copy/Paste/Duplicate/Delete/Rename).

          • New: Added viewport setting to invert right mouse dolly.

          • New: Selecting multiple keys of the same time now displays the time instead of "multiple values".

          • New: Supplying factory to asset import task is now supported.

          • New: Added exportPreviewMesh in the animation category of the fbx export options dialog. This allows the user to control if the preview mesh should be exported with animations or not. It replaces a dialog that was showing before the fbx export options dialog.

          • New: The Global Open Asset Window (Alt+Shift+O) now has filter support.

          • New: DeviceManager: platforms can now specify a custom widget for the Device Info panel.

          • New: Added "Enable cook on the fly" option to cooker settings and launch menu.

          • New: Skipped the text highlighting search when there isn't any highlighted text in a Slate text block.

          • New: Updated USD SDK to v19.01.

          • New: A message prompt is now shown when packaging with an empty game default map.

          • New: The display of the current level now is a button that allows you to change between filtered levels. Also, the level of the currently selected actor is displayed above.

          • New: FBX importer: Added warning for when there are too many UV channels.

          • New: Added more precision in the editor for float fields.

          • New: Fbx exporter can now export skeletal mesh LODs.

          • New: FSkinWeightVertexBuffer::AllocateData and FSkeletalMeshRenderData::RequiresCPUSkinning are now exported to be used by other modules.

          • New: Dropping of non-placeable UObjects in the editor viewport is now prevented.

          • New: Camera preview viewports can now also preview the game world if you are currently simulating.

          • New: Skeletal reduction is now allowed on LOD 0.

          • New: Search filters can be cleared with the Escape button in the settings windows.

          • New: Scene outline synchronization now makes sure that the tree view selector is within the selection set.

          • New: FFilePath: Added metadata "RelativeToGameDir" to support relative path to project directory.

          • New: The Accessible Platform list no longer includes platforms which have no Configuration directory present.

          • New: Added import vertex color options to the Skeletal Mesh FBX importer.

          • New: Source Control: Added a "Diff Against Depot" context action to the Submit window.

          • New: Added the ability to customize an existing property on a class in a details panel without moving it from its location on the details panel. See IDetailLayoutBuilder::EditDefaultProperty.

          • New: Excluded abstract classes in the ClassPin of CreateWidget.

          • New: Added FAsyncTaskNotification as a non-blocking alternative to FSlowTask.

            • FAsyncTaskNotification allows you to create Slate notifications for asynchronous tasks without having to directly depend on Slate (you only need a dependency on Core), which is useful for code that wants to report progress but doesn't want to be directly concerned about UI details.

            • It does this using an extensible factory that allows Slate to register its own implementation when available; this also allows the notifications to be customized by anything that wants to implement IAsyncTaskNotificationImpl and register a factory with FAsyncTaskNotificationFactory.

            • Note: FAsyncTaskNotification must be created on the game thread, but may be passed to other threads after being created.

          • New: Added the bindable command AlignBrushVerticesToGrid.

          • New: Added the possibility to reduce static mesh LOD from any lower LOD instead of reducing from LOD 0 only.

          • New: Added functionality to Preview Scene Settings that allows the user to hide Environment Cubemap without disabling lighting, see bUseSkyLighting in the Preview Scene details panel.

          • New: Git Plugin: Added an option to create a README.md file at the time of the git repository creation.

          • New: Added control over the collection paths being included in the asset tooltips. Also added wrapping for cases where an asset is in many collections.

          • New: Hiding the material conflict dialog during scripted FBX import is now allowed.

          • New: Selecting a child actor component (at any level of nesting) will select the parent actor.

          • New: DockTabs now supports a suffix string; it takes precedence in layout when space is tight, currently used by asset editors to show the dirty asterisk.

          • New: Added Support Simplygon reduction API for MeshDescription.

          • New: The Device Output Log is no longer an experimental feature and is enabled by default.

          • New: Import and export FBX metadata on SkeletalMesh and Skeleton assets.

          • New: Allow toggling visibility of all selected layers through the Visibility (Eye) icon in the Layers panel.

          • New: Added level editor actions to select immediate children or all descendants of the current selection.

          • New: PrimaryAssetId properties in the editor now have a thumbnail representing the asset they reference in details panels, similar to a normal asset reference.

          • New: Viewport setting to scale the camera speed based on its view distance. This helps to adjust the camera speed when zooming in on small objects and zooming out of big objects.

          • New: Added an -OnlyUnversioned option to the ResavePackages commandlet which will resave any unversioned packages.

          • New: Added support for type A files in the IES importer.

          • New: Editor Perforce connections do not set the program name of "UE4" for the session.

          • New: Viewport setting to allow the camera to orbit around the current selection.

          • New: Fixed "Loading Visual Studio" popup not closing when a specific Visual Studio version is selected in the editor preferences window.

          • New: VisualStudioSourceCodeAccessor now uses the Visual Studio Setup API to query installed VS2017 and VS2019 versions.

          • New: Disable fallback in the font preview viewport in the font editor so that you can see the real set of glyphs that will be rendered.

          • New: Added better warning messages for when users try to rename rows with invalid names in the row editor. Updated the editable text layout to prevent it from calling OnTextCommitted delegates when the text has not been changed.

          • Improvement: Optimized vertex paint performance in editor.

          • Improvement: Curve editor now allows changing the time on multiple keys if they're on different curves.

          • Improvement: Optimized editor load times by reducing the frequency of status updates about package loading.

          • Improvement: Changed the asset viewer profile customization to have proper sub-categories for easier reading.

          • Improvement: USD sequence export has been simplified to query world state instead of attempting to inspect curves on tracks.

          • Improvement: The currently opened tab is now preserved when closing another one.

          • Improvement: Increased the maximum amount of favorited levels from 10 to 20.

          • Improvement: Autosave no longer saves map build data, which saves time and hard disk space.

          • Improvement: Improved the tree view representation of collection inclusion.

          • Improvement: USD integration updated to support multiple layers.

          • Improvement: Improved consistency between in-game and output log console inputs, and various other QoL improvements.

          • Improvement: Deleting an Editor Utility asset now closes the tab associated with it.

          • Improvement: Made editor utility edit/run behavior more consistent.

          • Removed: Removed duplicate vertex paint undo events.


          • Bug Fix: Particle emitter properties are now copied when Duplicate Emitter or Export Emitter is invoked.

          • Bug Fix: Fixed a number of DPI issues in Cascade.

          Content Browser

          • Bug Fix: Toggling off the Gameplay Filter Tag no longer causes assets to be shown in the Content Browser.

          • Bug Fix: Fixed an issue with the recently opened filter triggering the modified filter.

          • Bug Fix: Fixed an issue with filters not applying when the Editor is opened.

          • Bug Fix: Drag and drop file import no longer blocks external file explorer for the duration of the import.

          • Bug Fix: Fixed an issue where the Content Browser cook path length estimation was not accounting for engine content and plugins properly, leading to overestimation of cook path length.

          • New: New content browser filter to show files that are not under source control.

          • New: Added an extension point for extra state indicator icons and tooltip on the top left corner of the Content Browser tiles.

          • See FContentBrowserModule::GetAllAssetViewExtraStateIconsGenerators and FContentBrowserModule::GetAllAssetViewExtraStateTooltipGenerators.

          • New: Asset Registry and Content Browser now also update on directory changes (in addition to file changes).

          • New: Advanced copy now updates references correctly for all Blueprint types. Levels are currently not supported.


          • Bug Fix: Invalidate lighting when removing instance in editor.

          • Fixed a case where "lighting needs to be rebuilt" would appear if you had instances and it would remove all of them and build the lighting again.

          • Bug Fix: Fixed memory display of "stat foliage" to correctly track memory usage.

          • Bug Fix: Fixed an issue where loading order of a lighting scenario would affect lightmap application on Instanced Static Mesh.

          • Bug Fix: Correctly reapply lightmaps in editor when a lighting scenario change occurs.

          • Bug Fix: Fixed ProceduralFoliageVolume Foliage Type removal not taken into account at next Resimulate.

          • Bug Fix: Fixed instancing not taking into account instances scale while calculating LODs.

          • Bug Fix: Fixed an issue that would occur with foliage; if the user performed undo/redo very fast, it would end up in a buggy state.

          • New: If "in-place" foliage updates are desired, KeepInstanceBufferCPUAccess should be set to true. This comes at the cost of memory, as we would otherwise only keep the instance data on the GPU side in most cases.


          • Bug Fix: Fixed a Page Allocator memory leak from custom data caused by a memory realloc, it was happening when using landscape with parallel init views.

          • Bug Fix: Fixed cases where it was possible to have your landscape become invisible if there were some errors in your landscape material.

          • Bug Fix: Cleanup nonrequired data for Adjacency information. Fixed a Memory leak where Adjacency index buffer would not be freed, when the owner was freed (Shared Buffer).

          • Bug Fix: Fixed a calculation error when importing a weightmap using the .r8 format.

          • New: Landscape Flatten Tool - terrace flatten mode added, allowing user to flatten landscape at specific intervals in world space.

          • New: All actors are now selectable in landscape mode, and their information will appear in the details panel.

          • New: Added support for keybindings for adjusting brush size, falloff, and strength while moving the mouse cursor while the key is pressed.

          • New: Improve the speed of Change Component Size tool.

          • New: When using World composition, if you go past the last LOD range, we will now always assume this one.

          Material Editor

          • Bug Fix: Added a custom reset to default for refraction depth bias.

          • Bug Fix: Fixed missing conversions to/from texture object param, hiding convert to param on texture sample param.

          • Bug Fix: Fixed an issue with texture coord and property nodes not showing up in search.

          • Bug Fix: Fixed an issue with SetMaterialAttributes Input serialization by giving input pins names.

          • Bug Fix: Added a fix so that you can now undo the creation of comments.

          • New: Moved sort priority down in the material parameters panel.

          • New: Moved the node alignment tools to a more generic implementation and added menu options for them to the material editor.

          • New: Added some guards against nullptr and out of array bounds access when getting node titles.

          • New: Function inputs and outputs now rename correctly on duplication.

          • New: A fix was added for material functions' input types being labeled incorrectly.

          • New: Material graph nodes can now have duplicate names in all cases except when creating a new parameter from a constant.

          • New: Fixed an issue with post process materials not previewing correctly. Nodes no longer blink on parameter refresh.

          • New: Scalar/Vector parameters and subclasses with different behavior can no longer have name conflicts. Renaming parameters to an existing name in the same class will also change the value to the existing value.

          • New: Lightmass settings now display in the same override style as the rest of the material instance properties. Base properties are read from parent on load if they are not overwritten.

          • New: Show Modified Properties is now hidden and added custom Show Overridden Parameters in Material Instance editor. This works for all parameters and needs additional work for general properties (Physical Material, and so on).

          • Improvement: Cleaned up the thumbnail / preview properties.

          Media Framework

          • Bug Fix: Changed "WhitelistTargets" to be an array instead of a string.

          • Bug Fix: Media capture is now stopped when PIE is started and we are using the current editor viewport. Since it's 2 different worlds, it caused conflict by not capturing the proper viewport.

          • Bug Fix: Added support for MediaBundle in timecode synchronizer.

          • Bug Fix: MediaCapturePanel: Fixed an issue with the camera output not working for actors in the PIE world.

          • Bug Fix: Fixed an issue with the Timecode synchronizer which never resolved with SDI input.

          • Bug Fix: Blackmagic: Fixed problem when closing and reopening a device too quickly causing a failure during opening.

          • Bug Fix: Blackmagic: Fixed input/output usage on Decklink 8k pro.

          • Bug Fix: Corrected the FPS for Dual Link. Fixed an issue where it would try to select the item from the next column even if the previous didn't match.

          • Bug Fix: MediaTexture now returns last rendered guid to avoid having material expressions using a guid that will get registered the next frame.

          • Bug Fix: Prevented a case where MediaTextureResource could use a sample of the future but not remove it from the queue.

          • Bug Fix: MediaCapture capture Slate in standalone and in packaged build.

          • New: Added the option to output in 3G level B if the video format is 3G level A.

          • New: Added support for Kona5 12G.

          • New: Changed the MediaProfile and TimecodeSynchronizer UI to remove the long name from the toolbar.

          • New: HDMI enabled device is now supported as an input source.

          • New: Added support for YUV as input.

          • New: Added a cropping option to media capture. Also added FileMediaOutput which allows for output through the requested buffer using the ImageWriter.

          • New: Added Blackmagic 10bits conversion GPU support.

          • New: We now support 10bit YUV for Aja.

          • New: Implemented WMF hardware accelerated video decoding support.

          • New: Added AJA psf support. This includes input and output.

          • New: Added Blackmagic YUV conversion output GPU support.

          • New: Added option to invert key output in media capture.

          • New: Added bDisplayWarningIfDropFrames as an option. Use the already existing flag from MediaOutput and copy it to the AJA output options.

          • New: Log the device version when we open a connection.

          • New: Added stats to MediaCapture as "STAT MEDIA".

          • Improvement: Improved media player & timecodesynchronizer toolbar UX. Separated the main button from the combo box.


          • Bug Fix: Fixed soft object properties not loading when accessed in Python, and fixed soft class properties not validating their meta-class correctly.

          • Bug Fix: Fixed the Python stub file missing code when running the editor with Python developer mode enabled.

          • Bug Fix: ExecuteConsoleCommand is now allowed to route to the engine as a fallback if there are no player controllers active.

          • Bug Fix: Custom collision channel names are now exposed to Python.

          • Bug Fix: Fixed GetNumLODs being exposed to Python as get_num_lo_ds rather than get_num_lods.

          • Bug Fix: Fixed type validation of objects within Python containers.

          • Bug Fix: Fixed Python commandlet -Script parameter failing to parse nested escaped quoted strings.

          • Bug Fix: Fixed a bug in the blueprint debugger where duplicated watches could show up.

          • New: Exposed GetWorldSettings to scripting.

          • New: Exposed FPaths to Blueprints and Python through a wrapper library. Functions can be found under Utilities/Paths in Blueprints and unreal.Paths in Python.

          • New: Exposed PoseAssetFactory to Python and Blueprints.

          • New: Added Python negated unary prefix operator (-obj) which also enables adding ScriptOperator = "neg" as metadata to a scripting reflected UFUNCTION.

          • New: - Hoisted static math functions and constants from KismetMathLibrary onto related script classes as methods (Python) - added additional math functions to KismetMathLibrary and exposed them to scripting (BP, Python, and so on) - grouped related math functions in KismetMathLibrary (all FVector commands together, all FRotator commands together, and so on) - removed hand-written Python Unreal math routines and replaced with hoised versions using "ScriptMethod" meta data in KismetMathLibrary.

          • New: Added an automatic material layouting function in UMaterialEditingLibrary to place the material expressions in a grid pattern.

          • New: Added a ScriptMethod tag to EditorSkeletalMeshLibrary::RegenerateLOD to allow it to be called directly on a SkeletalMesh object in Python.

          • New: Python find_object, load_object, find_asset, and load_asset functions will now automatically follow redirectors unless the 'follow_redirectors' parameter is set to False.

          • New: Exposed ULevelStreaming::GetLoadedLevel to scripting.

          • New: Exposed UEditorLevelUtils::SetLevelVisibility to scripting.

          • New: Added Python support on Mac.

          • Improvement: Data table improvements: Added a search for references on both the row handle as well as the row in the data table editor.


          • Bug Fix: Disabled the +Track and +Section buttons when the sequence is read only, rather than hiding them completely. Also, this allows the camera button to be visible and toggled for a read only sequence.

          • Bug Fix: We now get relative transform when caching data for converting possessable to spawnable.

          • Bug Fix: Moved section to paste destination rather than setting start/end frames individually.

          • Bug Fix: Step to next/prev key no longer uses ExclusiveEndFrame. This fixes cases where you want to step to the last key of a section and add another animation clip that doesn't overlap.

          • Bug Fix: Fixed an issue where CineCameraComponent settings would always revert to defaults.

          • Bug Fix: Pasting a track now clears flags on subobjects.

          • Bug Fix: Custom float channel serialize.

          • Bug Fix: The Render Movie Handle Frames feature no longer generates the incorrect number of frames under certain conditions.

          • Bug Fix: Autoscroll now works properly when in a subsequence.

          • Bug Fix: Fix for Debug exception due to TArray::Reserve(-1).

          • Bug Fix: Fixed an issue if the object being baked is attached through the map (and not through a track).

          • Bug Fix: When rendering shots with handle frames, only shots that are initially active will be rendered.

          • Bug Fix: Disabled the context menu when in read only.

          • Bug Fix: Removed restrictions on perspective viewports when updating camera cuts.

          • Bug Fix: Clear locked cameras for transform track if the viewport allows cinematic control. Fixes an issue where you are looking through a camera and start recording through Take Recorder, and the camera pops out of the viewport.

          • Bug Fix: Editing disallowed if level edits only is set.

          • Bug Fix: Forcing animation playback to be Custom when playing back Sequencer Animation Assets even if the character is trying to force itself back to BP.

          • Bug Fix: Fixed evaluating subsequences in isolation that were using the wrong time.

          • Bug Fix: Fixed some cases where the director class could become detached from its blueprint.

          • Bug Fix: Master event tracks no longer have an object pin by default. Level blueprints are now only accessible through interfaces.

          • Bug Fix: Fixed an issue where child possessable bindings would not be invalidated when their parent was invalidated.

          • New: A callback can be provided when invoking a Movie Render via Python. This callback will notify you when the Movie Render finishes so that you know you can invoke another one. To use this feature, provide an FOnRenderMovieStopped callback when calling the RenderMovie function. See \Engine\Plugins\MovieScene\SequencerScripting\Content\Python\sequencer_examples.py for more information.

          • New: Exposed Set/GetNumChannelsUsed for MovieSceneVectorTrack.

          • New: Sequencer's Track Color picker now uses the standard color picker dialog.

          • New: Added more Python extensions - set parent, set property name and path, set start/end frame bounded.

          • New: Exposed metadata from level sequence.

          • New: Added active shot to snapshot along with Slate and TakeNumber.

          • New: Added additional marked frame functionality.

            • Marks now have a label and color.

            • Movie scene sequence player can play from a named mark.

            • Sequencer scripting supports adding/removing/editing marked frames.

          • New: Added function to get the active camera cut camera. We also now allow camera cut evaluation, but disable binding to the player when CanUpdateCameraCut is false.

          • New: Extended UMovieSceneSequence::Stop to accept the time to reset the cursor to.

            • This ensures that at the point we trigger explicit network Stop events, the time cursor will not change unless the user has explicitly done so, which resolves an issue where a passive net update with a slightly different time can come in after the explicit stop RPC event has been handled by a client.

            • It also means we are no longer resetting the time twice when stopping.

          • New: Exposed GetSound/SetSound and GetStartOffset/SetStartOffset on MovieScene Audio Sections for manipulation from Python.

          • New: Added the option to show vertical frames/bounds per track.

          • New: Made FMovieSceneSectionParameters BlueprintReadWrite so they can be manipulated directly from Python without editor_get_property.

          • New: Take Recorder: We now autotrack actors that aren't being recorded in the world source.

          • New: Added GetReferencedBindings() to MovieSceneSection to get guides that the section references.

          • New: Added MovieSceneTrack and MovieSceneSection as BlueprintType.

          • New: Added playback and section range setters and getters.

          • New: Enabled autoscroll for playing state.

          • New: Added an ability to export generic/master float tracks (such as live link tracks).

          • New: Added start offset to media section/track.

          • New: MovieSceneSequence has been set as BlueprintType so that it's accessible in blueprints.

          • New: Propagated setting display rate and locking state to child sequences.

          • New: Changed StartOffset to FFrameNumber for Audio, Skeletal, GeometryCache sections.

          • New: Changed SlipSection from double to FFrameNumber.

          • New: Added SupportsType to MovieSceneTrack to indicate whether a particular MovieSceneSection class is compatible.

          • New: Added the ability to copy/paste sections.

          • New: Added transactions for renaming track nodes.

          • New: Added a new track type for swapping materials on primitive components.

          • New: Added new property track for any base UObject property type. Includes weak and soft object pointers.

          • New: Level sequences that exist in instanced levels will not resolve possessable bindings within that same level correctly.

          • Improvement: Changed Template::SourceSection to a weak pointer.

          • Improvement: Optimized camera cut thumbnail rendering by removing reliance on level viewport client.

          Static Mesh Editor

          • Bug Fix: Preview socket mesh scales correctly when Editor is reopened.

          • Bug Fix: LOD radio button now updates the static mesh editor viewport.

          • New: Added support for reducing static mesh LODs by vertex percentage. There is now a dropdown to pick between triangle percentage or vertex percentage.

          • VR-Editor

          • Bug Fix: Integrated VR editing modification to Dev-Enterprise.

          • New: Added actor