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

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

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

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

          Unreal Engine 4.20 Release Notes

          Release Notes for Unreal Engine 4.20

          Windows
          MacOS
          Linux
          On this page

          Unreal Engine 4.20 Release Notes

          image alt text

          What's New

          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:

          Adam Moss (adamnv), Akihiro Kayama (kayama-shift), Alan Edwardes (alanedwardes), Alan Liu (PicaroonX), Andrew (XenonicDev), Andrew Haselgrove (Dimpl), Anton Rassadin (Antonrr), arkiruthis, Begounet, Brandon Wilson (Brandon-Wilson), c4tnt, Changmin (cmheo), Christian Loock (Brainshack), Clinton Freeman (freemancw), Daniel Assuncao (dani9bma), David Payne (dwrpayne), Deep Silver Dambuster Studios (DSDambuster), Derek van Vliet (derekvanvliet), Eduard Gelbling (NachtMahr87), frankie-dipietro-epic, Gautier Boëda (Goutye), George Erfesoglou (nonlin), Giovanny Gutiérrez (bakjos), Gregor Gullwi (ggsharkmob), Hannah Gamiel (hgamiel), Hyuk Kim (Hybrid0), Ibraheem Alhashim (ialhashim), Ilya (ill), Jacob Nelson (JacobNelsonGames), Jaden Evanger (cyberblaststudios), Jared Taylor (Vaei), Jesse Yeh (jesseyeh), Jia Li (shrimpy56), Jørgen P. Tjernø (jorgenpt), June Rhodes (hach-que), Junichi Kimura (junkimu), Kalle Hämäläinen (kallehamalainen), kinolaev, Kory Postma (korypostma), krill-o-tron, Kryofenix, Lallapallooza, Layla (aylaylay), Lee Berger (IntegralLee), Leon Rosengarten (lion03), Lirrec, malavon, Marat Radchenko (slonopotamus), Marat Yakupov (moadib), Mathias L. Baumann (Marenz), Matt Hoffman (LordNed), Matthew Davey (reapazor), Maxime Turmel (maxtunel), Michael Allar (Allar), Michael Kösel (TheCodez), Michael Puskas (Mmpuskas), Mikayla Hutchinson (mhutch), mimattr, Mitsuhiro Koga (shiena), Muhammad A.Moniem (mamoniem), nakapon, Nicolas Lebedenco (nlebedenco), Paul Eremeeff (PaulEremeeff), Phillip Baxter (PhilBax), projectgheist, Rama (EverNewJoy), redfeatherplusplus, Rei-halycon, Robert Khalikov (nbjk667), Roman Chehowski (RChehowski), S-Marais, Sam Bonifacio (Acren), Satheesh (ryanjon2040), Scott Freeman (gsfreema), SculptrVR, Sebastian Aaltonen, Sébastien Rombauts (SRombauts), Seokmin Hong (SeokminHong), Sertaç Ogan (SertacOgan), stephenwhittle, Temaran, Thomas Miller (tmiv), Trond Abusdal (trond), TWIDan, Tyler (tstaples), Usagi Ito (usagi), yama2akira, Yang Xiangyun (pdlogingithub), yehaike, Zachary Burke (error454)

          Major Features

          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.

          image alt text

          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.

          image alt text image alt text

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

          To enable Software Occlusion Queries, follow these steps:

          1. Enable r.Mobile.AllowSoftwareOcclusion 1.

          2. Disable r.AllowOcclusionQueries 0.

          3. 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.

          image alt text

          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.

          image alt text

          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!

          image alt text

          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.

          image alt text

          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.

          image alt text

          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.

          image alt text

          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.

          image alt text

          image alt text image alt text

          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! Try out a Beta version of the all-new visual effects tool that will eventually replace Unreal Cascade. Watch this GDC talk for a deeper dive on the vision for Niagara.

          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

          image alt text

          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 Spreadsheet** to quickly find and react to information as the effect is running.

          image alt text

          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 Vulkan**and Switch**to 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.

          image alt text

          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.

          image alt text

          • 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!

          image alt text

          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.

          image alt text

          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.

          image alt text

          Exporting Submix output to a SoundWave Asset.

          image alt text

          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.

          image alt text

          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 pos t .

          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.

          image alt text

          image alt text image alt text

          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: UMG Rich Text Block Widget

          UMG now supports Rich Text styling and inline images through the new Rich Text Block Widget. Unlike the Rich Text widget, the Rich Text Block supports markup for things like styling, inline images, hyperlinks, and much more! It also enables you to specify your own Decorators that you can use to define the markup behavior you need for your project.

          UMGRichTextBlock.png

          To get started, simply add a Rich Text Block Widget to your Canvas panel in UMG and create a Data Table Asset to store all your text styles and images that can be called through markup. When creating a Data Table Asset, choose either the Rich Image Row or Rich Text Style Row where you'll add images or text stylings that can be referenced by the Rich Text Block.

          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.

          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.

          image alt text

          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 Filter s .

          New: Shotgun Integration (Beta)

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

          image alt text

          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.

          image alt text

          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.

          image alt text

          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.

          image alt text

          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.

          image alt text

          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.

          image alt text

          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.

          image alt text

          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.

          image alt text

          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.

          image alt text

          • IDE Version the Build farm compiles against

            • Visual Studio: Visual Studio 2017 v15.6.3 toolchain (14.13.26128) and Windows 10 SDK (10.0.12699.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

          RELEASE NOTES

          AI

          • 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.

          Animation

          • 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.

          Import/Export
          • 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.

          Audio

          • 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.

          Automation

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

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

          Blueprints

          • 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.

          Core

          • 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=".

            • UnrealPak can now accept a "PatchCryptoKeys=" 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.

          Editor

          • 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.

          • 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.

          Foliage
          • 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.

          Landscape
          • 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.

          Scripting
          • 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.

          Sequencer
          • 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