Unreal Engine 4.20 Released!


Unreal Engine 4.20 delivers on our promises to give developers the scalable tools they need to succeed. Create a future-focused mobile game, explore the impact of Niagara, breathe life into compelling, believable digital humans, and take advantage of workflow optimizations on all platforms.

You can now build life-like digital characters and believable worlds with unparalleled realism. Take your visual effects to the next level with Unreal Engine’s new Niagara particle editor to add amazing detail to all aspects of your project. Use the new Digital Humans technology powering the “Meet Mike” and “Siren” demos to raise the bar on realism. With the new Cinematic Depth of Field, you can achieve cinema quality camera effects in real-time.

Unreal Engine empowers you to make things your way by giving you the tools to customize the creation process to your preferred style and workflow. With the new Editor Scripting and Automation Libraries, you can can create completely customized tools and workflows. Make the lives of designers and artists easier by adding new actions to apply to Actors or assets thanks to scripted extensions for Actor and Content Browser context menus.

Battle-tested mobile and console support means you can create once and play on any device to deliver experiences anywhere users want to enjoy them. Epic has rallied around the mobile release of Fortnite to optimize Unreal Engine for mobile game development. We have made tons of performance improvements including implementing both hardware and software occlusion queries to limit the amount of work the hardware needs to do. Proxy LOD is now production-ready and can further reduce the complexity of the geometry that needs to be rendered at any time.

In addition to all of the updates from Epic, this release includes 165 improvements submitted by the incredible community of Unreal Engine developers on GitHub! Thanks to each of these contributors to Unreal Engine 4.20:

adamnv, kayama-shift, alanedwardes, XenonicDev, Antonrr, arkiruthis, Begounet, c4tnt, Brainshack, dani9bma, NachtMahr87, nonlin, ggsharkmob, hgamiel, Hybrid0, cyberblaststudios, Vaei, jesseyeh, jorgenpt, hach-que, junkimu, kallehamalainen, kinolaev, korypostma, krill-o-tron, aylaylay, lion03, Lirrec, malavon, slonopotamus, moadib, Marenz, LordNed, reapazor, maxtunel, TheCodez, mhutch, mimattr, mamoniem, nakapon, nlebedenco, PhilBax, projectgheist, EverNewJoy, Rei-halycon, nbjk667, RChehowski, S-Marais, Acren, ryanjon2040, gsfreema, SRombauts, SertacOgan, stephenwhittle, Temaran, tmiv, trond, tstaples, yama2akira, pdlogingithub, yehaike, error454

Epic has made recent account changes to provide an age-appropriate experience for players, developers, and creators of all ages. If you don’t see your name credited here for code that you have contributed, please log into your Epic account and ensure that you have updated your account information so that we can include you for future releases. If you need additional assistance, please reach out to Support.

New: Optimizations and Improvements for Shipping on Mobile Platforms

Unreal Engine 4.20 brings well over 100 mobile optimizations developed for Fortnite on iOS and Android, marking a major shift for developers in terms of ability to more easily ship games and seamlessly optimize gameplay across platforms. Major enhancements include improved Android debugging, mobile landscape improvements, and occlusion queries on mobile.


Hardware and Software Occlusion Queries on Mobile

Hardware Occlusion Queries are now supported for high-end mobile devices on iOS and Android that support ES 3.1 or Vulkan using the GPU. They are enabled by default for any device that supports them.

Software Occlusion Queries is an experimental feature that uses the CPU to cull primitive components from the scene. Because it uses a conservative approach, it can be used on any mobile device. [TABLE=“align: center, cellpadding: 1”]



Left - r.Mobile.AllowSoftwareOcclusion 1, r.SO.VisualizeBuffer 1; Right - Render frozen showing occluded parts

To enable Software Occlusion Queries, follow these steps:

  • Enable r.Mobile.AllowSoftwareOcclusion 1.

  • Disable r.AllowOcclusionQueries 0.

  • Enable any primitive to be an occluder by setting LOD for Occluder Mesh true in the Static Mesh Editor.

You can visualize the results in the Mobile Previewer when using High-End Mobile and then enable r.SO.VisualizeBuffer 1.

Platform Material Stats

Quickly profile and optimize your Materials using the new Platform Stats window inside of the Material Editor! You can now see stats for multiple shader platforms and quality levels. For mobile platforms, we use an offline shader compiler to give more accurate instruction and Texture usage information.


Improved Android Debugging

Iterate and debug on Android without having to repackage the UE4 project! When compiling Android, we now generate a Gradle project file which can be opened in Android Studio. You can place breakpoints in C++ and Java code and use Android Studio to launch a debug session. You can also make changes to C++ source code and recompile. If you start a new debug session, Android Studio will notice the change and quickly upload the new shared library to your device.

Mobile Landscape Improvements

Make your terrains on mobile more interesting now that you can have unlimited Landscape Material layers on mobile devices! While three is still the best optimized case, any number of Landscape layers are supported, provided there are sufficient Texture Samplers available.

You can now use the Feature Level Switch Material nodes in Landscape Materials enabling you to create a single Landscape Material for all platforms.

1 - Mobile Landscape; 2 - PC Landscape

Miscellaneous Mobile Improvements

The following improvements were made to ship Fortnite on mobile and brought into Unreal Engine 4.20 to benefit all developers:

  • Minimum Static Mesh LOD per platform

  • Minimum Skeletal Mesh LOD per platform

  • Hardware occlusion improvements

  • HLOD tools and workflow optimizations

  • Audio quality node

  • Audio variation culling

  • Audio downsampling per platform

  • Audio compression quality per platform

  • Shading model tweaks to better match PC

  • Reflection capture brightness fix

  • Landscape support for four layers

  • Landscape tessellation improvements

  • No memory cost for unused LODs, including:

    • Static Meshes

    • Skeletal Meshes

    • Material quality levels

    • Grass and foliage

    • High detail components and meshes

    • High detail emitters in Cascade

  • Settings based on device memory

  • Material memory reduction

  • Editor scriptability for bulk asset changes

  • Particle component pooling

  • Material parameter collection update cost

New: Optimizations and Improvements for Shipping on Nintendo Switch

We have significantly improved Nintendo Switch development by releasing tons of performance and memory improvements built for Fortnite on Nintendo Switch to all Unreal Engine developers!


This includes the following:

  • Support for Dynamic Resolution and Temporal Upsampling

  • Low Latency Frame Syncing for Controller Input

  • Significant CPU Rendering Optimizations

  • Improvements to Threading

  • Better Texture Compression

  • Support for Memory Profiling

  • Backbuffer support for 1080p while in docked mode

  • And many other fixes!

New: Proxy LOD Improvements

The new Proxy LOD tool has graduated from “Experimental” to production-ready! This tool provides performance advantages by reducing rendering cost due to poly count, draw calls, and material complexity which results in significant gains when developing for mobile and console platforms. This tool provides an alternative to the third-party package Simplygon and can be used in conjunction with the Level of Detail (LOD) systems in Unreal Engine.

The Proxy LOD tool produces a simpler representation by creating a proxy in the form of a single low-poly parameterized mesh and associated textures that visually approximate a collection of more complex source geometry models. This proxy can then be displayed at runtime when a reduction in model quality is acceptable - for example, when geometry only occupies a small number of pixels on screen.

Note: The Proxy LOD tool is currently only available in Unreal Editor on Windows.


The above image shows the buildings and parking lots in Fortnite Battle Royale constructed using the Proxy LOD tool where both Gap-Filling and Hard-Edge Splitting were in use.

The production-ready version of the Proxy LOD tool has several enhancements over the Experimental version found in 4.19. Particularly, improved user control over the Normals on the Proxy Geometry and the ability to generate much simpler proxies by using gap-filling to automatically close doors and windows.

Improved Normal Control : Hard Edge Split Normal

The extreme constraints on Fortnite memory usage call for highly efficient uses of LODs. For most proxies, very small base color textures are generated and no Normal map is used, this approach requires the highest possible quality Normals on the proxy mesh itself.

1 - Hard Edge Angle = 80;2 - Hard Edge Angle = 0

The above gif shows the effect of hard-edge splitting for vertex normals. The image 2 shows smooth vertex normals, as calculated in the 4.19 Experimental version of the Plugin - the dark regions near the bottom of the house are indicative of the shortcomings. Compare this with image 1 which shows hard-edge vertex normal splitting with a user-supplied hard-edge cutoff angle.

In addition to the hard-edge cutoff angle, the user may now specify the method used in computing the vertex normal, by selecting between Angle Weighted, Area Weighted, and Equal Weighted.

Gap Filling

For watertight geometry, the Proxy system automatically discards any inaccessible structures (for example, interior walls or furniture within a closed house). For ideal results, source geometry should be constructed or altered with this in mind, but due to game production constraints that isn’t always feasible. To facilitate the generation of efficient Proxy LODs from source geometry that is nearly watertight, the Proxy LOD tool can optionally use the level set-based techniques of dilation and erosion, to close gaps. The intended use case is primarily doors and windows in distant buildings.

1 - Original Mesh; 2 - No Gap Filling; 3 - Gap Filling

The above gif shows the effect of using Gap Filling. All images were constrained to use a fixed small amount of texture space. Image 2 is the result of Proxy LOD on a building without using Gap Filling, in which case the LOD includes the interior of the building (at the cost of unseen triangles and texels). Image 3 is the same building with Gap Filling used to automatically close the doors and windows of the buildings, resulting in fewer total triangles and a better use of the limited texture resource.

New: Cinematic Depth of Field
The new Cinematic Depth of Field (DoF) enables you to achieve your vision of rendering cinema quality scenes in a real-time environment! This new method is designed as a higher-quality replacement for the Circle DoF method and is faster than most other DoF methods, such as Bokeh. With Cinematic DoF, the depth of field effect is cleaner, providing a cinematic appearance with the use of a procedural Bokeh simulation. This new DoF implementation also supports alpha channel, dynamic resolution stability, and includes settings to scale it down for console projects.


[TABLE=“align: center, cellpadding: 1”]



Left - Cinematic Depth of Field enabled; Right - Depth of Field disabled

Cinematic Depth of Field is enabled by default and replaces the current selection for the Circle DoF method in the Camera and Post Process settings.

  • Cinematic DoF supports the following Platforms:

    • D3D11 SM5, D3D12 SM5, Vulkan SM5, PlayStation 4, Xbox One, and Mac.

  • The procedural Bokeh simulation supports the following features:

    • Configuring the number of blades for the Diaphragm.

    • Configuring the curvature of the blades directly with the Lens’ largest aperture (Minimal F-stop).

    • Configurable controls available in the Camera settings of the Post Process Volume, Camera Actor, and Cine Camera Actor.

  • Many customizable scalability settings using r.DOF.* console variables to scale it according to your project needs on hardware with finite resources.

For additional information, please see the Depth of Field documentation.

New: Niagara Visual Effects Editor (Beta)

The Niagara Visual Effects (VFX) Editor is now available as a Beta Plugin! Unlock the potential of your project using all of the exciting visual effects tools we showed off at GDC.

Note: The beta nature of this feature means that we are far enough along in development that we want to share it with our customers and get as much feedback as possible before it becomes a standard UE4 Feature. Beta does not mean that Niagara is production ready as we still have quite a bit of performance optimization and bug fixing that needs to be done before you can consider using this tool for production. However, we hope that effects developers begin investing in learning Niagara and work with us to make it the best VFX editor that it can be.

For an overview of Niagara, please watch the GDC 2018 presentation Programmable VFX with Unreal Engine’s Niagara and read the Niagara documentation.

Improvements to Effect Design and Creation
Left - Particle system utilizing dynamic input module; Right - Dynamic input module

  • Skeletal Meshes can specify their emission from the surface, being driven by either Material name or a named bone influence region.

  • Specifying default values in Modules has been improved, allowing a wide variety of behaviors from calling functions to using default dynamic inputs.

  • Mesh particles now support Angular Velocity.

  • Beams support has been added to the Ribbon renderer with new corresponding Modules.

  • Dependencies between Modules can now be defined, enabling the user to be informed when they are putting the stack in a bad configuration. Also, users are being given options to auto-fix.

  • Multiple improvements have been made to merging System Emitters and Base Emitters, enhancing overall stability.

  • Modules can now be moved up and down the stack via drag-and-drop. Inherited Modules cannot be moved because doing so complicates merging.

  • Modules can now be enabled/disabled within the stack. This will also work for inheritance.

  • **Sequencer **and **Blueprint **support for setting Niagara User Namespace variables has been added.

  • You can drive parameters by custom HLSL Expressions, Dynamic Inputs (graph snippets), links to other variables, or by value.

  • Optionally, particles can now have a Persistent ID, which is guaranteed to be unique for that emitter.

  • Multiple renderers of each type can be applied to an emitter. Each instance can adjust where it gets the values for a given parameter. For example, an emitter could have two sprite renderers, one pulling its position from a particle’s position and the other pulling its position from a particle’s offset position.

  • The Niagara Extras Plugin also contains a debug Material that routes various per-particle parameters to a dialog-like display.

  • Houdini has provided a simple CSV importer to Niagara, enabling demo content for GDC 2018.

  • A wide variety of functionality for Niagara has been added under the Automated Testing system.

Updated User Interface

The Niagara interface has been designed to be make complex effects intuitive to create. It uses a stack metaphor as its primary method of combining pieces of script logic together. Inside of the stack, you will find a Timeline to control aspects of the effect over time**, a Parameters Panel for easy access to variables available in the effect, and aAttribute Spreadsheetto quickly find and react to information as the effect is running.


New Modules

All of Niagara’s Modules have been updated or rewritten to support commonly used behaviors in building effects for games and adhere to a consistent set of coding standards. New UI features have also been added for the Niagara stack that mimic the options developers have with UProperties in C++, enabling inline enable/disable or variable display based on the state of another variable.

GPU Simulation

Niagara now has support for GPU Simulation when used on DX11, PS4, Xbox One, OpenGL (ES3.1), and Metal platforms. There are plans for Vulkanand Switchto support GPU Simulation in a future release. Current limitations and known issues with GPU simulation are described below:

  • Full support for Niagara requires the ability to read-back data from the GPU. Currently only our **DX11 **and PS4 rendering interfaces support this functionality, and **OpenGL **and **Metal **are in progress.

  • Collision, Curves, and Curl Noise Fields are supported on the GPU. Meshes, Skinned Meshes, Spline Components, and more specialized data interfaces are not yet supported. The API for GPU shaders to interact with **UNiagaraDataInterfaces **has been redesigned as well.

  • **Sprite **and **Instanced Static Mesh **rendering from particles is supported on GPU simulations. At this time, Light Generation from Particles and Ribbons from Particles do not work on the GPU.

  • Events only work on the CPU and will be undergoing significant changes after Unreal Engine 4.20.

CPU Simulation & Compilation

Niagara **CPU **Simulation now works on PC, PS4, Xbox One, OpenGL (ES3.1) and Metal. At this time, **Vulkan **and **Switch **are **not **supported.

  • The CPU virtual machine (VM) now compiles its contents to the DDC on a background thread, significantly improving overall compilation speed and team efficiency. Further work is required to make the final and expensive VM optimization step occur in ShaderCompileWorker because it depends on non-thread safe libraries. Compilation dependencies are properly tracked across Modules, clearly identifying when we need to recompile certain parts of the stack.

  • Physics simulation on the CPU should properly model the Physics Material values for friction and restitution (bounciness).

  • Emitters will now simulate in parallel on worker threads.

New: Digital Human Improvements

As part of Epic’s character explorations to develop Digital Humans that started with the Photorealistic Character bust, many rendering improvements have been made to develop realistic believable characters that come to life.

While developing these characters, the following rendering improvements have been made for Skin, Eyes, Lighting, and Subsurface Scattering.

  • Added a new Specular model with the Double Beckman Dual Lobe method.

  • Light Transmission using Backscatter for Subsurface Profiles.

  • Better contact shadowing for Subsurface Scattering with Boundary Bleed Color.

  • Short Distance Dynamic Global Illumination through Post Process Materials.

  • Added detail for eyes using a separate normal map for the Iris.

For additional information, see Digital Humans.

New: Rectangular Area Lights

Rectangular Area Lights enable you to make more realistic lighting for environments containing large light sources, such as fluorescent overhead lights, televisions, lit signs, and more! Rectangular Area Lights are accessible from the Modes panel along with the other light types.

  • Currently only supports the Deferred Renderer.

  • Acts mostly like a Point Light, except it has Source Width and Height to control the area emitting light.

  • Static and Stationary mobility shadowing works like an area light source with Moveable dynamic shadowing, currently working more like a point light with no area.

Performance Considerations:

  • More expensive overall than Point or Spot Lights with the dominant cost being incurred when movable and casting shadows. Shadowing generally has the same cost.

  • Stationary Light mobility or Non-Shadow Casting lights can be double the cost with cost scaling depending on the platform being used. If you’re using Static Lights, the cost is free.

New: Mixed Reality Capture (Beta)

Create compelling spectating experiences for mixed reality applications using the new Mixed Reality Capture functionality, which makes it easy to composite real players into a virtual play space!


The beta Mixed Reality Capture support has three components: video input, calibration, and in-game compositing. We have a list of supported webcams and HDMI capture devices that enable you to pull real world green screened video into the Unreal Engine from a variety of sources. If you have a Vive Tracker or similar tracking device, Mixed Reality Capture can match your camera location to the in-game camera to make shots more dynamic and interesting. Setup and calibration is done through a standalone calibration tool that can be reused across Unreal Engine 4 titles. Once you set up your filming location, you can use it across all applications.

While feature support is in beta, we’re looking forward to getting feedback as we continue to improve the system. More information about Mixed Reality Capture setup can be found in the Mixed Reality Development documentation.

New: nDisplay Flexible, Multi-Display Rendering

Effortlessly create video walls for large visualization installations using the new nDisplay system! Automatically launch any number of Unreal Engine instances - locked firmly together, with deterministic content and frame-accurate time synchronization - across any number of host computers, each instance driving its own projector or monitor display. Use active or passive stereoscopic rendering to enhance the viewer’s sense of immersion in the 3D scene and built-in VRPN support to drive the system from mobile VR controllers.


For more information, please see the documentation.

New: Submix Audio Recording
In the new audio engine, we’ve added the ability to record Engine output - or any individual Submix’s output - to a *.wav file or SoundWave Asset.

Exporting Submix output to a SoundWave Asset.


*Exporting Submix output to a .wav file.

New: Shared Skeletal Mesh LOD Setting

Set LOD settings once and reuse them across multiple Skeletal Mesh assets using the new LOD Settings asset! Inside the Asset Details panel for a Skeletal Mesh, under LOD Settings, you can now select an LOD Settings asset to use, or you can generate a new asset based on the current settings.

Please see the Sharing LOD Settings section of the Skeletal Mesh Asset Details page for more information.

You can also assign the LOD setting and regenerate LODs from Blueprint using a Blutility.

New: Streaming GeomCache and Improved Alembic importer (Experimental)

We continue to make stability and performance improvements to the geometry cache system, as noted in the following:

  • Individual vertex animation frames are now compressed using an intra-frame codec based on Huffman encoding. Compressed data is streamed from disk, enabling playback of longer sequence with a low amount of memory overhead. The new implementation is still very experimental and is not ready for use in production

  • The Alembic importer has been changed to iteratively import frames rather than importing all frames in bulk. This should improve the PCA pipeline and overall stability and speed.

New: Scripted Extensions for Actor and Content Browser Context Menu

Easily create in-context tools and workflow enhancements without writing a line of code by extending the context menus for Actors and Content Assets in the Browser using Blueprint Utilities, or Blutilities.

  • Create a new Blutility using one of the new parent classes - AssetActionUtility (for Content Browser extensions) or ActorActionUtility (for Actor extensions).

  • You can specify what types of Actors or Assets the actions apply to with the GetSupportedClass function.

  • Add logic in events (or functions) with no return value, marking them as “Call In Editor” so they show up in the context menu, and a pop-up dialog will display when the event is triggered to fill in values for any parameters you define on your events

New: Animation Retarget Manager Improvements

Animation Retarget Manager now supports saving and loading of the mapping data, so you can save and reuse mapping data on multiple meshes. You can also quickly save multiple rig data for different animations and reuse them with this feature.


Please see the Retarget Manager page for more information.

New: RigidBody Anim Node Improvements

You can now have movement on simulated bodies when moving the Skeletal Mesh Component around in the world when using ‘Local Space’ simulation, which offers greater stability for your simulation. We have now added some options to look at the linear velocity and acceleration of the component in world space, and apply them (scaled and clamped) to the local space simulation.

We also added the option for any joint to be the base of simulation, and added support for dynamics to easily be reset.

New: Clothing Improvements

Physics Assets now support tapered capsules for collision in clothing simulation.

Note:These are not supported for collisions in rigid body simulations.

You can also now copy Skeletal Mesh vertex colors to any selected Clothing Parameter Mask.

New: Garbage Collection Improvements
Garbage collection performance has been optimized reducing some operations by as much as 13x! Specifically, we made the following improvements:

  • The “Mark” phase has been optimized and is now multithreaded. On machines with multiple cores, the cost of marking Objects as unreachable has been reduced from 8 ms to 0.6 ms for approximately 500,000 Objects.

  • The “BeginDestroy” phase (unhashing Objects) now runs across multiple frames, using no more than 2 ms per frame. The cost of unhashing Objects will no longer be included in the same frame as the “Mark” phase and reachability analysis.

  • Garbage Collection assumption verification, which runs in development builds, now uses the same multithreaded code as reference-gathering. As a result, development builds will see an improvement in Garbage Collection times. In Epic’s tests, sample timings for about 500,000 Objects reduced from over 320 ms to under 80 ms.

New: Visual Studio 2017

UE4 now uses the Visual Studio 2017 compiler, and the Engine will generate project files for Visual Studio 2017 by default. Visual Studio 2015 is still being supported, but requires some configuration. Additionally, we’ve added support for the Windows 10 SDK.

Note: Visual Studio 2017 supports the installation of multiple compiler versions side-by-side.

See our Hardware & Software Specifications for more information.

New: Development Streams on GitHub

Unreal Engine development streams are now updated live on GitHub. If you want the latest version of development code, you can now pull these streams directly, without waiting for Epic to merge changes from the development teams into our main branch. Note that these streams are live, and have not been vetted by our QA team, which is typically the case in our binary releases or in the main branch.

To learn more, check out our blog post.

New: UMG Safe Zone Improvements

The Screen Sizes you select in UMG and Play-In-Editor (PIE) settings are now linked with Device Profiles, which also takes into account the Mobile Content Scale Factor, meaning that the final resolution and DPI scale will change based on the device screen size selected.
[TABLE=“align: center, cellpadding: 1”]



The following improvements have been made for UMG Safe Zone workflow:

  • Safe Zone previewing is now automatically enabled for Debug Title Safe Zone when using a value less than 1 to test screen sizes for TVs and Monitors.

  • Using the command r.MobileContentScaleFactor works to scale phone and tablet resolutions in UMG previews and PIE modes.

  • Non-Uniform safe zones are now supported for devices like the iPhoneX, where parts of the screen are inaccessible.

  • Safe Zones, Scale Boxes, and Common Border Widgets react correctly to non-uniform safe zones and UMG Designer sizes.

  • UMG now displays the selected device, its screen size, and uniform scaling factor for easy reference in the Designer Graph.

  • Use r.MobileContentScaleFactor to scale phone and tablet resolutions in UMG and PIE modes.

For additional information, see UMG Safe Zones.

New: Curve Atlases in Materials

Materials can now use a Curve Atlas asset to store and access linear color curve data with additional support provided through Blueprint. The Curve Atlas uses the same linear curve color as before, except you can use as many linear color curves as the size of your specified Atlas.[br]

To create a new Curve Atlas, use the Content Browser to select Add New > Miscellaneous and select Curve Atlas.

When you open a Curve Asset Editor, you’ll be able to adjust the Hue, Saturation, Brightness, Vibrance, and Alpha clamps of any individual curve. Additionally, the Preview thumbnails in the Content Browser will display the gradient set by the curve.

For additional information, see Curve Atlases in Materials.

New: Mesh Description Mesh Format

UE4 is moving to a new higher-level intermediate format which can represent any type of mesh asset in the Engine. This is a gradual process that will improve workflow and enable us to provide some great new features.

The goal of moving to a new mesh format is:

  • All meshes (Static, Skeletal, and potential other mesh-like objects such as terrain and BSP) can have the same internal representation with some interchangeability, to a certain degree.

  • Most UE4 geometry tools will work on any type of mesh based on the geometry format.

  • Any mesh using the new format can be examined and modified using a standard API enabling runtime, native or scripted modification, opening up many possibilities for procedurally generated content.

  • Meshes will be imported directly to the format with the ability to preserve higher-level mesh representations, such as quads or edge hardness. Currently, these are lost when importing a Static or Skeletal Mesh.

  • The new mesh format is structured internally so that modifications can be made in real-time, even to the most complicated meshes. This forms the basis of a work-in-progress mesh editing feature, which is also scriptable, that will be developed for a future release.

In this release, only Static Mesh has been converted to use the new mesh format. Users will not notice any difference to their everyday workflow and the assets themselves will not change. Currently, the new data is automatically created from the old format and cached in the DDC.

New: Label Saved Colors in Color Picker

Colors saved in your Theme Bar or Theme Menu can now have labels for identification purposes! Labels can easily be set by right-clicking the saved color swatch and entering a name for the saved color.

For additional information, see Color Picker.

New: Recently Opened Filter in Content Browser

Quickly find recently viewed Assets in the Content Browser using the new Recently Opened filter! This filter lists the 20 most recently opened assets.


You can find the Recently Opened filter in the Filters list under Other Filters. You can change the number of recently opened assets listed in Editor Preferences > Content Browser with Number of Assets to Keep in the Recently Opened Filter.

For additional information, see Content Browser Filters.

New: Shotgun Integration (Beta)

Streamline your production pipeline using the new Shotgun integration for Unreal Engine 4!


Features include:

  • It adds the Unreal Editor to your Shotgun launcher, so artists can reliably open the right version of Unreal for the Shotgun project.

  • You can open the Shotgun panel in the Unreal Editor interface, so you can stay up to date with the activity in the Shotgun project as you work.

  • It hooks into the Shotgun loader, so you can easily bring assets into your Unreal Project, and control where they end up in your Content Browser.

  • It even adds Shotgun interaction commands to the contextual menus you get when you right-click Actors in a Level, or assets in the Content Browser.

**Note: **We’re working out the last details before we can share our integration on GitHub. Check back soon for updates and documentation!

New: Editor Scripting and Automation Libraries

The Editor Scripting Utilities Plugin is now available to all Unreal Engine users. This Plugin offers simplified interfaces for scripting and automating the Unreal Editor, working with assets in the Content Browser, working with Actors in the current Level, editing the properties of Static Mesh assets, and more.

For details, see Scripting and Automating the Editor.

New: Import Asset Metadata through FBX

When you import an FBX file into Unreal, any FbxProperty data that is saved in that file is now imported as well. You can access this metadata in Blueprint or Python scripts that you run in the Unreal Editor. This can help you customize your own asset management pipelines for Unreal based on information about your assets that comes from your content creation tools.

For details, see FBX Asset Metadata Pipeline.

New: Improved Script Access to Static Meshes for LODs and Collisions

Blueprint and Python scripts that you run in the Unreal Editor can now modify more properties of your Static Mesh assets. This allows you to automate some of the tools offered by the user interface of the Static Mesh Editor. For example:

New: Blueprint Bookmarks
The Blueprint Bookmarks feature provides the ability to create named Bookmarks in any function graph in the Blueprint Editor. Bookmarks being created will be listed in a new UI window, where you can click them to restore the position and zoom level of the Viewport (as well as the active tab you were viewing). In addition to the Bookmarks you create, you can also quickly jump to any Comment node in your Blueprint by selecting the comment from a separate list. Bookmarks are stored locally on your machine, so they won’t affect the Blueprints themselves, and syncing content will not overwrite your Bookmarks with those of another user.

New: Blueprint Watch Window
The Blueprint Watch Window is designed to speed up debugging by giving you access to the variables and nodes that you want to watch, even across multiple Blueprints. Watch data from every Blueprint that you open in the Editor, and that is part of the current call stack, will be consolidated into a single list, enabling you to inspect variables and function outputs. Also, you can jump between Blueprints with ease. You can click on an entry in the “Node Name” column to go to the named node in any Blueprint, while selecting entries in the “Object Name” column will select the instance of the object associated with that entry. Arrays, Sets, Maps, and other data structures can be expanded, making a drill-down examination of any data they contain quick and convenient.


New: Navigation System Code Moved to a Module

Most Navigation System-related code has been moved out of the Engine code and into a new Navigation System Module. Game-specific code using navigation system functionality might need to be updated.

A Python (3.5) script is available to parse your project’s source code and point out lines that need updating. Optionally, the script can perform the changes but make sure to use this option with caution and assisted by a version control system. Script options can be found at the top of the file.

Please see the Programming Upgrade Notes section for details on upgrading your project to work with these changes.

New: Improved Mobile Specular Lighting Model

Mobile specular response has been changed to use the GGX Lighting Model by default. This improves mobile specular quality and better matches SM5 but adds a small cost to shader processing time.

1 - 4.20 Default GGX Specular; 2 - 4.19 Spherical Gaussian Specular

The previous Spherical Gaussian Specular model is still accessible via the ‘Use legacy shading mode’ project option and can be found under Rendering > Mobile.

New: Mobile Skylight Reflections

The Mobile Renderer now uses a Skylight Cubemap for Specular Reflections when no Reflection Captures are relevant.

1 - Mobile, no reflection captures ; 2 - PC, no reflection captures

New: Replication Driver / Replication Graph
The Replication Graph Plugin provides a replication system optimized for games with large Actor and player counts. The system works by building a series of customized nodes that can centralize data and computation. These nodes persist across multiple frames and can be shared by client connections, cutting down on redundant CPU work and enabling Actors to be grouped together in nodes based on game-specific update rules. We may make changes to the API, so this is considered Experimental in 4.20, but it is in use in Fortnite Battle Royale and it will be a fully supported feature.

New: Steam Authentication
Steam Authentication has been added! Games can now add a packet handler component that interfaces with Steam’s authentication APIs, enabling them to advertise their servers properly, handle VAC/publisher bans, and provide better validation of clients. If enabled, clients joining a server now have to be authenticated by Steam before being allowed into gameplay. By default, clients who fail authentication are kicked from the server.
Virtual Camera Plugin

New to 4.20, the Virtual Camera Plugin enables a user to drive a Cine Camera in Unreal Engine 4 (UE4) using an iPad Pro in a virtual production environment. With ARKit, a Vive Tracker, or an optical motion capture system such as Vicon or Optitrack, the position and rotation of the iPad is broadcast wirelessly to the PC, with the PC sending video back to the iPad.

Camera settings such as focal length, aperture, focus distance, and stabilization can be adjusted using touch input. Additionally, the virtual camera can be used for taking high-res screenshots, setting waypoints, recording camera motion and other tasks related to virtual production.

On the Learn tab of the Epic Games Launcher under the Engine Feature Samples section, there is a Virtual Camera project which includes a sample scene and project set up for use with the Virtual Camera Plugin.

For more information, please see the Virtual Camera Plugin documentation.

New: Frame Accuracy Improvements for Sequencer
Sequencer now stores all internal time data as integers, enabling robust support of frame-accuracy in situations where it is a necessity. Keys, section bounds, and other data are now always locked to the underlying user-controllable sequence resolution; this can be as fine or as coarse as the use-case demands. Very high resolutions will support greater fidelity of key placement and sub-frames, while reducing overall sequence range.


Key Updates:

  • The time cursor in Sequencer is now represented as a block that spans the full range of the currently evaluated Tick, showing very clearly which keys are evaluated and which are not for any given frame.

  • “Force Fixed Frame Interval” playback has been rebranded as “Frame Locked”, setting the Engine max FPS to the Sequence’s display rate, and locking time to whole frame numbers (no sub-frame interpolation)

  • Sub frame evaluation remains fully supported for situations where frame accuracy is not a consideration (such as UMG animation).

  • Various time sources are now supported for runtime evaluation such as the Engine clock (supporting world-pause), audio clock and platform clock.

  • The UI can now be viewed in Non Drop Frame (NDF) Timecode and Drop Frame (DF) Timecode. NDF Timecode is available to all frame rates and directly converts the frame number to hours, minutes, seconds, and remaining frames. DF Timecode is only supported on NTSC Rates (23.976, 29.97, 59.94). The display format can be changed with the Ctrl + T keyboard combination or with the framerate UI menu.

Please see the new Sequencer Time Refactor Notes page for more information.

New: Media Track for Sequencer
Sequencer has a new track for playing media sources. It is like the audio track, but for movies. Simply drag-and-drop a Media Source asset into the track view or create a Media Track from the Add Track menu. This feature currently works best with Image Sequences, especially EXR. Image Sequences in the Media Track will accurately sync frames with rendered output.


Please see the Using Media Tracks page for more information.

New: Sequencer Curve Editor and Evaluation Enhancements
Several enhancements have been made to the Curve Editor and Evaluation in Sequencer including:

Weighted tangents are now supported on float curves.

Using weighted curves in the sequencer curve editor

Added support for continuous Euler Angle changes when changing rotations. Euler angles are no longer limited to -180,180, which is necessary to avoid flips in animation.

You can now turn on Quaternion Rotation on a 3D Transform Section via the track’s Properties menu to utilize quaternion interpolation to smoothly interpolate between two rotations. This is similar to the feature previously available in Matinee.

New: Animating Variables on Anim Instances in Sequencer
It is now possible to animate variables on Anim Instances through possessables, enabling direct control of Anim Blueprint variables, functions and other content. To add an Anim Instance binding to Sequencer, look for its name in the +Track] button for Skeletal Animation Components. Any variables that are exposed to cinematics will be shown on its track picker.

Please see the Controlling Anim Instances with Sequencer page for more information.

New: Final Cut Pro 7 XML Import/Export in Sequencer
Sequencer movie scene data can now be exported to and imported from the Final Cut Pro 7 XML format. This can be use to roundtrip data to Adobe Premiere Pro and other editing software that supports FCP 7 XML. You can trim and offset shots in editing software and map those back to sequencer automatically during import.

Note: Audio is not supported at this time.

New: Sequence Recorder Improvements
Sequence Recorder now supports a profile system that is stored in the Persistent Level. Recording profiles enable you to store which actors you wish to record and their settings, as well as the output path to store the recorded data in. Sequence Recorder also now supports recording multiple takes for each of the selected actors.

Please see the Sequence Recorder page for more information.

New: Sequencer Track Usability Improvements
Several updates have been made to improve the usability of Tracks within Sequencer. Tracks, Actors and Folders can now be reordered, Event Track names are displayed next to the event keyframe, you can now resize sections to their source duration, you can mask individual transform channels, create Pose Assets from the blended pose and more.

Please see the new Working with Tracks in Sequencer page for more information.

New: Translucency Support for Instanced Stereo Rendering
We’ve taken the improvements to the Instance Stereo Rendering (ISR) path that we made for Robo Recall, and improved them to work across more features in the engine. Unreal Engine 4.20 adds support for performing the translucency rendering pass using Instanced Stereo Rendering, which can significantly reduce CPU cost on translucency-heavy scenes. No content changes are needed; any project with Instanced Stereo enabled in the project settings will automatically get the benefits of Instanced Stereo Rendering.

New: Magic Leap One™ Beta Support
At GDC, we announced beta support for Magic Leap One™: Creator Edition, a software toolkit for early development of experiences for Magic Leap’s personal spatial computing platform, as part of a larger partnership between the two companies. As of Unreal Engine 4.20, you can develop for the Magic Leap One™ using the fully supported release of Unreal Engine.


Unreal Engine 4 support for Magic Leap One uses our built in frameworks for things like camera control, world meshing, motion controllers, and forward and deferred rendering. We’ve also added more robust support for features like eye tracking and gestures.

Developers can download the Magic Leap software development kit and simulator at developer.magicleap.com. For those developers with access to hardware, Unreal Engine 4.20 can deploy and run on the device in addition to supporting Zero Iteration workflows through Play In Editor.

New: Apple ARKit 2.0 Support
We’ve added support for Apple’s ARKit 2.0, which includes better tracking quality, support for vertical plane detection, face tracking, 2D image detection, 3D object detection, persistent AR experiences and shared AR experiences. Support for these new features enables you to place AR objects on more surfaces, track the position and orientation of a face, recognize and bring 2D images to life, detect 3D objects, and facilitate new types of collaborative AR experiences.

New: Google ARCore 1.2 Support
We’ve added support for Google’s ARCore 1.2, which includes support for vertical plane detection, Augmented Images, and Cloud Anchors. Support for these new features enables you to place AR objects on more surfaces, recognize and bring images to life, and facilitate new types of collaborative AR experiences.

New: Platform SDK Upgrades

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

  • 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

        • Visual Studio 2015 Update 3

    • Xcode: Xcode 9.4

  • Android:

    • NDK 12b (New CodeWorks for Android 1r6u1 installer will replace previous CodeWorks for Android 1R5 before release, still on NDK 12b)

  • HTML5: Emscripten 1.37.19

  • LInux: v11_clang-5.0.0-centos7

  • Lumin: 0.12.0

  • Steam: 1.39

  • SteamVR: 1.39

  • Oculus Runtime: 1.25

  • Switch:

    • SDK 4.5.0 + optional NEX 4.2.1 (Firmware 4.1.0-1.0)

    • SDK 5.3.0 + optional NEX 4.4.2 (Firmware 5.0.0-4.0)

    • Supported IDE: VS 2015 / 2017

  • PS4:

    • 5.508.031

    • Firmware Version 5.530.011

    • Supported IDE: Visual Studio 2015, Visual Studio 2017

  • Xbox One (XB1, XB1-S, XB!-X):

    • XDK: April 2018

    • Firmware Version: April 2018 (version 10.0.17133.2020)

    • Supported IDE: Visual Studio 2017

  • macOS: SDK 10.13

  • iOS: SDK 11

  • tvOS: SDK 11


  • Bug Fix: Updates have been made to the Instance Prepare Context Function of Env Query which will now return vectors and rotators now ignore Invalid Location and Invalid Rotation.

  • Bug Fix: Updates have been made so the Env Query Item Type_Actor of Get Item Location function and Env Query Item Type_Actor of Get Item Rotation function now return Invalid Location and Invalid Rotation instead of 0 when the hosted Actor pointer is set to null.

  • Bug Fix: The On Listener Forgets Actor function of AI Sense_Sight now removes queries only relating to the actor being forgotten.

  • Bug Fix: The AI Sense Config Blueprint and AI Sense Blueprint no longer show up in class drop-downs when selecting AI senses.

  • Bug Fix: Donut EQS generator no longer fails if inner radius is set to 0.

  • Bug Fix: THe Env Query Manager and Behavior Tree Manager classes are now transient to avoid being accidentally serialized.

  • Improvement: The Get Raw Value Ptr function of AI Data Provider Value is now accessible from outside of the AI Module

  • Improvement: Additional functions from Blueprint Node Helpers are now exposed in the AI Module’s API.

  • Improvement: More public properties from AI Controller have now been exposed to Blueprints.

Behavior Tree

  • Bug Fix: The correct tooltips for Composite Behavior Tree nodes are now displayed in the Editor.

  • Bug Fix: The Rotate To Face BB Entry Behavior Tree Task now properly faces the location of the target agent.

Debugging Tools

  • Bug Fix: Navmesh debugging now properly displays octree elements with “per instance transforms”.

  • Bug Fix: ‘Get Categories’ in the Visual Logger Helper no longer omits relevant information when called.

  • Improvement: Code maintainability and performance upgrades have been made to Nav Mesh Rendering Component when drawing navmesh and octree collision polys.


  • Bug Fix: The Static Mesh Editor now display AI-navigation-related data whenever Has Navigation Data is set to true.

  • Bug Fix: Navigation data gathering has been fixed for navmesh tile generation by expanding tile’s bounding box by the agent’s radius.

  • Bug Fix: Layers are now removed after Navmesh generation if they become empty after rebuilding the Navmesh.

  • Bug Fix: Calling Set Poly Area in Recast NavMesh no longer sets an improper flag when changing the poly’s Area ID.

  • Improvement: The Tick in Navigation System Base is now called even when the world is paused.

  • Improvement: The Navigation System Config can now be subclassed to allow configuration of other aspects of navigation system, like overriding or modifying the Supported Agents list.

  • New: A flag has been added to Nav Modifier Component to control whether agent’s height is being used while expanding the modifier’s bounds during navmesh generation.

  • New: A Console Variable has been added that controls whether to cook and use Nav Collision.

  • New: World Settings has a property, called Navigation System Config, that allows you to specify the Navigation System class to be used on a per-world basis.


  • Crash Fix: Fixed a crash when attempting to shut down a Message Bus Source after the Heartbeat Manager had already been shut down.

  • Crash Fix: Fixed a crash when re-importing a Skeletal Alembic asset and placing it in the world.

  • Crash Fix: Trying to extract a transform from a raw track with no track data no longer crashes.

  • Crash Fix: Re-registering a Skeletal Mesh Component with a post process instance that references deleted virtual bones will no longer crash.

  • Crash Fix: Fixed crash on deleting Virtual Bones that are referenced by Bone Controller nodes.

  • Bug Fix: Fixed Live Link Client Panel not refreshing for sources that were not added through UI.

  • Bug Fix: Fixed an issue where the Skeletal Mesh was not ticking correctly and updating its bounds (it would use the cached bounds with an extent of 0 and not render).

  • Bug Fix: Fixed not-a-number (NaN) values occurring during Blend Space sampling.

  • Bug Fix: Fixed issue with double ticking a reused Animation Instance on set Skeletal Mesh because of parallel evaluation.

  • New: Added Anim Instance Get LOD Level override point to allow custom Anim Instances the ability to provide a different (potentially significance-based) LOD to the graph update/eval phase.

  • New: Added Blueprint functions to create a Message Bus Source for use in projects where the Editor UI is not available or is impractical.

  • New: Added a remapping of curve values in a range to the modify curve anim node.

  • New: Added a weighted moving average method to the modify curve anim node.

  • Improvement: Reduced per-frame allocations in the animation system.

Animation Assets

  • Crash Fix: Fixed a crash when retargeting a Skeleton when some of its animations are still open.

  • Crash Fix: Fixed a crash on Pose Asset when Skeleton has changed hierarchy.

  • Bug Fix: Fixed additive blending in PoseAsset.

  • Bug Fix: Fixed a deterministic cooking issue where notify names could change during load.

  • Bug Fix: Montage or Anim Blueprint assets can no longer modify the Skeleton during cook (causing non-deterministic cooking).

  • Bug Fix: Using the name “None” in a curve will no longer cause it to disappear.

  • Bug Fix: Fixed incorrect preview mesh being applied after retargeting an animation.

  • Bug Fix: Bone rotations are now forced to be normalized during bone extraction from raw animation data.

  • Bug Fix: Animations that have transform curves are considered up to date upon loading.

  • New: Added animation names to ensure when missing anim data.

  • New: Added notification when updating source for the Pose Asset.

  • New: Added Blueprint interface to get list of curve names, consisting of Get Active Curve Names, and Get All Curve Names. Pose Assets can use this interface to get pose names instead of curve names.

  • New: Materials can now be set on a Geometry Cache asset.

  • New: Added Socket Override Lookup to the Skinned Mesh Component, which will allow mapping one socket to another and when calling Get Socket By Name or Get Socket Bone Name.

  • New: Added LISTANIMS console command to generate CSV report on all loaded anims.

Animation Blueprints

  • Crash Fix: Fixed a crash when opening Animation Blueprints with sub graph inputs.

  • Crash Fix: Fixed a crash when running a standalone editor build using Animation Blueprint sub-instances that copy properties.

  • Bug Fix: Fixed Skeletal Mesh Components using post process Anim Instances but not anim script instances running on the Game Thread (work is now correctly pushed off-thread).

  • Bug Fix: Fixed duplicate node GUIDs in the Animation Blueprints that were causing state machine transition errors.

  • Bug Fix: Wrapped wind update using dynamics console variable so unnecessary work is not done if dynamics aren’t running.

  • Bug Fix: Fixed issues with Skeletal Mesh Component teleports not being passed through to in-graph dynamics nodes. They are now passed through from transform updates.

  • Bug Fix: Fixed teleports causing anim dynamics to duplicate the limits that are generated, causing over-corrections for constraints.

  • Bug Fix: Animation state machine correctly handles copy-pasted transition getter nodes.

  • Bug Fix: Fixed stretching on spawn for Skeletal Mesh Components using Rigid Body Node.

  • Bug Fix: Fixed bad initial rigid body node states when spawned with non-reference pose.

  • Bug Fix: Fixed NaN in Rigid Body node when teleporting on a zero timestep.

  • New: Anim dynamics can now be globally turned off at a specific LOD threshold.

  • New: Added ECVF_Scalability to anim dynamics CVars.

  • New: RigidBody node supports any joint as a base of simulation.

  • New: RigidBody node supports reset dynamics. Anim Instance supports reset dynamics, and if you call it, it will reset simulation.

  • New: Added console variables to control rigid body node update and evaluation.

  • New: Added deterministic cooking warning to node GUID fix-up in Animation Blueprints to suggest a resave.

  • New: Added new “Apply limits” anim node.

  • New: RigidBody AnimNode has new options to automatically apply local space accelerations based on world component translation. Options are only active when using a non-worldspace simulation:

    • Component Linear Acc Scale - Amount of world space acceleration should be applied in local space (should be between 0 and 1)

    • Component Linear Vel Scale - Applies ‘drag’ to a body in the local space, based on the components world-space velocity.

    • Component Applied Linear Acc Clamp - Overall clamp on acceleration applied by Component Linear Acc Scale and Component Linear Vel Scale options.

  • New: Bone references are now validated during compilation for all anim graph nodes that use them.

  • Improvement: Optimized cases when Update Curve was called many times if you were using Sub Anim Instance and/or Post Process Graph.

  • Improvement: Animation Curves have faster lookups, and are not evaluated unless they’re actively used.

Animation Tools

  • Crash Fix: Fixed a crash when undoing an operation performed in a Skeletal Mesh editor after it is closed.

  • Bug Fix: Fixed an issue with Skeletal Mesh bake pose not correctly applying when containing non-uniform scaling.

  • Bug Fix: Fixed accidental operation of pinned commands when closing them in animation editor viewports.

  • Bug Fix: Notify Trigger Chance is now hidden for anim notify states, since it has no effect.

  • Bug Fix: Automatic rules for animation state transitions are now shown in tooltips.

  • Bug Fix: Fixed anim notify drag/drop not allowing movement beyond halfway on high DPI displays.

  • Bug Fix: Prevented Blueprint notifies from destroying the animation preview actor.

  • Bug Fix: Fixed cropping of animations that have transform curves.

  • New: Added an “auto blend out” option to Anim Montage.

  • New: Animation Retargeting Manager now supports loading/saving the mapping data.

  • New: The Control Rig Experimental feature has been refactored, you now can create your own rig using Control Rig Blueprint.

  • New: In the Skeletal Mesh Editor, added section settings to ignore a section when creating a reduced LOD.

  • New: Added new animation viewport notifications.

  • New: Added option to preview Fixed Bounds in Skeletal Mesh tools.

  • New: Blendspace samples can now be be optionally moved off-grid by holding Alt and dragging samples to disable grid snapping.

  • New: Enabled “Follow Bone” to be popped out of the menu into the viewport by shift-selecting.


  • Bug Fix: Re-importing a mesh will no longer clear the Post Process Graph.

  • Bug Fix: Fixed an issue with not Regenerating LODs when re-importing Skeletal Meshes and when it has been simplified, causing mismatched LOD data.

Skeletal Mesh

  • Crash Fix: Fixed a crash in lazy-initialization of morph targets when LODs are stripped from Skeletal Meshes.

  • Crash Fix: Fixed crash when Skeletal Mesh tangent buffer is empty after the build and we serialize the tangent array.

  • Crash Fix: Importing a Skeletal Mesh with no vertices no longer crashes.

  • Crash Fix: Fixed an editor crash when setting Min LOD above the total number of LODs for Skeletal Meshes.

  • Bug Fix: Fixed various issues with Bake Pose related to missing animations, sharing Skeletons, and removing joints.

  • Bug Fix: Statically-rendered Skeletal Meshes now correctly report their rendered LOD.

  • New: Added a new console variable “r.SkeletalMesh.StripMinLodDataDuringCooking” which, when non-zero, will strip out unused rendering data as the asset is cooked.

  • New: Added per-platform minimum LOD for Skeletal Meshes.

  • New: Added per-platform overrides for Skeletal Mesh screen size.

  • New: Master pose component will now ensure slaves are using ref pose for the missing joints.

  • New: Added “Use High Precision Tangent Basis” option on Skeletal Meshes.

  • New: Recompute Tangent and Skin cache will now be higher precision (16 bits per channel).

  • Deprecated: The wireframe color in Skinned Mesh Component has been deprecated.


  • Crash Fix: Fixed a crash when Audio Capture Component is re-initialized.

  • Crash Fix: Fixed a crash when flushing audio device.

  • Crash Fix: Calling “Set Sound Wave” on Synth Sample Player or Synth Granulator no longer crashes.

  • Crash Fix: Fixed audio component threading issue, which could manifest in crashes during async loads.

  • Crash Fix: Audio Capture components don’t crash if they are started a second time during a play session.

  • Bug Fix: Fixed an issue where Synth Sample Player would not play a Sound Wave set in Property Inspector.

  • Bug Fix: Fixed an issue where recording audio for a Sequence would keep the Editor from properly shutting down.

  • Bug Fix: Fixed issues with seeking Sound Waves on iOS.

  • Bug Fix: Fixed an issue where the Delay Submix Effect was over-allocating for delay lines.

  • Bug Fix: Fixed issue with Distance Scale with Focus Feature and Attenuation Settings.

  • Bug Fix: Fixed issue where audio was cut off abruptly when a UE4 application was moved to the background on iOS.

  • Bug Fix: Fixed regression that caused no audio to be returned when applications directly queried IVoiceCapture.

  • Bug Fix: Fixed Quality issues with mic component.

  • Bug Fix: Fixed issue where Set Mic Threshold Blueprint function would not change the threshold value on shipping builds.

  • Bug Fix: Audio now stops sounds when destroying its data.

  • New: Added settings fields, enabling iOS and Android to use specific quality indices by default on SoundCue nodes.

  • New: Added settings fields, enabling iOS and Android packaged projects to use a maximum amount of branches on a random node to reduce memory usage.

  • New: Audio assets can now be resampled when being cooked for iOS and Android.

  • New: Added BypassVolumeScaleForPriority bool to SoundBase properties, enabling specified sounds to ignore Volume Weighting during Priority Sort.

  • New: The Steam Audio Plugin now supports AMD TrueAudio Next on supporting platforms.

  • New: Added ability in C++ to register an ISubmixBufferListener with FAudioDevice to receive post-mixed audio buffers from any Submix.

  • New: Added simple source delay effect.

  • New: Added class type, enabling inherited versions of UAudioComponents to be created.

  • New: Activated reverbs will now take priority when World Settings are used (for example, no Volume Proxy is in use).

  • New: Added ability to bypass volume-weighted prioritization for sound sources and only use priority.


  • Crash Fix: Fixed crash during Editor Asset automation tests.

  • New: Added a Build Reflections option to the Resave Packages commandlet.


  • Crash Fix: Fixed crash when cooking with Blueprint Nativization enabled after encountering a nested, instanced, Editor-only default subobject inherited from a native C++ base class.

  • Crash Fix: Fixed crash when removing a pin that has been split from a “Make Struct” node.

  • Crash Fix: Fixed crash in Actor Component Instance Data floats, which occurred after deleting a Blueprint function.

  • Crash Fix: Fixed crash when redoing a change to a Blueprint’s sub-object.

  • Crash Fix: Fixed random crashes seen when running searches in multiple global Find-In-Blueprint tabs.

  • Crash Fix: Fixed crash where the Component Instance Data Cache would try to duplicate streaming Levels when Component Delegates were bound to Actors in that Level.

  • Crash Fix: Fixed crash when deleting multiple Bookmarks selected in the Bookmarks tree view.

  • Crash Fix: Fixed occasional crash when dropping a Blueprint onto a node.

  • Crash Fix: Fixed rare crash when hovering over invalid Blueprint nodes.

  • Crash Fix: Fix crash when reloading or force deleting Blueprints open in a Blueprint diff window.

  • Crash Fix: Fixed crash when Find in Blueprints discovered a string table reference.

  • Crash Fix: Fixed crash when selecting an invalid interface class.

  • Bug Fix: Fixed memory corruption that occurs when reparenting a Blueprint to a class that already has a property of the same name as a component in the Blueprint.

  • Bug Fix: Fixed scoping issue for generated instanced sub-object reference local variables in nativized Blueprint C++ code.

  • Bug Fix: Fixed build failure that could occur with Blueprint Nativization enabled and EDL disabled.

  • Bug Fix: Set & Map fields containing converted assets are now properly emitted with proper syntax to generated C++ Blueprint class headers when Blueprint Nativization is enabled.

  • Bug Fix: Fixed bug where gameplay tag container literal created in Blueprints would not be correctly initialized, and the parent tags would not be populated.

  • Bug Fix: Blueprint Nativization bug fixes, including:

    • Ensured that Safe Context Scoped Emitters Validation Chains generate code calls to the global “Is Valid” utility function on objects.

    • Blueprint Compiler Backend class Emit Create Array Statement function now generates a proper cast on “Make Array” node inputs for enum class types.

    • Modified the Blueprint Compiler Backends’ Emit Call Statement Inner function to more correctly identify an interface function call site.

    • Modified Emit Helpers’ Generate Automatic Cast function to properly handle automatic casts of enum arrays.

    • Added new Component Data Utils static functions to consolidate custom init code generation for converted special-case component types (for example, BodyInstance). This ties native DSOs to the same pre or post steps as converted non-native component templates around the “Outer Generate” loop.

    • Modified Expose On Spawn Validator’s “Is Supported” function to include CPT Soft Object Reference property types.

    • Modified Blueprint Generated Class’ Check And Apply Component Template Overrides function to no longer break out of the loop before finding additional ICH override record matches.

  • Bug Fix: Ensured that sub-object class types are constructed prior to accessing its CDO in a nativized Blueprint class’ generated C++ constructor at runtime in a cooked build.

  • Bug Fix: Fixed bug where the class of the “Get Class Defaults” node was being set to None.

  • Bug Fix: Fixed incorrect access to nested instanced subobjects in nativized Blueprint C++ constructor code.

  • Bug Fix: Fixed an ensure when exiting PIE after tracing into a BP Function Library source graph while single-stepping.

  • Bug Fix: Reduced the number of stat events generated by Blueprint execution. This reduces overhead, and makes things easier to read when using event-based ‘flame graph’ captures.

  • Bug Fix: Disabled ticking for Level Script Actors (if not used).

  • Bug Fix: Functions that require a World context can now correctly be used in CheatManager-derived Blueprints.

  • Bug Fix: Avoid inclusion of monolithic engine header files in nativized Blueprint C++ code.

  • Bug Fix: Resetting an array property to its default value now properly propagates to derived Blueprint’s default values.

  • Bug Fix: Fixed Compositing Plugin source files to conform to updated relative include path specifications, ensuring compatibility with Blueprint Nativization.

  • Bug Fix: Integer math functions are now consistently tagged in menus.

  • Bug Fix: Fixed case where sub components with bAutoRegister false would get registered anyways.

  • Bug Fix: Fixed EDL cycle at load time in nativized cooked builds when a circular dependency exists between converted and unconverted Blueprint assets.

  • Bug Fix: Fixed array functions Add, Add Unique, Insert, and Remove, which were not correctly using the appropriate boolean value when a bit-packed boolean member function was supplied as input.

  • Bug Fix: Fixed initialization of special UMG struct types in nativized Blueprint Actor code.

  • Bug Fix: Improved handling of circular dependencies during Blueprint Nativization between converted and unconverted assets.

  • Bug Fix: You can now successfully set the category for Timeline component variables in the My Blueprint tab.

  • Bug Fix: Negate, Increment, Decrement Int, and Float macros output the desired result, even if a non-mutable pin is passed in.

  • Bug Fix: Undo of changing select node index type now works correctly. Connections to option pins are now maintained across change of index pin type.

  • Bug Fix: Blueprint pins on some nodes were incorrectly being displayed as out of scope because they were not directly under the active object being debugged.

  • Bug Fix: Message (interface) call nodes no longer display the Skeleton class name in the node subtitle.

  • Bug Fix: Fixed comments on Map and Set Add Blueprint library functions.

  • Bug Fix: Prevent “Defer Dependency Loads” from being dropped when we preload an object in another linker.

  • Bug Fix: Blueprint Native Event methods declared an interface class now implement the required Implementation method as Pure Virtual function rather than declare it as pure virtual in the UHT-generated boilerplate code, enabling Blueprint classes that implement a native C++ interface declaring one or more Blueprint Native Event methods to be nativized.

  • Bug Fix: Significantly optimized performance when refreshing the components tree in the Actor details panel.

  • Bug Fix: Fixed deterministic cooking issue by avoiding use of Make Unique Object Name when instantiating component templates.

  • Bug Fix: The compilation manager avoids purging old classes until they are being recompiled, fixing an issue that could cause Construct Object to fail to assign values on construction.

  • Bug Fix: Fixed existing placements of nativized Blueprint Actors with a non-zero (legacy) root component scene transform at the CDO level.

  • Bug Fix: Setting a Class Blueprint variable will correctly enable unloaded Blueprint children to be selected in the picker.

  • Bug Fix: When Blueprint debugging during PIE, step over and out commands no longer cause the mouse pointer to jump back to the game viewport after each step.

  • Bug Fix: Breakpoints on nodes that are connected to “For Each” Loops are no longer skipped.

  • Bug Fix: Soft Object / Class reference variables now correctly validate the type of an asset that is dragged or pasted into them, which prevents making invalid references from the Editor.

  • Bug Fix: Soft Object / Class references stored in Blueprint function local variables are now correctly tracked when Blueprints are saved, which means that they will be properly fixed up when assets are redirected, and may pull more content into your cook if you have unused local variables.

  • Bug Fix: Editable Blueprint events now add ‘const’ to array type and reference parameter properties when compiled.

  • Bug Fix: Sub-Anim instance nodes can now orphan pins as expected.

  • Bug Fix: Blueprints will no longer warn on load about member get nodes for members that have been removed if they are just on the canvas and not be used during compilation.

  • Bug Fix: Fixed a bug where Blueprint async task node names could not be redirected after a function rename.

  • Bug Fix: Blueprints are now reparented before replacing references when using the ‘delete and replace references’ tool, making the delete and replace references workflow more reliable when performed on Blueprint assets.

  • Bug Fix: Prevent struct properties with an Identical type trait (for example, Gameplay Tag Container) from showing up as different in a Blueprint diff, even if they were unmodified.

  • Bug Fix: Fixed a typo in name validation error messages where the name was already in use.

  • Bug Fix: Keyboard navigation when selecting an object or asset from a Blueprint node now works correctly.

  • Bug Fix: Fixed issue where reroute nodes inside macros could break AutoCreateRefTerm function parameters.

  • Bug Fix: Fixed an invalid child Actor template cast in nativized Blueprint code when the child actor class type is a converted Blueprint class asset.

  • New: Exposed vertex and triangle counts for Skeletal Meshes to Blutilities.

  • New: Exposed collision complexity to Blutility scripting.

  • New: Exposed more static mesh functionality to Editor scripting.

  • New: Add new parameter UX on a Blueprint delegate is now at parity with Blueprint functions.

  • New: Added the ability for Blueprint async task nodes to have additional output parameters, which can be added to the exposed factory method.

  • New: Added several Blueprint methods for reading color values from render targets.

  • New: Added a Blueprint method (Import File As Texture2D) for loading an image file from disk and creating a texture from it.

  • New: Exposed Blueprint nodes for “Get Number Verts” and “Get LOD Screen Sizes” functions for Static Mesh exposed in the Static Mesh Utility Library.

  • New: Added UV1, UV2, UV3 inputs to Procedural Mesh Component.

  • New: Pins for Blueprint async task nodes now display Tooltips consistent with other functions.

  • New: By default, the “For Each Enum” node will now skip over values marked as ‘Hidden’ in new placements, additionally, a new input pin has also been added into the “Advanced” section on the node, enabling users to control this behavior if needed.

  • New: Select node now displays “Add Pin” button.

  • New: Display “Object Reference” instead of “Object Object Reference”, and display “Soft Object Reference” instead of “Object Soft Object Reference”.

  • New: Select node now resets pins to wildcard if none of the pins are in use.

  • New: Execution flow, Blueprint call stack, and Blueprint watchpoint viewer refactored into a single Blueprint Debugger tab.

    • The call stack viewer now indicates whether the call stack is stale, and the watch point viewer layout now matches the call stack viewer.

  • New: Modified the watch window to provide more clarity for when watches have valid information versus stale watch values. Watches in the window are only valid when Blueprint execution is paused, and when execution is paused, the window will update to show the values for all Blueprint instances in the current call stack.

  • New: Exposed “Get Local Role” function to Blueprints, returning the value of the “Role Member Property.”

  • New: Enable modification of camera shake oscillators at runtime in Blueprints.

  • New: Exposed the Game Mode class’ “Player Can Restart” function to Blueprints.

  • New: Exposed PlayerController class’ “Can Restart Player” function to Blueprints.

  • New: Exposed Playerm Camera Manager class’ “Client Simulating View Target” boolean to Blueprints.

  • New: “Last Hit By” reference on Pawns now marked as Blueprint Read Only.


  • Crash Fix: Fixed a threading crash with non-scoped Low-Level Memory tracking (seen in Android GL tracking).

  • Crash Fix: No longer crashes when disabling a cooling down tick function during a pause frame.

  • Crash Fix: Fixed a Startup crash that could happen depending on file compilation order.

  • Crash Fix: Deserializing tagged property containers containing bad elements no longer crashes.

  • Crash Fix: Fixed a crash in when allocating memory with the Malloc profiler.

  • Crash Fix: CSV Profiler no longer crashes on exit.

  • Crash Fix: Fixed crashes caused by defining UObjects with certain types of constructors.

  • Crash Fix: Fixed a Slate crash related to the Async Loading Thread.

  • Crash Fix: Fixed crashes when converting filenames to long package names and when running commandlets.

  • Crash Fix: Fixed A crash while destroying global Engine objects during shutdown.

  • Bug Fix: Fixed some Pak file code to use an int64 instead of int32 to handle large pak files.

  • Bug Fix: Undo/Redo history in Editor now works as expected.

  • Bug Fix: Fixed a buffer overrun when copying a context string in Malloc Leak Detection.

  • Bug Fix: Changed the internal Object Array to not be allocated up front. This fixes strange OOM reports on Editor startup.

  • Bug Fix: Made TCircularQueue thread-safe.

  • Bug Fix: MediaPlayer module no longer loads on non-game threads, as this could lead to thread safety issues when the Async Loading Thread was enabled.

  • Bug Fix: Corrected a buffer overflow debug logging code.

  • Bug Fix: Fixed abbreviations not displaying properly in Editor dialogs.

  • Bug Fix: Plugged a potential LinkerLoad leak when a package that still has a linker associated with it is being destroyed.

  • Bug Fix: Calling Reset on a String sometimes now always results in a null-terminated String.

  • Bug Fix: Unchanged Levels are no longer included in Pak patches.

  • Bug Fix: When Blueprint Clustering is enabled, the Widget Blueprint template will also be added to the parent cluster when the template is being replaced.

  • Bug Fix: Asset encryption settings are now being properly parsed from .ini files by UBT.

  • Bug Fix: Enabled C++ 14 usage of decltype(auto) in TTuple. This preserves the Engine’s ability to compile in C++ 11.

  • Bug Fix: Corrected Format Int To Human Readable function for values greater than 999999 or negative.

  • Bug Fix: Asset redirectors can now redirect from a parent class to a child class, which can happen when using Consolidate Assets.

  • Bug Fix: Editor tutorials and related content are not accidentally included in a cooked build. References loaded from editor project settings are now treated as Editor-only.

  • Bug Fix: Fixed issue where the cooker could incorrectly load an asset registry cache built with “-game”, causing missing dependency information.

  • Bug Fix: “-cookonthefly” and “-iterate” can be used at the same time, to avoid recooking unchanged packages when cooking on demand.

  • Bug Fix: Fixed asset registry memory tracking in memreport (and added some new fields).

  • Bug Fix: Corrected int64 -> int32 Archive offset truncation in several places.

  • Bug Fix: Fixed a Serialization History bug that occurred when trying to serialize 0 bytes.

  • Bug Fix: Fixed some bad offsets in non-deterministic cook report.

  • Bug Fix: Stats chunked array will now use smaller blocks to prevent malloc deadlocks when running in the editor with TBB allocator.

  • Bug Fix: Corrected stack space errors in generated code in Debug builds caused by the amount of code generated by very large UCLASSes.

  • Bug Fix: Moved level actor cluster creation to after actor construction scripts have been re-run to make sure all actor references are processed by the cluster creation code.

  • Bug Fix: Fixed non-determinism of the Raw PCM Data Size property of Sound Waves during cooking by making it transient.

  • Bug Fix: Fixed InitCommandArgs to parse command lines and handle errors gracefully.

  • Bug Fix: Bit Writer default constructor now initializes ArIsPersistent and ArIsSaving variables.

  • Bug Fix: Corrected a lot of inconsistent warning output and log categories while running the PkgInfo commandlet.

  • Bug Fix: Solved threading deadlock caused by the rendering thread trying to minimize the window after being ejected from full screen on Windows platform.

  • Bug Fix: Fixed a potential buffer over-read when converting UTF-8 characters to TCHARs when provided with invalid UTF-8 data.

  • Bug Fix: Corrected Get Len function for Strings.

  • Bug Fix: Explicitly defined the DEPRECATED_FORGAME macro only for non-engine modules in UBT.

  • Bug Fix: Fixed LoadEngineClass local to “UnrealEngine.cpp” to check class redirects before falling back to default class instance.

  • Bug Fix: Added initialization of deprecated Slate Brush member Tint_DEPRECATED, which was causing deterministic cook issues.

  • Bug Fix: Linker no longer incorrectly outputs warnings when LOAD_Quiet has been passed as a flag to the load call.

  • Bug Fix: Fixed asserts being fired when calling TBaseStructure’s Get function while saving packages.

  • Bug Fix: Error codes are no longer discarded from zlib inflate.

  • Bug Fix: Fixed a compile error in UHT when declaring a function which returns a UEnum pointer.

  • Bug Fix: Calling the auto-generated Get Outer function on a CDO will now ensure and return null rather than returning the containing Package cast to the named class.

  • Bug Fix: Corrected export outer name when reporting differences in the export map for deterministic cooking

  • Bug Fix: Fixed hot reload of modules which were unloaded, changed, then compiled and reloaded.

  • Bug Fix: Solved several bad uses of Script Map Helper and Script Set Helper, which could have skipped elements during iteration. Affected searching for subobjects, exporting JSON, copying properties in the editor and property value iteration.

  • Bug Fix: Made Archive’s Reset function public and virtual so it can be overloaded. Bit Writer’s Reset function is now an overload of that function.

  • Bug Fix: Changed new anonymous object names to be based on an incrementing suffix per-outer, rather than per-package to fix some non-determinism issues when cooking.

  • Bug Fix: Fixed log output when displaying the number of skipped differences when diffing cook for deterministic cooking

  • Bug Fix: Fixed UTF-8 encoding detection in FXmlFile.

  • Bug Fix: Clarified Get Allocated Size comments in containers to make it clear that they only count direct allocations made by the container, not allocations made by the contained elements.

  • Bug Fix: Fixed the 4096 char limit on FParse::Value.

  • Bug Fix: Clarified the misleading error message when omitting the WithValidation specifier on a UFUNCTION(Server).

  • Bug Fix: Disabled warning C4868 in Visual C++ builds, which warns about the evaluation order of elements inside braced initializer lists.

  • Bug Fix: Made sure that lazy object pointers are only fixed up for Play In Editor in actual PIE worlds.

  • Bug Fix: Several fixes to ensure deterministic material cook results, mainly centered around ensuring ShaderMaps are consistently serialized regardless of cook order.

  • Bug Fix: Fixed verify cluster assumptions logic so that it also checks if some other cluster root object referenced by the current cluster is referenced through ‘mutable’ objects lists before asserting.

  • Bug Fix: Hitch detection will now be suspended when synchronously loading a new map.

  • Bug Fix: Disabled ‘Took X.Y ms to ProcessLoadedPackages’ warning in the editor so it doesn’t show up when cooking.

  • Bug Fix: UFUNCTION metadata is once again correctly prevented when it is for a function of the same name as one in the parent class.

  • Bug Fix: We now destroy any world-owned particle FX on replay timeline scrub, since they shouldn’t persist.

  • Bug Fix: Restored assertion message logging just before breakpoint is hit in Visual Studio output window.

  • Bug Fix: Overrides of const functions correctly inherit the const-ness of the parent function.

  • Bug Fix: Corrected issue where Property Value Iterator would skip value properties when used on a map with struct keys and direct values.

  • Bug Fix: Fixed sublevels not being recognized as properly loaded during cooking, which caused non-determinism issues.

  • Bug Fix: Solved non-determinism in Widget Tree when cooking.

  • Bug Fix: Meshes with painted vertex colors that did not use static lighting will no longer be cooked differently each time when Non-deterministically cooking.

  • Bug Fix: Fixed barycentric computation case causing a check. Now outputs an invalid coordinate so the caller can resolve issues.

  • Bug Fix: Default values specified in UFUNCTION metadata for TSubClassOf parameters that do not specify the full path name will now attempt to determine the desired class from the short name.

  • Bug Fix: Trying to convert a Soft Object reference to a hard reference during async load will throw a useful error instead of silently failing.

  • Bug Fix: Reference Chain Search class used by ‘obj refs’ command now reports all reference chains properly.

  • New: RHI Command List Enqueue Lambda method which can be used to enqueue arbitrary tasks on the RHI thread from the render thread, without having to write lots of bolierplate RHI Command functor classes.

  • New: Added “-csvdemostarttime” and “-csvdemoendtime” command line arguments to automate CSV profiles when running replays.

  • New: On dedicated servers, .CSV profile capture writing completion can now be indicated with an empty *.complete file that is also written out.

  • New: The .CSV profiler now tracks used physical and virtual memory usage by default.

  • New: Hang detector has a duration multiplier to allow extending the hang timeout on loading screens etc.

  • New: Added frame index named events for the game, render and RHI threads. This makes it possible to track end-to-end frame progress in platform-specific CPU profilers.

  • New: FPS Charts now can output stats assuming a 20 hz framerate.

  • New: The CSV profiler is now always compiled in on the server.

  • New: The CSV profiler can now handle both int32 and float stats.

  • New: Async helper for executing functions on a given thread pool

  • New: Added “debug hitch” and “renderhitch” console commands to sleep game or render threads. Also added “debug spin” and “renderspin” console commands that spin in a tight loop instead of sleeping.

  • New: Support for target configuration whitelist/blacklist support for modules/plugins. This could permit things like a Plugin containing debug/development code being excluded from a shipping build for testing purposes.

  • New: TSharedPtr can now be used as a bool in conditionals.

  • New: Enabled the master data cryptography for iOS and Android platforms, meaning they’ll now respect the project settings.

  • New: Made Class Cast Flags and Property Flags enumerated types are now visible in the Visual C++ debugger.

  • New: The ability to get the actual filename of the log file Output Device File writes to.

  • New: Crypto Keys changes:

    • Removed UAT command line params for encryption. Centrally configured by the editor settings now.

    • UAT staging now creates a small json file containing the keys and settings used for encryption and signing and stores it in the build metadata.

    • UnrealPak can be told to get its encryption settings from a json crypto file with “-CryptoKeys=<filename>”.

    • UnrealPak can now accept a “PatchCryptoKeys=<filename>” parameter which gives it a filename to a cryptokeys json file that it can use to unpack the patch reference paks.

  • New: When parsing crypto settings, UBT will always load legacy data first, then the new system can override it. Provides the same key backwards compatibility that the editor settings class gives.

  • New: Format string type checking added to output log code.

  • New: constexpr support to Variant’s GetType function.

  • New: Initializer list support added to TMap.

  • New: Support for brace-initialized default member initializers in UnrealHeaderTool.

  • New: Support for writing specific log channels to their own files. Command line usage is as follows, including quotation marks:

    • -LogCategoryFiles=“Category1=Filename1, Category2=Filename2”

  • New: Added support for CoreRedirects when resolving Soft Object Paths. Works for class, object, and module redirectors.

  • New: Reduced asset registry memory in cooked builds by stripping out searchable names and empty dependency nodes by default, modifiable with [AssetRegistry] .ini settings.

  • New: AvfPlayer on MacOS and iOS now has added support for streaming media.

  • New: Added a Property Temp Val helper class for owning a temporary instance of any UProperty value, which can be exported as text for later inspection.

  • New: Archive will now log its name when complaining about corrupted bool values.

  • New: Added reporting of absolute byte offsets into packages when detecting differences in non-deterministic cooks.

  • New: A non-determinism warning appears if we have imported a legacy Static Mesh Component during a cook.

  • New: A non-determinism warning has been added when importing a legacy Reflection Capture Component during cook.

  • New: Added a new engine CVar, “s.PriorityLevelStreamingActorsUpdateExtraTime”, for controlling how much extra time is spent registering actors after streaming in a level when in “priority loading mode”. The default is 5 ms.

  • New: Created a level streaming CVar, “s.MaxLevelRequestsAtOnceWhileInMatch” (defaults to 0). When non-zero, this limits the number of level load requests when the player is actively playing in a match.

  • New: Command line overrides for cook diff settings: -MaxDiffstoLog=x overrides maximum number of differences to log per file -HeaderDiffs forces cook commandlet to show differences for header files (.uasset files) -IgnoreHeaderDiffs ignores header files’ differences.

  • New: Added interpolation functions for quaternions.

  • New: Implemented a generic Levenshtein distance to core algorithms.

  • New: Deterministic cooking tests will now also log out Name/Import/ExportMap items that moved within the file

  • New: Diffing cooked packages will now dump package header differences in NameMap, ImportMap and ExportMap

  • New: Constructing a new Weak Object Pointer at cook time will generate a non-determinism warning.

  • New: The window title bar now displays the Unreal Engine 4 build configuration (Debug, Development or Test) in non-Shipping configurations. You can customize this in your project settings.

  • New: A non-determinism warning is generated when upgrading clothing assets during a cook.

  • New: Static Memory Reader supports reading from memory specified by a pointer and size.

  • New: Added a before-and-after dump of values from certain property types which have changed during a deterministic cook.

  • New: Natvis visualizers for Frame Number, Frame Time, and TRange.

  • New: Math now contains a Divide And Round Nearest function.

  • New: Async support for single-threaded applications.

  • New: Custom version mismatch messages now include the friendly name of the custom version in addition to the tag GUID.

  • New: Unreal Header Tool now emits an error if ExpandEnumAsExecs metadata references a parameter name that is not a parameter to the function.

  • New: Changed the uncompiled modules report when starting the editor to display module names instead of DLL filenames.

  • New: PkgInfo commandlet can now dump all the info to a separate file for easier diffing with “-dumptofile=filename” argument.

  • New: PkgInfo commandlet can now dump information for unversioned packages

  • New: PkgInfo commandlet can now dump the list of properties that have been serialized for exports. This can be used for comparing cooked assets when investigating deterministic cooking issues.

  • New: -diffonlybreakoffset has been added to provide a way to break into the debugger when serializing data at a particular absolute offset during a -diffonly cook.

  • New: Functionality to track and log the debug name stack for diffonly cooks.

  • New: Randomize the package order when doing diffonly cooks, which can be explicitly disabled via -DIFFNORANDCOOK.

  • New: Allocator (TNonRelocatableInlineAllocator) which eliminates conditional logic from GetAllocation(), at the expense of not being trivially relocatable. This provides a significant performance increase for allocators that are dereferenced frequently, but prevents instances of it being stored inside other allocators (which are expected to be trivially relocatable by default).

  • New: Get Assets By Tags (Asset Registry function) optimizes tag look-up when you can have several potential values.

  • New: Added the ability to dump all objects to log before cooking a package while doing deterministic cook tests to help with tracking problems between deterministic cook tests.

  • New: Get Device Temperature Level function. iOS returns a value between 0 and 3, matching the values of the Temperature Severity enumerated type, while Android returns a temperature in Celcius, matching what was already being retrieved from the BatteryState.

  • New: Added an error message directing the user to the problematic file when the XML parser fails.

  • New: USE_SMALL_DELEGATES, USE_SMALL_MULTICAST_DELEGATES and USE_SMALL_TFUNCTIONS macros which switch from an inline allocator to a heap allocator for these types when defined to 1 at a project level. These will trade reduced object footprints for extra heap allocations.

  • New: The “-SaveForDiff” command line argument makes it possible to save packages that are different from their disk versions when running deterministic cooking tests.

  • New: Exec command CoreUObject.AttemptToFindUninitializedScriptStructMembers that can be used to try to find uninitialized reflected pointers in in USTRUCT() declarations

  • New: Directories To Never Cook and Directories To Always Cook in the packaging settings now support Plugin and Engine directories. It will convert from the old format of relative to game content to the new /Game/ format on startup. If you have any game-specific code accessing this you will have to take this into account

  • New: Exposed an optional name to Create Dynamic Material Instance.

  • New: Added a function, Is Async Loading Suspended, to check if async loading is currently suspended.

  • New: Enabled the overloading of functions which take TFunction or TFunctionRef of different signatures when the lambda being passed to them will unambiguously bind to only one of the overloads.

  • New: Changed Visual C++ debugger visualization of TFunctions to allow a lambda to be right-clicked on and the source jumped to by selecting “Go To Source Code”.

  • New: MallocStomp can now be enabled on desktop platforms using the “-stompmalloc” command line argument.

  • New: Initial implementation of tracing profiler to show CPU and GPU on the same timeline. Use “TracingProfiler frames=N” console command to trigger a capture of the next N frames. Trace is saved to disk as a JSON file into the “Saved/Profiling/Traces” directory. Trace file uses Google Tracing format and can be visualized in Chrome built-in profiler (chrome://tracing).

  • New: New parameter to “obj list” command, “-INSIDECLASS=classname”, filters objects that are inside of all objects of the specified class.

  • New: Non-determinism is reported when changes to CDOs and archetypes are made by Pre Save during a cook.

  • New: TDefaultReferenceCollector and Simple Reference Processor Base classes to extract common code for classes that are used by TFastReferenceCollector

  • New: Option to save non-deterministically cooked assets to a folder specified by “-diffoutputdir”, when differences are detected during a “-diffonly” cook.

  • Improvement: Made a minor optimisation to the deserialization of bad properties by using Seek() instead of skipping one byte at a time.

  • Improvement: Archetype pointer will now be cached to avoid locking the object tables when acquiring its info. It should also be faster this way regardless of any locks.

  • Improvement: Optimized lazy pointer fixup when starting Play In Editor. It should be up to 8x faster now.

  • Improvement: Optimized asset registry filter intersection.

  • Improvement: Moved PostLoad to the async loading thread where possible. This reduces the time the main thread spends on PostLoad by about 20%.

    • Added a .ini setting to disable PostLoad on ALT globally. In the [/Script/Engine.StreamingSettings] section, add “s.AsyncPostLoadEnabled=True”.

    • Added command line param overrides: “-NoAsyncPostLoad” “-AsyncPostLoad”

  • Improvement: Pak Signing:

    • Unified naming of pak precacher and signed archive reader signature check functions to make it easier to search for them in crash reporter.

    • Formatted the signed archive reader output to match the pak precacher.

    • Optimization for pakprecacher signature checks. Instead of locking the cached files mutex for every decoded signature, take a local copy in blocks of 16.

  • Improvement: Crypto:

    • AES keys that are too long or short (need to be 32 bytes) will now emit a warning when being parsed, and be truncated or expanded before adding to the crypto settings.

    • Signing keys will emit an error when they are too long (greater than 64 bytes).

    • Unrealpak will still assert when invalid settings are passed via the other mechanisms (command line or -encryptionini mode).

    • Settings via the crypto .json file should now be sanitized and not cause issues.

  • Improvement: Headers for compressed blocks in a pak file now contain relative offsets, reducing the amount of data entropy between builds and improving patch efficiency.

  • Improvement: Use-after-free detection mechanism and physical memory usage of MallocStomp on Windows.

    • MallocStomp on Windows will now reserve virtual address space for every allocation and then commit physical pages only to the valid usable part. Physical pages will be unmapped on Free, but virtual address space will not be released and therefore will never be re-used.

  • Improvement: Unhashing unreachable objects will now also be done incrementally, just like the purge phase of Garbage Collection.

  • Improvement: Faster GUID creation. Previous method used a system Date / Time system call, which could be slow on some platforms. This change can decrease GameThread time on those platforms.

  • Deprecated: Direct access to Archive members Ar Is Text Format, Ar Want Binary Property Serialization, Ar Force Unicode, Ar Is Persistent, Ar Is Saving, Ar Is Transacting, Ar Licensee UE4 Ver, Ar Engine Ver, Ar Engine Net Ver and Ar Game Net Ver private. These should now only be accessed via their associated member functions.

  • Removed: Packaged UE4 applications that you distribute will no longer send anonymous usage data to Epic. Previously, this had to be disabled in project settings.

Garbage Collection

  • Crash Fix: Fixed a crash in Garbage Collector, when an object that was still being loaded was added to GC cluster.

  • Crash Fix: No longer crashes after a skeletal mesh that was already in a GC cluster created a new BodySetup object in Garbage Collector.

  • Crash Fix: Fixed a crash with async loading code referencing objects that were marked as Pending Kill in Garbage Collector.

  • Bug Fix: Fixed a possible hang when worker threads are preventing the Garbage Collector from running.

  • Bug Fix: Serializing object will now be passed to the Garbage Collector so that it can be logged in case the referenced object is thrashed.

  • Bug Fix: Global Garbage Collector Sync Object no longer wastes cycles in non-game threads while waiting for Garbage Collector to finish running.

  • Bug Fix: Objects that still haven’t been through Post Load code will be added to Garbage Collector Clusters as ‘mutable’ objects, so that clusters can prevent them from being destroyed too early.

  • Bug Fix: Fixed Garbage Collector Clustering issues with Async Loading Thread enabled.

  • Bug Fix: Parallel Garbage Collection on the Mac is no longer turned off by default.

  • Bug Fix: Added code to detect hangs and log objects preventing the Garbage Collector from finishing when doing full purge in cooked builds

  • Bug Fix: When async loading, GC Clusters will be created after packages have been processed to avoid situations where some of the objects that are being added to a cluster haven’t been fully loaded yet

  • New: The Garbage Collector and the Async Loading Thread now coordinate timing, with the Async Loading Thread attempting to finish its current work to give GC a chance to run whenever GC sends a notification that it would like to run. The Async Loading Thread is more stable as a result.

  • New: Added “gc.ForceCollectGarbageEveryFrame” console variable that triggers a forced GC every frame.

  • New: Async package names will now be dumped to log when reporting Object references in Garbage Collection.

  • New: Added the ability to sort clusters by name/object count/mutable object count/referenced clusters count when dumping them with “gc.ListClusters” command.

  • New: Added the ability to toggle incremental BeginDestroy with “gc.IncrementalBeginDestroyEnabled”.

  • Improvement: Set the minimum GC cluster size to 5 with “gc.MinGCClusterSize” console variable so that GC doesn’t have to process micro clusters, which are more expensive to process than individual objects.

  • Improvement: Optimized Mark Phase of Garbage Collection by up to 10ms (depends on the number of objects and the number of threads available) by making it run in parallel and removing a huge array preallocation which we didn’t need.

  • Improvement: Garbage Collector assumption verification should now be up to 4 times faster.

  • Improvement: GC Cluster creation will now be time-sliced to avoid hitches on the game thread when streaming packages.


  • Crash Fix: Fixed a crash when simplygon failed to generate LOD for Skeletal Mesh.

  • Crash Fix: Fixed a crash when saving HLOD assets if some have not been fully regenerated.

  • Crash Fix: Fixed an occasional Garbage Collector crash in HLOD proxy generation.

  • Crash Fix: Fixed a crash when the HLOD outliner is open in PIE when actors are destroyed.

  • Crash Fix: Generating HLODs for mesh components with no mesh assigned no longer crashes.

  • Crash Fix: Generating HLODs from child actor components no longer crashes.

  • Crash Fix: Fixed a crash when removing HLOD setup asset.

  • Crash Fix: Fixed a crash when viewing some complicated material instances generated by the HLOD system.

  • Crash Fix: Fixed a crash when overwriting existing level during level save as.

  • Crash Fix: Fixed a circular referencing issue causing the conversion of a BSP to a static mesh to crash.

  • Crash Fix: Fixed a crash when re-importing an animation and choosing a skeleton for the anim sequence.

  • Crash Fix: Fixed FBX import crash.

  • Crash Fix: Fixed a crash in Mac editor when copying unusual characters in the output log.

  • Crash Fix: Generating HLODs in a map with sublevels that also have HLODs no longer crashes.

  • Crash Fix: Fixed a crash occurring when Propagating Vertex Colors to Asset’s source mesh.

  • Crash Fix: Using “Save As” on maps having more than 2 GB of build data no longer crashes.

  • Bug Fix: Fixed incorrect group name being returned by Get Group Name function for stat groups, causing incorrect editor tooltips.

  • Bug Fix: Fixed “Check Out Assets” window not properly receiving keyboard focus.

  • Bug Fix: Fixed bug causing “HighResShot” command to capture shots at a lower resolution in Immersive Mode.

  • Bug Fix: Scene Capture Component 2D properties, Hidden Actors and Show Only Actors, are no longer displayed in the Scene Capture Component 2D’s Blueprints layout panel, but are still available on Blueprint nodes.

  • Bug Fix: Fixed an asset registry size calculation bug.

  • Bug Fix: Fixed Play in Editor recorded replays not writing their last marker when the user goes to end the simulated instance while recording.

  • Bug Fix: Fixed issue with out of range UV sampling in material baking.

  • Bug Fix: Fixed mesh merging producing incorrect UV mapping for mirrored meshes.

  • Bug Fix: Fixed texture binning UV transforms not being correct according to the gutter settings.

  • Bug Fix: Removed the two-actor limit when generating HLOD hierarchies.

  • Bug Fix: Fixed a bug in the editor where a user’s Editor Startup Map setting would be ignored if the project had no default startup map set.

  • Bug Fix: Collision generation is now disabled by default for HLOD proxy meshes.

  • Bug Fix: Fixed a memory leak in FBX Scene during import.

  • Bug Fix: Fixed extra re-allocation of memory buffer holding files during asset import.

  • Bug Fix: Fixed case in Perforce source control code where the server available flag was set even when the server was not successfully connected.

  • Bug Fix: Output Log suggestions list is now clamped to the work area width of the monitor that hosts the widget.

  • Bug Fix: Fixed an issue where saving a sub-level level would cause Map Build Data to be deleted.

  • Bug Fix: Selected joints can now be removed even after bone simplification fails.

  • Bug Fix: HLOD generation commandlet now caches any shaders it generates.

  • Bug Fix: Fixed infinite loop in Simplygon mesh reduction when a LOD actor is encountered with no valid meshes.

  • Bug Fix: HLOD rebuild resave packages commandlet now does not pre-checkout levels.

  • Bug Fix: Removed spurious Simplygon errors when rebuilding HLODs.

  • Bug Fix: Popping the view out of a locked actor and manipulating the view will no longer jump to the previous “look at” location.

  • Bug Fix: Fixed static mesh simplification with input meshes that have nearly singular triangles. Applies to Static Mesh LODs.

  • Bug Fix: A new level now prompts to be saved when lighting or build data has been modified.

  • Bug Fix: Fixed property table not working with multi-line editable text.

  • Bug Fix: Per-instance added components marked as editor only will now always display in the component tree.

  • Bug Fix: Fixed macOS Magic Mouse zoom in world composition editor.

  • Bug Fix: We now display a Blueprint’s parent Blueprint class in the content browser when hovering over it.

  • Bug Fix: Fixed not being able to enter simulate more than once in a row.

  • Bug Fix: Corrected UV generation for merged HLOD meshes.

  • Bug Fix: Fixed expand/collapse issues and performance issues for details customizations which were using external properties.

  • Bug Fix: Updating the max on the size of texture the material proxy now generates successfully. The old max value could cause int32 overflow.

  • Bug Fix: Merged, negative-scaled meshes now have materials mapped correctly.

  • Bug Fix: Fixed emissive scale not being set correctly during material baking.

  • Bug Fix: Fixed bug where “Merge Actors” or HLOD proxies result in too many mesh sections.

  • Bug Fix: FBX exporter now supports non-uniform scale scene transforms for skeletal meshes.

  • Bug Fix: Fixed undo spam when changing colors in the gradient editor.

  • Bug Fix: Added Client target options for iOS, TVOS and Android ETC1a flavor.

  • Bug Fix: Key Up triggers no longer hit the disk during PIE sessions.

  • Bug Fix: Editor MacOS main menu now correctly displays unicode items for keyboard shortcuts.

  • Bug Fix: Shared DDC is now correctly being used for installed engine builds.

  • Bug Fix: Niagara Editor fixes:

    • You can only Add Parameters in graphs where it makes sense to do so. Promoting variables also follows the same logic.

    • Fixed community issue where you could connect an input and output node and encounter a check that the warnings variable array was no longer the same size as the variables array.

    • Multiple fixes to the Niagara Spline Data Interface. It is currently only supported on CPU VM.

    • Niagara Systems now run their Update on the first frame with a small delta time so that they can begin spawning immediately after creation. This also simplifies Emitter and System Spawn logic by guaranteeing that if you want to animate a value, you don’t have to special-case the first frame.

    • Added support for dynamic inputs that don’t have any external inputs.

  • Bug Fix: Niagara Editor Houdini fixes:

    • Added a version to Niagara Data Interface Parameters CS Houdini CSV to avoid further issues when deserializing them.

    • Fixed a bug causing no points to spawn when all points in a file spawned at the same time value.

    • Removed unneeded tests/restriction when calling functions requiring time values on files without time values. When no time value is in the file, it is treated as time 0.

    • Fixed differences between GPU/CPU code.

    • Fixed special attributes column for Vectors in the CSV file not properly named after being expanded.

    • Moved the logic of Get Point IDs To Spawn At Time to Houdini CSV so the function can be called from Blueprints.

  • New: Datasmith now imports 3ds max object user-defined properties and CAD metadata as Unreal readable metadata through the Datasmith User Data.

  • New: Added a way to generate diffs from editor transactions

  • New: Added support for relative asset source paths in content plugins.

  • New: Built Data is now deleted with map files.

  • New: Added support for importing grayscale PSD images.Upgrade

  • New: Implemented vertex welding threshold in the quadric simplifier.

  • New: The FBX importer converts “LODX_” prefixes into “LodGroup”.

  • New: Added a “Reimport All” feature for both static and skeletal mesh. Reimport All will reimport the base LOD and also reimport all custom LODs and regenerate the generated LODs.

  • New: Added source import filename per LOD for static meshes.

  • New: Added HLOD “Save All” button.

  • New: Added UV gutters to material atlasing when merging meshes.

  • New: Enabled Blueprint Read Write for the bool Enable Auto LOD Generation.

  • New: Added the ability to strip UV channels from merged meshes.

  • New: Added new ‘lowest detail LOD’ setting to mesh merging & allowed base material override.

  • New: Added a property on Primitive Component to be excluded from a specific HLOD level. This behavior can be enabled inside of the HLOD level settings with the “Allow Exclusion” boolean.

  • New: Added the ability to set base material for Hierarchical LOD proxy materials. This can be done in Project Settings, HLOD Setup asset and world settings.

  • New: Added -csv parse option to the OBJ LIST command.

  • New: Added new static mesh instancing tool.

  • New: Added editor scripting utilities plugin.

  • New: Added option to auto remap morphs when generating LODs.

  • New: Made it possible to get the value address of a struct property via Get Value Data for struct detail customizations.

  • New: Added info/warning and error message storage to all the source control operation structures so additional information can be made available via the Source Control Operation Get Result Info function.

  • New: Ensured that the Source Control Provider’s Execute delegate is called on initial connection even if it fails immediately. Modified Perforce, Git and Subversion source control providers to do the same.

  • New: Added a delegate to the function Source Control Windows Choose Packages To Checkin that gives info for result, result description, files added, files checked in and flag indicating whether files were checked out again. Also added result info to the function Source Control Windows Prompt For Checkin.

  • New: You can now label the colors stored in the theme bar of the Color Picker. Right-click on any color to give it a label.

  • New: HLOD now minimally rebuilds according to whether source data (actors, materials, meshes etc.) has actually changed.

  • New: Tweaked numbers to maintain previously perceived wire thickness in various graph-based editors.

  • New: Added support for clipping ProxyLOD geometry. Clipping volumes will now be supported by the HLOD generation system allowing the user to specify regions to be clipped from the proxy geometry.

  • New: When generating distant proxy geometry (for example HLOD), added hole filling and the ability to specify the base color that will be used for proxy geometry that can’t be associated with source geometry (e.g. a newly closed window or door).

  • New: Added ability for HLOD levels to reuse clusters of the previous HLOD level. For example, HLOD level 1 can have the same clusters as HLOD level 0.

  • New: Added a command line argument to specify a working directory for shader compilation. For example, “-ShaderWorkingDir=D:\ShaderWorkingDir”.

  • New: Added the option to close tabs to the right of the active tab.

  • New: The experimental ProxyLOD system now has support for generating split normals on hard edges, and additionally selecting the method used for normal calculation.

  • New: Added import/export of Static Mesh user-defined FBX properties as metadata.

  • New: Linear Color Curves now create with 2 keys at 0 and 1, and you can shift-click to add both a color and an alpha key.

  • New: You can now edit the H,S,V of a color curve in the curve editor. This fixes the curve in-editor not reflecting the sRGB color.

  • New: You can now create, playback and manipulate Geometry Cache Tracks when Geometry Cache Components are added to the Sequencer.

  • Improvement: Mesh merging uses available texture space better.

  • Improvement: Optimized editor startup time.

  • Improvement: Improved the experimental ProxyLOD system to make it more robust and eliminate a potential hang.

  • Improvement: Optimized skeletal mesh import speed for larger meshes.

  • Improvement: Scene outliner is now more performant. (especially during Play In Editor)

  • Improvement: HLOD workflow:

    • Levels now do not get dirtied unless actual changes are made to the LOD actors.

    • UI reworked to promote standard workflow (i.e. regeneration without dirtying the level).

    • UI states now better expose available options.

    • Made horizontal/vertical arrangements work better.

    • Buttons are now coded to their ‘danger level’.

    • LOD selection now follows the dropdown convention found in other parts of the editor.

  • Improvement: Removed extra file read into memory buffer during FBX import.

Content Browser

  • Crash Fix: Fixed a crash when content hot-reloading the build data for the current world, or a world with streaming sub-levels.

  • Crash Fix: Fixed a crash after attempting to content hot-reload a package that is too new.

  • Crash Fix: Saving over the level you’re about to load no longer crashes.

  • Bug Fix: Fixed “ghost asset” in Content Browser when an asset is added and renamed before the Recently Added Assets list had a chance to be processed.

  • Bug Fix: Fixed content browser favorites making config files very large.

  • Bug Fix: Updated config file to keep folder color in sync.

  • New: Added “Search Asset Class Names”, “Search Asset Paths”, and “Search Collection Names” toggles to the Asset View options. These options allow the user to further filter their search results and appear under a “Search” header in the “View Options” panel on the bottom right of the Content Browser / Asset Picker.

  • New: Added “LODs” searchable tag to “Skeletal Mesh” assets.

  • New: Add a new menu to show the metadata of an asset.

  • New: Asset metadata can now be transferred to the Asset Registry through configurable metadata tags in the Asset Manager Settings.

  • New: Added “recently opened assets” filter under Other Filters in the Content Browser. It shows the most recently opened assets, and defaults to storing 20 assets. You can change the number of assets saved for the filter in Editor Preferences.

  • New: The Editor now saves editor config to file first time a favorite folder is added in the Content Browser.


  • New: Added the bool Enable Density Scaling flag to Landscape Grass assets, to prevent density scaling for grass types with gameplay significance.

  • New: Cooking the instance buffer is now supported.

  • Bug Fix: Fixed the array duplicate button behavior of Per Instance SM Data.

  • Bug Fix: Disallowed specifying two types of the same grass asset in a material.

  • Bug Fix: Foliage density scaling in editor is applied correctly when not in foliage editing mode.

  • Bug Fix: Fixed Editor instance count to only include placed instances. Calling Generate Procedural Content will no longer automatically remove the current content.

  • New: Added the possibility to edit the full Body Instance on a Landscape Spline Segment instead of only some parameters.

  • New: Exposed LD Max Draw Distance.

  • Improvement: Changed the UI of the Copy tool to be more clear, and added a drop down that will suggest a valid size for the specified heightmap to import.


  • Bug Fix: When changing Component size, Foliage will be properly added again.

  • Bug Fix: World Offset is applied properly to Landscapes.

  • New: Added two new console variables to allow scaling of the landscape LOD distribution values in a device profile or scalability group, “r.LandscapeLOD0DistributionScale” and “r.LandscapeLODDistributionScale”.

  • New: Added ability to set Landscape Material from an Editor Blueprint.

  • Improvement: Added some debug text info to Landscape Layer Usage Material, listing how many layers each component uses. This is much easier to read than the old “stripes” method.

  • Improvement: Changed the UI of the Copy tool to be more clear, and added a drop down that will suggest valid size for the specified heightmap to import.

  • Improvement: Added the possibility to edit the full Body Instance on Landscape Spline Segment, instead of only being able to edit some parameters.

  • Improvement: Exposed LD Max Draw Distance.

Material Editor

  • Crash Fix: Fixed a crash on pasting comments. All other accesses to Material Expression Comment check its validity first.

  • Crash Fix: Fixed a material editor crash if content hot-reloading a texture used by the material.

  • Bug Fix: Prevented materials from showing up in the editing assets list twice.

  • Bug Fix: Updating an atlas texture now correctly updates materials and material instances.

  • Removed: Default keybinding for ‘apply’ in the material editor removed.


  • Crash Fix: Fixed crashes associated with Python threads when external C code called into Python without taking the GIL.

  • Bug Fix: Fixed generated Python types sometimes using reserved names.

  • Bug Fix: Python files executed from the Output Log can now support arguments.

  • Bug Fix: Fixed Python parameter packing sometimes treating bool output parameters as return values.

  • Bug Fix: Removed redundant outer parameter from find_asset, load_asset, find_package, and load_package.

  • Bug Fix: Python now honors Edit Instance Only and Edit Defaults Only when setting property values.

  • Bug Fix: Fixed default value application for some struct types that use a custom default value format when exported by UHT.

  • Bug Fix: Fixed old-style enums being missed by the Python glue generation if they’re only referenced by a property of function.

  • Bug Fix: Fixed context leaking between the console and files.

  • Bug Fix: Fixed lingering exception state when converting a dict to a struct in Python.

  • Bug Fix: Fixed Execute Python Script failing when passed file arguments.

  • Bug Fix: Implemented negative indexing for Python wrapped arrays.

  • Bug Fix: Fixed Python menus failing to execute scripts with spaces in their name or path.

  • New: Source Control API:

    • Updated Source Control Helpers commands to use smart file strings that can convert from any of fully qualified path, relative path, long package name, asset path, or export text path.

    • Added script bindings and helper functions for version control (Source Control Helpers) for the Editor as Source Control class and associated Source Control State.

  • New: Added support for struct operator extension functions in Python.

  • New: Exposed asset import and export.

  • New: The CDO can now be accessed via the get_default_object class method on Python wrapped object types.

  • New: Added Python iterators for selected actors. (Actor Iterator, Selected Actor Iterator)

  • New: Added Python iterators for Unreal objects, classes, and structs, as well as the Python types wrapped by Unreal classes or structs. (Object Iterator, Class Iterator, Struct Iterator, Type Iterator)

  • New: Exposed Scoped Slow Task to Python to allow you to report progress to the editor while performing slow, blocking tasks.

  • New: Added make and break support in Python.

  • New: Logging runtime errors or warnings will now produce Python exceptions.

  • New: Added support for init_unreal.py start-up scripts. These can be placed in any known sys.path in Python, including the Content/Python folders we automatically add, and the UnrealEngine/Python directory under the user’s home directory.

  • New: Added support for UPARAM(ref) on arguments exposed to Python.

  • New: Added support for extension constants in Python.

  • New: Moved Editor Scripting Utilities to be a general Editor plugin.

  • New: Exposed generic get_default_object function that takes a type and returns the CDO.

  • New: Marked Asset Registry Helpers functions dealing with Asset Data as Script Method so they’re available as methods of Asset Data in Python.

  • New: Exposed some asset registry functions that may be useful in a commandlet environment.

  • New: Added support for deprecated (renamed) classes, structs, enums, functions, and properties in Python.

  • New: Added warnings for conflicting Python type and field names.

  • New: Added support for using Python callables with delegates.

  • New: Added assign method to Python exposed structs.

  • New: Added callbacks for when Python is initialized and shutdown so that external modules can hook in appropriately.

  • New: Updated wrapped enums to be more consistent with native Python enums.


  • Crash Fix: Fixed Sequencer copy/paste crash.

  • Crash Fix: Fixed crash when trying to record audio without any active capture devices. A warning is logged if the number of input channels is not 1 or 2.

  • Crash Fix: Added Null checks to prevent crash when saving the default state of a spawnable.

  • Crash Fix: Opening a new sequence while another is still active will no longer crash.

  • Crash Fix: Fixed a crash on compiling Blueprint with a deleted actor sequence.

  • Crash Fix: Fixed a crash when an actor factory is not found.

  • Crash Fix: Fixed a copy/paste crash for lights.

  • Crash Fix: Added template signature that is re-generated every time the base template is regenerated, which invalidates evaluation fields. Fixed a crash where the same sub-sequence is instantiated multiple times in a sequence is saved without the master sequence also being saved.

  • Crash Fix: Sequencer now resets if the focused movie scene is null. This fixes a crash if the user is focused in on a shot and undo takes the user past the point of where the shot was created.

  • Crash Fix: Fixed a crash with stale section pointer.

  • Bug Fix: Restricted spawnables from being created if they have a Class Within that Movie Scene is not a child of.

  • Bug Fix: Sequencer now skips if the binding ID’s sequence can’t be found.

  • Bug Fix: Sequencer overrides the animation asset in the player state if it doesn’t match the animation asset that’s being evaluated.

  • Bug Fix: HDR Compression Quality is clamped between 0 and 1 for Movie Scene Captures.

  • Bug Fix: Fixed overlapping ranges being inserted into the evaluation field during compilation.

  • Bug Fix: Fixes curves changed on end drag so that only curves that had keys/tangents changed receive notifications, otherwise all loaded curves were getting notified that they were changed.

  • Bug Fix: Sequencer now swaps the camera object to the camera component’s owner if it’s not the same.

  • Bug Fix: The UI for adding tracks that only support one instance (such as the Fade track) now gets disabled after an instance has been added to the sequence.

  • Bug Fix: Sequence Recorder now logs an error if the number of frames changes while recording. This can happen if the skeleton changes while recording.

  • Bug Fix: Sequencer now clears autoscrub offset when stopping autoscroll.

  • Bug Fix: Sequencer now determines whether a transform track is for a camera by using the spawned object or template.

  • Bug Fix: Sequencer now prevents Goto and Transform boxes from overlapping by allowing them to be visible at the same time in an autosized horizontal box.

  • Bug Fix: Fixed sibling folders being allowed to have the same folder name.

  • Bug Fix: Removed the bool Keep Stale Tracks so that stale tracks are now always purged.

  • Bug Fix: Fixed unbound possessable components when pasting spawnables.

  • Bug Fix: Convert to possessable now uses object template instead of copying properties. This fixes MIDs getting lost when converting to spawnable and back to possessable.

  • Bug Fix: Property values are no longer lost when converting back and forth from possessable to spawnable.

  • Bug Fix: Fixed stale object references remaining in Level Sequence Binding References when using convert to spawnable/possessable, or assigning an actor to an unresolved binding.

  • Bug Fix: Sequence Recorder no longer creates a spawn section if the object is a possessable.

  • Bug Fix: Removed Sequence Actor Tag when converting to possessable. This fixes the icon for actors so that they don’t appear as spawnables after converting to possessable.

  • Bug Fix: Sequencer now stops recording if the preview window is destroyed.

  • Bug Fix: Locked down the first and last keys in the redundant keys removal range so that they’re unaffected.

  • Bug Fix: Restored hud based on whether it was enabled. This fixes a bug where the HUD is getting restored to true after the level sequence actor disables it.

  • Bug Fix: When enabling the “MovieCapture”, the Stereo-3D display now does not turn off.

  • Bug Fix: Spacer nodes are no longer selectable.

  • Bug Fix: Validated actor names passed to Set Actor Label to ensure ‘None’ isn’t passed in, which could corrupt levels.

  • Bug Fix: Sequencer no longer preserves root component when copying object properties.

  • Bug Fix: Fixed Key Frame Manipulator assignment operators and copy/move constructors.

  • Bug Fix: Sequencer now jumps to the playback start frame instead of 0 to start playback for recording.

  • Bug Fix: Sequencer no longer automatically marks transforms to be recorded by sequence recorder.

  • Bug Fix: Sequence template source signatures are now also compared to catch the case where a sub-sequence asset has been saved but not modified.

  • Bug Fix: Sequencer now stops all sounds before generating audio waveforms.

  • Bug Fix: Appended command list to global level editor actions so that shortcuts for recorder are accessible in level editor.

  • Bug Fix: Sequencer sections that do not properly support infinite time ranges will no longer allow you to set an infinite range.

  • Bug Fix: Audio that is split into 2 channels no longer gets a duration that’s twice as long as it needs.

  • Bug Fix: Level Sequences with spawnables no longer mark the package as dirty on close unless the spawnable default state has actually changed.

  • Bug Fix: Flipped Cine Camera Vista Vision width and height.

  • Bug Fix: Fixed FBX camera import so that the default tracks use the values from the FBX instead of inheriting the default properties of the camera.

  • Bug Fix: Changed path/attach track sequence binding ID to currently focused sequence ID so that bindings can be created in subsequences.

  • Bug Fix: Fixed Set Playback Position so that it jumps or plays based on playback status.

  • Bug Fix: Sequencer no longer shows Transform/Path/Attach track if the actor has the “Mobility” property hidden.

  • Bug Fix: Dragging the time slider no longer causes the time slider to ignore the Snap to Interval setting when “Snap to Keys While Scrubbing” is enabled.

  • Bug Fix: Made the track color picker focusable so that it will close when you click away or lose focus.

  • Bug Fix: Added support for “Enter” key to add assets for all sequencer track editors that have asset pickers.

  • Bug Fix: Legacy Blueprint spawnables are now purged from Level Sequence packages on load.

  • Bug Fix: Fixed issue with being able to drag/drop montage onto Animation Track in Sequencer.

  • Bug Fix: Fixed an issue with Sequence Evaluator to handle properly when jumps from end to front or front to end.

  • Bug Fix: When getting selected tracks for the external selection api, include tracks if any of their child nodes are selected. This behavior now matches the behavior for object guid external selection.

  • Bug Fix: Fixed instances where sequencer data was being modified without calling Notify Movie Scene Data Changed.

  • Bug Fix: Allowed actor components for synchronization.

  • Bug Fix: Fixed some sequences not evaluating correctly with “Evaluate Sub Sequences in Isolation” enabled.

  • Bug Fix: Fixed a case where the first recording is null but there are other valid recordings. Stop Recording wasn’t getting called because the EndPIE delegate wasn’t bound since ActorWorld was incorrectly set.

  • Bug Fix: Fixed edits to sub-sections not invalidating their sub sequence data for deep hierarchical sequence structures.

  • Bug Fix: Fixed various issues copy and pasting Spawnables from one sequence to another and within the same sequence. No longer prints superfluous warnings on paste and properly initializes the new object template so that it does not get garbage collected/cause issues on save.

  • Bug Fix: When rotating Euler angles with gizmos, rotation keys are now wound correctly.

  • Bug Fix: The Camera/Shot Lock button no longer changes state inappropriately when exiting a sequence.

  • Bug Fix: Step to Next/Previous key now works for all tracks when none are selected.

  • New: Added notification when the blend type is changed.

  • New: Dragging onto a particular row would move out any overlapping sections to make space for the newly created section. Newly created sections are now selected and throbbed to draw attention to themselves.

  • New: Added getter for media player in media sound components.

  • New: Disabled sub-sequences now show [Inactive] in their title bars in the Sequencer UI. This helps communicate why a sequence isn’t being evaluated as you scrub through it.

  • New: Added an option to toggle ‘disable screen percentage’ in Movie Scene Capture. By default this is on (no change to current behavior).

  • New: Items that are now added to the Sequencer via the “+Track” menu will be selected after being added. If a folder is selected the item will be added inside of the folder.

  • New: Split camera properties to two groups, “Camera Options” and “Camera Settings”. The cine camera now hides properties in the “Camera Settings” group so that properties like the bool Constrain Aspect Ratio (in the “Camera Options” group) can be visible.

  • New: Sequence Recorder can now store preset groups of Actors to record.

  • New: Added logging per frame to Movie Scene Capture.

  • New: Added section selection throbbing.

  • New: Sequencer Sub section now has a takes menu.

  • New: Added attenuation visualizer for media sound components in the media player editor.

  • New: Added sprite visualization to media sound components.

  • New: Removed unfinished overlay asset types from Content Browser menu.

  • New: Added various media assets to Content Browser filter menu.

  • New: Added FBX property mapping for “FocusDistance” to “FocusSettings.ManualFocusDistance”.

  • New: Added format mapping for the name of the current camera.

  • New: Enabled “Run Construction Scripts in Sequencer” by default.

  • New: Implemented thread scheduler for higher performance in image sequence loaders.

  • New: Exposed Is Reversed from Movie Scene Sequence Player Sequence Recorder.

  • New: Renamed Automated Level Sequence Capture’s StartFrame and EndFrame to Custom Start Frame / Custom End Frame to reflect that it is user-overriden. This will also resolve upgrade issues due to the variable datatype changing.

  • New: Import the camera switcher track as a camera cut track in Sequencer when importing an FBX with the “Create Cameras” option selected.

  • New: Similar to Matinee, there is now a Skip Anim Notifies Toggle for being to control whether or not notifies should be fired when the animation plays in the sequence.

  • New: Added option to toggle the behavior of locking the rail mount to the orientation of the spline. By default, the option is off. (No change in behavior.)

  • New: Added ability to Rekey the selected key at the current time.

  • New: Bound rename command to selected track so that F2 shortcut invokes renaming.

  • New: Array elements within USTRUCT properties can be animated.

  • New: Adding a single key to the Particle Toggle track now makes an infinite range section that is displayed in the UI.

  • New: Moved Record to possessable “Actor Recording” group.

  • New: A selected animation track in the sequencer will now show the animation frame number of the sequence when it is playing.

  • New: Event names are shown when the event track is selected.

  • New: Added the option to key a group of transform channels instead of just the changed channel, or all of them.

  • New: Transform sections in the sequencer now include a Quaternion Interpolation option which takes the smallest rotation path during rotation interpolations.

  • New: Dragging the left or right handles of the Time Range slider in Sequencer will now zoom your view in on the current center of the screen. This prevents the view from being translating as you tried to zoom in which caused issues at high zoom levels.

  • New: Scrubbing with the Snap to Keys setting enabled now mirrors the behavior of the “jump to next key” feature. If a track is selected, it only snaps to keys on the selected track, otherwise it snaps to all keys.

  • New: Enabled keying the “Enable Look at Tracking” toggle on Cine Camera.

  • New: Added create pose asset to skeletal animation section. This allows animators to blend animations in sequencer and create new pose assets from them.

  • New: Exposed default level sequence instance data to Blueprints.

  • New: Added level name to spawn a spawnable into. Added sublevel menu option to set the level.

  • New: Added Edit -> Autosize Section Length to duration of source.

  • New: Added event names to selected event tracks.

  • New: Sequencer will now focus the vertical scroll view on newly created items.

  • New: Initial scripting exposure and support for movie scene types, including:

    • Find/add/interate master tracks.

    • Find/add/interate bindings (both possessables and spawnables).

    • Find/add/interate tracks on bindings.

    • Add/interate sections on tracks.

    • Get/Set section ranges.

  • New: Timecode recording saved as editor-only data to the Movie Scene Section and Movie Scene.

  • New: Introduced a common base class for all movie scene channel data.

  • New: The Transform dialog (Ctrl + M) now can now transform sections, including when you have a section and keys within that section selected.

  • New: Added audio support to FCP XML import/export.

  • New: Exposed “Add Scalar Parameter Key”, “Add Vector Parameter Key”, and “Add Color Parameter Key.”

  • Improvement: In Sequencer, inactive tracks are dimmed.

  • Removed: Removed the ability to bind sequencer to PIE/simulate while recording.

  • Removed: Removed experimental image plate media playback functionality.

Static Mesh Editor

  • Bug Fix: Fixed an issue where we would fail to pack the UVs properly if we had multiple identically sized charts.

World Browser

  • Crash Fix: No longer crashes when performing an Undo operation right after generating LOD of a sub-level.

  • Bug Fix: Fixed filtering of sub-levels in hierarchy view by world composition layers.

Level Editor and Tools

  • Crash Fix: Fixed a crash when a level is in an incorrect level collection after reverting the changes of a sublevel of the current level being edited.

  • Bug Fix: Fixed attenuation settings not being disabled when Override Attenuation is false for force feedback and non-English builds.

  • Bug Fix: Actors in the open editor level can no longer be set as the default value for maps, sets, or arrays in user defined structs.

  • Bug Fix: PIE sessions can no longer inappropriately affect editor sessions when the input setting “Use Mouse For Touch” is active.

  • New: Source control history control now includes revisions made prior to branch actions

  • Improvement: The Actor Component function, On Rep Is Active, can now be overridden in subclasses.

Learning Resources

  • New: The “-GenerateBlueprintAPI” commandlet now writes clean JSON and provides the option to export information about a subset of the Blueprint nodes available in the Editor rather than all nodes.

Gameplay Framework

  • Bug Fix: Get Components now collects components from child actors when requested to.

  • Bug Fix: Can Crouch In Current State now returns false when character capsule is simulating physics.

  • Bug Fix: Uncrouching now uses the right height for “unencroached” test, when jumping from crouch or uncrouching while in the air.

  • Bug Fix: Moves are no longer combined, when a move triggers a new actor and/or component overlap event.

  • Bug Fix: Character Movement Component’s Get Client Net Send Delta Time function now uses this time if Acceleration and Velocity are zero, and the control rotation matches the last acknowledged control rotation from the server.

  • Bug Fix: Input Chords that are set to “None” no longer get replaced with “Any Key” value when the containing Blueprint is reopened.

  • Bug Fix: Removed a dereference that was causing a crash inside Gameplay Cue Manager.

  • Bug Fix: Fixed an issue where Save Game objects could be loaded with the wrong class type when using a Blueprint Save Game type.

  • Bug Fix: Set Allow CPU Access now correctly dirties Static Mesh assets.

  • Bug Fix: Character Movement Component’s Server Move function no longer sends the movement base component / bone name unless it’s a dynamic base.

  • Bug Fix: CharacterMovementComponent now removes branches when using repeated access of TSharedPtr with FSavedMovePtr.

  • Bug Fix: NaN checking has been removed in Shipping configs within Character Movement, even when checks are enabled in Shipping.

  • Bug Fix: The Actor function called Is Overlapping Actor now avoids function calls on each Primitive Component unless there are actually any overlaps on that component.

  • Bug Fix: Calling Rename on an Actor now correctly removes and adds the Actor to the Actors array of the Level.

  • Bug Fix: Walking in to a wedge between geometry and a slope no longer launches the player in the air with a variable height affected by framerate.

  • Bug Fix: You can now import Data Tables from .CSV files that contain only a header row and no data rows.

  • Bug Fix: Client move combining now works while holding down the jump key or while jump is providing force.

  • Bug Fix: Simulated proxies now correctly simulate gravity when jump force is being applied.

  • Bug Fix: Jump height dependency on framerate has been fixed when applying jump force for more than a single frame burst.

  • Bug Fix: Fixed unsafe weak object pointer when dereferencing iterating pawns.

  • Bug Fix: Force feedback events are now played on the correct controller if the Offset Player Gamepad IDs feature is in use.

  • Bug Fix: Fixed Characters using default scoped movement updates. They no longer visually rotate when rotated at small rates at high framerate.

  • Bug Fix: You now receive a warning rather than an assert on a child promotion failure when destroying a non-root scene component within an Actor’s scene component hierarchy.

  • Bug Fix: Child Actor Components are no longer attached to a CDO’s root component.

  • Bug Fix: Component instances no longer crash due to sub components.

  • Bug Fix: EndPlay will now be executed if the Actor is destroyed as a result of actions from within its own BeginPlay call.

  • Bug Fix: Gameplay Ability System has been optimized to remove redundant uses of Weak Object Pointer operator.

  • Bug Fix: Scoped Movement Update now propagates the teleport flag from an inner scope to outer scope when they are nested.

  • Bug Fix: Revert Move correctly resets the Teleport Type now.

  • Bug Fix: Fixed log spam when a client character receives acknowledgment for a move that has been removed from the saved moves.

  • Bug Fix: Jump force for character proxies is more accurately predicted to stop on time in case state is not yet replicated from the server.

  • Bug Fix: Blueprint dynamic force feedback effects now update their values when the update node is invoked and while the latent action is active.

  • Bug Fix: Gameplay tag serialization now handles “NumBitsForContainerSize=8” correctly without uint8 overflow.

  • Bug Fix: Invalid Ground Movement Mode coming from Character Movement Component’s On Movement Mode Changed function has been fixed.

  • Bug Fix: Delegates now have calls when a periodic Gameplay Effect executes a final time as it is being removed.

  • Bug Fix: The current result of Get Max Speed is now saved in client character saved moves and avoids combining moves with different max speeds.

  • Bug Fix: Ensured that Flush Server Moves only runs on autonomous proxies in case the caller erroneously calls it elsewhere.

  • Bug Fix: Time dilation and frame time values in world settings are now clamped so they won’t accidentally be set to negative values.

  • Bug Fix: Target Point’s Arrow component is no longer too small to see.

  • Bug Fix: Project World To Screen no longer returns true in the event that the projection failed.

  • Bug Fix: Async Load Primary Asset nodes can now be called safely from a loop.

  • Bug Fix: Placed Editor Utility Base once again ticks in the editor as intended.

  • Bug Fix: The default physics volume can now be spawned during construction script execution if it needs to be lazily created.

  • Bug Fix: In Level Streaming, Should Block On Load now properly blocks for the entire loading process, not just the file load.

  • New: Added Client Net Send Move Delta Time Stationary (default 12Hz) to supplement existing Client Net Send Move Delta Time and Client Net Send Move Delta Time Throttled.

  • New: A Post Script Construct trait has been added that allows users to perform initialization after a blueprint has created a temporary object. If the With Post Script Construct trait is true for a class, that class must implement Post Script Construct. This function is called after an instance of the class is constructed by a blueprint.

  • New: Saved Moves now support subclasses adding combination logic by overriding the Combine With function.

  • New: User Defined Enums now support redirecting.

  • New: Added “r.CookOutUnusedDetailModeComponents” CVar to cook out actors on a per-platform basis. Actors (and Components) are now optionally removed on cook if the device detail level is lower than the component’s detail level. This behaviour is controlled by a CVar which can be set via the device profile.

  • New: A toggle has been added to disable the gesture recognizer to input settings. By default this is disabled.

  • New: Radial Damage multicast delegate has been added to Actor and is consistent with Point Damage.

  • New: A Console Variable has been added to enable Async Trace: “RunAsyncTraceOnWorkerThread”.

  • New: Added a constructor for Gameplay Ability Spec that takes an ability class instead of forcing the caller to supply the CDO.

  • New: Added macros to Attribute Set to declare helpful accessors, a version of which is used by all Epic internal games.

  • New: Added a function to Gameplay Ability called Get Ability System Component From Actor Info .

  • New: Implemented a new Ability System Component function, Add Gameplay Event Tag Container Delegate, to enable listening for gameplay events using non-exact tag matches, and an option to Wait Gameplay Event to use this.

  • New: Added a Save Game flag to Gameplay Tags so they can be used for native save systems.

  • New: Added a Development Always Cook setting to the asset manager cook rule, this works like Always Cook in development and like Never Cook in production. Development Cook works like Unknown in development.

  • New: “WindDirectionalSourceComponent.h” can now be fully used outside of the Engine module.

  • New: Keys (FKey struct) can now register a short display name, and Get Display Name can request either the long or short version of the name.

  • New: Added a new type of Gameplay Tag called Restricted Gameplay Tag. At runtime, it behaves exactly the same as normal Gameplay Tags, but in the editor, it allows for more control of higher level tags while still leaving flexibility for more specific tags. Restricted gameplay tags are intended for larger projects that want to be able to enforce a high level hierarchy on their tags while still allowing full control and flexibility over lower levels of the tag structure.

  • New: A public method, Strip Save Game Header, has been added for serializing internal header data from save game data buffers.

  • New: A helper function has been added to make it easier to query containers for the presence of a single tag.

  • New: CSV stats have been added for Character movement.

  • Improvement: Gameplay Tags now import from config files by default. Previously the default method for importing was through tag tables.

  • Improvement: Workflow has been improved to support multiple config files that store Gameplay Tags.

  • Improvement: You can now invoke dynamic force feedback effects from native code using Player Controller’s Play Dynamic Force Feedback function. The latent function has been made private and only usable from blueprints so it can no longer be misused.

  • Improvement: Attribute Set’s Init From Meta Data Table function is now virtual.

  • Improvement: Optimized Update Overlaps by 20% in test cases with large numbers of overlapping actors moving. Further optimized by improving Weak Object Pointer usage to avoid deep comparisons when not necessary.

  • Improvement: Bandwidth is now reduced for replicated characters by only replicating 4 byte timestamp value to clients if it’s actually needed for Linear smoothing. By setting Network Always Replicate Transform Update Timestamp to true, you can revert to the old behavior.

  • Improvement: Reduced network RPC overhead for characters that are not moving.

  • **Improvement: **Projectiles now feature a variable, Bounce Additional Iterations, to control physics iteration count, rather than being hardcoded to one iteration. Default value is two.

  • Improvement: Update Character State Before Movement and Update Character State After Movement now include a DeltaSeconds argument.

  • Improvement: Process Input Stack from the Player class has improved evaluation of which Actions occurred during a frame.

  • Improvement: Actors now have a Pre Register All Components virtual function to match the Post Register All Components function.

  • Improvement: Updated the process of loading/unloading and hiding/showing streaming levels. Many of the variables involved in level streaming have been made private and you must use functions to modify/interact with the them.

  • Improvement: Added delay functionality to MediaPlayer. This will allow more than one player to start at a same time. They will play at the same frame, but be offset in relation to each other.

  • Improvement: Cleaned up and reorganized the public headers of the GameplayAbilities plugin. Many comments were added and the classes were reorganized to group related things together.

  • Improvement: Made several changes to Projectile Movement Component that have improved the default performance settings with minimal behavior impact.

  • Improvement: Per-frame allocations have been reduced in the input manager.

  • Improvement: Reduced per-frame allocations when using DataTables. Accessing a DataTable with a string literal now avoids a allocating an FString variable with each call.

  • Improvement: The Actor function called Is Overlapping Actor is optimized to avoid function calls on Primitive Components that have no current overlaps.

  • Improvement: Optimized SetCollisionProfileName when calling it from a constructor.

  • Improvement: Made some improvements and added flexibility to how Character Movement Component saved moves are combined.

  • Improvement: Removed 3 branches from the Weak Object Pointer function, Get.

  • Improvement: Looping camera shakes can now be blended out.


  • Bug Fix: Fixed “Should Exclude Derived Classes” option not working in the asset gather.

  • Bug Fix: Fixed PO files failing to import translations containing only whitespace.

  • Bug Fix: Text that doesn’t belong to the current package is no longer cached in the localization cache for that package.

  • Bug Fix: Fixed struct instances comparing against the wrong default values when gathering for localization.

  • Bug Fix: PO import no longer fails if a PO file is missing, which is the case for new languages.

  • Bug Fix: Localization multi-line fix.

  • Bug Fix: Fixed single-culture PO import/export failing.

  • Bug Fix: Fixed an issue where some languages would be unavailable due to how ICU reports available cultures.

  • Bug Fix: Fixed placeholder string table entries for different keys being considered identical.

  • Bug Fix: Fixed class/actor names in the placement panel not localizing correctly.

  • Bug Fix: Added missing Hiragana combining character range.

  • New: Localization Pipeline Optimization that mainly focus on asset gathering and other general improvements to other parts of the pipeline. The gather time for 250,000+ word project spanning 80,000+ assets down from over an hour, to just over 10 minutes now.

  • New: Improved the localized asset cooking so that it only cooks L10N variants if their source asset is cooked.

  • New: Added some command line options for GatherText to detect and fix stale or missing package localization caches.

  • New: Added a way to view the localization cache on a package through Asset Localization > Show Localization Cache.

  • New: Improved the ability to lockdown available game languages.

    • In addition to the previous “Disabled Cultures” array, you can now add an array of “Enabled Cultures” (using the same per-build config filters) to explicitly list the cultures that are allowed to be used in your build (if the list is empty, then everything is allowed unless otherwise disabled).

    • This also stops the game from attempting to fallback to the native language if the native language has been disabled (it will fallback to the first available language instead).

  • New: Added an optimized conversion process between Unreal strings and Unicode strings for platforms that use UTF-16 strings natively.

  • New: Added support for additional localized text sources, including arbitrary polyglot data.

  • Deprecated: “Get Cultures With Available Location” is deprecated and should be replaced with “Get Localized Culture Names” to get the names, or “Get Available Cultures” if a pointer to the full culture data is needed.


  • Crash Fix: Cleared a debug callback when “Curl HTTP Request” was destroyed to prevent crashes.

  • Bug Fix: Fixed several issues with seamless travel while using Play-In-Editor that could cause crashes.

  • Bug Fix: Fixed an issue with stateless handshake, when the server sends a challenge and receives a response during the same tick.

  • Bug Fix: Pitch is now properly stored when aiming in client recorded replays.

  • Bug Fix: Removed the overhead of “Compress Axis” in the function Rotator for each element in Serialize Compressed when loading.

  • Bug Fix: An issue with stateless handshake was fixed, where the server sends a challenge and receives a response during the same tick.

  • Bug Fix: Guaranteed a return value of 0 when the “Get Port No” function of “Socket” fails.

  • Bug Fix: Fixed MULTIHOME returning the incorrect host address on Linux and Android.

  • Bug Fix: Infinite recursion no longer occurs when trying to flush/send on socket close.

  • Bug Fix: Fixed a rare bug where a remote function call from the client could use the wrong value for an object reference in a struct.

  • New: Cleaned up the “Get Type Hash” function on the “Unique Net ID Replication” function to call into the “Unique Net ID Version” function.

  • New: Added a keyfunc class for use with Unique Net ID as a key in TMap.

  • New: Added support for message bus in single-threaded applications.

  • New: Added support for single-threaded applications in UDP socket sender/receiver.

  • New: Added some parameters to “Rep Layout” member functions const-correct.

  • New: Included a sample replication graph for ShooterGame.

  • New: The CVar “CVar Ping Exclude Frame Time” is now enabled in shipping builds.

  • New: Net Connection now tracks how many total bytes of data it has sent and received during its lifetime.

  • New: Net Driver now tracks how many bunches its connections have sent and received.

  • Improvement: Unique Net IDs serialized over the network in 18 bytes, down from 41.


  • Crash Fix: Fixed a potential crash when recording replays.

  • Bug Fix: Fixed the current replay’s timestamp if the replay is close to finishing.

  • Bug Fix: Allowed Automatic Replay / Stream names to be configurable.

  • Bug Fix: Fixed up edge cases in Replays where Actors were being destroyed inappropriately.

  • Bug Fix: Net Connection now keeps track of both in and out packet loss during its entire lifetime.

  • Bug Fix: Fixed a security issue if a malformed packet was sent with a channel index greater than the maximum number of channels.

  • Bug Fix: Fixed the “Play Replay” function of Game Instance to return false if the replay fails to play.

  • Bug Fix: Fixed many issues with replicated, placed-in-map Actors and replay scrubbing. Places Actors will now always respawn correctly after scrubbing, with the correct transformas applied and correct replicated properties.

  • Bug Fix: No processing will be done in “Demo Net Driver” if the Stream isn’t ready.

  • Bug Fix: Fixed up DemoNetDriver to always call Handle Demo Net Playback Failure for cases when the demo is stopped due to errors.

  • Bug Fix: Fixed initially dormant replicated actors not being recorded in client replays.

  • Bug Fix: Replays now ignore RPCs while fast forwarding.

  • Bug Fix: Dedicated server no longer runs the render thread.

  • Bug Fix: Fixed an issue where the client could receive redundant actor destruction messages during level streaming, which could cause broken actor channels.

  • Bug Fix: The dithering effect on LOD actors during replay playback now ignores time dilation.

  • Bug Fix: Placed Actors now appear correctly in replays.

  • Bug Fix: Replays handle dynamic level streaming correctly, instead of keeping all levels loaded at all times.

  • New: Added an option for replays to track additional Actor state to be applied after the actor is respawned during playback scrubbing.

  • New: Added an option to allow multiple connections to share network serialization state during server replication. This applies to both property replication and multicast remote procedure calls.

  • New: The maximum number of actor channels can now be configured by setting the “net.MaxChannelSize” console variable.

  • New: Added additional stats around network GUID remapping, with new options to limit the number processed per frame and filter the list based on closed and broken actor channels.

  • New: Net connections now maintain a mapping of class names to an array of time differences between replication instances of actors of that class. This can be used to help track if certain classes of actors are taking too long to replicate.

  • New: Added Support with Rewindable Actors for replays.

  • New: Added a way to retrieve the active replay name from the Demo Net Driver.

  • New: Added functions Save Property State and Compare Property State to Demo Net Driver.

  • New: Added the function “Is Saving Checkpoint” to Demo Net Driver to allow other code to query whether the driver is currently saving a checkpoint.

  • New: Added a console variable demo with “Time Burn In” to show the current replay timestamp on-screen with debug text.

  • New: Added “-csvdemostarttime” and “-csvdemoendtime” commandline arguments to automate CSV profiles when running replays.

  • New: Local File Streamer replaces Null Streamer as the default Replay Streamer. Works asynchronously and performs better on low-speed hard drives, such as those found in game consoles.


  • Crash Fix: Fixed a CEF browser threading issue causing rare crashes.

  • Crash Fix: Fixed a rare crash in Steam Sessions.

  • Bug Fix: The HTTP Retry System function now uses the “Retry-After” or “X-Rate-Limit-Reset” header to determine when it should connect next for responses that returned 429 or 503.

  • Bug Fix: Changed the behavior of Curl HTTP requests that failed and had no HTTP activity to be a connection failure instead of a generic failure.

  • Bug Fix: Changed access pattern to the HTTP Thread function removing a critical section.

  • Bug Fix: Online Hotfix Manager restores old ini settings in the same frame as applying the new ini values.

  • Bug Fix: Changed the behavior of Curl HTTP requests that failed and had no HTTP activity to be a connection failure instead of a generic failure.

  • Bug Fix: Fixed voice failing to play locally after performing a seamless travel when using NullOSS.

  • Bug Fix: Cleaned up Steam P2P connection logging to prevent excessive log spam.

  • Bug Fix: Fixed Steam Leaderboard code to overwrite stat variables instead of increment them as per the documentation.

  • Bug Fix: Added missing domains for Google/Facebook to properly delete cookies on logout.

  • Bug Fix: Fixed iOS/Mac HTTP requests repeating the contents of their user agent header.

  • Bug Fix: Fixed a non-null termination close reason coming from “LWS Web Socket.”

  • Bug Fix: Fixed Steam Dedicated Server from forcibly linking Steam Client dlls which can cause issues depending on environment setup.

  • Bug Fix: Fixed OSS Live not initializing its subsystem name.

  • Bug Fix: A crash no longer occurs when receiving unhandled XMPP stanzas in debug builds.

  • Bug Fix: Re-added max connections per host and multi home http support to Curl HTTP.

  • Bug Fix: The b.VerifyPeer ini setting is now used by Windows Curl HTTP implementation.

  • Bug Fix: Fixed a connection failure to Google API during initialization for Google Sign In.

  • Bug Fix: Fixed an issue with Google sign in where delegates fire inappropriately in Login() as well as giving a bad return value.

  • New: LibCurl now advertises that it accepts compressed HTTP content in gzip and deflate formats.

  • New: Default UserAgent sent with HTTP calls is now “$Product/$Version $OS/$OSVersion”.

  • New: Added serialized json as a valid value type for Variant Data function Serialize Online Key Value Pairs function.

  • New: Added bulk UnregisterPlayers function to AGameSession.

  • New: Update libwebsockets to v2.2.

  • New: Added SSL Manager to the SSL module to manage the lifetime in monolithic builds and create SSL contexts.

  • New: Added the ability to override Facebook app id, set API version via config and added more debugging options.

  • New: Updated Facebook SDK to 2.12 which allows you to use a version config value.

  • New: Implemented more tests into the leaderboard testing harness.

    • Added the ability to fetch arbitrary rank for platforms that support it. Command is “online test leaderboards [optional arbitrary user id for lookup]”

  • New: An HTTP retry option was added to allow for multiple alternate domain attempts if a connection to the host fails.

    • Only attempt other domains if it fails to connect, not if the request fails for non-connection related reasons.

  • New: An ini setting was added to set the maximum number of connections that curl will use.

  • New: Implemented “Online Play Time Limit” in the “Play Time Limit” module to the Online Framework plugin.

  • New: The OnlineSubsystem “Get By Platform” is now more extensible with new platforms.

  • New: Online Hotfix Manager now supports a version value that is compared against the network compatible version.

  • New: Updated cacert.pem from curl - Extract CA Certs from Mozilla.

  • New: Added a delegate when receiving an http header Add FHttp Request Impl to implement simple virtual functions that all platforms implement in the same way.

  • New: Upgraded Google Sign In SDK for Android to the latest version.

  • New: The “Get Online Environment Name” function of Online Subsystem now allows for subsystem implementations to give specific names for their online environment.

  • Deprecated: Disabled the Slate Remote server in shipping builds and on non-Desktop platforms.


  • Bug Fix: Corrected commands mapped in the incorrect location.

  • Bug Fix: Fixed Tile Maps being edited in the Tile Map Editor always having a selection color tint.

  • Bug Fix: Fixed collision generation for Tile Maps with non-orthogonal projections.

  • Bug Fix: Improved positioning of newly added collision or rendering shapes (box/sphere) when a sprite is not at the origin in UV space.

  • Bug Fix: Double-clicking to change the UV region in the Sprite Editor now correctly marks the Sprite Asset as modified.

  • New: The Tile Grid color is now customizable.


  • Bug Fix: Fixed a cook warning with “Contains Physics Tri Mesh Data” returning true but “Get Physics Tri Mesh Data” returning false.

  • Bug Fix: Re-enabled warnings for when PhysX fails to cook a mesh.

  • Bug Fix: Origin-shifting no longer causes big impulses on Cable Components.

  • Bug Fix: Improved load times for PhysX tri meshes by turning off 8-bit index buffer optimization and avoiding conversion from 8-bit to 16-bit one index at a time.

  • New: Contact modification callbacks have been exposed in the Engine, allowing access to custom contact modifications.

  • New: Added a warning when applying a non-substepped force while inside a substep callback.

  • New: Cable Actor class is now exposed with the Engine API.


  • Crash Fix: Fixed a crash when clothing simulation was dispatched from a pending kill Skeletal Mesh Component.

  • Crash Fix: A crash no longer occurs during clothing actor creation when a clothing simulation mesh has no simulated vertices.

  • Crash Fix: Fixed a crash caused by switching clothing meshes when clothing LOD0 is unbound on a clothing data object.

  • Crash Fix: Fixed a crash reimporting over clothing when the bind step would make a section exceed MAX_GPUSKIN_BONES.

  • Bug Fix: Proxy now updates cloth shader data independently, causing sections to no longer get stuck in the clothing rendering path due to the component not ticking.

  • Bug Fix: Changed clothing render data to always use component-relative transforms so we don’t see single frame stretching of clothing on component spawning.

  • Bug Fix: Fixes to clothing ‘pops’ during server corrections due to unexpected linear forces.

  • Bug Fix: Motion Blur is now correctly calculated on clothing sections of Skeletal Meshes.

  • Bug Fix: Fixed clothing data binding state becoming mismatched after a reimport over multiple LODs.

  • Bug Fix: Fixed clothing LOD update receiving empty bone transform array on initialization if a master pose component was used

  • New: Added support for Tapered Capsules to physics assets. Tapered Capsules are only supported by clothing, not by rigid bodies.

  • New: Added tool to copy Skeletal Mesh Vertex Colors to selected clothing parameter mask.

Collision Detection

  • **New: **Added rest offset for geometry, which allows us to smooth out contact generation. This helps with sliding objects on sharp irregularities.

Physics Asset Editor

  • Crash Fix: Fixed a crash caused by using the undo command to undo primitive regeneration while simulation is in progress & stopping simulation.

  • Bug Fix: Fixed physics asset editor relying on the “Block All” profile for its Collision Enabled in case a project has redefined the properties of the “Block All” profile.

  • Bug Fix: Constraints and bodies now rotate in their own Local Space in the Physics Asset Editor when local coordinate system is applied.

Rigid Bodies

  • Bug Fix: Removed unnecessary read locks when updating kinematic targets during substepping.

  • Bug Fix: Substepping is no longer used on Query Only kinematic bodies.

  • Bug Fix: Fixed Rigid Body awake check needlessly iterating all bodies in a Skeletal Mesh component.

  • Bug Fix: Fixed bug where only points on one side of a plane were being checked in Convex Hull validation.

  • Bug Fix: Mass scale of Physics Bodies is no longer incorrectly clamped. It now allows mass scales below 0.01 and above 100.

  • New: Added new boolean flag, “Not For Dedicated Server,” to Physics Assets, which disables creation of bodies on dedicated servers.


  • Bug Fix: Added support to check if persistent storage is available before attempting to use it.

  • New: Made the Apple Vision Plugin use version checking consistent with ARKit.

  • Improvement: Optimized JPEG compression, saving about 20-25 percent time on the CPU.

  • Removed: Removed SharpZipLib and references from bundled Mono on Mac and Linux.

All Mobile

  • Bug Fix: Shaders are now synchronously loaded if not previously requested.

  • Bug Fix: Fixed issue where landscape would not render when cooked for a PC mobile emulation shader platform.

  • New: Distance Fields no longer included in cooked data on iOS and Android.

  • New: Added ability to cook contents for the PC mobile emulation shader platforms PCD3D_ES2 and PCD3D_ES31.


  • Crash Fix: Added a fix for ‘+’ conversion modifier for Android in vswprintf because it caused crashes with non on-the-hour time zones.

  • Crash Fix: Fixed a potential crash that could occur when Virtual Keyboard Widget is hidden while trying to use in it in the game thread.

  • Crash Fix: Due to a possible crash on Galaxy S8 on Android 7.0, notifications are now downgraded to simple suggestions on text change. This is due to suggestions not being hidden and disabling predictive input.

  • Crash Fix: Fixed potential crash if virtual keyboard is hidden on Android before deferred action.

  • Bug Fix: Force Completion is now called for the initial movie player on On Pause and App Restart is called on Resume.

  • Bug Fix: Made tutorial and documentation links optional and disabled any unnecessary tutorial link for Android license agreement error.

  • Bug Fix: Used UPL hash to invalidate build if any UPL files are changed.

  • Bug Fix: Prevented Android virtual keyboard input from being covered by software buttons.

  • Bug Fix: Fixed distribution build issue with OBB downloader.

  • Bug Fix: Disabled manual vertex fetch on Android.

  • Bug Fix: Used physical memory is now returned from JNI after initialization completes on Android.

  • Bug Fix: We now wait for the audio thread to pause audio so playback stops properly in background on Android.

  • Bug Fix: Fixed Resonance Audio Api warning about wrong library format.

  • Bug Fix: Updated Android license used to generate licenses file for Gradle.

  • Bug Fix: Added fix so that Android no longer tries to queue ticks in parallel because it could cause hitches.

  • Bug Fix: Stopped Gradle from leaving a daemon process running after completed.

  • Bug Fix: Fixed missing text input field for Android virtual keyboard in cases where it doesn’t show properly by forcing a layout request.

  • Bug Fix: Changed how we count available cores on Android, skipping ones that are dedicated to external uses.

  • Bug Fix: Fixed navigation bar showing during splash screen with full immersive setting enabled.

  • Bug Fix: Removed unnecessary #include “AndroidTargetDevice.h”, which caused circular reference and nightly build errors.

  • Bug Fix: Fixed issue where a r.MobileContentScaleFactor variable specified in a Device Profile was immediately recreating the Android window, breaking Vulkan detection.

  • Bug Fix: Fixed store version used for saving symbols directory on Android Shipping builds with bBuildWithHiddenSymbolVisibility.

  • Bug Fix: Removed early stop if missing Android SDK and if Gradle can download it.

  • Bug Fix: Fixed Material texture coordinate compile error when compiling landscape materials for ES2.

  • Bug Fix: Added missing Android AMOTION relative axis defines for older NDKs.

  • Bug Fix: Fixed issue where native WebView could not load HTML5 movies if the control’s layout didn’t have FILL_PARENT param.

  • Bug Fix: Fixed issue with unresponsive WebView on iPhone X that was caused by touches not registering due to a parent being smaller than a child.

  • Bug Fix: Added a proguard exception for WebViewControl.FrameUpdateInfo.

  • Bug Fix: Fixed install/uninstall batch filenames for Android Blueprint-only projects.

  • New: Added GL memory tracking to LLM, and added LLM Alloc functions to Android.

  • New: Made changes to Android toolchain support to use new includes with NDK 14b and above.

  • New: NEON instructions now enabled by default on ARMv8. Can be optionally enabled on ARMv7 with bUseNEONForArmV7=True in Android Runtime Settings.

  • New: Added client Android platform variants and proper filtering out of non-game types from package menu flavors.

  • New: Added message box with reasons for failure if ES2 fallback fails.

  • New: Added option to disable IMU for performance on Android.

  • New: Added Android Get Network Connection Type support.

  • New: Added AndroidThunkCpp_LaunchPackage() to start another application.

  • New: Implemented Clipboard function on Android.

  • New: Added logging on low memory conditions for Android.

    • Check logcat for GameActive.onTrimMemory messages.

  • New: Updated Google Play Services dependencies to 11.8.0.

  • New: Added handling of Android mouse events, a way to block them, and hardware keyboard events.

    • Android.EnableMouse=1 enables mouse events (disabled by default).

    • Android.EnableHardwareKeyboard=1 enables hardware-generated key events (disabled by default).

  • New: UE4Commandline.txt is now enabled in APK.

  • New: Provided support for disabling ASTC texture compression on devices where it does not work properly but driver extension is present (r.OpenGL.DisableASTCSupport=1).

  • New: Added a new Device Proxy type called “All devices”.

    • Holds a list of physical device IDs for every texture format variant instead of a single device ID.

    • Updated automatically by the device discovery thread.

  • New: Device discovery is now used to signal when a running device is disconnected.

  • New: Added Mali G72 device profile for Android.

  • New: Added support RHI Thread for startup movie playback on Android.

  • New: Added XBox 360 wired controller support for Android.

  • Improvement: Overrode “Max Object In Game” on Android to save approximately 30M with the Object Array size by default.

  • Improvement: Removed color attachment while rendering depth on ES3 devices, saving 16mb.

  • Improvement: Added improvements for handling of Android IMU updates[br]

    • Reduced memory allocations needed to handle sensor events.

    • Low-pass gravity filtering was made more consistent (only at rate of accelerometer updates, not all sensor events).

    • Changed to only push final sensor update state per tick instead of for any sensor update (reducing JNI calls).

  • Improvement: Improved Android debugging, including:

    • Detect java and gdb/lldb debugger are now attached.

    • Added proper implementation of DebugBreak for each architecture.

    • Improved stack walking, and now properly terminates, showing relative offset for addr2line.


  • Bug Fix: Controller axis and button max value is now set in code instead of relying on the function “Emscripten Get Gamepad Status” as it seems emscripten might be uninitialized by the time controllers being used.

  • Bug Fix: Virtual joysticks are no longer shown by default and mouse not captured, now behaving like the Windows-64bit client version.

  • Bug Fix: Disabled “Supports Screen Percentage” as it was causing the HTML5 screen to only render a portion of the screen properly.

  • Bug Fix: Fixed issue with double printing to console.log.

  • Bug Fix: Fixed unnecessary padding margins that were present when using Fixed scale mode.

  • New: Added project setting drop down box to select canvas scaling mode when editing HTML5 game window size.


  • Crash Fix: Fixed crash on backgrounding for non-backgrounding apps.

  • Crash Fix: Fixed crash on iOS being caused by large mismatches between a drawable texture and a scene’s depth-stencil target.

  • Bug Fix: Fixed bug that occurred when the last Slate element to be drawn in the scene is a Scroll Bar with progress between 0 and 1 with Metal on iOS.

  • Bug Fix: Fixed Metal Mip-to-Mip copying validation errors when copying mips smaller than 4x4 with ASTC.

  • Bug Fix: Fixed Metal ring buffer memory leak.

  • Bug Fix: Fixed issue causing distribution build errors for some Blueprint projects on iOS or tvOS.

  • Bug Fix: Fixed compilation error being caused by enabling Location Services Plugin on iOS.

  • Bug Fix: Renamed “Initial Movie” to “Startup Movie”, including methods related to the Android platform.

  • Bug Fix: Changed to allow for empty paths in UPL Init which may occur for remote iOS builds.

  • Bug Fix: Client/Host input mapping will now use only interactable area of host window, without title bar and borders.

  • Bug Fix: If host’s TCP socket was already connected, we get SE_ECONNRESET when trying to re-use it. When client disconnects, we now also reset the host TCP socket.

  • Bug Fix: Fixed potential memory leak in iOS display logic.

  • Bug Fix: EnumerateFiles().ToList() now prefaced with a check for if the CookOutputDir exists, preventing exception from being raised.

  • Bug Fix: Fixed TVOS/iOS error resulting in numerous errors related to ‘no such file or directory’ (Binary builds only).

  • New: Added availability checks for Apple Image Utils Plugin (similar to ARKit).

  • New: Added UTexture2D to CGImage conversion in Apple Image Utils Plugin.

  • New: Added ability to push a single file to an iOS app’s Documents folder from PC using a command such as DeploymentServer.exe copyfile -bundle com.mycompany.MyApp -file C:\PathToFileOnPC -file /Documents/MyApp/MyFileOnDevice.

  • New: Added listener to viewport resize event on host.


  • Crash Fix: Added check for null StdOut and ReturnCode parameters on input to ExecProcess on Unix platforms, otherwise code will crash if the process failed to be created.

  • Crash Fix: Fixed crash when importing to level.

  • Crash Fix: Converted Vulkan initialization failure crash to be a graceful exit.

  • Bug Fix: Linux now correctly sets current working directory as executable location.

  • Bug Fix: Fixed splash image for big endian machines.

  • Bug Fix: Implemented use of X11 pointer barriers to bound cursor to region over warping the pointers.

  • Bug Fix: Fixed RPath issues when bundling a project.

  • Bug Fix: UBT will now disable -fPIE when producing monolithic binaries if the compiler is configured to enable it by default.

  • Bug Fix: Remove tracking of CLion/CMake build files.

  • Bug Fix: Default to -as-needed for debug builds resulting in faster startup times.

  • Bug Fix: Added more verbose message about missing VK extensions.

  • Bug Fix: Fixed gamepad thumbstick clicks not registering.

  • Bug Fix: Fixed infinite logging when failing a system operation.

  • Bug Fix: Fixed UE_ENGINE_DIRECTORY not being set on Linux.

  • Bug Fix: Fixed forked child process trying to wait on a sibling process.

  • Bug Fix: Fixed possibly selecting multiple clock sources during initialization.

  • Bug Fix: Restored better printing of FNames through GDB.

  • Bug Fix: Fixed performance regression in Editor (for OpenGL RHI).

  • Bug Fix: Fixed checking commandline arguments prior to being initialized.

  • Bug Fix: Filename and line numbers are now printed during an ensure.

  • Bug Fix: Fixed reporting crash handling frames during an ensure or crash.

  • Bug Fix: Fixed a deadlock in crash handler.

  • Bug Fix: Fixed issue with Mono persisting after RunUAT has exited.

  • New: Added script to download the latest toolchain.

  • New: Added support for terminfo2.

  • New: Added support for a bundled native toolchain on Linux.

  • New: Enabled EXR support for Linux.

  • New: Added binaries for GoogleTest and add to BuildThirdParty script.

  • New: Added LXC container script for building some third party libraries.

  • New: Added support for Unreal Version Selector.

  • New: Added a new way to symbolicate symbols for ensures and crashes at runtime.

  • New: Updated Build Cross Toolchain script to enable a Linux host targeting multiple Linux architectures (including the host’s architecture).

  • New: Implemented Low Level Memory (LLM) tracker for Linux.

  • New: Added functionality to cache recently accessed files that required case insensitive look-ups.

  • New: Added pop-up message box to prompt for whether or not the user wants to submit crash report data.

  • New: Enabled RenderDoc support for Vulkan RHI.

  • Improvement: Removed unused start-up module, ALAudio.

  • Removed: Removed Linux SDL2 dependency from Core.


  • Bug Fix: Progress Bar widgets on Mac no longer render as full when fill value is 0.

  • Bug Fix: Restored Mac Graphics Switching Plugin, refactoring it to support switching the Editor between Metal GPUs:

    • Primarily this is of benefit to those with eGPUs.

    • Changing the GPU will ask you to restart.

    • Fixes a bug where 27" iMacs report an Intel GPU even though it is physically disabled.

  • Bug Fix: Updated Mac OS deployment target version to 10.12 from 10.11 as we officially ended support for El Capitan a while ago.

  • Bug Fix: Fixed deprecation warnings for macOS 10.12.

  • Bug Fix: Make Light Propagation Volumes debug visualisation work on macOS.

  • Bug Fix: Refactor Metal RHI debugging tools to move away from reimplementing Objective-C protocols, to adding separate debugging classes. This makes it easier for future OSes without having to update each time new functionality is added.

  • Bug Fix: Added update for Xcode 10 Beta, moving the metal shader compiler and requiring different arguments.

  • Bug Fix: Xcode project generator now preserves the schemes’ command line arguments when regenerating the project.

  • New: Added LLM support for macOS, including tracking of memory allocated in Objective-C. This makes use of runtime method swizzling in the Objective-C runtime and the rd_route library, which enables arbitrary runtime function interposition, enabling Unreal to hook the custom allocators used in Objective-C frameworks and charge Objective-C allocations to the caller.

  • New: Added INTELLISENSE to preprocessor definitions for indexing to improve indexing without generating game header files.

  • Improvement: Changed button mapping for PS4 controller on Mac to use Touchpad instead of Share button as “Special Left” to match other platforms.

  • Improvement: Reduced incremental build times on Mac by updating dependencies for dSYM files so that only cross-referenced Modules have their dSYMs recreated on subsequent builds.

  • Improvement: Improved CPU performance of some post-processing passes on Mac by changing the way we allocate a fallback depth-stencil texture to avoid constantly reallocating it.

  • Improvement: Improved the way we generate groups in Xcode project’s source code navigator. They are now sorted alphabetically and have correct paths, making it so Xcode no longer displays them in red.


  • Crash Fix: Fixed crashes inside “Remove Speed Tree Wind” function and “Remove Speed Tree Wind Render Thread” function.

  • Crash Fix: Fix for Intel HD 4000 crashing on driver 10.12.6.

  • Crash Fix: Fixed a crash occurring when two Post Process Volumes, in a level and sub-level with elements in their Blendables array, were simultaneously selected.

  • Crash Fix: Fixed crash inside DFAO resource allocation, when DFAO viewport has zero area.

  • Crash Fix: Fixed crash caused by automatic building Reflection Captures, while being in Mobile Preview mode.

  • Bug Fix: Vulkan will now expose additional driver information for Unix platforms.

  • Bug Fix: Vulkan now prefers mailbox present mode if available.

  • Bug Fix: Fixed an issue with compressed (packed) normals on the GPU which were off by one integer representation.

  • Bug Fix: Optimized bounding sphere radius for objects with non uniform scale.

  • Bug Fix: Allow disabling VSync in windowed mode for macOS 10.13.4+ and above.

  • Bug Fix: Fixed Freeze Rendering on non Editor builds.

  • Bug Fix: Fixed remaining Quad Overdraw Viewmode contents on screen after switching to certain other View modes (e.g. light overlap or complexity).

  • Bug Fix: Fixed tesselation shader texture and uniform initialization in OpenGL3 and OpenGL4.

  • Bug Fix: Fix the black ground scattering on Metal by changing the Atmospheric Fog shader to avoid passing small negative values into the sqrt() function.

  • Bug Fix: Fixed compiling Metal shaders into native shader libraries by disambiguating structs defined by tessellation shaders.

  • Bug Fix: Now Vulkan only uses up to 95% of available GPU memory to handle some OS fragmentation.

  • Bug Fix: Shadow Setup will now only stencil mask drawn Static Meshes.

  • Bug Fix: Asynchronous SSAO now automatically switches to Synchronous SSOA when there are multiple Ambient Occlusion levels.

  • Bug Fix: Fixed a possible GPU hang. Initialize all of Function Forward Global LightData to avoid uninitialized numreflections or other bad params.

  • Bug Fix: Make Manual Vertex Fetch a property of the shader platform for Metal - only the desktop platforms (METAL SM5/SM5_NoTess/MRT) will use manual vertex fetch. The Mobile platforms use vertex descriptors.

  • Bug Fix: Fixed not releasing SRV on render thread for Function Position Vertex Buffer, Function Static Mesh Vertex Buffer, Function Color Vertex Buffer, Function Static Mesh Instance Buffer.

  • Bug Fix: Adjusted HLODs to use the “Never Distance Cull” flag by default.

  • Bug Fix: Retconned Texture 2D Dynamic to include a deprecated API path.

  • Bug Fix: Fixed Planar Reflections on Vulkan.

  • Bug Fix: Fixed assert inside Bind Light Map Vertex Buffer when re-importing meshes with auto generated UV channels.

  • Bug Fix: Fixed a memory leak fix when playing video and main thread blocks.

  • Bug Fix: Improved responsiveness audio synchronization when unpausing or seeking video on Windows platforms.

  • Bug Fix: Slightly improved CPU performance on Metal by caching all the state objects.

  • Bug Fix: Fixed an assert that intermittently fired on Metal with tessellation enabled caused by retaining unused uniform buffers.

  • Bug Fix: Implemented more *_RenderThread functions in MetalRHI to avoid stalling the RHI thread on macOS.

  • Bug Fix: Fixed a number of subtle bugs in the handling of uniform buffers within MetalRHI that could result in unbound buffers or invalid data being provided to shaders.

  • Bug Fix: Enabled use of 4-component formats for Buffer UAVs in MetalRHI.

  • Bug Fix: Metal shaders don’t provide an actual instruction count, but the line count is a sufficient proxy to make the shader complexity views work in the Editor.

  • Bug Fix: Fixed compilation of the Forward Shading METAL_MRT shader platform for iOS by removing references to native Cubemap-array Textures that are only available on some Apple GPUs.

  • Bug Fix: Fixed issues with the mesh simplifier when simplifying meshes with large Texture coordinate values.

  • Bug Fix: Altered the way we invalidate Metal visibility buffers inside MetalRHI to slightly increase performance on iOS by sharing them across encoders when possible.

  • Bug Fix: Fixed MetalRHI memory reporting in non-default path.

  • Bug Fix: If a Metal shader has an error it will now generate the shader hash and function name.

  • Bug Fix: Fixed a hitch when enabling Shader Complexity view mode.

  • Bug Fix: Fixed case typo in path for Custom Mesh Component build file.

  • Bug Fix: Bounds of Skeletal Meshes will no longer get inverted when an object has negative scaling causing Occlusion Queries to break, leading to flickering.

  • Bug Fix: Fixed incorrect SV_InstanceID and SV_VertexID conversions in the Metal shader compiler backend.

  • Bug Fix: The Metal Backend for Shader Compile Worker will now correctly convert the return type of Depth Texture Samples to float4 from Metal’s float to fix compile errors in newer shader code.

  • Bug Fix: Extended the Mac & iOS Frame-Pacer API to provide the target output time and the intended duration.

  • Bug Fix: Enabled Volumetric Fog on Vulkan.

  • Bug Fix: Fixed a race condition inside MetalRHI caused by misuse of the Function RW Scope Lock.

  • Bug Fix: Fixed a memory leak in Batched Lines.

  • Bug Fix: Fixed a crash on Apple TV caused by using an unsupported Metal API call.

  • Bug Fix: Fixed missing debug markers on Vulkan (TCHAR_TO_ANSI lifetime issues)

  • Bug FIx: Improved performance by unifying the Metal buffer implementation so that the different types have a common parent and can share pooling and sub-allocation behavior.

  • New: Added “framegrabber.framelatency” command to allow variable frame-latency in Frame Grabber frames.

  • New: Added r.Vulkan.SubmitAfterEveryEndRenderPass command to help track down GPU crashes.

  • New: Ansel photography plugin improvements:

    • The free-roaming photography camera has new constraints by default. These prevent it from passing through walls.

    • Photography session can be started and stopped programmatically, making it possible to bind photography to a hotkey or button combination.

    • Tweakables and utilities are now exposed through a Blueprint Function Library, rather than requiring direct manipulation of console variables.

    • The Ansel photography session UI now exposes some Engine effect tweakables as sliders. For example, if the game is using Depth-Of-Field, a slider for Focal Depth becomes available. This behavior can be turned off through the Blueprint Function Library.

    • Letterboxing is now removed during multi-part capture.

    • Tiled shots are taken at full resolution even if Screen Percentage is less than 100.

    • Screen Space Reflections are enabled during super-resolution shots since Ansel is now better at hiding any ensuing artifacts.

    • Postprocess settings are frozen at session start to avoid discontinuities during photography such as when wandering between postprocess volumes during stereo and 360 shots.

  • New: Added support in Vulkan to prefer a specific GPU using -preferNvidia|AMD|Intel.

  • New: Added scalability control to adjust Object Draw Scale with Camera Field of View under the “r.ViewDistanceScale.FieldOfView***” command.

  • New: Added support on Vulkan for vktrace using the command line “-vktrace”.

  • New: Added support for RenderDoc on Vulkan, Android, Debug and Development builds.

  • New: Added support on Vulkan for r.DisableEngineAndAppRegistration.

  • New: Added the ability to segment shade code libraries for global shaders and different .pak files in packages.

  • New: Added -AllowSoftwareRendering command line to allow D3D11 to fall back to software rendering if desired.

  • New: Added a explicit error message that tells users when they are over the maximum size when allocating very large Render Targets.

  • New: Added support for VK_AMD_buffer_marker on Vulkan to dump information when a GPU crash occurs.

  • New: Added support for D3D11, D3D12 & Vulkan for UAVs off Index Buffers.

  • New: Added support for r.DefaultBackBufferPixelFormat on Vulkan.

  • New: Added support for storing Vulkan validation information with r.Vulkan.SaveValidationCache which uses the VK_EXT_validation_cache extension

  • New: Added support for NVIDIA Aftermath to be enabled by default.

  • New: Refactored Function Realtime GPU Profiler Frame to avoid splitting profile events when calculating exclusive times of scopes. This allows tracing profiler to retain the hierarchical view of the data, while keeping CSV and GPU Stat system behavior intact.

  • New: Vulkan now uses 256MB pages for Device heap allocations (or 1/8th if less).

  • New: Updated to Vulkan headers to use for both Windows & Linux.

  • New: Added support for multiple UV channels on the Procedural Mesh Component.

  • New: Extensively refactored the MetalRHI GPU profiling code. There is now a “MetalProfiler Start/Stop/Frames=X” in-game command that will spit out JSON files similar to the platform-agnostic TracingProfiler. The MetalProfiler shows the frame in terms of command-buffers, V-Blanks (if frame-pacing is enabled) and resource allocations.

  • New: Vulkan now generates a generic pipeline cache file, and a device specific one.

  • New: Support for DX12 quad buffer stereo rendering.


  • Bug Fix: Fixed Motion Blur vectors on Mesh Particles.

  • Bug Fix: Return far plane when Scene Textures are disabled in order not to break Depth Fade.

  • Bug Fix: Fixed Particle shadows, when Particle Material uses Depth Fade.

  • New: Engine level pooling system for Particle system components.

  • New: Improved interpolated spawning behavior in Cascade. Gated behind a property that defaults to true for existing content.

  • New: Implemented get previous position to Niagara sprite Particles in order to fix Sprite Particle Motion vectors.


  • Bug Fix: Fixed 1.5 Texel offset inside Manual 2x2 PCF shadow filtering.

  • Bug Fix: Fixed white thumbnails and other issues with Sky Lighting on ES3_1 path.

  • Bug Fix: Removed lights with Lighting Channels out of tiled deferred light list, as tiled deferred lights do not support Lighting Channels.

  • Bug Fix: Fixed DFAO resolution scaling border artifacts.

  • Bug Fix: Fixed crash inside Indirect Lighting Cache, which can happen when user cancels Lightmap generation.

  • Bug Fix: Fixed hard coded Reflection Capture Cube Map size, this will fix Static Light Aliasing in captures.

  • Bug Fix: Fixed joined charts forming an L so they inflate both axes.

  • Bug Fix: Fixed Checkerboard Subsurface Scattering for resolutions non divisible by two.

  • Bug Fix: Fixed missing Reflections in Blueprint Editor.

  • New: Indirect Lighting Color Scale is now applied to Subsurface Lighting and Diffuse Lighting.

  • New: Added RTDF r.DFShadowQuality allowing to adjust for shadow performance or quality.

  • New: Added r.AOQuality allowing to adjust for DFAO quality or performance.

  • New: Added a toggle for specifying Contact Shadow Length in World Space units.

  • New: Exposed Contact Shadow parameters to Blueprints.

  • New: Added Dual Specular for Subsurface Profile Shading Model.

  • New: Added Subsurface profile for Eye Shading Model.

  • Improvement: Contact shadow Improvements:

    • Contact shadows now use representative light’s direction.

    • Will keep constant Screen Space length independent of FoV settings.

    • Added Contact shadows for Translucents.

    • Added Contact shadows for eye Shader model.


  • Crash Fix: Fixed case where using “Shader Cache” and “Share Material Shader Code” was causing crashes in games.

  • Bug Fix: Reduced memory usage of Materials in cooked builds by marking properties of Material Expression and Material Expression Material Function Call as WITH_EDITORONLY_DATA.

  • Bug Fix: Fixed case where iterative cooking will not working properly when project has “Share Material Shader Code” option enabled.

  • Bug Fix: Shader compilation log output now correctly identifies which Material Instance is being processed.

  • Bug Fix: Fixed Material Expression Functions for External Texture support.

  • Bug Fix: Changed Material Instance Dynamic Function Copy Material Uniform Parameters and Material Instance function Copy Material Instance Parameters to do no work if passed in the same Material (preventing accidental clearing out parameters on a MID).

  • Bug Fix: Added support with SketchUp Alpha channels and Texture/Color on Opacity.

  • New: Translucency Lighting mode on Materials are now searchable via the asset registry to make finding FX with expensive Materials easier.

  • New: Added Vertex Interpolator node support for Post Process Materials.

  • New: Material Cross Product nodes are now treated as a uniform expression and can be folded with other math operations.

  • New: The Object Orientation Material node now returns a Decal projection vector when used on the ‘Deferred Decal’ Material Domain.

  • New: Material Attribute Get/Set nodes now append the next unused attribute to the list rather than a Default value.

  • New: Material Attribute nodes have been reordered in a few locations to give a more consistent experience.

  • New: Added a “Estimated Number of Texture Lookups” stat to Material Views, split by vertex and pixel counts.

  • New: Material Texture Sample nodes now re-use previous samples when only differing by swizzle, reducing HLSL size and compiler burden.

  • New: Improved code generated by the HLSL Translator by re-using intermediate function results where possible.

  • New: Optimized Material and Material Instance loading by trimming and caching more data at cook time.

Mobile Rendering

  • Bug Fix: Removed GL_EXT_shader_io_blocks extension requirement to run games packaged for Android ES3.1

  • Bug Fix: iOS now properly discards Depth and Stencil buffers at then end of scene rendering if those buffer are not required.

  • Bug Fix: Material ‘Apply Fogging’ will no longer be ignored on Mobile.

  • New: ‘stat unit’ on Mobile devices along with frame timings will now show number of Draw Calls and number of Drawn Primitives in a frame.


  • Bug Fix: Updates for HLOD visibility now take place before frustum and Occlusion Culling.

  • Bug Fix: Stopped forcing NVIDIA GPUs to use slower retained command-buffers as the mtlpp refactor provides stronger resource lifetime guarantees.

  • Bug Fix: Material Parameter Collection instances only setup when initializing a persistent world, which drastically reduces the instance creation count for levels with many Streaming sub-levels this.

  • Bug Fix: Optimized PCF 2x2 and PCF 3x3 Shadow Filtering.

  • New: Improved bounding sphere for Spotlights by making them tighter.

  • New: View frustum shadow caster culling for Point Lights and Spotlights.

  • New: Added option to Skinned Mesh Component to render it as a Static Mesh.

  • New: Instanced Static Mesh per-instance data size was reduced by 20%.

  • New: Implemented segmented shader code libraries on all platforms, with one shader code library generated for the global shaders, one for the project’s Materials and then one for each DLC package that contains Materials. This allows downloading of additional shader libraries as DLC.

  • New: Merged Sky Diffuse and Reflection passes in order to save performance by reading the GBuffer and writing target Texture only once.

  • New: Added support for not flushing compute jobs on D3D11 via the Automatic Cache Flush After Compute Shader function and Flush Compute Shader Cache function.

  • New: Rewrites have been made to MetalRHI in terms of mtlpp, which is a C++ wrapper library built around Metal’s Objective-C API that attempts to reduce overheads and eliminate resource lifetime errors.

  • **New:** Implemented a new shader pipeline cache called Function Shader Pipeline Cache to replace the older Function Shader Cache API.
  • New: Added log to Vulkan when compiling new PSO.

  • Removed: Disabled Global Clip Plane for Post Process and UI Material Domains.

  • Removed: Removed redundant divide by w during World Space decoding from Scene Depth.


  • Bug Fix: Fixed editor preferred source code accessor parsing in the project file generator.

  • Bug Fix: Updated the Make Dile Generator.cs for CLion and added cleanup for the macro errors that result in FOO()= definitions.

  • Bug Fix: Capped the allowed number of “Waiting Packages” to avoid creating too many kernel objects in pathological load time cases.

  • New: Added “List Static Meshes” and List Skeletal Meshes Console commands.

  • New: Data for Crash Report Client is now stored in a PAK file of its own which can be found under Engine/Programs/CrashReportClient/Content/Paks/CrashReportClient.pak.

  • New: Added ‘Build SCW’ to the CMake build command lines for editors to match what XCode is doing on Mac.

  • New: Added a new break pad dump_syms tool to symbolicate elf files on Windows.

  • New: Added a CLion Generator for consistency.

  • New: Added code to detect the bad assumption of the project name always being UE4 and stripped that off in the CLion Source Code Accessor.


  • Bug Fix: Fixed Editor targets not being rebuilt when packaging from an installed Engine build.

  • Bug Fix: Fixed a bug when building with chunk installs enabled to not generate the master manifest from each pak creation thread and instead just do it once after all pak files have been created.

  • Bug Fix: Fixed platform groups (for example, “Apple”, “Microsoft”, “Sony”) to now included in the list of restricted folder names when staging files for a project.

  • Bug Fix: Allowed the use of PDBCOPY.EXE to be installed as part of the Windows 10 SDK to strip symbols, and add a better message if it can’t be found.

  • Bug Fix: While cooking on the fly a .pak file will no longer be produced.

  • Bug Fix: Fixed incorrect console colors being restored after a warning or error on Mac or Linux.

  • New: Added a script to rewrite source files with public include paths relative to the ‘Public’ folder.

  • New: Added a -SeparateDebugInfo argument to Build Cook Run, which allows staging debug files to a separate output directory (for example, WindowsClientDebug).

  • New: Allow passing -Project<N>=Foo.uproject arguments to the MegaXGE commandlet so it can be used from an installed engine build.

  • New: Added an automation script for the CryptoKeys plugin which allows the cycling of encryption and signing keys from UAT.

  • New: As a security measure, a warning will now be output when staging a project for any config files which are not whitelisted or blacklisted.

  • New: Added a Whitelist Directories list under the [Staging] category in DefaultEngine.ini, which allows specifying folders that can be staged despite having restricted folder names.

  • New: Added Record Performance automation script for running demos multiple times, gathering performance stats and plotting results on charts.


  • Bug Fix: The Build Editor And Tools .xml script will no longer force copying files to a staging directory.

  • Bug Fix: When Build Graph is run with the -Preprocess=… argument, no steps will be executed.

  • Bug Fix: Fixed “copy local” files not being included in build products enumerated from C# projects.

  • Bug Fix: Added a warning message when trying to use the <Submit> task without the -Submit argument being passed to UAT.

  • New: Added a <Trace> element, which allows logging messages after the string is parsed (as opposed to the Log task, which logs them at runtime).

  • New: Added a -show diagnostics parameter, to have diagnostic messages output even when running with the -listonly option.

  • New: Added support for enumerating content copied by the “CsCompile” task and support for invoking methods on string properties.

  • New: When displaying an XML parse error it will nowInclude the path to the XML file.

  • New: Added support for user-defined macros, which can contain a list of BuildGraph commands to be expanded within a node. An example script is located in Engine/Build/Graph/Examples/Macros.xml.

  • Removed: Files with “Embed Interop Types” from the output list have been removed.


  • Bug Fix: Exceptions are no longer thrown on a background thread while caching C++ includes which caused incorrect logging. It now captures exceptions and re-throws on the Main thread.

  • Bug Fix: Allowed link time code generation on any configurations where b Allow LTCG is set to true.

  • Bug Fix: When building with the UBT it will now explicitly query the number of logical processors in the system to fix Environment.Processor Count by returning the number available to the .NET framework. For machines with > 64 cores, processors in a different processor groups will not be included in this number.

  • Bug Fix: The UBT will now always determine whether a project is a foreign project or not from the valid .uprojectdirs entries, rather than relying on the user passing -game on the command line.

  • Bug Fix: Fixed errors during incremental builds if a build contains an exported symbol change, but the build fails after the source files have been compiled but before the import library is built.

  • Bug Fix: Fixed an incremental build issue caused by force-included files not being treated as dependencies.

  • Bug Fix: Fixed issues caused by the tool chain assuming that the Editor target will be the name of the project with an “Editor” suffix. The launcher will allow you to instantiate a project with any name, and it will not rename the target files.

  • Bug Fix: Changed RPC toolchain to abort early, rather than continue to try to build even though SSH init failed.

  • Bug Fix: Fixed platforms not adding response files as dependencies, causing incremental builds to fail if input files/compile arguments change.

  • Bug Fix: Updated project file generator to support VS2017 solution options file; C# projects will no longer open by default when generating new project files.

  • Bug Fix: Fixed platforms overriding project generation.

  • Bug Fix: Fixed a build failure that occurs on the very first build after adding new files with reflected types.

  • Bug Fix: Fixed an issue where overlapping circular header dependencies would not be parsed correctly, preventing files not being rebuilt on header changes.

  • New: Warnings and errors will output when compiling module rules assembly in a way that allows them to be double-clicked in the Visual Studio output window.

  • New: Precompiled targets will now generate a separate manifest for each precompiled module. This fixes issues where object files from static libraries would not be linked into a target if a symbol in them was not referenced.

  • New: Targets may now opt-out of having public include paths added for every dependent module. This reduces the command line length when building a target. All engine modules are compiled with this enabled; games may opt into it by setting bLegacyPublicIncludePaths = false; from their .target.cs.

  • New: Unreal Build Tool now writes a log file to Engine/Programs/UnrealBuildTool/Log.txt, containing the regular console output and any reasons why actions are outdated and needed to be executed.

  • New: C# projects for unsupported platforms are now excluded when generating project files.

  • New: When building with Incredibuild, the agent executing the compile step is now shown by default.

  • New: Unreal Build Tool will now validate that targets don’t modify properties that affect other targets. Warnings are output for any include paths added via a .build.cs file that do not exist.

  • New: Added a working directory setting to custom build steps.

  • New: Added a new Build Configuration .xml setting <bMasterProjectNameFromFolder> which allows setting the solution name based on the folder that it’s in, making it easier to distinguish between multiple instances of Visual Studio.

  • New: The name of the UE4 solution can now be overridden on a branch-specific basis, making it easier to work with multiple open solutions at once.

  • New: Added a better error if an XML config file is corrupt.

  • New: The engine will now use the Windows 10 SDK by default, if available. Projects can be configured to use older versions, if necessary.

  • New: Added warnings whenever a module adds an include path or library path that doesn’t exist.

  • New: Only output a warning message if Build Configuration .xml schema validation fails; we may have settings that only apply to code in another branch.

  • New: An “Engine Directory” property has been added to the Module Rules base class, making it easier to find paths to files under the Engine folder.

  • New: Verbose timing information from the compiler frontend is now included with the bPrintToolChainTimingInfo option enabled if using VS2017 15.7 preview 2 or later.

  • **New: **The UnrealBuildToolnow enumerates all Visual Studio 2017 install locations using the Visual Studio Setup interop SDK, and supports multiple simultaneous Visual Studio installations.

  • New: Additional compiler/linker arguments can now be set through properties on the TargetRules object again.

  • New: Added support for reading the local PVS-Studio settings file to the PVS toolchain.

  • New: Added a new executor for Windows which uses the Managed Process class, spawning child processes under a job object using P/Invoke to ensure that any child process is terminated if the build is canceled.

  • New: Added support for multiple debug extensions.


  • Bug Fix: Fixed an issue where pop-up menus can create top level windows in the taskbar.

  • Bug Fix: Fixed notification window not expanding to fit long captions.

  • Bug Fix: Pre compiled binaries no longer will not be shown as available for a change until scrolling the last submitted code change into the buffer. It now queries changes up to the last change for which zipped binaries are available.

  • Bug Fix: The application lifecycle now uses a custom application context to allow creating separate ‘main’ windows, and does not require any forms to be shown in order to be updating in the background. This fixed issues with scheduled syncs on background windows not activating, and window jumping to the front after auto-update.

  • Bug Fix: UnrealGameSync will now Detect if other programs are running before allowing a sync to start, show a dialog listing them, and give an option to ignore them if necessary.

  • Bug Fix: Do not create a modal dialog if a scheduled sync is unable to run because the editor is open, and do not run the editor after a scheduled sync.

  • New: Workspace sync filter categories are now able to re-enable categories that are disabled by the global filter.

  • New: UnrealGameSync Launcher now shows an error window allowing setting default P4 server settings if syncing UGS fails.

  • New: Files which are excluded by the sync filter will now be removed from the workspace when syncing. The user’s config file stores a hash of the last sync filter. During syncing, if this hash doesn’t not match the previous value, we enumerate all the files in the #have list and remove anything masked out by the filter.

  • New: Added an option to allow setting a tint color to be applied to the status panel, to allow identifying streams more easily.

  • New: Columns are now automatically resized when the main window is resized, and default column widths for projects that have a large number of CIS badges can be specified in the project’s UnrealGameSync.ini file.

  • New: The stream name is now in tab labels by default.

  • New: Added support for a per-branch “message of the day”-style feature. Messages can be specified in a project’s config file in Perforce (eg. <ProjectDir>/Build/UnrealGameSync.ini).

  • New: Added an extensible method for adding arbitrary badges to the right of the “description” column, by running a regular expression over the changelist description. **New: **Added an option to show changes by build machines, and move the “only show reviewed” option in there too (Options > Show Changes).

  • New: UnrealGameSync now detects Perforce login tickets expiring, and allows entering login credentials.

  • New: Added an option to prompt for arguments prompting before launching the editor.

  • New: Added a “Bisect” mode for regressing bugs between a certain range of changes.

  • New: Moved the prompt to close the editor before allowing the user to enter a changelist to sync to, when syncing to a specific changelist.

  • New: Added an error dialog when trying to clean the workspace before closing the editor.

  • New: You can now select which projects to sync on schedule. Any projects not already opened at the time the schedule is triggered will be opened first.

  • New: Added an option for syncing all projects in a branch.

  • New: Added support for masking in additional paths to be synced (eg. one or two extra projects) via the sync filter.

  • New: The “clean workspace” functionality will now detect and force-sync files that have been deleted or made writable.

  • New: You can now use a select stream dialog instead of displaying a drop list unless there’s a stream filter specified. Makes it easier to find streams in large depots.

  • New: Added UI to allow creating new workspaces and selecting projects from existing workspaces that are not currently synced.


  • Bug Fix: Fixed some cases where empty default values would be lost from UHT (eg, empty strings, null objects)


  • New: UnrealPak now logs the size of all encrypted data

  • New: The key generator now only generates a prime table when required, not all the time

  • New: Added a parameter for compression block size with -compressionblocksize=XXXX. Accepts arguments with MB/KB suffixes, as well as byte counts.

  • New: Added support for custom compressors implemented via modular features.

  • New: Added an -overrideplatformcompressor argument that allows selecting compressor without using the default platform implementation.

  • New: Added an option that allows rebuilding a set of PAK files with different settings.


  • Bug Fix: Using scroll into view now selects the item being brought into view.

  • Bug Fix: Fixed improper scaling for on-screen debug messages, causing them to be hidden.

  • Bug Fix: Fixed Common Popup Menu staying on top of Activatable Panel stack even if the Popup Menu has been closed.

  • Bug Fix: Set Common Text Block’s inner Text Block to Self Hit Test Invisible when a scroll style is applied.

  • Bug Fix: Fixed monochromatic font rendering:

    • All non-8bpp images are now converted to 8bpp images for processing in Slate.

    • We convert the gray color of any images not using 256 grays (for example, monochromatic images that use 2 grays).

    • Added a CVar “Slate.EnableFontAntiAliasing” to control whether you want anti-aliased (256 grayscale) rendering (default), or monochromatic (2 grayscale) rendering.

  • Bug Fix: Fixed Canvas Safe Zone offset.

  • Bug Fix: Hid the controller input on the Storm Shield check mark box.

  • Bug Fix: Fixed list views not wrapping properly in some cases.

  • New: Added an event to Common List View for when an item has finished scrolling into view.

  • New: Added support for TTC/OTC fonts:

    • These can be used via a sub-face index on FFontData, which can be set via a new combo in the Font Editor.

    • You can also see the cached list of sub-faces within a font file from the Font Face asset.

  • New: Added “Allow Engine Tick” option to Loading Screen Attributes used when starting a loading screen movie.

    • If set, it will run the main engine tick while waiting for a manually disabled loading screen to finish displaying. This enables latent actions such as level streaming to complete before stopping the load movie, but is disabled by default as it may not be safe for every game.


  • Crash Fix: Fixed a crash when Object Table is null.

  • New: Added “Show Only Keyable” and “Show Only Animated” to the Filter list in the property editor.

  • New: The Slate Tree View is now able to show wires that clarify the parent-child. relationship of the items in the tree. It has been enabled in the Widget Reflector.

  • New: Line and Spline rendering changes:

    • Lines/Splines now use 1 UV channel to anti-alias. The channel can be used for texturing.

    • Anti-aliasing filter will now be adjusted based on resolution.

    • Modified Line/Spline topology to accommodate new UV requirements.

    • Disabled vertex snapping for anti-aliased lines/splines; previously vertices were snapped, but vertex positions did not affect line rendering leaving the behavior effectively unchanged.

    • Splines now adaptively subdivide to avoid certain edge-cases.

  • New: Added a way to defer Slate retainer widget render target updates until the end of Slate draw. This avoids the extra copy operations that result from switching render targets in the middle of the frame. This feature is controlled by the “Slate.DeferRetainedRenderingRenderThread” variable. Note that UI updates will render more quickly, but will show one frame later, if this feature is used. By default, this feature is enabled only on mobile devices.


  • Crash Fix: Fixed a crash on adding an “On Clicked” event to a button in Widget BP.

  • Bug Fix: In the UMG editor it will now indicate the name of the property that is not bound.

  • Bug Fix: Fixed template finish not getting called on stop. This fixes a bug where sections aren’t restored when finished.

  • Bug Fix: Refresh the widget preview even if the dragged widgets are dropped in an invalid location.

  • Bug Fix: UMG evaluation will now properly finish on stop.

  • Bug Fix: Fixed incomplete state when undoing after deleting user widgets from the widget tree.

  • Bug Fix: Widgets will not be removed from parent when they are pending garbage collection/

  • Bug Fix: Replacing widgets should now also clear out references to the widget.

  • Bug Fix: Reordering will now correctly handled by a undo, and will no longer cause a “ghost” widget to also be part of the tree.

  • Bug Fix: Animating a Slate Brush’s material will now invalidate the cached widget’s layout and volatility when setting MIDs.

  • New: Added right-click functionality to replace the object reference of a track with a different object in UMG Sequencer.

  • New: Added support for 2D transform mask (translation, rotation, scale, shear).

  • New: Improved copy/paste behavior for UMG editor:

    • Pasting in the Designer while a canvas is selected will place the new widget under the cursor.

    • Pasting multiple times while a canvas panel is selected in the hierarchy view will cascade the widgets starting at 0,0.

    • Pasting while something that isn’t a panel is selected is now allowed, and will cascade the pasted widgets off the position of the selected widget (as siblings).

    • Newly pasted widgets will now be selected automatically.

    • Pasting multiple widgets at once will try and maintain their relative positions if they’re being pasted into a canvas panel.

  • New: Added a function to Scroll Box to determine what fraction of the window we’re displaying.

  • Removed: Removed legacy uses of Get Editor Icon from UMG.

  • New: UserWidgets have a new setting to determine how the Widget will tick. By default, this will be set to “Auto”, meaning Widgets will turn ticking on only in the following cases:

    • A latent action (such as Delay nodes) is triggered.

    • An animation was triggered.

    • A script implements the Tick event.

    • A native tick is assumed to exist (meaning the Widget lacks “DisableNativeTick” metadata).

  • New: Added a new way to audit the tickability of a Widget with three Asset-Registry-searchable properties.


  • Crash Fix: Fixed a crash when setting screen percentage to less than 100 in VR preview.

  • Bug Fix: Fixed a bug with Motion Controller Components not properly overriding the display model’s material. XRAsset API now handles asynchronous resource loading.

  • Bug Fix: Fixed SteamVR headset detection on platforms with more than one GPU.

  • Bug Fix: VR preview now works with dedicated server mode in the editor.

  • Bug Fix: Fixed late update floating point precision issues when far from the origin.

  • Bug Fix: Improved tracking latency on Oculus. Cached poses are now updated at the end of the frame.

  • Bug Fix: Fixed an issue where aliased textures were mistakenly deleted by OpenGL.

  • Bug Fix: Morpheus HMD “World To Meters Scale” now updates camera offset scale in “On Start Game Frame.”

  • Bug Fix: Fixed a bug that caused a crash when using SteamVR motion controller models.

  • Bug Fix: Fixed a bug that caused a slow down in reallocating render targets when using reflection captures in VR.

  • Bug Fix: Fixed a bug that caused world locked stereo layers to drift on Oculus when using an explicit camera component.

  • Bug Fix: Fixed a issue where the Oculus controller models wouldn’t show up in cooked builds when using the motion controller’s display model property.

  • Bug Fix: Fixed a crash that occurred when building lighting in VR.

  • New: Added a label to the VR spectator screen render call so it is distinguishable in profiling tools, such as RenderDoc.

  • New: Added the ability for Motion Controller components to track/display HMD devices by using “HMD” as the source name.

  • New: Added experimental support for lens calibration on MR projects using OpenCV.

  • New: Updated SteamVR SDK to version 1.0.11, this includes improved Vulkan support.

  • New: Improved SteamVR compositor timing and overall engine performance through more accurate CPU utilization data.

  • New: Added Render Bridge base class, FXRRenderBridge, to reduce code duplication when creating an XR Plugin with a Custom Present implementation.

  • New: Added initial support for omni-directional stereo captures.

  • New: Made Oculus code-scheduling functions available for use by other XR Plugins through the “Head Mounted Display” module.

  • New: Added virtual curves for head rotation from FaceAR’s face tracking LiveLink streaming.

  • New: Added support for instanced stereo translucent rendering.

  • New: Added support for enabling the ARKit 1.5 auto-focus setting.

  • New: Added checks for ARKit 1.0 availability when creating the AR session, preventing calls to invalid selectors on older iOS devices.

  • New: Added functions for checking ARKit version availability at runtime.

  • New: Refactored how ARKit supports #define, simplifying wrapping individual features by ARKit version.

  • New: Added a console command to change where Face AR is publishing LiveLink curve data. “LiveLinkFaceAR SendTo=”.

  • New: Wrapped vertical plane detection in an “if iOS 11.3” check, since ARKit 1.5 is only available in 11.3 and later.

  • New: Added orientation to the “AR Candidate Image” object for passing to the detection system.

  • New: Added support for handling “AR Image Anchor” notifications from ARKit.

  • New: Added a friendly name to UARCandidateImage objects.

  • New: Added base types for detecting images in an AR session.

  • New: Added the name from the candidate image when creating the Apple side representation.

  • New: Added support for configuring which images to detect during an AR session.

  • New: Improved debug layer rendering on Oculus, circumventing a superfluous blit by rendering directly to the layer.

  • New: Added models to the Oculus plugin for HMD and Sensors.

  • New: Added “Use Camera Rotation” feature to “Stereo Panorama” Plugin. Now this plugin can take the current camera’s rotation. To enable this feature, use the console command “SP.UseCameraRotation 7”.

  • New: Updated Camera Component can now tell the “Late Update Manager” to store that we don’t want to do a late update this frame. Default XR Camera checks this flag before applying the late update to the camera.

  • New: Refactored PSVR Minor reprojection for Frame Counter comparison.

  • New: Added a new PSVR API function for getting a transform between “floor” and “eye” tracking spaces.

  • New: Added a new PSVR delegate that can detect when an app changes between “floor” and “eye” tracking space.

  • Removed: Unused Stereo Rendering function “Get Custom Present” method has been removed.


  • Crash Fix: Fixed crash in FBX Scene Importer caused by user importing a FBX LOD group with no geometry under it.

  • Bug Fix: Fixed issue where FBX Importer used the incorrect owner when creating asset import data.

  • Bug Fix: Fixed FBX Static Mesh re-import to properly match names between the existing data and the incoming FBX file.

  • Bug Fix: Fixed import socket logic for Static Meshes to prevent it from duplicating sockets when re-importing.

  • Bug Fix: Fixed issue where FBX Importer’s Global Transform options were not persisting in config file.

  • Bug Fix: Fixed SColorGradingPicker, which were preventing PIE sessions from working.

  • Bug Fix: Removed external profiling support from shipping builds to fix an issue that caused DLL queries for external profiles at start-up to fail.

  • Bug Fix: Changed FPlatformTime::Seconds(), FPlatformTime::Cycles(), and FPlatformTime::Cycles64() on Android to use CLOCK_MONOTONIC instead of system time-of-day clock.

  • New: Consolidated codepaths for embedding version information in the Engine.

    • Engine/Build/Build.version is now the authoritative place to configure version information.

    • Engine/Source/Runtime/Launch/Resources/Version.h no longer includes macros for the current branch and changelist.

    • These settings are compiled into the BuildSettings module at runtime rather than being exposed as global macros.

    • Licensee builds of the Engine are now automatically detected, no longer needing to be manually configured.

  • New: Added FBX Re-Import Resolve Material windows, enabling users to manually resolve materials if the importer failed to find a match with existing materials.

  • New: Added Visual C++ 2017 redist files to AppLocalDependencies.

  • New: Updated prereq installer to include Visual C++ 2017 support DLLs.

  • New: Added base include paths relative to the “Public” directory in Engine source files to reduce the number of public include paths needed for Engine modules.

  • New: Added rd_route v1.1.1 to provide macOS function interposition, which can be used for debugging.

  • New: Enabled undefined identifiers in conditional preprocessor expressions (by default).

  • New: Exposed Consolidate function through EditorAssetLibrary.

  • New: Added new Ray/Plane intersection function, named FMath::RayPlaneIntersection(), to Unreal Math library.

  • New: Exported Mobile Patching Library API so it can be used by Plugins.

  • New: Exported World Browser API so it can be used by Plugins.

Control Rig

  • Removed: Control Rig has been completely redone and the previous BaseHuman has been removed and will not work anymore. If you wish to still use the previous Control Rig, this build will break it.


  • Bug Fix: Fixed archive serialization issues for archives larger than 4 GB.

  • Bug Fix: UnrealHeaderTool now reports an error if a ufunction is used to mark up a function in a subclass where a ufunction of the same name already exists in the parent class, even if they have the same signature and markup data. To handle this situation:

    • For virtual functions, remove the UFUNCTION tag.

    • For blueprint implementable events, remove it entirely from the subclass. The parent class definition is adequate.

    • For blueprint native events and rep notifies, remove the UFUNCTION tag and instead simply define the “*Implementation” or “*Verify” virtual overrides as needed.

    • Any non-virtual cases that were essentially allowing parameter overloading for functions in blueprints we recommend renaming the functions and redirecting to new locations using CoreRedirects. At the very least, the base class version must be renamed, since the Engine will find that instead of your CoreRedirect.

Gameplay Framework

  • Projects making use of gesture bindings will need to enable the gesture recognizer in the project’s input settings.

  • Direct access to UWorld::StreamingLevels, CurrentLevelPendingVisibility, CurrentLevelPendingInvisibility, bShouldForceUnloadStreamingLevels, and bShouldForceVisibleStreamingLevels, as well as most members of ULevelStreaming is no longer available. Instead, developers should use the appropriate get/set functions.

  • Projects that were calling SetToDefaults to make sure that their overridden implementation was called may want to remove their calls to avoid duplicated work. If your project overrides SetToDefaults and gives it side effects or introduces a dependency on the order of operations, this change may force you to change that.


  • If you need to disable accepting compressed content, this is typically done on the webserver. The webserver should not be compressing images, since they are already compressed. If you need to prevent your game from ever accepting compressed HTTP content, this can be done with the .ini setting AcceptCompressedContent.

  • There has been a data format change to the UserAgent string. If you have backend code identifying HTTP calls from the game based on the UserAgent string, it will need to be updated.

  • Added pure virtual GetType() to FUniqueNetId, implemented in all subsystems that use their own subclass of FUniqueNetId or FUniqueNetIdString.

    • Created concrete types for all subsystems that were previously relying on a generic FUniqueNetIdString for their UniquePlayerIds, replaced all usages in their respective OnlineSubsystems with new type.

    • FUniqueNetIdString now contains a “Type” member variable that can be set at construct time to denote which OnlineSubsystem is required to properly interpret/instantiate that type.

XBox One

  • You may now specify an optional DebugStackSizeOverride value in your XBox One target settings in the editor.


  • Meshes might have to be re-imported to get precision of tangents and normals back to where they were. Unfortunately the old serialized data only stored the already compressed values and realigning them (to allow zero as value) might cause jitters and imprecision, re-importing should fix those issues.

  • Bug Fix: Fixed crash when using FreezeRendering in non editor builds.

  • Bug Fix: Fixed quad overdraw viewmode contents remaining on screen after switching to certain other viewmodes (such as light overlap or complexity).

  • Bug Fix: Enabling Forward Shading rather than the Mobile renderer on iOS now requires an Apple A9 or later iOS device.


  • Bug Fix: Fixed motion blur vectors on sprite particles.

  • Bug Fix: Fixed particle shadow, when using material with depth fade.


  • Removed MinRoughness property from lights. Added SpecularScale in its place. It will auto convert MinRoughness=1 to SpecularScale=0 for the cases this was used to remove highlights. For any other use case please use SoftSourceRadius for point and spot lights, or the newly added SourceSoftAngle for directional lights to get a similar effect.

  • Bug Fix: Fixed white thumbnails bug when mobile preview is enabled.


  • Errors and warnings from UnrealBuildTool are now output in a format that allows them to be double-clicked in the Visual Studio output window.


  • New: Most Navigation System-related code has been moved out of the Engine code and into a new Navigation System Module. Game-specific code using navigation system functionality might need to be updated.

    • Include statements need to be updated (the removal of the AI/Navigation part of the header files path should be sufficient).

    • NavigationSystem class has been renamed to UNavigationSystemV1.

    • Navigation-related entries in DefaultEngine.ini and DefaultGame.ini need to be updated manually.

    • NavigationSystem code being removed from the Engine module means you will have to add NavigationSystem module to your project’s dependencies.

    • World->GetNavigationSystem was renamed to FNavigationSystem:::GetCurrent

    • GetMainNavData was replaced by GetDefaultNavDataInstance

    • ThisPython (3.5) script parses game’s sources and points at lines that need updating.

      • Optionally, the script can perform the changes but make sure to use this option with caution and assisted by a version control system.

      • Script options can be found at the top of the file.


  • Bug Fix: Removed unused CopySkinnedModelData function.

Animation Blueprints

  • Exposed types on SkeletalControlBase to allow creation of derived classes.

  • Added support for creating sub-classes of FAnimNode_StateMachine outside Engine module.

  • Allowed UAnimNotify_PlayMontageNotify to be inherited by other modules.

  • Bug Fix: Fixed sub-classes of FAnimNode_SkeletalControlBase not having deprecated CacheBones called.

Skeletal Mesh

  • Bug Fix: Removed unused RigidInfluenceIndex from CPU skinning code.

  • SkeletalMesh.LODInfo is also now private. You can use a function to add/remove LOD Setting, which ensures the correct setting is set when adding a new LOD.


  • If you have a default implementation of a BlueprintNativeEvent’s required _Implementation() method inside of an interface class, the default implementation must now be removed from the interface class.

  • Removed FUnloadedClassDragDropOp as it was only used by the class viewer and had several issues. Any uses should be switched to use FAssetDragDrop instead.


  • Logging calls like UE_LOG() or GLog->Logf() will no longer compile if the formatting string is not a string literal. These should be updated.

  • Direct access to FArchive members ArIsTextFormat, ArWantBinaryPropertySerialization, ArForceUnicode, ArIsPersistent, ArIsSaving, ArIsTransacting, ArLicenseeUE4Ver, ArEngineVer, ArEngineNetVer and ArGameNetVer should be replaced by their IsTextFormat(), WantBinaryPropertySerialization() etc. member functions.

  • Added a value of Unkown to FCoreDelegates::ETemperatureSeverity enum (and mirrored ETemperatureSeverityType). This adjusts the integral values of each enum to ensure Unknown == 0.

  • Bug Fix: StringToBytes() used to return a value one less than it should have. This has now been fixed, so if this error was being compensated for at the call site, the call should be updated.

  • Renamed confusing argument in LineBoxIntersection function


  • Crash Fix: Fix for crash when using macOS clipboard string copy commands.

  • Bug Fix: macOS Play In Editor performance fix when key / mouse up event occurs.


  • Deprecated ExportToFileEx(), use newly created UAssetExportTask with RunAssetExportTask() instead of FExportToFileParams.


  • All movie scene channel types must now implement FMovieSceneChannel.

Gameplay Framework

  • Renamed the EReplicationMode enum used in AbilitySystemComponent to EGameplayEffectReplicationMode as the old name was misleading and too general for global scope. Also fixed several typos on function and variable names used in the ability system.

  • Deprecated FSavedMove_Character::MovementMode in favor of StartPackedMovementMode and EndPackedMovementMode, so they are more explicit (about being packed modes) and capture the state separately at the start and end of the move.


  • FInternationalization::GetCulturesWithAvailableLocalization was deprecated as it would only provide cultures that used LocRes files (ignoring additional localization text sources). This should be replaced with a call to FTextLocalizationManager::GetLocalizedCultureNames, and an optional call to FInternationalization::GetAvailableCultures if you need culture pointers (rather than just their names).


  • FRepLayout:


ffProperties now takes an enum flag type instead of a bool as its last parameter.


  • See CurlHttpManager.cpp for more information on the AcceptCompressedContent INI setting. Also see CurlHttp.cpp where the curl option CURLOPT_ACCEPT_ENCODING is set to support curl’s default encodings.

  • The UserAgent is set in FGenericPlatformHttp::GetDefaultUserAgent.

  • FUniqueNetIdString::FUniqueNetIdString(String) style constructors will likely be hidden soon to enforce usage of Type across the game.

  • Calls to IXmppChat::SendChat and IXmppMessages::SendMessage will need to be updated.

  • Bug Fix: Please note that Steam leaderboards no longer automatically increment variables (its original behavior was a bug). As such the new behavior follows that of other platforms.

  • Bug Fix: The dedicated server fix introduces a new launch argument (“-force_steamclient_link”) that can be used to force the steamclient link for dedicated server projects that require it.

Rigid Bodies

  • Added ENGINE_API to UPhysicsHandleComponent so it can be sub-classed.

  • Removed unnecessary InitialLinearVelocity vector from BodyInstance (reduces PrimitiveComponent size by 12 bytes).

  • Bug Fix: Threading is no longer used for PhysX if ShouldUseThreadingForPerformance is false.


  • Bug Fix: Changed texture streaming to not use background task when FApp::ShouldUseThreadingForPerformance is false.


  • While ITableRow was never intended as a public-facing interface, some advanced programmers may have chosen to implement it. Two additional methods were added to the interface, so any code implementing *ITableRow *will have to add an implementation for these methods. Sample implementations can be found in STableRow.h.


  • If you maintain an XR plugin that implements IStereoRendering::GetCustomPresent, it should be removed.

  • If you maintain a XR plugin implementation, please review the new FXRRenderBridge base class if your module needs to provide a custom present implementation.


  • Removed: BaseHuman has been removed and will not work anymore.


  • Deprecated BlutilityActor & DatasmithBlutilityActor in favor of PlacedEditorUtilityBase. Existing data will migrate to PlacedEditorUtilityBase. PlacedEditorUtilityBase should be used for Blutility base class.


  • Deprecated Lex namespace and converted all existing methods to Lex- prefixed functions instead. This avoids issues with using the Lex namespace generically in the presence of 2-phase template instantiating compilers like clang.

  • Passing anything other than a literal string to ensureMsgf() as its format string has now been deprecated. Please ensure formatting strings are always string literals.

  • De-virtualized from FArchive::IsSaveGame() and FArchive::IsFilterEditorOnly(). Please ensure that your custom archives do not try to override these functions.

  • Passing anything other than a literal string to FString::Printf() as its format string has now been deprecated. Please ensure formatting strings are always string literals.

Gameplay Framework

  • FInputActionBinding::ActionName is now private. Direct setting after construction is no longer permitted, access to read the name can be done via GetActionName accessor.

Rigid Bodies

  • Removed unused PhysX serialization support.


  • Removed welded vertices option from the FBX exporter dialog. The vertices are always welded.

  • Deprecated FindOverlappingCorners() storing data as TMultiMap<int32, int32>, replaced with struct FOverlappingCorners. New container is optimized for better performance and memory usage.

  • Removed experimental “SubD Surface” feature. This feature was never completed, and will be superseded by Editable Mesh in a future release.

  • Merge plugin AssetScriptingUtilititesEditor with plugin EditorScriptingUtilities. Existing data will be migrated.


  • Removed old, invalid Niagara Collision Bounce module.

  • Please have your Niagara Emitters and Systems use the Collision Linear Impulse module.


  • UnrealFrontend is no longer included in the BuildEditorAndTools.xml script. This functionality is available through the editor, and is rarely required in standalone.


  • The explicit construction of RuntimeDependency objects from .build.cs files is now deprecated. The path string can be added to the list of runtime dependencies instead.

It’s happening!

This is what i’m waiting for :)) Thanks Epic

Does this mean runtime landscape editing?

It’s finally arrived. Thanks Epic!

That’s MASSIVE. Thank you :wink:

Epic release as always! :cool: Thank you :smiley:

No mention of RichText?
You changed how it works, so now the community plugin doesn’t work and will probably be a giant hassle to get to work again.

It would be fine if the one you made actually worked, but it doesn’t.

Why do you change the Initialization Order of Blueprints every other version?
In one Version, Event Blueprint Initialize Animation is called first, then Component Activated.
In another Version, Component Activated is called first then Event Blueprint Initialize Animation
Now it’s like the first again and no log or anything that clarifies the order.

Great to see the new release. :slight_smile:
I’m missing something about the glTF 2.0 importer though. Any progress or news on it?

About the media tracks: “MP4 movies and other movie formats are supported but are experimental, as is rendering out Media Tracks.”

Are there some know limitation on using MP4 movies? Are they synchronized with the game time when using inside the Sequencer?

This feature (MP4 movies inside the Sequencer) is very useful for me! :slight_smile:

I don’t see it in the launcher? Still says preview 5 … ?

You accidentally put the Tools section twice in the full changelog.

Try restarting the Launcher

Good catch. We’ll fix that.

Just want to confirm, is it intentional that all plugins must now specify full relative include paths for headers of modules in PublicDependencyModuleNames? From reading the changelist it seems this was done internally for engine modules, but it wasn’t mentioned that plugins will need to be updated.

And does this mean that there is now no difference between PublicDependencyModuleNames and PrivateDependencyModuleNames as far as plugin/engine modules are concerned?

New: Development Streams on GitHub

Unreal Engine development streams are now updated live on GitHub. If you want the latest version of development code, you can now pull these streams directly, without waiting for Epic to merge changes from the development teams into our main branch. Note that these streams are live, and have not been vetted by our QA team, which is typically the case in our binary releases or in the main branch.


Dev-Rendering is still missing, and that’s the most important one. Could you please give some rough estimate when Dev-Rendering will be available?

Could anyone explain what exactly was changed here? How does UE4 have any effect on what the SteamVR compositor reports regarding the frame timing? Does this just mean “We updated the SDK so we get this benefit” or was there actually anything changed in the engine for “Improved SteamVR compositor timing”?

UE4.20 is using OpenVR v1.0.11. The lastest is 1.0.15 (updated in May with new input system). I think the support was added for a feature already persisted in SteamVR. In 4.20 at start I have the follow message: https://pp.userapi.com/c846523/v846523923/9fd6e/HB61MPmFtv0.jpg

Cannot wait to check the updated Shootergame project !

yep !

they are not humans , it’s impossible .