<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.21 Release Notes

          Release Notes for Unreal Engine 4.21

          On this page

          image alt text

          What's New

          Unreal Engine 4.21 continues our relentless pursuit of greater efficiency, performance, and stability for every project on any platform. We made it easier to work smarter and create faster because we want your imagination to be the only limit when using our tools. And we battle-tested the engine on every platform until it met our developers' high standards so your project will shine once it is ready for the masses.

          We are always looking for ways to streamline everyday tasks so developers can focus on creating meaningful, exciting, and engaging experiences. Our industry-leading Niagara effects toolset is now even more powerful and easier to use, enabling you to dream up the next generation of real-time visual effects. You can build multiplayer experiences on a scale not previously possible using the now production-ready Replication Graph functionality. Iterate faster thanks to optimizations with up to a 60% speed increase when cooking content, run automated tests to find issues using the new Gauntlet automation framework, and speed up your day-to-day workflows with usability improvements to the Animation system, Blueprint Visual Scripting, Sequencer, and more.

          We strive to make it possible for your creations to be enjoyed as you intended by everyone, everywhere regardless of the form factor they choose. Building on the previous release, we have added even more optimizations developed for Fortnite on Android and iOS to further improve the process for developing for mobile devices. Available in Beta, Pixel Streaming opens a whole new avenue to deploy apps in a web browser with no barrier to entry and no compromise on rendering quality. We have also improved support for Linux as well as augmented, virtual, and mixed reality devices.

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

          Aaron Franke (aaronfranke), Adam Rehn (adamrehn), Adrian Courrèges (acourreges), aladenberger, Alan Liu (PicaroonX), Cengiz Terzibas (yaakuro), Cerwi, Chris Conway (Koderz), cmp-, Damianno19, Deep Silver Dambuster Studios (DSDambuster), Dorgon Chang (dorgonman), DSCriErr, Dzuelu, Eliot (BillEliot), Erik Dubbelboer (erikdubbelboer), fieldsJacksonG, Franco Pulido (francoap), Frank St?hr (phisigma), George Erfesoglou (nonlin), Hao Wang (haowang1013), Henri Hyyryl?inen (hhyyrylainen), Homer D Xing (homerhsing), IlinAleksey, Jacob Nelson (JacobNelsonGames), Jerry Richards (r2d2Proton), Jesse Fish (erebuswolf), Josef Gluyas (Josef-CL), Joshua Harrington (thejhnz), Kalle H?m?l?inen (kallehamalainen), KelbyG, Layla (aylaylay), LizardThief, Lucas Wall (lucaswall), Mai Lavelle (maiself), malavon, Marat Radchenko (slonopotamus), Marat Yakupov (moadib), Marco Antonio Alvarez (surakin), Markus Breyer (pluranium), marshal-it, Martin Gerhardy (mgerhardy), Mathias Hübscher (user37337), Michael K?sel (TheCodez), Morva Kristóf (KristofMorva), Muhammad A. Moniem (mamoniem), Nick Edwards (nedwardsnae), nrd2001, Oliver (oliverzx), phoenxin, projectgheist, Rene Rivera (grafikrobot), Rick Yorgason (Skrapion), Riley Labrecque (rlabrecque), Sahil Dhanju (Vatyx), Sam Bonifacio (Acren), scahp, Sébastien Rombauts (SRombauts), Tom Kneiphof (tomix1024), Troy Tavis (ttavis), Truthkey, UristMcRainmaker, Wiktor Lawski (wlawski), yhase7, Zeno Ahn (zenoengine)

          Major Features

          Niagara Platform Support and Usability Improvements

          In our continuing effort to provide industry-leading effects tools, Niagara has received an expanded feature set, substantial quality of life improvements, and Niagara effects are now supported on Nintendo Switch!

          image alt text

          GPU-Only Texture Sampling in Niagara

          You can now sample a 2D texture or a pseudo-volume 2D texture in your particle scripts! Create amazing effects such as rendering the scene's depth, color and normal information using a Scene Capture Actor and use that to reconstruct the environment within a Niagara particle system with the particles' potential and kinetic energy visualized as emissive light.

          Check out the Niagara level in the Content Examples project to see how this feature works!

          Niagara Skeletal Mesh Data Interface Improvements

          There are new functions you can use in the Skeletal Mesh Data Interface enabling direct sampling of a Skeletal Mesh's vertex data as well as access to specific Bones or Sockets on the Skeletal Mesh.

          Ribbon Particle Performance Improvements

          Ribbons now generate the ribbon geometry on the GPU instead of the CPU, improving overall performance.

          GPU Simulation Support in Niagara

          GPU simulation of Niagara effects is now supported on all non-mobile platforms.

          Simplified System and Emitter Creation

          Niagara now includes friendly dialogs that make creating systems and emitters easier than ever! You can create new emitters and systems from a curated set of templates to speed up development and ensure best practices.

          image alt text

          image alt text

          Pendulum Constraint

          This constraint solves with physics forces, optional spring drivers, and includes potential energy calculation. You can now create exciting, dynamic effects such as spawning particles with inherited velocity if the energy exceeds a specified threshold:

          Module Additions and Improvements

          • Generate and receive death events

          • Now factoring mass into multiple modules

          • New SampleSkeletalMeshSkeleton, SampleSkeletalMeshSurface, SkeletalMeshSkeletonLocation and SkeletalMeshSurfaceLocation modules to complement enhancements to the Skeletal Mesh Data Interface

          • New AddVelocityInCone module

          • New Force modules: FindKineticAndPotentialEnergy, GravityForce, SpringForce and multiple usability tweaks to other forces

          • New KillParticlesInVolume module

          • New SpriteRotatationRate module

          • New RecreateCameraProjection module for using render targets and camera transforms to turn scene captures into deformable particle systems

          • New modules for sampling textures: SamplePseudoVolumeTexture, SampleTexture, SubUV_TextureSample, and WorldAlignedTextureSample

          • New utility modules for temporal interpolation and frame counters

          • Many new dynamic inputs and functions

          New: Replication Graph

          The Replication Graph Plugin makes it possible to customize network replication in order to build large-scale multiplayer games that would not be viable with traditional replication strategies. For example, Epic's own Fortnite Battle Royale starts each match with 100 players and roughly 50,000 replicated actors. If each replicated actor were to determine whether or not it should update across each client connection, the impact on the server's CPU performance would be prohibitive.

          The Replication Graph Plugin solves this problem by offering an alternate strategy geared specifically for high-volume multiplayer games. This works by assigning actors to Replication Nodes, which store precalculated information that clients can use to retrieve lists of actors that need to be updated, saving the CPU of recalculating the same data for many clients on every frame. In addition to the standard nodes that ship with the Engine, developers can write their own nodes to fit the specific needs of actors within their games.

          New: Optimizations for Shipping on Mobile Platforms

          The mobile development process gets even better thanks to all of the mobile optimizations that were developed for Fortnite's initial release on Android, in addition to all of the iOS improvements from our ongoing updates!

          image alt text

          Improved Vulkan Support on Android

          With the help of Samsung, Unreal Engine 4.21 includes all of the Vulkan engineering and optimization work that was done to help ship Fortnite on the Samsung Galaxy Note 9 and is 100% feature compatible with OpenGL ES 3.1. Projects that utilize Vulkan can run up to 20% faster than the same project that uses OpenGL ES.

          Config Rules System for Android

          The Android Config Rules system can now be used to help catch issues very early in a project start up process. This tool allows for quickly checking for device support and providing either a warning or error dialog to the user if there are issues discovered, such as an out of date driver or unsupported GPU. Any variables set may be queried later in C++ with FAndroidMisc::GetConfigRulesVariable(TEXT("variablename")).

          To use this system, a configrules.txt rules file is optionally placed in your project's Build/Android directory and UPL is used to add a Gradle task to use the ConfigRulesTool to compress and optionally encrypt it during packaging the APK. More details can be found in the engine documentation.

          Program Binary Cache for Android

          image alt text

          The Program Binary cache can be used to help improve Shader loading performance and also reduce hitching due to Shader loading on Android devices. The Program Binary cache works by generating optimized binary representations of Shader programs on the device which are used when loading shaders during subsequent runs. Loading Shader programs from optimized binaries can also dramatically decrease Shader loading times. The Program Binary cache must be used in conjunction with the Shader Pipeline cache tool as it will populate the Program Binary cache during the initial run of your application. To enable the Program Binary cache in your project, you will need to add the following command to your AndroidEngine.ini or Device Profile.

          • r.ProgramBinaryCache.Enable=1

          Note: Some devices do not support the required program binary extension, such devices will fallback to the previous behavior.

          Emulated Uniform Buffers on Android

          You can now use Emulated Uniform Buffers for projects that target the OpenGL ES3.1 feature level, significantly reducing memory usage and improving rendering performance depending on your application complexity. Emulated Uniform Buffers have also been optimized to help reduce the size of the data that needs to be transferred to the GPU when your project is being packaged. To enable Emulated Uniform Buffers when using the OpenGL ES3.1 feature level, add the following line to your project's DefaultEngine.ini under [/Script/Engine.RendererSettings]:


          CPU Thread Affinity Control on Android

          The ConfigRules system can register whether or not to use a supplied little core affinity mask. If enabled, the following threads will use little cores which improves battery life and evens out performance since they won't switch between big and little cores causing possible hitches: render, pool, taskgraph, stats, taskgraph background, async loading. For details on how to set this up, see the Config Rules documentation.

          Improved GPU Particle Simulation Performance on Mobile

          Mobile particle effects that utilize the GPU for particle simulation have been significantly improved. You now have the option of reducing the memory usage for GPU particle simulation by limiting the maximum number of simulated particles that can be used. By default the maximum number of GPU particles that can be simultaneously simulated is set to around one million particles which will use around 32 MB of memory. You can adjust the maximum number of particles to use by adding the following code to your project's DefaultEngine.ini under [/Script/Engine.RendererSettings]:

          • Setting the value from 512 to 256 will reduce the memory footprint to around 8 MB.

          • The SimulationTextureSize size has to be a power of 2.

          • These improvements are especially apparent on devices that use the ARM Mali GPU.

          Dithered LOD Transitions

          Dithered LOD transitions are now supported on mobile platforms. When enabled, objects with Materials that have Dithered LOD transitions option enabled will now fade from one Level Of Detail (LOD) to another in an almost seamless manner. By default support for Dithered LOD transitions is disabled for mobile platforms. To enable it, go to Project Settings > Rendering > Mobile and then check the Allow Dithered LOD Transitions option.

          Note: Materials that have Dithered LOD transitions enabled will be rendered as Masked Materials. This could have a negative performance impact on mobile platforms. We recommend enabling this effect only on Masked Materials.

          New: Cooker Performance

          The cooking process has been optimized resulting in up to 60% reductions in cook times! Low-level code now avoids performing unnecessary file system operations, and cooker timers have been streamlined. Handling of unsolicited Assets (with regard to Asset dependencies) has also been refactored to scale better. These changes are most pronounced on larger projects (projects with more than 100,000 Assets).

          New: Pixel Streaming (Beta)

          Run a packaged Unreal Engine application on a desktop PC in the cloud, and stream the viewport directly to any modern web browser on any platform! Get the highest-quality rendering in lightweight apps, even on mobile devices, with zero download, zero install.

          image alt text

          A viewport rendered by Unreal Engine, embedded within a web UI. Images and models courtesy of McLaren.

          You can broadcast a single game session to multiple viewers by simply sharing a link, or send each connecting user to their own separate game session.

          The web page that hosts the Engine viewport automatically sends keyboard, mouse and touch events back to the Engine. You can also customize the page with your own HTML5 UIs, using custom JavaScript events to trigger and respond to gameplay events over the wire.

          For details, see Pixel Streaming .

          New: Animation System Optimizations and Improvements

          The Animation System continues to build on its best-in-class features thanks to new workflow improvements, better surfacing of information, new tools, and more!

          Animation Compression Updates

          Animation Compression times are significantly reduced by using a whitelist of optimal codecs to avoid trying permutations that are unlikely to be selected which greatly reduces the number of codecs we attempt to compress with. On multicore systems, most of the codecs now evaluate in parallel during automatic compression, further reducing the time it takes to compress an animation sequence.

          The following updates were made to the Animation Compression Stat Dialog window:

          • Fixed bugs that would cause dialog to show incorrect results

          • Added compression time stat

          • Added number of compressed animations

          • Added tracking for animation with largest average error

          • Added tracking of worst 10 items instead of just worse

          • Better labeling on dialog

          • Pass through FBoneData array more instead of recalculating

          Please see Compression for more information.

          Animation Notify Improvements

          New Animation Notifies have been added that enable you to manage the state of dynamics and cloth simulations. We have also updated Notify add/replace menus to use class pickers for better searching of BP and native notifies. To add a Notify, right-click on a Notifies track, then under Add Notify, select the type of Notify you wish to add.

          Please see Animation Notifications (Notifies) for more information.

          Maintain Original Scale of Root Motion

          Added Use Normalized Root Motion Scale option to maintain the original scale of Root Motion. This option is on by default and is the functionality that existed prior to this Engine release. Choosing to disable this option will now use the final blended animation instead.

          Please see Enabling Root Motion for more information.

          Added Caching and Autocomplete for "Sync Marker" Names

          When creating Sync Markers, you can now access any Sync Markers assigned to the Skeleton from the Existing Sync Markers menu option. Entering text into the search box will also filter out Sync Markers based on your text entry.

          image alt text

          Animation Sequence Framerate

          The framerate of Animation Sequences is now displayed in the Animation Tools viewport and Content Browser tooltip.

          image alt text

          Enable Auto Blend Out on Anim Montages

          Anim Montages now have the option to enable or disable Auto Blend Out. This option is enabled by default, however you can disable it which won't auto blend out the Montage and will keep the last pose.

          Please see Montage Properties for more information.

          CCDIK Skeletal Control Node

          Use the new CCDIK (Cyclic Coordinate Descent Inverse Kinematics) Skeletal Control Node for a lightweight, IK algorithm suited for real-time calculation of relatively short IK chains, such as shoulder to fingertip.

          Please see CCDIK Skeletal Control Node for more information.

          Miscellaneous Improvements and Updates

          • Live Animation Blueprint Recompilation is now non-experimental

          • Local Space is now the default Coordinate Space for Animation Editors

          • A notification is now displayed in the Animation Tools viewport when a min LOD is being applied.

          New: Gauntlet Automation Framework (Beta)

          The new Beta Gauntlet automation framework enables you to automate the process of deploying builds to devices, running one or more clients and or/servers, and processing the results.

          You can create Gauntlet scripts that automatically profile points of interest, validate gameplay logic, check return values from backend APIs, and more! Gauntlet has been battle tested for months in the process of optimizing Fortnite and is a key part of ensuring it runs smoothly on all platforms.

          Gauntlet provides new profiling helpers that can record critical performance values between two points in time in order to track missed-Vsyncs, hitches, CPU Time, GPU Time, RHI Time, Draw Calls and more. Gauntlet also provides helper functions to gather these from logs so you can generate warnings, store them in databases, or create trend lines. All of the info captured during the test is available to be output into reports any way you want.

          An example of a simple report is shown below:

          image alt text

          Each Gauntlet test is a C# script that expresses a simple configuration for your test - how many clients, how many servers, and what parameters to pass. Gauntlet takes care of allocating machines from a pool, deploying and running builds, checking for common errors such as crashes, asserts, or timeouts, and collecting log files and other artifacts.

          New: Submix Envelope Follower

          Users of the new Unreal Audio Engine can now set an Envelope Follower Delegate on their Submixes allowing amplitude analysis of individual channels for that submix. This will help users power visualizations and Blueprint Events based on the amplitude characteristics of their Submixed audio.

          image alt text

          New: Filter Sound Submix Effect

          Users of the new Unreal Audio Engine now have the option of adding a multimode filter to their Submixes allowing dynamic filter effects on a single Submix.

          image alt text image alt text

          New: Sound Submix Effect Reverb Dry Level

          The Submix Effect Reverb in the new Unreal Audio Engine now supports Parallel Wet and Dry Levels allowing users to dial in specific Wet/Dry ratios making the Effect usable as an Insert-Style Effect as well as a Send-Style Effect.

          New: Linux Defaults to Vulkan Renderer

          Linux now uses Vulkan as the default renderer when available. In the event the API cannot be initialized, the Engine will fall back OpenGL without notification.

          From the Project Settings, you can use the Target RHIs to add or disable a particular RHI or use command line switches -vulkan and -opengl4 to disable the fallback.

          New: Linux Media Player

          You can now use the bundled WebMMedia plugin to play back .webm VPX8/9 videos on Linux platforms.

          New: Linux Crash Report Client GUI

          We've added support for the Crash Reporter GUI on Linux so you can help us continue to improve support for Linux platforms. Please submit reports when they occur, even repeated ones! It helps our engineers assess the frequency and learn what circumstances cause the crash to happen.

          New: Professional Video I/O Improvements (Beta)

          We continue to make it easier to get video feeds into and out of the Unreal Editor over professional quality SDI video cards. You can now work with the same Unreal Engine Project across multiple computers with different hardware setups, without changing any configuration settings in the Project.

          Create a MediaProfile on each machine, and set it up to handle the video card and formats that you need to use on that computer. You can also override the Project's timecode and genlock sources from the same panel:

          image alt text

          When you combine the Media Profile with the new Proxy Media Source and Proxy Media Output Asset types, you can automatically redirect input and output channels between the Project's media content and the settings in your Media Profile. When you switch to a different Media Profile — for example, on a different computer with a different media card or different wiring setup — the input and output channels from that machine's hardware are automatically routed through the proxies so that you don't have to change any content in your Project.

          For details, see Using Media Profiles and Proxies .

          In addition, this release adds:

          • A dockable Timecode Provider panel (Window > Developer Tools > Timecode Provider) that shows the Unreal Engine's current timecode and the source that timecode is coming from:

            image alt text

          • Support for 10-bit input, audio I/O and interlaced/PsF inputs.

          • A new Blackmagic Media Player Plugin that supports SDI cards from Blackmagic Design. See the Blackmagic Video I/O Quick Start .

          Note: The AJA Media Player and Blackmagic Media Player Plugins are now available through the Marketplace tab in the Epic Games Launcher, instead of being installed automatically with the Unreal Engine. Their source is freely available on GitHub , to give other developers a model of how to develop video I/O plugins on top of the Engine's Media Core APIs.

          New: Geographically Accurate Sun Positioning (Beta)

          In the real world, the sun's position in the sky depends on the latitude and longitude of the viewer, the date, and the time of day. You can now use the same mathematical equations to govern the sun's position in your Unreal Engine Level.

          This is particularly effective any time you need to simulate the real-world lighting conditions for a specific place on the Earth, such as for a major architectural or construction project. However, this can also be useful for any Level that you want to exhibit realistic sun movements and positioning based on global position and time of day.

          For details, see Geographically Accurate Sun Positioning .

          New: Static Mesh Processing

          We have added several new Static Mesh processing options inside the Unreal Editor. You can now save memory by removing unnecessary UV mappings from your Static Meshes.

          In addition, using Python and Blueprint scripts that you run inside the Unreal Editor, you can now:

          New: Blueprint Usability Improvements

          The Blueprint Graph editor now features "Quick Jump" navigation enhancing the existing bookmark feature by enabling users to save their current location and zoom level in the Blueprint Editor with CTRL + [0-9]. They can then quickly return to that graph at that location and zoom level by pressing SHIFT + [0-9] whenever the Blueprint editor window is open, even when working in a different Blueprint Asset. "Quick Jump" bookmarks persist across Editor sessions, and are local to the user/machine.

          Users now have the ability to insert pins before or after a target pin for Sequence nodes via the context menu, rather than only being able to add them onto the end.

          Monolithic engine header file exclusion from nativized Blueprint class C++ code is now available as a Project Setting. This can help to reduce the overall code size of the monolithic game EXE file, if code size is an issue. The option can be found at Project Settings->Packaging in the "Advanced" section under the "Blueprint Nativization Method" option. This option is disabled by default to maintain compatibility with existing objects.

          New: Improvements to HTML5 Templates

          HTML5 projects now use separate HTML, JavaScript, and CSS templates replacing the previous monolithic template file! Custom template files are also supported on a per-project basis:





          The build process will automatically pick the project's path or otherwise fallback to the Engine's version.

          This is based on GitHub PR#4780.

          New: HTML5 README Files Updated

          The HTML5 README file has been split up into multiple README files based on category:

          • Building UE4 HTML5

            • Get Source Files

            • Compiling Support Programs

            • Compiling UE4 Editor

            • Run UE4 Editor

            • Package The Project For HTML5

            • Test The HTML5 Packaged Project

          • Debugging UE4 HTML5

            • How To Dump The Stack And Print From Cpp

            • BugHunting GLSL

          • Emscripten and UE4

            • EMSDK

            • Emscripten toolchain and Thirdparty libraries

            • UE4 C# scripts

            • Test Build, Checking In, and CIS

          New: Improved IPv6 Support

          Support for IPv4 and IPv6 has been merged into a single socket subsystem, where previously support for each protocol was isolated to a specific subsystem. This allows platforms that used one of the BSD subsystems to support both IPv4 and IPv6 at the same time, and do it transparently to the calling code.

          New: DDoS Detection and Mitigation

          DDoS (distributed denial of service) attacks typically hinder game servers by flooding them with so many packets, that they are unable to process all of the packets without locking up and/or drowning out other players' packets, causing players to time out or to suffer severe packet loss which hinders gameplay.

          Typically these attacks use spoofed UDP packets, where the source IP is unverifiable. This optional DDoS detection focuses specifically on this situation, detecting/mitigating DDoS attacks based on configurable thresholds of spoofed UDP packets, which do not originate from an existing, known client connection. This is not a guarantee that servers will be safe from all attacks, since it's still possible that a heavy attack can overwhelm the hardware or OS running the server.

          New: Physics Interface Updates

          The Physics Interface has been refactored to support an increased ownership of physics objects at the high level. As a consequence of these changes, we have deprecated the Async Scene which was only recommended for use with APEX Destruction. You can still achieve the same visual results using the Sync Scene.

          As a result of these changes, much of the physics related C++ code API has changed. Functionally the API is the same and you should be able to use it very similarly to how you currently use it. We've made changes to the Physics Interface with the goal of a) reorganizing dependencies into one controlled place, and b) creating a common model for physics interactions when interacting with Unreal.

          Please see 4.21 Physics Technical Notes for more information.

          New: Pipeline State Object (PSO) Caching

          We now support Pipeline State Object (PSO) Caching on Metal (iOS/Mac), DX12 and Vulkan platforms. PSO caching helps reduce any hitches your project might encounter when a Material requires a new Shader to be compiled. PSO Caching creates a list of all the needed Shaders that are required by the Materials which is then used to help speed up the compiling process of these Shaders when they are first encountered by your project. PSO Caching can be enabled in the Project Settings > Packaging section.

          To find out more information about how to setup and use PSO caching in your UE4 project, make sure to check out the PSO Caching documents.

          New: Physical Lighting Units Updates

          We have improved the workflow and usability for Physical Lighting Units based on feedback provided by the community. As part of these updates, the following changes have been made:

          • All light types now display their units type next to the Intensity value.

          • Directional Lights are now displayed in LUX with increased intensity range.

          • Sky Light intensity is now displayed in cd/m2 with increased intensity range.

          • Post Process Auto-Exposure settings can be expressed in EV-100 for an extended range of scene luminance. This can be enabled via Project Settings.

          • The Pixel Inspector can now display pre-exposure for Scene Color. This can be enabled via Project Settings.

          • HDR (Eye Adaptation) Visualization has been refactored in the following ways:

            • HDR Analysis picture-in-picture display over the current scene view allowing adjustments with instant feedback.

            • Visualization is now expressed in EV100.

            • Pixel Inspector-like feedback has been removed.

          For additional information, see Physical Lighting Units .

          New: Geometry Cache Track (Experimental)

          The new (and experimental) Geometry Cache Track allows you to scrub through a Geometry Cache and render it out with frame accuracy.

          Please see Using the Geometry Cache Track for more information.

          New: Sequencer Audio Bakedown (Beta)

          You can now bake down the audio into a Master Audio Submix from the Render Movie Settings window. The process of baking audio occurs in a separate render pass and exports the audio in the sequence to a single file when you render a movie.

          Please see Render Movie Settings for more information.

          New: Sequencer Guide Marks

          You can now lay down vertical guide marks on the timeline to use for snapping or identifying key points in your timeline.

          image alt text

          Please see Using Frame Markers in Sequencer for more information.

          New: Windows Mixed Reality Support

          Unreal Engine 4 now natively supports the Windows Mixed Reality (WMR) platform and headsets, such as the HP Mixed Reality headset and the Samsung HMD Odyssey headset. To use our native WMR support, you must be on the April 2018 Windows 10 update or later, and have a supported headset. For more information on how to get up and running, see Windows Mixed Reality Development .

          image alt text

          Image courtesy of HP

          New: Magic Leap Qualified Developer Release Support

          Unreal Engine 4 now supports all the features needed to develop complete applications on Magic Leap's Lumin-based devices. We support rendering, controller support, gesture recognition, audio input/output, media, and more. For more information on how to be become a developer, please check out https://www.magicleap.com/ .

          image alt text

          New: Oculus Avatars

          The Oculus Avatar SDK includes an Unreal package to assist developers in implementing first-person hand presence for the Rift and Touch controllers. The package includes avatar hand and body assets that are viewable by other users in social applications. The first-person hand models and third-person hand and body models supported by the Avatar SDK automatically pull the avatar configuration choices the user has made in Oculus Home to provide a consistent sense of identity across applications. For more information, see the Avatar SDK Developer Guide .

          New: Round Robin Occlusions

          Unreal Engine 4 now supports Round Robin Occlusions. With the newly added vr.RoundRobinOcclusion flag enabled, stereoscopic frames will kick off occlusion queries for one eye per frame using an alternating scheme (i.e. odd frames only kick off queries for the left eye, and even frames only kick off queries for the right). This approach cuts the number of occlusion draw calls per frame by half. In some situations, this improves performance significantly.

          For additional information, see Visibility and Occlusion Culling.

          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:

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

          • HTML5: Emscripten 1.37.19

          • Linux "SDK" (cross-toolchain):

            • v12_clang-6.0.1-centos7

          • Lumin: 0.16.0

          • Steam: 1.39

          • SteamVR: 1.39

          • Oculus Runtime: 1.28

          • Switch:

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

            • SDK 6.4.0 + optional NEX 4.6.2 (Firmware 6.0.0-5.0)

            • Supported IDE: Visual Studio 2017, Visual Studio 2015

          • PS4:

            • 6.008.001

            • Firmware Version 6.008.021

            • Supported IDE: Visual Studio 2017, Visual Studio 2015

          • Xbox One:

            • XDK: June 2018 QFE-4

            • Firmware Version: June 2018 (version 10.0.17134.4056)

            • Supported IDE: Visual Studio 2017

          • macOS: SDK 10.14

          • iOS: SDK 12

          • tvOS: SDK 12

          Release Notes


          • Crash Fix: Fixed AI asset factories crashing if WorldSettings.bEnableAISystem = false.

          • Bug Fix: Fixed navmesh tiles being calculated wrong for larger agents.

          • Bug Fix: Fixed NavigationSystemConfigs not respecting GEngine->NavigationSystemClassName's value.

          • Bug Fix: UNavModifierComponent now correctly handles FKConvexElems.

          • New: Extended UAIPerceptionSystem's "OnEvent" functions to enable users to override the "Sense" class that any given stimuli is directed at. The main use case for this is extending AIModule-implemented AI senses while still using the same stimulus event structures.

          • New: Added a GetTypeHash override for FGenericTeamId so that it can be used in a UPROPERTY TMap.

          • New: Hooked AISystemBase into the FGameModeEvents::OnGameModeMatchStateSetEvent(). It can be utilized by overriding AISystemBase.OnMatchStateSet function.

          • New: Added a function to PerceptionSystem that allows you to register a given Actor as a source with all registered senses, all in one call.

          Behavior Tree

          • New: Error logging has been added for the BT task "Run Behavior Dynamic" if it's executed with a subtree containing root-level decorators.

          • New: Added new BT task node "Finish With Result" that instantly finished when achieving a given result.

          • Improvement: Comments on root-level decorators now have clearer descriptions.

          Debugging Tools

          • Crash Fix: Fixed an issue in EQS that was causing crashes if the EQSPawn was being used with a query in BP-implemented contexts.

          • Improvement: Extended VisLog's functionality with a way to log arrows and to mass-log boxes.

          • Bug Fix: Made sure we pass the Querier over to the GetQueryFilter call when we're constructing a meta navigation filter with UNavigationQueryFilter::GetQueryFilter.

          • Bug Fix: Fixed FPImplRecastNavMesh::ProjectPointToNavMesh needlessly allocating nav query's node pool.

          • Bug Fix: Fixed NavigationSystemModuleConfig::CreateAndConfigureNavigationSystem to not complain if no nav system instance gets created.

          • Bug Fix: Fixed 'Navmesh needs to be rebuild' warning erroneously flashing during PIE.

          • New: Optimized how we check if a path needs updating due to GoalActor movement.

          • New: Added a way to offset navmesh tiles' origin. Can be used to align tiles with game specific world subdivision (world tiles, rooms, logical grids).

          • New: Made couple of changes to NavigationSystem to allow it being created as a response to navigation data being streamed in with a sublevel.

          • New: Updated how we define rcSpanData's bitfields so that the sizes are consistent with RC_SPAN_HEIGHT_BITS. This can be used to expand how much navmesh can be generated vertically. Note that will require changing recast code.

          • New: Added a "Cancel" button to "Navigation Build In Progress" Editor notify.

          • New: Made UActorComponent.bCanEverAffectNavigation configurable via ini files so that it can be change perf component class project wide. Useful if you want only deliberately picked components to affect navigation. This also allowed for some optimizations in SceneComponent resulting in never calling PostUpdateNavigationData for components that are never nav-relevant.

          • Improvement: Improved AvoidanceManager's performance for the common case of CharacterMovementComponent.


          • Crash Fix: Fixed a crash due to retarget asset being garbage collected when using ULiveLinkInstance.

          • Crash Fix: Fixed a crash when importing an Alembic file as a Skeletal Mesh with Find Materials enabled.

          • Crash Fix: Fixed a crash when importing certain Alembic files with "Skip Empty Frames".

          • Crash Fix: Fixed a hang occurring when importing Alembic files as a Skeletal Mesh.

          • Crash Fix: Fixed crash when importing an Alembic file containing heterogeneous meshes as a Skeletal Mesh.

          • Bug Fix: Fixed issue where curve keys were missing when importing an Alembic as a Skeletal Mesh with a Start Index larger than 0.

          • Bug Fix: Fixed curves on additive animations that are entirely negative getting discarded.

          • Bug Fix: Removed GetBoneTransfom logspam when bone indices cannot be found (now Verbose).

          • Bug Fix: Converted ensures about re-routed master/slave components to logs.

          • Bug Fix: Fixed runtime FName construction in FAnimInstanceProxy.

          • Bug Fix: Autoload Animation Blueprint compiler module in editor so that Anim Blueprint Message Log category is initialized properly.

          • Bug Fix: Fixed montages not playing if the start time is exactly on a section boundary.

          • Bug Fix: Fixed issues with multiple skeletal mesh components contributing to cloth collisions.

          • Bug Fix: Animation work now performs anim update even when we have zero bones, but still skips evaluation. It ensures that notifies still get triggered in all update-relevant tick modes, even on dedicated servers.

          • Bug Fix: Fixed incorrect interpolations when using URO and CopyPoseFromMesh.

          • Bug Fix: Correctly updated the socket-attached child transforms of slave component attachments.

          • Bug Fix: Fixed the doubling of playrate when using marker sync.

          • Bug Fix: Changed Live Link tab to Nomad.

          • New: The Animation Compression stat dialog has been updated with the following:

            • Fixed issues that would cause dialog to show incorrect results.

            • Improved labeling on the stat dialog.

            • Added compression time stat.

            • Added number of compressed animations.

            • Added tracking for animation with largest average error.

            • Added tracking of worst 10 items instead of just worse.

            • FBoneData is now passed through more often instead of being recalculated.

          • New: Added automatic component movement forces to Anim Dynamics when not simulating in world space.

          • New: Notify trigger type default value on Blendspace assets changed to "Highest Weighted Animation".

          • New: Added DLL export to FAnimTrack::GetAnimationPose.

          • New: Add caching and autocomplete for "sync marker" names.

          • New: Added option to maintain original scale of root motion.

          • New: There are now native notifies in engine for dynamics and cloth management.

          • New: Added Animation Sequence framerate to editor viewport and content browser tooltip.

          • Removed: Removed an Engine dependency (via TimeManagement) from LiveLinkInterface.

          Animation Assets

          • Crash Fix: Fixed a crash on Pose Asset after reimporting the mesh with a modified skeleton.

          • Bug Fix: Fixed additive pose blending issue with scale within the Pose Asset.

          • Bug Fix: Fixed scrollbar always being shown in animation notify track.

          • Bug Fix: Fixed and issue with Pose Asset so that "Update Pose" will mark asset dirty.

          • Bug Fix: Fixed an issue with stepping forward/backward not working with AnimComposite.

          • Bug Fix: Fixed an issue with the Control Rig where it was initially displaying an invalid field of view.

          • New: Optimize Pose Blending system using Pose Asset - this changes the way pose asset blending works. It's optimized, we use UID to pose index mapping and we only keep the list of joints that matters from blending code.

          • New: Added the ability to refresh transform from existing meshes in the Control Rig.

          • New: Now AnimMontage has option to "Auto Blend Out" and you can disable it. Enabling this is existing and default behavior, but if you disable, it won't auto blend out keeping the last pose.

          • New: Anim Composite now supports looping.

          Animation Blueprints

          • Crash Fix: Fixed a crash when selecting multiple bone driven controllers.

          • Crash Fix: Drag-dropping a variable onto a state machine no longer causes a crash.

          • Bug Fix: Fixed incorrect sub instance error reporting when multiple sub-instances of the same class are used.

          • Bug Fix: Fixed bloom on drawing of pose link when weight is greater than 1.

          • Bug Fix: Anim graph root node is now hooked up at class Link() time.

          • Bug Fix: You can now access animation sub instance nodes by their tags.

          • Bug Fix: Fixed an issue with LinkedBones for curves are using mesh joint list and not skeleton.

          • Bug Fix: Fixed a flicker in graph preview in Anim State Machines.

          • Bug Fix: Fixed custom transition results being picked up as alternative roots on compilation, causing crashes and incorrect poses.

          • Bug Fix: Fixed an issue where parent constraints were no working properly for the Constraint Anim node.

          • New: Live Animation Blueprint recompilation is now non-experimental.

          • New: Added the following utility functions for animation:

            • DirectionBetweenSockets

            • MakePerlinNoiseAndRemap

            • MakePerlinNoiseVectorAndRemap

            • DistanceBetweenTwoSocketsAndMapRange

          • New: Added the "Trail Controller" Node

            • Added in-game debug info

            • Allow 2 chain to work

            • Allow disable rotation fix

          Animation Tools

          • Crash Fix: Fixed a crash when creating a new notify that causes timing order to change.

          • Bug Fix: Fixed Preview Asset not loading properly when the asset hasn't been loaded yet.

          • Bug Fix: Fixed an issue with a huge scale in root causing retarget to create invalid transform.

          • Bug Fix: Fixed issue with Animation Slot Window not displaying small icons when selected.

          • Bug Fix: Added a retarget source when recording a Skeletal Mesh, which fixes the recording of retargeted Skeletal Meshes.

          • Bug Fix: The set number of Skeletal Mesh vertex bone influences was not applied correctly when reducing a Skeletal Meshes using Simplygon.

          • New: Added the maximum number of bone influences for each section when viewing detailed info in Skeletal Mesh Editor.

          • New: Animation Editors now default to Local Space coordinates.

          • New: Added notification to the animation tools viewport when a min LOD is being applied.

          • New: Updated notify add/replace menus to use class pickers for better searching of BP and native notifies.

          Skeletal Mesh

          • New: Added a second parameter to "Set Master Pose Component" function that can be used with "Force Update". If it's false, it will skip to update all runtime information if it's the same input master component. It's set to false by default. It is only true during registration since that can be serialized and it will need to refresh all runtime data.


          • Crash Fix: Fixed a crash in "Finish Recording Output" function call when not using the new audio engine.

          • Crash Fix: Fixed an audio crash that was only happening in Visual Studio 2017 by temporarily disabling optimization. For details see Microsoft's Visual Studio Development Community .

          • Crash Fix: Crashing no longer occurs when unregistering a sound class.

          • Crash Fix: Fixed a crash that would occur when a USoundClass was garbage collected.

          • Bug Fix: Optimized source effect processing by performing processing per buffer vs per frame.

          • Bug Fix: Fixed issue where dry amount in the reverb effect would only play back in one channel.

          • Bug Fix: Fixed various issues with Modular Synth presets.

          • Bug Fix: Fixed issue where stereo sounds with the Binaural spatialization setting would not play back for certain spatialization plugins, like Resonance and Audio3D.

          • Bug Fix: Fixed an issue where child classes of USynthComponent generated from the editor would not compile.

          • Bug Fix: Fixed an issue where sounds would still be culled based on their attenuation settings when "Use Volume Attenuation" was set to false.

          • Bug Fix: Fixed issue where project packages for Lumin would be resampled based on audio resampling settings for Android.

          • Bug Fix: Resolved an issue where source buses were being rendered as sound wave thumbnails.

          • Bug Fix: Applied a fix for persistent submix effect settings between PIE sessions.

          • Bug Fix: Resolved several minor issues related to MediaSoundComponents causing them to clip when playing back when set to Mono and addressed various reasons causing stuttering audio during playback on all platforms.

          • Bug Fix: Fixed an issue with TSharedPtr on PIE shutdown.

          • Bug Fix: Fixed UI behaviors in Spatialization, Reverb, and Occlusion plugin menus in the Platform category of the Project Settings.

          • Bug Fix: Fixed warning when cooking source buses.

          • Bug Fix: Hooking up new audio icons in C++.

          • Bug Fix: Fixed an issue for the Audio Mixer source initialization state.

          • Bug Fix: Fixing source buses so that new source buses will work after being created.

          • Bug Fix: Fixed an issue with "Google Resonance" plugin when using -AudioPIEOnly and PIE shutdown where AudioPIEOnly decoding stream is never initialized.

          • Bug Fix: Fixed issue where audio sources would pop at the end of playback on iOS.

          • Bug Fix: Fixed issue on Windows where the new audio mixer would stall if no audio playback devices are available.

          • Bug Fix: Change label to Play When Silent for bVirtualizeWhenSilent.

          • Bug Fix: Fixed issues with audio device hot swapping.

          • Bug Fix: Fixed an issue that now immediately stops sounds when destroying its data.

          • New: Audio Capture Components now hook Lumin backgrounding notifications to pause capture.

          • New: Adding support for swapping between old and new audio engines so we can hotfix via CVAR.

          • New: The UVOIPTalker component is now supported with the Steam Online Subsystem as well as the null online subsystem.

          • New: Nintendo Switch's default audio backend now supports panning spatialization.

          • New: Source effects are now per-buffer versus per-frame. It allows source effects to be more cache-coherent and opens the door to SIMD-able source effects.

          • New: Adding dry-level for submix effect reverb.


          • Bug Fix: The set number of Skeletal Mesh vertex bone influences was not being applied correctly when reducing a Skeletal Mesh using Simplygon.

          • Bug Fix: Fixed a call to ConcludeAutomationTests when forcibly stopping a run.

          • Bug Fix: Fixed automation hang when an error occurs during level load.

          • Bug Fix: Fixed PropertyPathHelpers bitfield in automated tests.

          • Bug Fix: Fixed an issue where BuildGraph was launched using AutomationTools and the tasks (graph nodes) were using AutomationTools and locking DLLs. Instead, we now use AutomationToolLauncher to allow shadow copying of the DLLs.

          • New: Added export to some functions in AutomationCommon.h.


          • Crash Fix: Crashing is now avoided when running the help command for the GenerateBlueprintAPICommandlet

          • Crash Fix: Fixed a crash in the Blueprint watch window that could happen when a watched Blueprint was deleted.

          • Crash Fix: Fixed a crash when pasting Timeline which references an external curve that has been force deleted.

          • Crash Fix: Fixed occasional crash when disabling a component's ability to be editable when inherited.

          • Crash Fix: Prevent user from entering 'None' as parameter name on a Blueprint function, avoiding a crash in an internal engine system

          • Crash Fix: Fixed a crash when reloading circularly dependent widget Blueprints.

          • Crash Fix: Fixed a crash when ending a Transform Details panel edit operation with no changes.

          • Crash Fix: Fixed a crash when undoing after deleting a function graph that has a "Math Expression" node.

          • Crash Fix: Fixed a crash after hitting stop when debugging a Blueprint.

          • Bug Fix: If logic in a Blueprint Macro Library is changed, the Blueprints that use that macro library will now be recompiled when "Play" is clicked.

          • Bug Fix: Fixed loss of attachment information when compiling Actor Blueprints that have compile errors multiple times.

          • Bug Fix: "Assign [Delegate Name]" Blueprint context menu entries now properly create a "Custom Event" node again.

          • Bug Fix: Fixed one cause of subobjects disappearing after a Blueprint was compiled.

          • Bug Fix: Fixed "Unresolved Export" error after loading some circularly dependent .uassets that contained subobjects.

          • Bug Fix: Blueprint Editor is now closed when replacing a Blueprint which avoids a crash when using the Merge tool to reload a Blueprint.

          • Bug Fix: Fixed ensure after compiling a Blueprint that was implementing interface functions that were deleted.

          • Bug Fix: Can now click the magnifying glass to Find in Content Browser from a Blueprint node pin while PIE is running.

          • Bug Fix: Added tooltips from the delegate declarations in a UBlueprintAsyncActionBase subclass to the async execution pins on async task nodes

          • Bug Fix: Fix issue where async-loading Blueprints could cause false error messages about missing outers

          • Bug Fix: Intermediate Blueprint graphs (the results of Blueprint node expansion) can now be saved even if they are in the error state

          • Bug Fix: Fixed an issue where any locally declared macros with no specified category would result in an extra empty category in the dropdown

          • Bug Fix: Fixed ALT-drag and CTRL-W to allow duplication of non-instance Actor Blueprint instance components when selected in the level editor's viewport.

          • Bug Fix: Fixed broken global in Find-in-Blueprint searches for Blueprint assets by interface name. The syntax is Interfaces=(Interface_Name).

          • Bug Fix: Blueprint bytecode interpreter optimized, especially when UserDefinedStructs are present

          • Bug Fix: An error icon is now shown when dragging a category from My Blueprint panel on to the event graph.

          • Bug Fix: Fixed a runtime assertion during nativized Blueprint class construction on attempt to register an instanced subobject that was constructed based on an archetype that was originally instanced through the editor UI.

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

          • Bug Fix: Correct icon is now displayed when dragging an event dispatcher variable.

          • Bug Fix: TOTAL_OVERHEAD_SCRIPT_STATS no longer double counts when script code is run on multiple threads

          • Bug Fix: Suppressed the UMG runtime warning about implicitly using the slow CreateWidget path for dynamic widget creation in a nativized widget Blueprint class for a non-shipping build configuration.

            • Note that fast path is not currently compatible with Blueprint nativization, so it is implicitly disabled at cook time regardless of the actual design choice in the editor to explicitly force the slow path, which would otherwise avoid the runtime warning.

          • Bug Fix: Ubergraph Function on a Blueprint is now final so that calls to it don't need to search the target object's list of functions

          • Bug Fix: Blueprint compilation that occurs during async loads will properly reinstance any objects that are loaded after compilation has completed

          • Bug Fix: TimelineComponent Update delegate will no longer execute three times when looping.

          • Bug Fix: Fixed incorrect code generation at cook time with Blueprint nativization enabled for objects instanced through the editor and assigned to an instanced object reference property.

          • Bug Fix: Fixed additional params being displayed on blutility asset/actor actions dialog

          • Bug Fix: Fixed an issue where "Get Data Table Row" node's result pin was not properly updating when changing data table type if it was split.

          • Bug Fix: The struct input pin on "Set Member in Struct" nodes can no longer be split.

          • Bug Fix: "Get Data Table Row" node title now correctly updates when changing its type.

          • Bug Fix: Fixed cases where an Orphaned pin could lose its default value when changed back to the correct type.

          • Bug Fix: Fixed incomplete code generation for nativized Blueprint primitive component subobjects containing a customized 'BodyInstance' default value.

          • Bug Fix: Fixed missing backend support for initializing a container-typed function output to a literal default value term in nativized Blueprint C++ code.

          • Bug Fix: Serialized default value overrides are now properly applied at runtime to an instance of a component that's based on an archetype inherited by a non-nativized child Blueprint class as a default subobject from a nativized parent Blueprint class.

          • Bug Fix: Blueprints that attempt to access outputs from nodes that are pruned now generate a compiler warning

          • Bug Fix: Fixed SceneCaptureComponent so ShowOnlyActors property is writable in Blueprints.

          • Bug Fix: Only print script call stacks if a Blueprint exception handler has been populated with one. This will avoid any potential memory allocation in the assert handler

          • Bug Fix: Clarified tooltips on various HSV<->RGB library functions to indicate what the range of each parameter is (0..360 for H, 0..1 for S and V)

          • Bug Fix: Added support for editing Blueprint pins of structs that are derived from FGameplayTag (using the same pin customization as FGameplayTag, and looking for Categories= metadata on the struct declaration)

          • Bug Fix: ParentClass now correctly displays again for Blueprints in the content browser

          • Bug Fix: Level Blueprints now show the debug filter control - it is useful when a user wants to filter based on the world

          • Bug Fix: Warnings and errors generated by Blueprint Macro expansion now include a link back to the macro instance nodes that created the suspect nodes

          • Bug Fix: The correct source Blueprint is now used when retrieving the tooltip text.

          • Bug Fix: Fixed a source of potential data loss in inherited SCS component default value overrides at runtime in a cooked build for an instance of a non-nativized child Blueprint class that inherits from a nativized parent Blueprint class.

          • Bug Fix: Fixed an EDL runtime assertion on load when constructing the CDO for a nativized Blueprint class containing an instanced object reference of another nativized Blueprint class type referencing an instance of a non-nativized Blueprint class as a nested, class-owned subobject.

          • New: Timeline nodes now display an icon if the timeline is replicated.

          • New: Formalized the concept of a Blueprint embedded within an asset for nativization and "Find in Blueprints".

          • New: Added ability to insert pins before or after a target pin for Sequence nodes via the context menu

          • New: Monolithic engine header file exclusion from nativized Blueprint class C++ code is now available as a Project Setting.

            • This can help to reduce the overall code size of the monolithic game .exe file, if code size is an issue.

            • The option can be found at Project Settings->Packaging in the "Advanced" section under the "Blueprint Nativization Method" option. By default, it is disabled to maintain compatibility with existing projects.

          • New: The sort order of categories in the Blueprint Editor is now respected when viewing a Blueprint instance in the level editor or other details panels

          • New: Defaulting FText in Blueprints to Multiline.

          • New: "Get Player Controller ID" is now a pure node.

          • New: Some Blueprint warnings can now be disabled either outside the Editor or entirely. We added a optional message identifier to tokenized messages, then use the message identifier to facilitate suppressing a new warning in the Blueprint compiler before removing the unused (and unusable) FTokenizedMiscData.

          • New: You can call IsDataValid on the class default object as part of compilation, allowing an easy way for end users to do some validation at compile time and encouraging validation use.

          • New: You can now validate that a function that has the CommutativeAssociativeBinaryOperator metadata has the correct signature when Unreal Header Tool runs. It is also validated at compile time in case the function changes to an invalid signature later.

          • New: You can validate in Unreal Header Tool that BlueprintAssignable delegate parameters are of a Blueprint Type.

          • New: We now support construction of any native "noexport" struct-typed literal term in a nativized Blueprint class.

          • Improvement: Addressed a few QoL issues with cut/deletion of selected components via context menu or hotkey.

          • Improvement: Blueprint skeleton class generation is now more efficient.

          • Improvement: CPF_IsPlainOldData, CPF_ZeroConstructor and CPF_NoDestructor are now assigned for struct properties that that are User Defined Structs. Improved performance of bytecode that uses these properties.


          • Crash Fix: Fixed a crash when terminating the engine while initializing.

          • Crash Fix: Fixed dangling pointers into UWorld::LevelCollections which could cause a crash.

          • Crash Fix: Fixed a crash in Async Loading Graph's CheckCycles. The garbage collector would kick in on the game thread and force the Async Loading thread to exit early.

          • Crash Fix: Fixed a crash in TBitArray which could occur when adding an element to a copied TBitArray.

          • Crash Fix: Fix for a potential crash when USoundNodeWavePlayer attempts to add USoundWave to its cluster while the sound wave is still being loaded.

          • Crash Fix: Fix for a potential crash when terminating the engine while it's being initialized.

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

          • Crash Fix: Fixed a Garbage Collector crash caused by objects that are Async Loading from being collected too early.

          • Crash Fix: Added code to create FGCSyncObject's singleton when the Async Loading Thread gets created to fix early startup crashes on XBox One.

          • Crash Fix: Fixed a crash when setting the initial size of the disregard for Garbage Collection pool to a value greater than 66560.

          • Crash Fix: Fixed a Cook On The Fly server crash when an asset that has been requested by the client is missing from the server.

          • Crash Fix: Fixed the wrongful modification of MaxBits in TBitArray::operator= causing it to be a non-power of two later resulting in asserts.

          • Crash Fix: MediaPlaylist will now be added to root set if the owning MediaPlayer is in the disregard for GC set. It resolves a garbage collection assumption violation crash.

          • Crash Fix: Fixed a crash in FThreadStatsPool::GetFromPool().

          • Crash Fix: Fixed a crash when running a cooked game with -memoryprofiler in the command line.

          • Crash Fix: Made sure Material serialization is always using the same set of custom versions to prevent crashes when loading assets cooked with Cook on the fly.

          • Bug Fix: Fixed the CopyAction for runtime dependencies that need to be copied to different location, on non-XGE.

          • Bug Fix: SDropTarget now properly uses the horizontal and vertical border Slate brushes it is assigned.

          • Bug Fix: Added code to prevent packages from being saved when the final serialization pass added new custom versions that were not detected when tagging exports which would result in saving a corrupt package and causing crashes when loading it.

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

          • Bug Fix: Fixed false positive fatal error in the EDL seen in a soak test.

          • Bug Fix: Speculative fix for "Package_LoadSummary has zero prerequisites, but has not been queued" and related fatal errors.

          • Bug Fix: Modified code run async loading thread tick for a maximum of 33ms. This solved some issues with lengthy wait times for the GC lock.

          • Bug Fix: Fixed obscure bug with the rescheduling ticks.

          • Bug Fix: Fixed bogus "precache request should have been hot" errors and fixed minor bug that caused long waits during boot.

          • Bug Fix: Disabled Garbage Collector Clustering support for SoundCues, SoundNodes, and SoundWaves. Sound classes have a very dynamic nature which is not compatible with GC clustering and may lead to hard to track down crashes.

          • Bug Fix: Workaround for UE-58013, though not a full fix. Requires setting bAllowNonUFSIniWhenCooked in the Target.cs and using a cooked build with pak files. This will allow cooked, shipping builds to ignore ini's not included with the build.

          • Bug Fix: Fixed rare case where insufficient space was preallocated for cooldown ticks.

          • Bug Fix: Assets referenced by FObjectFinder are no longer stale after code is hot reloaded.

          • Bug Fix: Fixed hitch detection stat names for tickables when STAT_NAMEDEVENTS is enabled. Note that this will not work in a Shipping build since it requires non-empty implementations for TStatId and FScopeCylceCounter.

          • Bug Fix: Fixed asynchronous loading code asserts when exiting game early due to an error.

          • Bug Fix: Clustered objects that are no longer reachable will now be marked immediately when gathering unreachable objects.

          • Bug Fix: Fixed Garbage Collector Cluster verification code reporting false positives when a cluster is referenced by another through 'mutable' objects list.

          • Bug Fix: Fixed printing of the hang detector multiplier and other logging information.

          • Bug Fix: Fixed TStaticBitArray::FindFirstSetBit() and TStaticBitArray::FindFirstClearBit() which could sometimes return the wrong result.

          • Bug Fix: Fixed case where nested components defined in a native class were not being initialized correctly from their blueprint template. Instead, they were being initialized with the property values from the native base class.

          • Bug Fix: PurgeLegacyBlueprints will no longer be called from within ForEachObjectWithOuter. There was an issues causing it to rename objects that resided in hash tables being iterated over which lead to undefined behavior.

          • Bug Fix: Fix for external profilers where the looper iterating over them was in fact not actually iterating over them.

          • Bug Fix: Made sure all imports and exports created during asynchronous loading are added to the FAsyncPackage referenced objects lists.

          • Bug Fix: Fixed SoftObjectPtr/Paths becoming invalid when saving a new world. It has been moved from /Temp/Untitled to its own package.

          • Bug Fix: Fix for chunk installer not being able to determine data that is available when built without streaming install chunks enabled

          • Bug Fix: The correct clock is now used when printing the scoped hitch stat. It needs to be the internal FGameThreadHitchHeartBeat clock incase FPlatformTime::Seconds becomes out of sync with FrameStartTime.

          • Bug Fix: Fixed exception handling in the png image wrapper.

          • Bug Fix: Boolean properties are now included in the dumped properties for package info commandlet.

          • Bug Fix: AnimScriptInstances created at runtime will now also be added to the owning component's cluster to avoid Garbage Collection issues.

          • Bug Fix: Fixed TWeakObjectPtr::IsStale()'s default arguments to match FWeakObjectPtr::IsStale().

          • Bug Fix: Removed accidental check in PRAGMA_DISABLE_OPTIMIZATION from CookOnTheFlyServer.cpp.

          • Bug Fix: Fixed an issue where UCookOnTheFlyServer::GetCookOnTheFlyUnsolicitedFiles - UnsolicitedFiles was being passed by reference instead of by value.

          • Bug Fix: Fixed FParse::LineExtended to handle escaped quotes inside other quotes.

          • Bug Fix: Addressed some inconsistency with command line argument handling for Windows.

          • Bug Fix: Fixed debugger visualizers for TWeakObjectPtr and FWeakObjectPtr.

          • Bug Fix: Fixed a case where threaded animation blueprint execution could access the invalidated function cache.

          • Bug Fix: Ensure that strings formatted using FMicrosoftPlatformString::GetVarArgs() are always null terminated whether secure CRT is used or not.

          • Bug Fix: Fixed a incorrectly supplied variable name causing "Reason" to fail a check for the package name.

          • Bug Fix: Removed an invalid assert from TMemStackAllocator::MoveToEmpty().

          • Bug Fix: Creating new packages from the queue in the Event Driven Loader will now respect that Garbage Collector wants to run and exit before continuing to process packages and avoid blocking the Game Thread.

          • Bug Fix: Fixed an issue with async loading assets that have been renamed with ObjectRedirectors.

          • Bug Fix: Unrealpak will now load secondary keys from crypto json file, even when bDataCryptoRequired is set to false.

          • Bug Fix: Fixed a potential race condition when two threads want to acquire the Garbage Collector lock.

          • Bug Fix: Fixed Editor-only properties in CDOs and archetypes modified during PreSave() with a cook reporting a non-deterministic warning.

          • Bug Fix: Fixed ConditionalBeginDestroy profiling after changes to Incremental ConditionalBeginDestroy.

          • Bug Fix: When the engine starts up, it makes a backup of previous run's log with a timestamp appended.

            • Previous code used the current engine startup time; basically recording the time it was backed up, not the time it was generated.

            • The change honors the file's original timestamp, so files sort properly and give accurate information about when each log was generated.

          • Bug Fix: Changes in soft references to structs and functions renamed with CoreRedirects now work properly. It no longer redirects if the original is in memory to avoid any false positives.

          • Bug Fix: Fixed a hang when entering Play In Editor while Background Streaming is disabled.

          • Bug Fix: Fix for warnings about setting an empty value to the enum when selecting the default value.

          • Bug Fix: Fixed double logging issue with the console program.

          • Bug Fix: Fixed StompMalloc to return 16-byte aligned memory on 64 bit platforms.

          • Bug Fix: Fixed non-determinism cooking of the level list, caused by transient levels.

          • Bug Fix: Made sure that SoundWaves that haven't been serialized yet are not used by SoundNodeWavePlayer.

          • Bug Fix: Implemented a use clamped local clock when timing out the renderthread. It prevents "suspend" and "resume" issues on platforms where suspend events may not occur or the system clock is not set to the process time.

          • Bug Fix: Fix for printing of the hang detector multiplier and other logging. The correct format specifier for a double is "f".

          • Bug Fix: The correct clock is now used when printing the scoped hitch stat. It needs to be the internal FGameThreadHitchHeartBeat clock incase FPlatformTime::Seconds becomes out of sync with FrameStartTime.

          • Bug Fix: Fixed a bug that caused the code for reporting objects that have been waiting for FinishDestroy too long to not fire.

          • Bug Fix: Fixed instanced static mesh random seed cooking non-determinism.

          • Bug Fix: Made sure the Garbage Collector sync object is created before the async loading thread starts.

          • Bug Fix: Fixed a possible hang when worker threads are preventing Garbage Collector from running and something is later trying to FlushAsyncLoading with the Async Loading Thread enabled.

          • Bug Fix: Fix for a memory leak when saving packages.

          • Bug Fix: Fix for a potential assert when incremental purge garbage is pending and then something forces a full purge.

          • Bug Fix: Fix for debug builds on mobile devices causing constant erroneous NaN diagnostic errors.

          • Bug Fix: Fix for non deterministic audio generation issue.

          • Bug Fix: Fixed an issue in the CSV profiler with count strings for global stats.

          • Bug Fix: Fixed an issue in the CSV profiler where the last stat value in the series goes missing.

          • Bug Fix: Fixed TArray::HeapPop() to work with move-only types.

          • Bug Fix: Fixed InsertFeaturePacksIntoINIFile() function creating an invalid entry in the DefaultGame.ini file.

          • Bugfix: In IPlatformFile::DeleteDirectoryRecursively, attempts to delete files first and if it fails to clear the read-only attribute and try again.

            • Previously there was a call to clear the read only flag for every deleted file and this is a waste of resources 99% of the time.

            • The SetFileAttributes call accounted for a significant amount of time during cooker sandbox directory deletion.

          • Bug fix: Fixed out of bounds read in FWindowsPlatformMisc::QueryRegKey. String buffer size in bytes was erroneously used instead of length in characters to construct result FString.

          • New: Major optimization: eliminate GetUnsolicitedAssets from main cooker loop This reduces the overall time spent in the cooker by an additional 30-40% in the Fortnite case. Change will benefit any game with large (>100k) asset counts as the previous logic was basically exponential complexity. Also eliminated presave logic to simplify maintenance.

          • New: Added a method to remove some unnecessary strings from PakFile metadata after getting to a certain point in Engine initialization. It saved 20 MB on Switch in Fortnite and can be enabled with the following .ini settings:

            • [Pak] UnloadPakEntryFilenamesIfPossible=true DirectoryRootsToKeepInMemoryWhenUnloadingPakEntryFilenames="/Config/Tags/" +DirectoryRootsToKeepInMemoryWhenUnloadingPakEntryFilenames="/Content/Localization/*" ShrinkPakEntriesMemoryUsage=true

          • New: Added a -skipbuild option that will override -build, which is useful for batch files that have -build baked in to be able to skip building easily.

          • New: Optimized handling of unsolicited assets in the cooker. The cooker now tracks packages as they are loaded and unloaded and only performs certain processing on new packages This change reduced the overall time spent cooking a game with 130000 assets by some 30%. Small games will not benefit as much.

          • New: Improved CPU utilization of "do async loading while we wait for vsync" and disabled it for dual core or less.

          • New: Added code to remove 1/7th of the GC pools after garbage collection. This keeps the memory from growing too much between full purges.

          • New: Fix typo in taskgraph. May offer a slight performance improvement.

          • New: Saved memory by trimming the page allocator.

          • New: Fixes to AttemptToFindUninitializedScriptStructMembers for embedded UStructs.

          • New: Added support for recording events at a given timestamp (even if it's in the past or future) to the CSV profiler.

          • New: Added support for different sized buffers to FArchiveFileWriterGeneric per-platform so we can tune per-platform as needed.

            • No changes to existing defaults values of 1KB for read, 4KB for write.

            • #define PLATFORM_FILE_READER_BUFFER_SIZE 1024

            • #define PLATFORM_FILE_WRITER_BUFFER_SIZE 4096


          • New: Added CSV profiler stat count support using -csvstatcounts along with timestamp and custom stat counts. They appear with "COUNTS/" prefix. For example, "COUNTS/Category/Thread/StatName".

          • New: The CSV profiler now outputs save timings to the log.

          • New: Added "Begin" and "End" ProfilerColor methods for colorizing named events including support for console profilers.

          • New: Enabled the lightweight stat hitch detector in Test builds (overhead is not significant.)

          • New: Write Device Profile to the fpschart data (including analytics). If the Device Profile changes during a match, write out "Mixed" so we can discard it.

          • New: Added exclusive CSV stats that provide a high level non-hierarchical breakdown of game thread time.

          • New: CSV stats for AddToWorld and RemoveFromWorld.

          • New: Add a single TTulple "Add" function to TMap to allow Algo functions, such as Transform, to work on Maps.

          • New: Made FTimerHandle usable as a TMap key type.

          • New: Added a new "Reserve" and "Add" functions to TBitArray. Add is overloaded to allow adding multiple bits at once. Also, TSparseArray's "Reserve" function has been optimized to call the overloaded Add function.

          • New: Added TUniqueFunction, which is a move-only TFunction that can hold move-only functors.TFunction has been simplified, reducing its memory footprint and FFunctionGraphTask and TFuture<> have been updated to use TUniqueFunction.

          • New: Added optimized Windows console output path to GenericConsoleOutput. When stdout is attached to a console, the "WriteConsoleW"0 function is used instead of wprintf since it is especially slow in unbuffered mode. See setvbuf call in LaunchengineLoop.cpp.

          • New: Added a new allocator, TNonRelocatableInlineAllocator, which eliminates conditional logic from the GetAllocation function at the expense of not being trivially relocatable. It provides a significant performance increase for allocators that are dereferenced frequently. However, it prevents instances of it being stored inside other allocators, which are expected to be trivially relocatable by default.

          • New: Implemented CountTrailingZeros(), CountLeadingZeros(), CountTrailingZeros64() and CountLeadingZeros64() in FMath consistently across all platforms.

          • New: Added the ability to disable incremental BeginDestroy in ini/project settings.

          • New: Included more stats for the new Garbage Collector internal functions.

          • The locking was redundant since the annotation maps are managed per thread and thus there is no risk of contention.

          • New: Added the option to filter clusters listed with gc.ListClusters by objects within them. Usage: gc.ListClusters Hierachy With=ObjectName1,ObjectName2.

          • New: Creating new objects from within ForEachObjectWithOuter will now result in a fatal error as it's unsafe to change internal UObject hash tables when iterating over them.

          • New: Enabled platform crypto for Linux.

          • New: Added the option to change the log time for the current frame Timecode.

          • New: Removed implicit gamma to linear conversion from EXR writer.

          • New: Included the option to FStreamableHandle::WaitUntilComplete to not attempt to start stalled handles. It flushes all loads for Paks you currently have but don't want to cause load failures for ones that are not yet mounted.

          • New: Expose "Generate Encryption Key" in the CryptoKeys plugin for generating AES keys.

          • New: It's now possible to filter clusters that get logged with verbose cluster logging enabled.

            • (UE_GCCLUSTER_VERBOSE_LOGGING=1) by objects within them by specifying -DumpClustersWithObjects=ObjectName1,ObjectName2.

          • New: The warning "Calling StaticLoadObject during PostLoad may result in hitches during streaming" will now also report the object which had the Postload called on it when the StaticLoadObjet call happened. .

          • New: Added macros for PROJECTION and PROJECTION_MEMBER which provides the correct behavior when creating projections using functions that are overloaded or use default arguments.

          • New: Added extra checks to catch scenarios where the the Event Driven Loader Precache Buffer is flushed before a package header is fully read.

          • New: Included VectorLoadFloat2(Ptr)which loads { Ptr[0], Ptr[1], Ptr[0], Ptr[1] } into a VectorRegister.

          • New: Disregard for Garbage Collector pool will now be enabled by default in cooked builds.

          • New: Using debug file writer with framepro buffers more data which should reduce stalls when writing out on certain platforms.

          • New: Added non-deterministic cook warnings when redirecting soft object paths in a CDO or archetype during cook.

          • New: Improved the dumping of differences in export and import maps during a non-deterministic cook check.

          • New: Added FString "JoinBy" function for joining a range of elements by a projected string. It replaces existing FString "Join" overloads for TArray and TSet with a single template which takes any range.

          • New: Enable move semantics for TCircularQueue::Enqueue and TCircularQueue::Dequeue.

          • New: Implemented support for soft references to save games via ObjectAndNameAsStringProxyArchive.

          • New: Added support for exclusive stats to the CSV profiler that can be used to break down a thread's timings into a single flat list. See CSV_SCOPED_TIMING_STAT_EXCLUSIVE in CSVProfiler.h.

          • New: Created custom CSV stat Basic/TicksQueued.

          • New: Support has been added for per-pak encryption keys using the "CryptoKeys" plugin.

            • Added "Secondary Encryption Keys" field to the settings where an arbitrary number of named keys can be generated.

            • Some minor refactoring of AES key generation for UBT / UAT.

            • Secondary Encryption Keys are parsed from .ini files and stored in CryptoSettings for use by the rest of the toolchain.

            • Added encryption key GUID to UAT deployment content and pass to UnrealPak.

            • Added -EncryptionKeyOverrideGuid option to UnrealPak which enables a specific encryption key to be forced from the secondary keys list and used for this pak file. The key is stored in the pak info header.

            • Added a core delegate for projets to register new encryption keys with the pak layer.

            • When pak files are detected by the platform file layer, a check is done to see if the required encryption key is available before mounting. If not, defer the mount until a new key is registered that matches the required one.

          • New: Added CreateWeakLambda() and BindWeakLambda() to delegates and AddWeakLambda() to multicast delegates. It enables a lambda to be bound with a UObject* where the lambda will not get invoked by the delegate if the object has been destroyed.

          • New: Changed FGCCSyncObject to use events when waiting for the Garbage Collector to finish so that it doesn't spin on non-game threads.

          • New: Set the minimum Garbage Collector Cluster size to 5 so that Garbage Collector doesn't have to process micro clusters which are more expensive than processing individual objects Exposed the minimum cluster size to ini and project settings as gc.MinGCClusterSize Added the ability to sort clusters by name/object count/mutable object count/referenced clusters count when dumping them with gc.ListClusters command

          • New: Suppressed Garbage Collector lock performance warnings in uncooked builds

          • Improvement: CSV Profiler optimizations to take scope time from 194 ns to 128 ns on consoles.

          • Improvement: Optimized I/O in editor and cooker by using synchronous I/O instead of async with immediate blocking. Also eliminated syscall which was issued for every write to update cached file size. Since we're the only writers to the file (and access allows read sharing at most) we can authoritatively update the cached file size on write completion.

          • Improvement: Optimized low-level memory (LLM) tracker to reduce overhead when it is disabled. Previously FMemory functions would acquire the LLM singleton and call OnLowLevelFree/OnLowLevelAlloc which would check the bIsDisabled flag and early out if it was set. It now uses a static bool variable which can be checked without spending cycles on singleton logic.

          • Improvement: Log verbosity has been changed so that reporting individual cases of Garbage Collector cluster assumption violations are followed by an assert. This way there is a change to see all issues before we assert at the end of these checks.

          • Improvement: Dedicated servers or platforms which do not require data crypto do not configure Pak content encryption during the staging process.

          • Improvement: CSV timing macros no longer call the singleton since it isn't necessary anymore and these are static functions. It saves 3% or so from the instrumentation overhead.

          • Improvement: Updated some VSCode generated by project file data so it works correctly with newer versions of VSCode.

          • Improvement: Clarified the comments on how the handle is treated in FTimerManager::SetTimer().

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

          • Improvement: Added GetNoInit function to FGameThreadHitchHeartBeat.

          • Improvement: Added -dumpsavestate= and -dumpsavestatebyarchetype= options to dump the states of particular objects during cooking. It helps track non-deterministic cook problems.

          • Improvement: Added code to make sure garbage collector nulls references to pending kill objects from all FAsyncPackage internal arrays.

          • Improvement: Optimized FFileManagerGeneric::CreateFileWriter to not call CreateDirectory redundantly when opening files for writing. It avoides calling IPlatformFile::CreateDirectoryTree if possible since it is a very expensive function for deep hierarchies as it performs directory creation starting from the root directory instead of the leaf.

          • Improvement: Improved accuracy in FMath::ComputeBoundingSphereForCone(). Also, improved wording and grammar in several math function comments.

          • Improvement: CreateDirectoryTree now creates directories leaf-to-root instead of the other way around. It is much more efficient since time is not spent on system API calls for directories which already exist, which accounted for a very large amount of CPU time in cooking where the full target file directory hierarchy would be "created" for every single output file.

          • Improvement: Made the FString(Num, Ptr) constructor work with any char pointer type, not just TCHAR.

          • Improvement: VirtualAlloc calls now more compliant with the documented API.

          • Improvement: Optimized cooker timers by improving data structures and memory management.

            • This change reduced cook times by 15% on a major game with 110000+ assets.

          • Improvement: Reduced memory usage and memory churn when producing reference chains in FreferenceChainSearch.

          • Improvement: Some tweaks to FQueuedThreadPoolBase scheduling and memory management to reduce overheads and improve cache locality.

          • Improvement: When entering Play In Editor the engine will no longer be resetting all linkers. It caused long load times when renaming the world package.

          • Improvement: Package probing logic now probes for binary formats first and text second. It improves performance for the current common case by eliminating redundant syscalls.

          • Improvement: Using debug file writer with framepro buffers more data which should reduce stalls when writing out on certain platforms.

          • Improvement: The editor will now use a standard platform reader for loading packages. It is better suited (faster) for loading Editor packages than the ones that are used in cooked builds.

          • Improvement: For better debugging of some hard to reproduce bugs, the "AddToCluster" function will no longer be virtual.

          • Improvement: Small FLinkerManager optimizations related to load times.

            • Reduced the number of critical section locks when deleting linkers by a factor of 2.

            • Replaced ObjectLoaders array copy with MoveTemp for better performance.

            • Removed unused FLinerManager functions and debug FLinkerManager code from test configs.

          • Improvement: Optimized the first part of the Mark Phase of Garbage Collection by up to 10ms.

          • Removed: Removed LeakTest functionality from the cooker.

          • Removed: Removed deprecated "MakeValid" function from FTimerHandle.

          • Removed: Removed child cooker support.

          • Removed: Removed FullGCAssetClasses logic in cooker.

          • Removed: Removed the deprecated function "ClearTimer" from FTimerManager.

          • Removed: Disabled GC clustering for UMediaPlayer and UMediaPlaylist since they do not qualify for clustering.

          • Removed: Removed the ULevel::IsPersistent() test during the creation of navigation settings, which caused non-deterministic cooking issues.

          • Removed: Took out annotation map locking in UObjectMarks.

          • Removed: Removed unused async loading stats.


          • Crash Fix: A crash no longer occurs when importing assets into a folder containing an invalid character for a package name.

          • Crash Fix: Resolved a crash that could happen when opening map Build Data.

          • Crash Fix: Fixed a crash when processing mainframe keybindings during slow tasks.

          • Crash Fix: If Slate shuts down while a drag and drop operation is in progress, you no longer get a crash.

          • Crash Fix: Fixed a crash on commit error with the Git plugin.

          • Crash Fix: Fixed a crash in ReversePolygonFacing of MeshDescription

          • Crash Fix: Engine crash no longer happens when saving a large (greater than 2 GB) level under a new name.

          • Crash Fix: Fixed a crash when opening a level after removing it as a sublevel.

          • Crash Fix: Prevented a crash when clicking "Use Selected Game Mode" multiple times.

          • Crash Fix: Crash no longer happens when toggling sub-level visibility after an undo / redo transaction.

          • Crash Fix: Fixed a crash if a mesh has invalid materials.

          • Crash Fix: Server shutdown related to data validation module loading other modules no longer causes a crash.

          • Crash Fix: Fixed a crash when re-importing an FBX using the importassets commandlet.

          • Crash Fix: Fixed a crash when opening a newly built HLOD proxy/mesh.

          • Crash Fix: HLOD system no longer crashes when one of the contained Actors had an empty Material Slot.

          • Crash Fix: When trying to merge removed or deleted Actors with the MergeActor tool no longer causes a crash.

          • Crash Fix: Fixed a crash that would occur when starting a PIE session if the Game Mode's PlayerState class was set to null.

          • Crash Fix: Fixed a crash by adding an early out and log if focus is attempted to be set when a window is supposed to be disabled due to a modal window being up.

          • Bug Fix: You can now hide SDetailView Filterbox when no Actor is selected.

          • Bug Fix: Fixed an issue where the rotation widget would no longer correctly display the rotation label while rotating on high DPI.

          • Bug Fix: Fixed a navigation issue with empty search boxes causing focus to move and undesired functionality.

          • Bug Fix: Removed empty spacing in Source Control history to the right of the Details panel.

          • Bug Fix: Fixed insert / delete / duplicate children calling PostEditChange on the existing child node when not in the array.

          • Bug Fix: Fixed Brush Actors not showing the correct icon in World Outliner. Actors can now supply their own icon if needed.

          • Bug Fix: Fixed an issue with the FBX importer for Static Meshes where the Lightmap Index wasn't checked before the build.

          • Bug Fix: Fixed Preview Mesh Actor becoming stuck to the cursor when the Editor or viewport loses focus.

          • Bug Fix: Namespace is now an import option on the FBX Importer.

          • Bug Fix: When converting relative path filenames in automated import, we now convert them relative to the project directory.

          • Bug Fix: Fixed hidden Asset properties in struct Details panels. All object properties with "allowedclasses" metadata are considered to be Asset properties since they only show an Asset Picker.

          • Bug Fix: Fixed tiny fonts from appearing in slow task dialogs.

          • Bug Fix: Fixed an issue causing the Lightmap Index to be uninitialized.

          • Bug Fix: Properly handled FPackageName::TryConvertFilenameToLongPackageName() failing in Cache Thumbnail.

          • Bug Fix: Fixed access violation for ImportAsset commandlet FBX reimport.

          • Bug Fix: TextScale is now properly set for OnScreenDebugMessages.

          • Bug Fix: Fixed touch events simulated through mouse not respecting high DPI.

          • Bug Fix: Removed Tab Spawner for Color Curve Editor if you're not editing the color curve.

          • Bug Fix: Updated the Static Mesh LOD model max deviation when generating a LOD.

          • Bug Fix: Fixed cases where the the property nodes aren't being rebuilt in time and the custom property UI can be using stale data.

          • Bug Fix: The Editor now prompts for permission before updating a project file with new plugin settings.

          • Bug Fix: Fixed FBX re-import assignment of Static Mesh sections.

          • Bug Fix: FindMaterialIndicesUsingTexture() now works as advertised.

          • Bug Fix: Prevented error log due to non-existing plugin directory.

          • Bug Fix: Fixed animation Range import that was preventing changing the option when validating the anim range.

          • Bug Fix: Fixed some bool values being ignored by Editor transaction diffing for undo / redo notifications.

          • Bug Fix: Fixed an issue where closing the Levels tab with a filter would still apply that filter with no way to remove it when reopening the Levels tab.

          • Bug Fix: Fixed where edit condition changes were not transacting for undo / redo.

          • Bug Fix: Fixed an issue with propagating vertex colors to Static Meshes not working correctly.

          • Bug Fix: Fixed soft object path data corruption issue that could happen if you renamed asset A to B, and then back to A in a single Editor session.

          • Bug Fix: Fixed scrollbars that are set to always display not clamping their size correctly.

          • Bug Fix: Fixed mis-reported HLOD build indicator.

          • Bug Fix: Fixed the Skeletal Mesh compute tangent to avoid setting adjacent triangle when they are mirrored.

          • Bug Fix: Limited the rate at which the cooked package progress will display to prevent LogCook spam.

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

          • Bug Fix: Fixed issue where loading levels from PIE or the Content Browser could break world composition loading.

          • Bug Fix: The order of rows in a Data Table will now stay the same when removing a row from the middle of the table in the Editor.

          • Bug Fix: Fix issued where levels would be incorrectly marked dirty in the Editor when loaded from PIE or the Content Browser

          • Bug Fix: Made change to broadcast end object movement at the end of setting the transform in the Details panel.

          • Bug Fix: You can no longer attempt to import a Data Table or Curve Table unless the row struct or interpolation type has been specified.

          • Bug Fix: Saving HLODs from a new Level now always saves the level first.

          • Bug Fix: Applied a fix for taking HDR screenshots when the buffer write is disabled.

          • Bug Fix: Fixing missing asset factories in asset picker window.

          • Bug Fix: Fixed project GUID generated and invalidated menu items when text is focused at the same time.

          • Bug Fix: Instances of components that are not editable no longer appear in the Level Editor's component window.

          • Bug Fix: Reset Layout now resets sub Editors.

          • Bug Fix: Slow task dialog now respects ESlowTaskVisibility setting.

          • Bug Fix: Improved the way HLOD Actor exclusion for specific levels works.

          • Bug Fix: Thumbnails now render in dropdown menus.

          • Bug Fix: Fix to generate cleaner C++ files when using "New C++ Class."

          • Bug Fix: Duplicating Color Themes now duplicates the Color Labels as well.

          • New: The SceneViewport uses the default backbuffer pixel format defined in the Project Settings.

          • New: When renaming a row in a Data Table, the Editor now checks that the name is not empty, contains only whitespace, or contains invalid characters.

          • New: Reduction is now allowed on Static Mesh LOD 0.

          • New: Added new test for string allocation size for TestPAL.

          • New: AutomationTool now accepts values for its -client and -server parameters, letting you have multiple Client and Server targets per-project. So if you have ClientA.Target.cs and ClientB.Target.cs, run UAT with -client=ClientB to make a build of that variant. If there is only one target of a particular type (true for all projects up to this point) UAT will detect and use it. If more than one target is found, you must specify which one to use.

          • New: Added a system to allow a project to override an enum's DisplayName (or any metadata string), like this:

            • Enum: TEXTUREGROUP_Project01 UMETA(DisplayName="ini:Project Group 01")

            • DefaultEngine.ini: [EnumRemap] TEXTUREGROUP_Project01.DisplayName=Spaceships

            • If the enum is not remapped, it uses the name after the ini.

            • Added 10 "project" texture groups that can be renamed with the above system if desired.

          • New: Added option to Class Pickers to force use of class Display Names.

          • New: Mac OS X now symbolicates the crash logs.

          • New: Added a utility struct for dealing with Editor Actor layers from within Blueprints.

          • New: Can select the TimecodeSynchronizer from the Toolbar menu. Can be defaulted by user / machine.

          • New: "Edit" and "Paste" are now hidden from the PropertyMenuAssetPicker.

          • New: The Editor's Feature Level Preview now persists between sessions.

          • New: Added imported framerate info to animation sequence.

          • New: Added a "Report Bug" menu entry to the Help menu.

          • New: Add some FBX file information to the FBX import dialog.

          • New: Added support for paths longer than MAX_PATH in the Editor. Requires Windows 10 version 1607, and the functionality to be enabled via a registry key or group policy. For additional information, see https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file .

          • New: Single property setting changes will now also call OnModified delegate for their section.

          • New: The FBX importer now has the possibility to use different sample rate when importing an animation.

          • New: RGB values for Curves can now be set greater than 1.

          • New: The FBX import dialog shows the conflict status for both skeleton and materials. It enables the user to cancel the import before re-importing the asset.

          • New: Added a reset material feature inside the material conflict dialog.

          • New: Added 1D Perlin Noise support to Camera Shakes.

            • Use the new "Perlin Noise" option in the "Waveform" dropdown in the Oscillator section of your Camera Shake settings.

            • Also added a new "Perlin Noise 1D" Blueprint math function.

          • New: In the Static and Skeletal Mesh Editors you can now delete any unused Material slots even if it's not the last Material slot.

          • New: Add functionality to DataValidation plugin where it will call IsDataValid on assets after saving them from the Editor, reporting any errors to the message log. This will not do anything unless IsDataValid is overridden for your specific asset type.

          • New: "Keep Simulation Changes" command is now undoable.

          • New: New Skeletal Mesh FBX import workflow. The rigger and modeler can now re-import only the skinning or only the the geometry part of the Skeletal Mesh Asset.

          • New: Autosave of packages no longer saves map Build Data packages.

          • New: You can hide the 'Source File' property of media textures in Editor.

          • Improvement: PlacementModeTools shapes are now searchable and have thumbnails.

          • Improvement: Bookmark usability and extensibility has been improved.

          • Improvement: Updated MediaRecorder to use the ImageWriteQueue.

          • Improvement: Added a flag in IImageWriteQueue.Enqueue to prevent block if the queue is full.

          • Improvement: The Plugin Wizard now sets new modules to type "Runtime" rather than "Developer" by default.

          • Improvement: Increased the amount of frame time allowed to scan asset registry at Editor startup. It will be 3x faster when running in the background and has a better progress bar.

          • Removed: ABC Importer is now using FMeshDescription instead of FRawMesh.

          • Removed: GLTF importer is now using FMeshDescription instead of FRawMesh.

          • Removed: Editor scripting utilities is now using FMeshDescription instead of FRawMesh.

          • Removed: SpeedTreeImporter is now using FMeshDescription instead of FRawMesh.


          • Bug Fix: Fixed an issue with copying Particle Emitter properties when duplicating or exporting emitters.

          Content Browser

          • Crash Fix: Fixed a crash in the Material Editor if content hot-reloading a texture was used by the material.

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

          • Crash Fix: Fixed crash when content hot-reloading the build data for the currently loaded world.

          • Crash Fix: Fixed some crashes and issues that could be caused by lingering object references during a content hot-reload.

          • Crash Fix: Fixed a crash with content browser search filter "Recent" when asset list contained classes.

          • Crash Fix: Fix a crash if the file path to reimport from is not set on a DataTable asset.

          • Bug Fix: Fix "Other" filters toggling all assets to show up.

          • Bug Fix: Fixed an issue when the Context Menu was opened that would cancel a rename.

          • Bug Fix: Favorites now stay the right size.

          • New: Added a filter for Curve Atlas Assets to the Content Browser.

          • Improvement: Added icons to folder Context Menu Favorites.


          • Bug Fix: UAT didn't produce .pak file while cooking on the fly.


          • Bug Fix: Fixed lightmap / shadowmap UV mapping.

          • Bug Fix: Fixed a flickering issue that could happen if instances were added at runtime and all removed.

          • Bug Fix: Added a change that will only rebuild foliage if the Density Scaling has changed.

          • Bug Fix: Resolved an issue when migrating from 4.18 to 4.19 or higher, there could be a migration error that could cause to double the Static Mesh instances when using a Blueprint to spawn them.

          • Bug Fix: Fixed Editor instance count to only include placed instances. Calling GenerateProceduralContent will no longer automatically remove the current content, as we might want to get the generation for something else than replacing existing data. When deleting procedural foliage, we can now specify if we want to rebuild the tree.

          • Improvement: Modified foliage thumbnail color to better show when it is inactive.


          • Crash Fix: Fixed a crash during cooking for certain landscapes with collision data out of sync with render data.

          • Bug Fix: Fixed an issue with bNoWeightBlend option is now properly saved during tiled landscape import in World Composition.

          • Bug Fix: Fixed a LOD transition issue that could occurs if the LOD Distribution settings were too close to 1.0.

          • Bug Fix: Added all Materials and Materials overrides to SerializeStateHashes to detect any changes requiring rebuilding the platform data.

          • New: Added landscape keyboard shortcuts for brush size, brush falloff, and brush strength.

          • New: You can now hold a key then move the mouse to adjust a Landscape Brush's Size, Falloff, and Strength. If you drag anywhere up and to the right, it will increase the value and dragging down and / or to the left will decrease the value.

            • Note that keys are not set by default, but you can set them in the Editor Preferences > Keyboard Shortcuts. They are listed as Change Brush Size, Change Brush Strength, and Change Brush Falloff.

          • New: Added a new Blueprint node that can be used in Editor to export the landscape heightmap to a render target.

          • New: Added the possibility to override the material used per LOD. To use the system, simply specify at which LOD you want each material and it will fill the not specified LOD.

          • New: Landscape MID will now work in Editor too.

          • Improvement: Increased the maximum Landscape Layer usage color to 15 so that you can have a different color when debugging.

          Material Editor

          • Crash Fix: Added a condition to guard against crashing when pasting comments.

          • Bug Fix: Fixed new Texture Sample nodes not taking the selected texture from the Content Browser as the starting value.

          • Bug Fix: Allowed Material graph nodes to have duplicate names in all cases except creating a new parameter from a constant.

          • Bug Fix: Fixed an issue omitting Material Function Instances as allowed classes to create on the Material Function call dropdown.

          • Bug Fix: Fixed a compile error when generating example layer and blend graphs.

          • Bug Fix: Fixed for default Material Layer and Material Layer Blend asset names.

          • Bug Fix: Fixed not being able to reopen Details panel after closing it.

          • New: When selecting a node while the Details panel is behind a different panel in the same docked tab, the Details panel is brought forward.

          • New: Landscape layer samples will now be found when searching for their sample name.

          • New: Assets that can be dragged into the Material Graph now indicate that with a check mark.

          • New: Landscape layer Switch and Weight nodes will now also find parameter names.

          • New: Now all renamable nodes do name verification.

          • New: Material node display can be toggled by feature level and quality level. Note that it doesn't affect a Material's ability to compile.

          Media Framework

          • Bug Fix: Reworked the timing for AJA Media Player.

          • Bug Fix: Fixed an issue in supported format for media recorder.

          • Bug Fix: Set base timecode for AJA TimecodeProvider.

          • Bug Fix: Fixed output not working in PIE for the MediaCapture panel.

          • Bug Fix: Created a 10 bit Media Texture for CharBGR10A2 media format.

          • Bug Fix: Fixed an issue that didn't set and reset bIsOwned properly when it was first initialized as "not owned."

          • New: Upgrade AJA SDK from to 14.2.0.

          • New: Extended the SequenceRecorder to support additional objects to record from other plugins.

          • New: Added SequenceRecorder for MediaPlayer. It will record every frame to disk that the MediaPlayer produces.

          • New: Added MediaCapture's name and an image to represent the status. Use a ScrollBox around the "preview" output. It can select any Actors and only show the selectable camera grid when there is more than one camera.

          • New: Media Profile with timecode provider and custom time step.

          • New: With MediaCapture, we allow the user to change the source of a capture without stopping the current capture.

          • New: Added a widget that let you select a single permutation from a list of possible permutations. It groups the values into categories and removes duplicates inside that category.

          • New: Added support to read LTC from the reference In. Added additional detail on video format and device and MediaSource uses the Permutations Selection widget to select its mode and device.

            • Removed debugging option to trigger an AJA custom time step and timecode provider.

            • Removed the UYVY pixel option from AJA. It's better to do the conversion on the AJA card than on the GPU.

          • New: Added a option in AjaCustomTimeStep to wait until the frame to be ready. It won't work with interlaced because the 2 fields are processed at the same time. In interlaced, it will get a 30 fps behaviour when we actually want a 60 fps.

          • New: Added the option to automatically try to reopen the MediaSource again if an error is detected.

          • New: Added a Timecode Widget, TimecodeProvider Widget, and a TimecodeProvider Tab.

          • New: Added Timecode accessor to Media Samples.

          • New: Audio tracks can now be chosen when opening a video and don't require custom event handling.

          • New: Added support for 10 bit A2BGR10 texture.

          • New: Added MediaSourceProxy and MediaOutputProxy to a regular MediaSource and MediaOutput.

          • New: Added MediaProfile which lets the user select their media sources and media outputs by machine or by user.

          • New: Enabled world rendering is now exposed to Blueprint. It's useful to free up hardware resources while playing full screen videos.

          • Improvement: Changed the tooltip and category for some AjaMediaSource properties.

          • Improvement: AJA improvements:

            • Added an initialization thread with a command queue

            • Fixed an issue with WaitForInterrupt.

            • Fixed multiple wait was requested, where we were not waiting for the Channel index.

            • Fixed an invalid dropped frame warning when using ping-pong.

          • Removed: Removed color box that tells the status of the MediaCapture.

          • Removed: Removed MediaFrameworkUtilititesModule dependency to the Settings module at runtime.


          • Crash Fix: The editor no longer crashes on shutdown after binding a Python member function to delegate.

          • Crash Fix: Recompiling a Blueprint or Script class that serializes an object reference manually no longer causes a crash.

          • Crash Fix: Fixed a crash when passing None as the world on Python Actor iterators.

          • Crash Fix: Fixed a crash when re-pointing an object referenced in Python.

          • Crash Fix: MovieSceneCaptuer no longer causes a crash when iteration on classes are defined in the script.

          • Crash Fix: Fixed a crash when passing "None" as the class for unreal.find_asset or unreal.load_asset.

          • Bug Fix: Ensure that Python generated types create their default object at the correct point.

          • Bug Fix: Editor command line argument 'ExecutePythonScript' can now also include arguments.

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

          • New: Scripted FBX import can now autodetect type.

          • New: Exposed transactions to Blueprints.

          • New: Added a SetLodFromStaticMesh script utility function that allows to set a static mesh LOD by copying the geometry of another mesh.

          • New: Show an error if trying to use -ExecutePythonScript without Python enabled.

          • New: Expose OpenEditorForAssets to script.

          • New: Added support for BlueprintAssignable properties in Python.

          • New: Sequencer scripting: Exposed "Get Playback Range", sub Sequence get Sequence.

          • New: Added methods to convert an Unreal relative path to absolute.


          • Crash Fix: Fixed a crash caused by having too many pending tasks in ImageWriteQueue.

          • Crash Fix: Fixed a crash caused by splitting a subsection without a Sequence.

          • Crash Fix: Fixed crash that happened when importing FBX cameras with identical names to existing objects in the Level. Cameras are added if bound objects don't exist. Changed logs to popup toasts.

          • Bug Fix: Fixed an issue where a Movie Scene Player's Start Offset would be ignored because it was getting nullified due to Stop() getting called last.

          • Bug Fix: Fixed a logic issue where a newly added key would not expand the section range.

          • Bug Fix: Fixed an issue with Rich Curve to not expose RCIM_None and RCTM_None as DisplayName="None". It doesn't make sense to have no interpolation.

          • Bug Fix: Made unique spawnable name to avoid it being renamed in SetActorLabel.

          • Bug Fix: Added the relevant property name in an ensure that is caused by trying to bind to a track with a null object.

          • Bug Fix: Fixed an issue where some newly added objects would not get added to selected folders. We now call OnAddTrack for some newly added tracks so that they automatically get added to the selected folders.

          • Bug Fix: Removed debugging from Shipping builds.

          • Bug Fix: Fixed an issue where GetParents was not recursing properly to get parent Actors. This fixes trajectory drawing when there's more than 1 parent in the chain.

          • Bug Fix: Fixed problems with duplicating hovered keys and sections so that they are selected before duplicating if they're not already selected.

          • Bug Fix: Refresh Actor list to clean up "Deleted Actor" in the outliner when drawing thumbnails and converting to spawnable.

          • Bug Fix: We now always bake at the display rate. Otherwise, baking at tick resolution can be pretty heavy handed.

          • Bug Fix: Fixed an issue in SequenceRecorder where StopRecording conditional when there is an Actor recording that doesn't have a valid Actor to record.

          • Bug Fix: Fixed CurrentShot LocalTime computation by using sequence time in playback resolution to compute the local shot time. Also, fixed the BurnIn asset so that CurrentShotLocalTime is hooked up to ShotFrame instead of MasterTime. This fixes a bug where the burnin's {ShotFrame} is not reporting the local shot frame number.

          • Bug Fix: Test for movie scene read-only before calling modify / transactions.

          • Bug Fix: Fixed an issue to use non-throttled spin box for numeric key Editor.

          • Bug Fix: Fixed an issue in SequenceRecorder so that Actor tags are now unique.

          • Bug Fix: When importing FBX, if a camera is created, mapping is now forced to be by name matching only so that other nodes in the FBX file does not get mapped onto the newly created camera.

          • Bug Fix: Fixed an issue which caused movie burnout not to use a fixed timestep.

          • Bug Fix: Sequence Recorder: When recording animation in world space, the transform keys are compensated by the root bone. There was a bug when not recording animation in world space where there would be no transform keys. This is because the root bone values are all identity (since they're not in world space). To fix this, the transform recorder now records as usual, filling the buffered transforms from the Actor, rather than swapping them in during finalize from the root bone.

          • Bug Fix: Sequence Recorder: When removing root animation from the animation asset, we now push the root animation to the transform recorder, which records to the transform track only when the animation is not in world space.

          • Bug Fix: If playback is at the end, calling play again now resets to the beginning.

          • Bug Fix: Audio track visualizations scale correctly with pitch scaling.

          • Bug Fix: When re-keying, interpolation is no longer set on existing keys.

          • Bug Fix: Fixed the restore state for attach tracks so that the original parent is re-attached.

          • Bug Fix: Fixed an issue where duplicated spawnable tracks were not being saved. This is done by clearing transient flags from the tracks / sections coming from the FMovieSceneCopyableBinding.

          • Bug Fix: The custom widget (ie. +Section) is now overlayed on the key Editors.

          • Bug Fix: Sequence Recorder: Fixed an issue caused by updating the target Level Sequence when duplicating before recording into the Level Sequence.

          • Bug Fix: We no longer attempt to select Actors / Components on locked levels.

          • Bug Fix: We now pause playback before scrubbing begins. This fixes an issue where if you play the Sequence with audio and scrub and release, the audio keeps playing. This is because there's no explicit evaluation in the stopped state OnEndScrubbing.

          • Bug Fix: Fixed an issue in SequenceRecorder with auto size sections after recording to expand to time range of recorded data.

          • Bug Fix: Reset the last view target when stopping the Sequence so that it gets recached when evaluating the Sequence again.

          • Bug Fix: Level Sequences now check to see if they are adding themselves as a tick dependency.

          • Bug Fix: Fixed additional edit widgets not appearing on top-level key area nodes.

          • Bug Fix: Fixed GoToEndAndStop() and other jump state so that when calling stop, Sequencer gets torn down properly. It fixes an issue where if you just call GoToEndAndStop() and the Sequence won't actually stop and tear down.

          • Bug Fix: Fixed the file extensions for movie files on Mac.

          • Bug Fix: Moved Linux warning to initialize to avoid spamming the log every frame for the Movie Scene Capture.

          • Bug Fix: Intersect the section range with the visit range to ensure keys that fall outside the section range aren't snapped against.

          • Bug Fix: Made a change so adding a track through the Add Track menu doesn't automatically create a key.

          • Bug Fix: Changed HandleSingleNode fallback check for collapsed parents. This fixes cases where selecting keyframes could miss partial keys.

          • Bug Fix: All sounds are now stopped on tear down.

          • Bug Fix: We now use cached object bindings when drawing motion trails. It is because FindObjectId can be slow because it clears the cached bindings.

          • Bug Fix: Fixed an issue where key reduction was not working on imported FBX channel. Implemented channel Optimize() so that it follows the curve Editor's SimplifySelection by evaluating whether a key is needed (rather than removing the key and checking whether the value has changed). The main fix is that the tangents need to be calculated as non-normalized (eg. with the DisplayRate).

          • Bug Fix: Sequencer Possessable references will no longer lose their references when saving an Untitled map for the first time.

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

          • Bug Fix: We now restore drawing paths for selected nodes and channels.

          • Bug Fix: Added functionality to check for property type in evaluation. This fixes an issue where the property type is changed after the track has been created.

          • Bug Fix: Fixed edits to subsections not invalidating their sub Sequence data for deep hierarchical Sequence structures

            • Full hierarchical sub Sequence data is stored in the outermost Sequence hierarchy as part of the compilation, but such data was not necessarily being invalidated for deep hierarchies (sub-subsections) when an outer subsection / Sequence was modified.

            • When an outer subsection modification is encountered, the whole child hierarchy is now invalidated.

            • Additionally, inner sub Sequence data that is cached in grandparent sequence hierarchies had no method of being invalidated if the grandchild subsection was changed in some way.

            • The subsection signature and outer to inner transform now exists on the sub data to check for such situations as part of the compilation steps.

          • Bug Fix: Fixed regression where the default audio volume on the audio track is restored properly.

          • Bug Fix: We now account for framerate when copying key tangents when converting from Matinee to Level Sequence.

          • Bug Fix: Fixed the FBX export node name so that it uses the Sequencer display name.

          • Bug Fix: Fixed FrameNumber numeric input fields not understanding asterisk (*) which prevented pressing Ctrl + G and then Enter to escape focus when evaluating a sub-frame.

          • Bug Fix: Undo / redo transactions while Sequencer is opened should now have appropriate behavior for keyed Actors.

          • Bug Fix: Fixed Timecode fields not displaying Subframe markers.

          • Bug Fix: Fixed various issues with copying 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: Renaming object bindings in Sequencer now marks the package as modified so they prompt for save requests and pass the rename onto the Spawnable so that a copy and pasted object bindings doesn't revert to the original name from when it was created.

          • Bug Fix: Fixed an issue in SequenceRecorder which changed to record only child components and not other scene component hierarchy that's not owned. It led to problems where components would be doubly recorded.

          • Bug Fix: Added ability to turn off saving Animation Sequences when exporting level meshes so we don't save the Animation Sequence twice when saving FBX from the Sequencer, which was causes an issue in this file since the times weren't in sync.

          • New: Sequencer Marked Frames are represented as teal vertical lines extending from the top timeline slider to the bottom timeline slider. Marked Frames can be created by using the "M" hotkey to toggle a mark on or off or by using the right-click menu on the timeline slider track. Marked Frames are also used for Snapping. Shortcuts to jump the current playhead time to the next/previous marks are defaulted to "CTRL+SHIFT+," and "CTRL+SHIFT+.".

          • New: Added tooltips to the Cinematic Viewport UI to help clarify what some of the numbers being shown are.

          • New: Sequencer now initiates a slow task when opening via the Cinematics dropdown in the UI. It helps with first time opening of large cinematics that require compressing audio and animation data.

          • New: Added ability to import / export Tangent Weights from FBX.

          • New: Added quaternion interpolation option to UMovieScene3DTransformSection. It mimics how Matinee used to work by basically finding the keys between a time and interpolating the angles as quat's between them. As noted in the code the algorithm needs to handle the case when the x,y,z Rotation keys all aren't at the same time which was not handled by Matinee.

          • New: Synchronize Selected Sections using Source Timecode via the section right-click menu now syncs sections relative to the first selected section. It replaces the previous "Synchronize to Source Timecode" function.

          • New: Added GetObjectBindings() to retrieve the object bindings for the passed in UObject.

          • New: Added the option to double click to open the Shot asset directly.

          • New: Newly created sections now throb and are selected so that it's clear if there's an overlapping section that gets created.

          • New: Added default sections for all tracks and not just property tracks.

          • New: We now export "Manual Focus Distance" and ensure that the property is animatable.

          • New: Added to SequenceRecorder the option to record to the target Level Sequence playback range length.

          • New: Added support to SequencerRecorder for looping / rolling takes.

          • New: In SequenceRecorder we now save recorded audio files if autosave is on.

          • New: Added support to SequencerRecorder to specify properties from Actor classes (camera rig rail - current position on rail).

          • New: Added the ability to implement custom capture protocols for movie scene captures.

            • Converted capture protocol settings and instances to be single UObjects. This unifies the two concepts, and allows for Blueprint implementations.

            • Removed capture protocol registry since it is no longer required.

            • Removed FCaptureProtocolID in favor of class discovery at runtime.

            • Added new module "ImageWriteQueue", responsible for asynchronously managing a queue of image file write operations.

            • Added new capture protocol for capturing final pixels to EXR (including burn-ins).

            • Added a new BP function, ExportToDisk, accessible on all UTexture properties for writing texture and render target data to image files.

            • New global BP nodes for querying movie capture status: IsCaptureInProgress, FindCaptureProtocol.

            • Removed Flush On Draw functionality from viewports and frame grabber since it is unnecessary.

          • New: Added movie scene locking / read only and fixed a few issues with locked sections because you shouldn't be able to create or move keys on locked sections

          • New: Added the ability to switch the takes of all the selected shots / subsections.

          • New: In the Cine Camera the ActorToTrack has been changed to a TSoftObjectPtr to support cross level references.

          • New: Added compensation for the added transform when an attach track is added.

            • If there's no existing transform track, create one and add the compensation to that transform section.

            • If there's an existing transform section without keys, compensate to that transform section.

            • Otherwise, create an additive transform section and compensate to that transform section.

          • New: Added FindCachedObjectId which retrieves the binding without clearing the cache.

          • New: Added protection against null movie scene sections to SequencerRecorder.

          • New: Audio is now disabled when playing backwards.

          • Improvement: Clarified allowed bindings from asset tooltips.

          • Improvement: Clarified tooltip for export FBX.

          • Improvement: Corrected a description for Cinematic Camera's "Maximum Aperture".

          • Improvement: Rewrote bOverridesDefault's tooltip so that it reads correctly.

          • Improvement: Increased curve color contrast.

          • Improvement: Media Sections on a Media Track can now optionally set a looping flag to hint to the underlying media player. This aids in some media players (like EXR) that can use the looping flag to pre-cache data properly.

          • Improvement: Spawnable Object Bindings now show up Gray in Sequencer instead of Red when they have not been spawned yet due to the evaluation of the Spawn track.

          • Improvement: Renamed "Cinematic Preview" to "Allow Cinematic Control" to remove confusion with the difference between Cinematic Preview and Cinematic Viewport.

          • Improvement: Opening the Add Track menu in Sequencer and trying to add an Actor from the map to the sequence should take significantly less time now on maps that have tens of thousands of Actors.

          • Removed: Removed Ctrl+O and Shift+O bindings to toggle node collapsing and expanding since they conflict with Open Level.

          • Removed: Removed restriction on hidden mobility. It's too wide to restrict transform tracks.

          • Removed: Removed "Show Transport Controls" from the Level Editor Viewport UI as the controls have been completely surpassed by the Cinematic Viewport Preview.

          • Removed: Removed ctrl-w as a hotkey to toggle weighted/non-weighted because it conflicts with the more generic binding to duplicate objects/tracks.


          • Crash Fix: Fixed a crash caused by spamming trigger presses in VR mode.

          • Crash Fix: Added fix to prevent crash caused by floating text if asset container does not exist. VR Editor floating text is now not placeable or Blueprintable.

          • Crash Fix: Fixed for VR Mode crash when undoing camera duplication.

          • Bug Fix: Moved all asset container access to PostActorCreated to avoid VR Editor assets in cooks.

          • Bug Fix: Updated VR Mode button to become inactive during SIE (instead of disappearing altogether).

          • Bug Fix: Gamma correction fixes added for VR Mode Content Browser icons and camera previews.

          • Bug Fix: Fixed added for the Actor previews not unpinning when entering VR mode.

          • New: Added a third looping option to the Sequencer Radial Menu. Selecting the Looping option now cycles through No Looping > Loop All > Loop Range

          • New: Added set start/end range buttons to radial menu.

          • New: Fixed for opening a sequence in VR mode blocking level Editor tab drag and drop.

          • New: Making a VR Edit show flags mode that is similar to Game Mode but without the Game flag set to true, now hides billboards and cameras are now visible in VR mode.

          • New: Placing cameras now only summons the preview panel once you release.

          • New: Added a new spawn location for camera preview window (in front and to the side, on whichever side matches your UI hand).

          • New: Changed some VR Editor elements to be hidden from camera preview.

          • New: Added camera burnin text on preview windows as well.

          • New: Support for multiple viewport previews in VR mode has been added.

          • New: Any dockable window can now be docked to the world.

          • New: Exposed settings for tweaking VR mode movement.

          • New: Sequencer scrubbing will now pause when removing your thumb from a Vive touchpad.

          • New: Added external UI panel support to VREditor module.

          Gameplay Framework

          • Crash Fix: Fixed a crash when using a GameplayCueManager without explicitly setting an asset / class in config.

          • Crash Fix: Fixed a crash when trying to create an object when one with that name already exists for Child Actor template.

          • Crash Fix: Fixed a potential crash when changing a Child Actor's class dynamically.

          • Crash Fix: Resolved a crash that could happen when ending PIE while a Level is in the middle of loading in.

          • Crash Fix: Addressed a potential crash in UAbilitySystemComponent::ServerSetReplicatedTargetData_Implementation.

          • Crash Fix: Fixed Gameplay Ability crash if an ability tries to remove itself during activation.

          • Crash Fix: Fixed a crash coming from Gameplay Tag Editor widgets.

          • Crash Fix: Fixed crash when reloading level that contained sub-levels that were created by duplication actions

          • Bug Fix: Fixed connecting during seamless travel without a transition map.

          • Bug Fix: Setting invalid quality values for GameUserSettings is no longer possible.

          • Bug Fix: You can make a copy before iterating in UGameplayAbility::ApplyGameplayEffectSpecToTarget in case of side effects that alter the container.

          • Bug Fix: Added checks to curve table import to prevent users from importing curves that contain entries with multiple keys with the same time entry. This prevents unexpected behaviour where only one of the entries would be displayed in the editor and only one entry would be used in curve table evaluation (but not necessarily the same entry in both cases).

          • Bug Fix: Fixed comments on buried methods in APlayerCameraManager.

          • Bug Fix: Fixed an issue where spring arm components with bDoRotationLag=true would never pass through pitches of 90 or -90 degrees.

          • Bug Fix: Replicated Child Actors are now correctly spawned using the ChildActorTemplate and not the Class Default Object archetype.

          • Bug Fix: Fixed bWantsToCrouch not set for simulated proxies, which could cause premature crouch/uncrouch issues if proxies use root motion that runs through the full PerformMovement->UpdateCharacterStateBeforeMovement() flow.

          • Bug Fix: Fixed various issues with FindTeleportSpot to reduce the chance of players falling out of the environment, and to improve overall placement consistency.

          • Bug Fix: Player Input's "Discard Player Input" now correctly discards the player input.

          • Bug Fix: Fixed immutable structs with non-editable properties corrupting later properties in the component instance data cache byte stream.

          • Bug Fix: Print String messages with duration no longer display for shorter periods of time when playing in PIE with multiple player viewports.

          • Bug Fix: Fixed an issue where FGameplayAbilitySpecHandle::GenerateNewHandle could create duplicate handles if called from different modules.

          • Bug Fix: Fixed a bug where we don't tick USceneCaptureComponent on DS by default now.

          • Bug Fix: Hierarchy is now correctly maintained when harvesting components to create a Blueprint, including maintaining relative transforms when creating a Blueprint from Actors that have an attachment relationship but an intervening Actor is not selected. For example, A -> B -> C, only A & C are selected.

          • Bug Fix: Fixed potential corruption of the Streaming Levels array if an on Level visibility delegate makes additional additions or removals of Streaming Levels.

          • Bug Fix: Fixed a bug where the AssetManager could fail to call load delegates in synchronous load mode.

          • New: Adding key flags so that we can earmark touch keys as touch input.

          • New: Added UActorComponent::bVisualizationComponent boolean to indicate that a component is being used as a visualizer and is not a part of the component hierarchy. This prevents it from being selected in viewports (if clicked it will route to its parent component) or displaying the component trees by default. This replaces using bIsEditor to imply the component is for visualization purposes.

          • New: Added UGameplayStatics::LoadGameFromMemory function for use by native code.

          • New: Changed display name of some Gameplay Cue Blueprint functions to be more explicit about what they are doing.

          • New: Latent actions are no longer processed for non-Blueprint objects.

          • New: Added AActor::CanDeleteSelectedActor virtual that allows Actors to indicate they cannot currently be deleted and what the reason is.

          • New: Mark several functions as "BlueprintThreadSafe" for less common gameplay types that might want to be used by animation.

          • New: Added MinimalApi to ACullDistanceVolume.

          • New: Added template cast versions of UWorld::GetFirstPlayerController, UWorld::GetFirstLocalPlayerFromController, AActor::GetGameInstance, AController::GetPlayerState, APawn::GetController, and UUserWidget::GetOwningLocalPlayer.

          • New: Added two new data types, composite data tables and composite curve tables. These types allow you to combine multiple data and curve tables that share the same row type. Composite tables are effectively a stack of other tables. Each table on the stack can add new rows or overwrite rows that were added by previous tables on the stack.

          • New: The FManagedObject reference returned from GetManagedObject is no longer const as there is need to be able to cache values in sub-classed FManagedObject structs.

          • New: Add ExecutionOptions enum to GameplayCue functions, allowing skipping notifies/interfaces to save on performance.

          • New: Add GameplayTags.DumpTagList editor command to output all gameplay tags and metadata to a csv in Reports/TagList.csv.

          • New: Added a new lifecycle event UGameInstance::PostCreateGameModeForPIE, called when starting up PIE right after the game mode is spawned; this allows early validation / rejection of pie settings before player controllers are created, etc.

          • New: Added a Blueprint method DoesDataTableRowExist to determine whether or not a table contains the specified row.

          • New: UE4 now defaults to symmetric mouse horizontal and vertical sensitivity. (Previously, pitch was 70% less than yaw.)

          • New: Added "GetAllLocation" exec command. Removed "GetAllState" as it does not actually get the state of anything.

          • New: Optimized FTimerManager for faster lookup and removal of existing timers by handle and by bound object.

          • New: Optimize AActor::WasRecentlyRendered for cases where it has been recently rendered and we've recently queried the last render time.

          • New: TInlineComponentArray can now specify to include components from Child Actors.

          • New: Publicly expose the Engine's Particle System pool used by GameplayStatics.

          • New: Added new vertical split screen mode for 3 and 4 players that give each player full height and divides the screen horizontally.

          • New: To avoid Level Streaming hitches, RouteActorInitialize will now always run in a separate frame from a