Whether it is through games, linear media, or virtual reality, Unreal Engine 4.17 enables you to tell your own story. New tools, workflow enhancements, and performance optimizations make it easier than ever to develop and ship your project at the quality bar you expect and with the performance users demand. With new platform support and expanded feature sets, Unreal Engine delivers engaging experiences on any platform.

The new Composure compositing system and Image Plate plugin provide a powerful and flexible means of combining content rendered in realtime with live action footage. Numerous improvements to Sequencer continue to refine the workflow for creating cinematics and linear media.

Discover and load quests, heroes, or other game-specific content with the new Asset Management Framework. Query information about Assets at runtime in Blueprints using the Asset Registry's new Blueprint accessors.

Develop games for Microsoft's Xbox One X console as part of the platform improvements. Make your VR project a social experience using the new VR Spectator Screen support. On Android, we have improved several aspects on high end devices, and we continue the effort to reduce executable sizes even further.

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

0lento, Akihiro Kayama (kayama-shift), Andrea Catania (AndreaCatania), Andrew Armbruster (aarmbruster), Andrew Gaubatz (e-agaubatz), Andreas Schultes (andreasschultes), Angel Angelov (DexterLB), Artem V. Navrotskiy (bozaro), Brent Scriver (FineRedMist), Cengiz Terzibas (yaakuro), Chris Grebeldinger (cgrebeld), DaveC79, Dennis Wissel (dsine-de), erniea, GBX-ABair, Gryphon Myers (gryphonmyers), Igor Karatayev (yatagarasu25), Ilya (ill), irobot, Jared Hefty (jared-improbable), Jason Calvert (jasoncalvert), Jorge Martins (SNikon), Kalle Hämäläinen (kallehamalainen), Konstantin Nosov (gildor2), Laurie (laurie-hedge), Mario Zechner (badlogic), Mathias Hübscher (user37337), Matteo De Carlo (portaloffreedom), Mattias Cibien (mattiascibien), Max Shawabkeh (max99x), Michael Auerswald (flipswitchingmonkey), Michail Nikolaev (michail-nikolaev), Nako Sung (nakosung), Paul Eremeeff (PaulEremeeff), Piotr Bąk (Pierdek), poiyomi, projectgheist, rfenner, Robert Khalikov (nbjk667), Roberto De Ioris (rdeioris), Ron van Essen (ronve), rooneym, Ryan Nielson (RyanNielson), Sam Hocevar (samhocevar), Satheesh (ryanjon2040), Sébastien Rombauts (SRombauts), Skylonxe, Stefan Zimecki (stefanzimecki), StefanoProsperi, Stormtide Ltd (StormtideGames), Timothee Besset (TTimo), Trent Polack (trentpolack), UpwindSpring01, wuyakuma

Major Features

New: Sequencer Improvements

We have made a ton of functionality, stability, and usability improvements to Sequencer to make it as enjoyable to create your story as it is for users to experience it.

Auto-key

Auto-key has been simplified to be a single toggleable state in order to improve usability and clarity.

Sequencer Edits vs Level Edits

You can be confident in whether a change to a property will affect a single shot or propagate to other shots using a new toggle in Sequencer which helps you divide up your work. When Allow Sequencer Edits Only is enabled, any edits to properties will automatically create a track if it doesn't exist and/or a keyframe. These changes will be isolated to the particular shot you're working on and won't leak into others. When Allow Level Edits Only is enabled, you'll be editing default properties on objects. Properties that already have tracks in sequencer will be disabled in the details panel when you want to make global changes that affect all shots.

Minor Improvements

There are now Attenuation settings for audio sections attached to Actors.

You can specify attach and detach rules for attach sections.

We added cinematic options to the Level Sequence player.

We added Key Time to the Vector, Transform, Color key property editors.

There are now hotkeys to step to next/previous shot (Shift + Comma and Shift + Period).

Snap scrubbing to keys now allows scrubbing outside tolerance.

You can now activate realtime viewports when switching into Sequencer using a setting in Editor Preferences.

Bug Fixes

Bindings overhaul

Fix - Spawnable state/properties not getting saved/restored when despawned/respawned

Fix - Sequencer outliner added extra nodes when filtering

Fix - Load level sequence asynchronously

Fix - Autokey not saving the property value before creating a keyframe (needed to properly restore)

Sequencer World Outliner Integration

Sequencer is now more tightly-integrated with the World Outliner. The World Outliner shows which Level Sequences an Actor is bound in and displays Actors spawned by Sequencer so that you can access all Actors bound by Sequencer in one location.

Blending in Sequencer

It is now possible to blend sections in Sequencer together to create seamless transitions with ease. Blending is available for numeric properties in sequencer (2D/3D transforms, vectors, colors, floats etc).

All supported sections now gracefully blend together when overlapping to produce a single value that is applied to the object.

Overlapping sections on the same row will now automatically interpolate from one to the other over time where possible.

Animation tracks also automatically interpolate now

Many built-in easing functions are available as standard (linear, polynomial, exp ease in/out, etc). Alternatively, you can specify a curve asset or implement your own custom blend functions using the IMovieSceneEasingFunction interface (also available in BP).

Transform sections can now operate on any combination of channels without affecting the rest of the Transform (i.e., only Location and Rotation)

We als added new blend modes for blendable properties to allow for weighted absolute, relative and additive blending. This is particularly useful for animating properties relative to their starting value, or interpolating to/from absolute or relative space (i.e. interpolating into and out of a cutscene)

New: Composure Compositing Plugin (Beta)

Following The Human Race GDC 2017 demo in partnership with The Mill and General Motors, Unreal Engine 4.17 includes the new Composure engine plugin: a C++ and Blueprint framework designed to make complex real time compositing pipelines with ease.

A technical talk of this demo available on youtube was given at GDC, including details about the technology behind the Composure plugin in Unreal Engine 4 .

List of Composure features:

Binding mechanism between a Player Controller and a Texture Render Target 2D to replace the engine's default rendering pipeline by the project specific C++ or Blueprint implemented compositing pipeline output.

Post move settings and sequencer importer.

Parametric lens distortion: generate a UV displacement map for lens distortion and undistortion from the OpenCV standard camera calibration model .

. UVMap pass to distort textures according to a UV displacement map and UV matrices with custom material flexibility.

Stand-alone bloom pass to recreate compositing effects such as edge light wrap.

Engine tonemapper independent pass.

Color correction C++, Blueprint and Material API.

Chromatic aberration C++, Blueprint and Material API.

Blueprint helpers for simple compositing use cases.

Sample project.

List of engine features:

Experimental alpha channel support in the Engine's post processing chain: Circle DOF, TemporalAA, Motion Blur, and Bloom.

Projection matrix based motion blur support for scene captures for post move motion blur support in Composure.

Post process material domain and their alpha channel output support in the Blueprint canvas drawing API.

Showflag editing on scene capture in Blueprint editor.

New: Image Plate Actor and Sequencer Track (Experimental)

A new (experimental) Image Plate Actor enables display of frame-accurate image sequences in fullscreen when attached to a camera.

The accompanying track in Sequencer streams such images to any Texture property such as input of Blueprint or C++ implemented compositing pipeline, and is frame-accurate when playing back in Play In Editor or when creating burnouts. Both the Image Plate Actor and Sequencer track are part of the Image Plate plugin.

New: Global Shader Support For Plugins

You can now add new global shaders inside of Plugins and Projects! Taking advantage of changes made to the shader compiler and shader directory file structure, Plugins and Projects can provide their own Shaders. You can look at the LensDistortion plugin for a simple example (Engine/Plugins/Compositing/LensDistortion).

Notes:

Plugin and Project modules that have global shaders require use of the PostConfigInit loading phase.

loading phase. Shader support in Plugins and Projects is still experimental.

Plugins and Projects can include other plugins' USH files in the Public directory freely. It is the responsibility of the Plugin author to handle inter-plugin dependencies correctly.

USF files should only be located in the Private directory.

All calls to IMPLEMENT_SHADER_TYPE, should now include the full path of the USF shader file (e.g. "/Engine/Private/Foo.usf" or “/Plugin/FooBar/Private/MyComputeShader.usf”).

C++ Generated files should be mapped within the /Engine/Generated/ virtual directory.

Shaders/ directory requires at least a Private/ or Public/ directory. The Generated/ directory should not exist.

Shader Directory File Structure

The shader files have been divided in a USF and a new USH file extension. The USH files are used for shader header files that do not contain a shader entry point and that should only be included by other shader files, whereas USF files would be the only non includable files that have the shader entry points.

Additionally, the shader files have been split under Public and Private folders. Just like with the engine's source code, the public API should be placed in files under a Public folder, while the implementations are placed in the Private folder.

Note: The shader API can have breaking changes between major releases of the engine.

New: Dependencies between plugins

Plugins can now declare dependencies on other plugins that the engine will use to automatically enable and load additional plugins they depend on. Dependencies can be listed in a .uplugin using with the same syntax as .uproject files.

New: Bent Normal Maps and Reflection Occlusion

Bent normals are an additional piece of information that can come when calculating ambient occlusion. AO is the % of rays shot in a hemisphere around a shading point that don't hit geometry. In other words the amount of ambient light that won't be occluded. We can also find the average direction of ambient light that is not occluded. For best quality and to match UE4's assumptions both of these maps should be calculated using cosine distribution in the package of your choice. Use this map in the material using the Bent Normal output node.

With this information we can do multiple things to improve indirect lighting. Bent normals are used with AO to improve diffuse indirect and make it look closer to GI. The bent normal is used for indirect lighting instead of the normal. We add some extra magic to allow detail normals to not disappear but otherwise the concept is the same. The biggest impact it tends to have is to reduce light leaking.

We also use this information in a powerful but less traditional way, for reflection occlusion. AO is occlusion for diffuse indirect light. Reflection occlusion is occlusion for specular indirect light. This works by intersecting the specular lobe with the visible cone or a cone representing the unoccluded part of the hemisphere described by the bent normal as the cone axis and the AO amount as the cone angle. This can reduce specular light leaking significantly, especially when SSR data is not available.

Finally we've added a multi-bounce approximation for occlusion. Instead of AO or reflection occlusion shadowing the first bounce we use an approximation of what many bounces will result in. Bright materials get less dark and colored materials get more saturated.

AO Multi-bounce

New: Xbox One X Support

We have added initial support for developing games for Xbox One X!

Developing for Xbox One X does not require a separate build platform - compiling for Xbox One is sufficient and data cooked for Xbox One will also work on Xbox One X.

New: VR Spectator Screen Support for Oculus, Vive, and PSVR

Unreal Engine 4.17 brings Spectator Screen support to the Oculus and HTC Vive, and improves on the existing support for PSVR!

The Spectator Screen is the 'normal' output device connected to a VR device, usually a TV or a computer monitor. While one player uses the HMD, other people can observe or interact with the experience.

Spectator Screen view from GhostPaint showing the VR player at work. Video by Shane Caudle | GhostPaint.com

You can now draw any texture, including render targets or UI, to the Spectator Screen in addition to - or instead of - a view of what is being displayed in VR. A simple layout system is exposed to Blueprint. Most debug modes are now available on all platforms.

For more information on adding VR Spectator Screen support to your project, see the Virtual Reality Spectator Screen documentation.

New: ARKit Support (Experimental)

We're happy to announce that Unreal Engine 4.17 provides an early, experimental version of ARKit support for iOS! This plugin is based on the work by the team at Wingnut, which was shown off on-stage at Apple's WWDC press conference. It allows developers to play around with the new feature set before the official support arrives from Apple in iOS 11 later this year.

Please note that this support should be considered Experimental, and the API and interfaces will change.

New: Asset Management Framework Production Ready

The Asset Manager - first introduced in 4.16 as an Beta feature - now has Blueprint access and is ready for use in production! The Asset Manager is a global object that can be used to discover, load, and audit Maps and game-specific asset types in the editor or at runtime. It provides a framework to make it easier to create things like Quests, Weapons, or Heroes and load them on demand, and can also be used to set up cook and chunk rules when packaging and releasing your game. The Asset Manager tab in Project Settings can be used to set up the rules for your game:

Primary Asset Types that are scanned by the Asset Manager can be queried at runtime before they are loaded, and can then be asynchronously loaded on demand. To use the asset manager, call functions on the native UAssetManager class (which can be subclassed for your game), or call Blueprint functions in the Asset Manager category such as Async Load Primary Asset.

New: Asset Registry in Blueprints

The Asset Registry can now be used in Blueprints to quickly find information about assets!

New: Added Support for Async PhysX Cooking

Cooking of PhysX collision data can now be performed on a worker thread. This is useful if you are doing it at runtime. We have updated ProceduralMeshComponent to optionally make use of this feature. This allows us to cook multiple ProceduralMeshComponents in parallel and off the game thread, avoiding hitches at runtime.

New: Runtime PhysX Cooking Plugin with Mobile support

You can now turn runtime cooking of Physx collision data on and off via Plugin instead of an engine define/recompile on all platforms.

New: Physics optimizations

PhysX tasks are now batched together reducing overhead. This can be tuned with p.BatchPhysXTasksSize. Bigger batch sizes reduce per-task overhead at the cost of less parallelism. This tradeoff should be tuned based on other work done by your game.

New: Two Bone IK Improvements

You now have better control over joints controlled by Two Bone IK with the new 'AllowTwist' option that controls whether mid joints can twist. This can be especially useful for mechanical arm setups.

Allow Twist Disabled Allow Twist Enabled

We also fixed the 'Maintain Effector Relative Rotation' option, and added a new 'Enable Debug Draw' option, as show below:

New: Make Dynamic Additive Node for Animation Blueprints

A new Make Dynamic Additive node in Animation Blueprints takes a base and target Pose as inputs and creates the additive pose during runtime. This can be especially useful when working with live performances, live motion capture, or other situations where animation data is being passed to Unreal Engine at runtime. It can also enable you to use a single Animation Sequence asset as an override or as an additive, saving memory on disk at the expense of a small runtime cost.

New: Live Editing of Animation Blueprints (Experimental)

Animation Blueprints can now be live edited and recompiled while playing in editor, enabling much faster iteration times.

When choosing an Animation Blueprint instance to debug in the level, the Animation Blueprint Editor viewport is now 'connected' to that instance and displays a mirror of the instance's animation state.

Refactor of clothing paint tool framework to create a more extensible editor.

Changed clothing physics asset to reference instead of extract-once so it can be edited post-create with the clothing simulation correctly picking up the edits.

Clothing 'masks' support Masks are a level of indirection away from directly painting on the clothing vertex parameters. This allows multiple masks to be defined and swapped between during development while testing different configurations.

Reworked tools framework for cloth painter Added smooth clothing paint tool Added fill clothing paint tool Added clothing config edit panel to the clothing tab to avoid having to bounce back and forth from the 'Asset Details' tab.



New: Baking Pose When Removing Bones

You can now specify an Animated Pose to use for reskinning vertices in Skeletal Mesh LODs for which the original bones are removed, instead of weighting them to the closest Parent Bone.

New: Preview 'Additional Meshes' using CopyPose

In the Animation Tools, the 'Additional Meshes' feature for previewing modular meshes now uses the 'Copy Pose' node instead of 'MasterPose'. This means it can support meshes that do not share a Skeleton, and bones are copied by name, making it more flexible.

New: Folder Filters in Anim Asset Browser

The Animation Asset Browser can now filter its view based on a number of selected folders. The number of available filters is controlled by a setting in the Editor Preference.

New: Mesh Editor Materials and Sections Panel Improvements

The interface for editing Materials and Mesh Sections has been condensed to enable artists to be more productive when editing meshes. This change affects both the Static Mesh Editor and Skeletal Mesh Editor.

Material Slots 4.17 Material Slots 4.16

We also reduced scrolling by merging control of LODs into the same panel enabling artists to work on one LOD at a time and synchronising the edited LOD with the viewport LOD. This allows the user to always see the LOD that is being edited in the viewport.

New: Material Baking Improvements (Experimental)

We have added support for baking out Materials on StaticMesh instances. We also added support for baking out Materials on a Static Mesh or Skeletal Mesh Asset as an experimental feature.

Note: Baking Materials on Assets requires enabling the Asset Material Baking setting under Experimental in the Editor Preferences.

New: VR Mode Camera Previews

Selecting a camera in a scene, or an Actor that contains a camera like a character, will now give you an in-world preview of what that camera sees. You can pin this preview just like the desktop camera preview, and move the panel around the world.

New: Stereo Layers Unified Across Platforms

All VR platforms now support Stereo Layers out-of-the-box through UE4's default, emulated implementation!

You can now use Stereo Layers agnostically across any platform, without worrying about functional differences between platforms for base functionality. Manufacturers that expose layers as a core concept of their API should be able to replace portions of that implementation with their API-specific implementations using the same interface.

Layer Draw Order

In order to provide similar behavior for Stereo Layer ordering on all platforms, we've changed face locked layers to always render on top of other layer position types regardless of priority. As face locked layers are often used for game UI, this is usually what you want. For platforms that did support it, it is possible to revert to the old behavior by setting the vr.StereoLayers.bMixLayerPriorities to 1.

New: Direct Multiview Support for Daydream

Direct multiview can now be used on the Daydream platform. Direct multiview works with the Daydream compositor to remove a full screen copy, which improves performance and reduces the memory overhead of the feature.

New: Google Tango Plugin for UE4 (Experimental)

Unreal Engine 4.17 includes early experimental support for the Google Tango project on Android. The plugin supports six axis motion tracking, area learning, environment reconstruction, and other Google Tango features.

Note: this support should be considered Experimental, and the API and interfaces may change in subsequent versions of the Engine.

New: UMG / Slate Clipping 2.0

Slate has a new clipping system that properly supports complex layered clipping quads with arbitrary transforms. Additionally widgets can now individually opt into clipping their children by default most do not.

There were some necessary changes in behavior that come with this improvement, you can read more about them in this forum post .

New: Blueprint Compilation Manager

A new Blueprint Compilation Manager has been implemented which reduces Blueprint compilation on load time 40-50%! Some long standing compilation bugs have also been addressed, such as an incorrect warning that would appear when a Blueprint had cast nodes to child types.

Note: You can disable the new Compilation Manager in the Project Settings if it causes issues with an existing project.

New: Blueprint Property Accessors

Native member variables can now make use of UProperty markup to be exposed to Blueprints via UFunction accessors, even if the property had been previously exposed directly using BlueprintReadOnly or BlueprintReadWrite markup.

New: Orphan Pins

A new Orphan Pin feature has been added to help avoid mysterious content breakage as the result of pin removals!

Any time a pin that is in use has been removed from a node, instead of that pin quietly vanishing, breaking all connections, the pin will now be retained as an Orphan, and an error - if it is connected - or a warning - if it is an input pin with a non-default value - will be emitted.

New: Sobol Blueprint and Material Nodes

We have added several nodes to generate point locations using the Sobol quasi-random sequence.

The Sobol sequence can generate points with a large number of independent dimensions. The Random Sobol Float Blueprint nodes gives the value for a single dimension. These can be combined together to create 2D or 3D distributions.

The Random Sobol Cell 2D Blueprint node places 2D Sobol points in cells of a 2D grid. This allows control over density by placing a different number of points in each cell. The Sobol material node provides the same 2D point locations as the Random Sobol 2D Blueprint node with a fixed 256x256 cell grid. This example places a varying number of trees in each cell, with a material on the ground that shows the cells and draws a dot under the first tree placed in each cell.

The Random Sobol Cell 3D Blueprint node does the same for 3D points in a 3D grid. This example places four spheres in each cell inside the pyramid.

The Temporal Sobol material node uses a different 2D Sobol sequence at each pixel, cycling through a different set of points each frame. This can be useful for effects that are designed to blend across multiple frames with Temporal Antialiasing

1 sample per pixel, no TAA 4 samples per pixel, no TAA 4 samples per pixel, with TAA

New: Texture-based Importance Sampling Blueprint nodes

Importance sampling places points according to a given density function. We have added Blueprint nodes to allow flexible 2D placement based using a texture to drive the placement. The Make Importance Texture Blueprint node processes the texture for use, and the Importance Sample Blueprint node gives point locations driven by the provided density.

Here are four examples placing spheres according to the luminance of four different textures. The first varies smoothly from dense in the center to less dense on the outside. The second is uniform in the center with a region that is less dense along the edge. The third is totally uniform for points inside the hexagon. The fourth is dense in the white rings and less dense in the red rings.

Below, eight light sources are placed based on the red and white target texture. Source size and color is proportional to the local density.

The Android toolchain now supports NDK 14b with NDK 15 as experimental. Google Play Services was upgraded to 9.8.0 in this release along with the necessary Android support libraries.

Starting with this release Gradle is supported as an experimental build option. This is enabled per project in the Android Project Settings with the "Enable Gradle instead of Ant [Experimental]" checkbox. More information is available in this forum post: https://forums.unrealengine.com/showthread.php?150315-Gradle-support-in-UE-4-17

Please let us know of any issues encountered with Gradle in this release; we intend to remove Ant support as it is no longer supported by Google.

New: Mobile executable size reduction on iOS and Android

For Android we have enabled the -ICF flag for android shipping builds. This saves around 5 MB from the Engine's .so size, changing from around 80 MB to approximately 75 MB. These are uncompressed sizes; when compressed inside the .apk file the difference is 24.8 MB vs 23.6 MB

For iOS we now disable exceptions for ObjectiveC by default, saving around 6.5 MB from the executable size. Optimized shipping builds change from 52 MB to 46 MB.14

We have also added the option to disable forced code inlining for iOS builds. This works best when combined with optimize for size, and can yield additional savings of around 2.5 MB, meaning an optimized for size shipping build changes from 45 MB to 37 MB.

Further mobile executable size reductions are coming in 4.18.

New: Mobile Separate Translucency

Translucent objects marked as "Mobile Separate Translucency" will be rendered separately after Bloom and Depth Of Field. This option can be found in Translucency section of Material Editor.

Separate translucency requires MobileHDR option enabled and MSAA disabled, otherwise it will be rendered as normal translucency.

New: sRGB on High-end Android

Android applications built with OpenGL ES3.1 or Vulkan will now use native sRGB sampling instead of emulating it. You can expect better perceptual color resolution for textures on devices.

New: Android Ultra-widescreen Aspect Ratio Support

Unreal Engine 4.17 adds supports ultra-wide aspect ratios, to support widescreen devices such as the Samsung Galaxy S8.

By default maximum supported screen aspect ratio is 2.1 (width / height). Android will automatically letterbox application on devices with bigger aspect ratio. Default aspect ratio can be changed in Android section of Project Settings.

New: Static Analysis with PVS-Studio

UE4 now includes support for the PVS-Studio static analyzer (available separately). To enable static analysis with PVS-Studio, append -StaticAnalyzer=PVSStudio to the UnrealBuildTool command line.

For more information about PVS-Studio, see the blog post .

New: Added Unreal Audio support on several new platforms (Beta)

The new Unreal Audio system now has support on Android, which includes improved performance and fixes to stuttering. We have also added support for PlayStation 4, Xbox One, iOS, and Mac OS. Please remember Unreal Audio is still in beta, and this may contain bugs, or may change in future releases.

New: Audio Streaming No Longer Experimental

Audio streaming support in Unreal Engine is no longer 'experimental', and contains a number of fixes in this release.

Release Notes

AI

Fix an error on shutdown when the CDO of UAIPerceptionComponent tries to clean up (as it was never registered in the first place)

Fixed UCrowdFollowingComponent::UpdateCachedDirections crashing when CharacterMovement is not set

Behavior Tree

Fixed missing decorator deactivation notifies: placed on parallel task or during StopTree call.

Changed UBTFunctionLibrary exposed functions to log a runtime error instead of check/ensure if passed a null world context object

Improved BT editor's robustness against changes to user-created enum classes.

General

Fixed a bug in EQS query running that caused EQS Manager to always use up the whole time budget for the frame if all performed queries happened to finish.

Fixed gameplay task: TimeLimitedExecution being removed during garbage collection.

Navigation

Added continuous goal tracking mode to AI Move gameplay task.

Added a way to override default crowd manager class.

Fixed: Issues with "ModifiersOnly" NavMesh streaming

Fixed newly created navigation areas not having any effect in navigation modifiers until editor restart.

Fixed navlink component's local transform not being used in exported navigation data.

Fixed navmesh tile connectivity for polys with more than 4 neighbors.

Fixed navigation area modifiers created from shape components: sphere and capsule.

Fixed navigation data's flag: bForceRebuildOnLoad being ignored when navmesh auto rebuilds were disabled.

Fixed AI getting stuck during path following when path is constantly invalidated by very frequent navmesh updates.

Changed hardcoded debug flags of crowd manager to console variables: ai.crowd.*

Fixed memory leak in navmesh generators: monotone region partitioning code.

Fixed navmesh generator ignoring low area modifiers on subsequent rebuilds.

Made NavigationSystem's AbstractNavData instance never serialize again. The change will also clear out all the existing instances on load.

Fixed a bug causing changes done to StaticMesh's navigation properties serialize in an unpredictable fashion.

Fixed NavModifierVolume not responding to editor-time changes to its properties.

Added a spiced up, community-suggested, working solution to patching up dynamic navmesh after world offset.

Animation

FCSPose ::ConvertToLocalPoses Allow root bone to be modified. Minor optimization: Take out root bone check from loop.

Added new BlendBoneByChannel AnimNode to blend two poses, per bone, per channel. For example blend only translation from Pelvis but leave rotation untouched.

Delay clearing of MontageInstances and triggering 'OnAllMontageInstancesEnded' until all Montage Events have been dispatched.

Morphtarget tolerance weight can be configurable r.MorphTarget.WeightThreshold

Prevent creating invalid 'VBCompactPoseData', resulting in crashes in Animation Modifiers. (Fix for licensee crash).

Minor optimization to FAnimationRuntime::CreateMaskWeights. Since Parents are before Children, use that to speed up Mask Weight creation.

Batch Animation Compression fixes. - Fixed incorrect 'MemorySavingsFromPrevious' resulting in picking suboptimal compressors. - Fixed uncompressed size calculation not taking into account scale component. - Fixed animations with 'bDoNotOverrideCompression' causing crashes because they were not recompressed. - Animation with 'bDoNotOverrideCompression' that use the automatic compressions are not skipped by the automatic batch compression. - Added 'CompressCommandletVersion' to DDC key, so we can force recompression on all animations easily.

Bug Fix: Fixed additive pose blending on pose asset Fixed on crash with pose asset retargeting

Fix various crashes when calling methods in USkeletalMeshSocket with no component specified

Animation Assets

Added mesh space additive support to Blendspace1D

Added ability to set montage section time directly via right click menu.

Added an event in USkeletalMeshComponent when the animation instance is initialized

UAnimMontages now get one slot by default on construction.

Removed UID from smart name serialization to help with non-deterministic animation cooking

Fixes for deterministic cooking of animations Make sure curve names have been validated before building compressed data Remove "Sort by UID" code.

Fixed pose watched bones not drawing when the anim Blueprint debug object != the preview instance.

Fixed an issue related to Blend-spaces using individual sample rates causing issues with Marker Syncing

Fixed compression ratio for baked additive animations by storing the size of the raw data that was compressed in DDC.

Animation Blueprint

Constraint AnimNode Animation Blueprints can now be live edited & recompiled while running on a PIE/SIE instance. When choosing an Animation Blueprint to debug in the level, the viewport is now 'connected' to that instance & displays a mirror of the instance's animation state.

Add MakeDynamicAdditive node to anim Blueprints. Takes a base and target pose as inputs and creates the additive pose during evaluation.

Added source direction to aim offset lookat node instead of assuming X-Axis as lookat direction.

Created FBoneSocketTarget that support bone and socket The future plan is this will have UI with only one tree users can pick whether bone or socket Internally it cached related bone, relative transform, and calculate correct target transform LookAt node uses this, and IK nodes will use this in the future release

AnimBlueprint supports BeginPlay event Before Initialize was called during Registration, which can be too early. Use BeginPlay for any ingame initialization.

Allow curve to be disabled when evaluating animations by calling SetDisableAnimCurves

Added TransitionFollower as a sync group role. Same blend in behaviour as TransitionLeader but makes node a follower once fully blended in.

Added hooks in AnimBlueprintCompiler to perform Post Compile Validation in an AnimInstance subclass. Also added virtual function to opt in for warnings when nodes are not using Fast Path.

If an AnimBP has warnings or errors, force opening Compiler Results Window, and recompile to display results.

Two Bone IK Added bAllowTwist option on Two Bone IK for mid or low joints to optionally not twist : useful for mechanical arm. Default is bAllowTwist on. Fixed bMaintainEffectorRelRot was hidden unless you select bone as effect target bEnableDebugDraw : You can enable debug draw

Added root motion support for animation sub-instances

Fixed AnimBlueprint function graphs marked as 'const' to treat 'self' as read-only when compiling.

Fixed bug where "object" to "weak object" copies would fail to properly copy the object using the animation Blueprint fast path.

Nodes can now be edited using multi-selection in Animation Blueprints

Fixed crash loading anim BPs with split pins where we incorrectly assumed the outer graph's type

Moved USkeleton.ReferenceSkeleton building from PostLoad to Serialize to fix missing virtual bone warning when opening anim Blueprints.

Modify bone node now disallows editing of pin values in the viewport if the pin is linked

Prevented propagation of crossfade settings to non-shared animation state machine transitions

Allowed blend by int and enum to appear in the context menu when dragging off a pose pin in animation Blueprints

Prevented connection of wildcard & pose links in animation Blueprints (except in the case of reroute nodes)

Fix 'error' icon when dragging anim assets over the animation graph

Fixed an issue where Marker Syncing was not working correctly when a Blendspace Player was given a Start Position input value inside of an AnimBP

Fixed subinstance bridge parameters appearing in the variable list in an anim Blueprint using subinstances with expose pins

Fixed bugs with PoseDriver not supporting manually-added targets.

Fixed post process anim graphs producing broken poses when LODs had removed bones.

Fixed bug where montages did not indicate they cannot be placed in animation graphs.

Fix crash when deleting a transition rule while it's graph is open in an orphan window.

General

Added in-game bone rendering feature. Use 'Show Bones' in the console or the Show -> Developer menu to display the bones of all skeletal meshes.

Added getters to alpha blend for remaining blend time and begin value, and made Update return any overshoot if applicable.

Moved Epic internal project's animation caching system into the engine. This helps with implementing natively-optimized animation state machines.

Fixed crash getting a skinned vertex position when using a master pose component

Fixed Update not being called on post process animation instances when the main anim instance does not do a parallel update.

Bug Fix: AnimNode API now specifies _AnyThread postfix on functions that run on non-game threads Changed FAnimNode_Base::RootInitialize to FAnimNode_Base::OnInitializeAnimInstance, supplying the anim instance as well as the proxy.

UAnimNotifyState-based Blueprints now start off with a ReceivedNotify_Tick function

Exposed some blend space parameters to code that were already available to Blueprints.

Fixed transition getters not working with negative playrates

Moved AnimationInput and AnimationOutput metadata into the ControlRig plugin

Fixed characters not animating on servers when their movement component was set to not replicate movement

Fixed crash when spawning a skeletal mesh-containing actor from an existing template actor.

Import/Export

Added support for importing multiple Texture coordinate sets from Alembic files

Default skeleton to something useful when importing FBX. We default to the first skeleton we find in the target directory

Fixed an issue which prevented re-importing Animation Sequences imported from an Alembic file

Pull request: Allow to hide the Alembic import wizard via the bShowOption property

Sound waves now appear in the content browser after import using the facial anim bulk importer

When reimporting animations, we now properly update existing animations in the scene

Fixed undeletable folders when importing facial animation audio

Skeletal Mesh

We don't import any empty morphtarget anymore. Those empty morphtargets will be also removed on loading.

Fixed order of default values in FAnimUpdateRateParameters.BaseVisibileDistanceFactorThesholds

Prevent FRenderStateRecreator from recreating render state when component is unregistered.

Fixed Crash with Morphtarget valid indices mismatching with render resource data

Fix ensures caused by FSkeletalMeshMerge not properly merging UVChannelData.

Tools

New: Additional Mesh now uses Copy Pose instead of Master Pose Component This change also allows to create custom asset that defines the preview You can create class that implement UInterface and derive from DataAsset This asset can be created in editor when needed You can pick these assets in the "Additional Mesh Section" to preview multiple meshes together. Example is to create customization options in that asset, and returns the list of meshes together, it will use copy pose to follow the base preview mesh. You still need preview mesh which is animate based on the system, but these ADDITIONAL MESHES will follow the preview mesh transform

Add anim list to details panel for BlendSpace

Improved Bake Pose feature to also function without Simplygon

Added folder filters to anim asset browser

Made animation notify tracks renamable.

Moved "New Sync Marker" menu entry out of new notify sub menu and into the main notify track context menu

Fixed an issue where previewing blend spaces did not work if the grid was not focused

Updated the SkeletalMesh editor to support focusing on individual sections of a mesh when the focus key is pressed.

Added vertex color show menu option for skeletal meshes

This is an elaborated preview customization option If you have DataAsset that implements IPreviewCollectionInterface, with a function, virtual void GetPreviewSkeletalMeshes(TArray & OutList) const , it will allow you to pick those assets in the Additional Mesh section Make sure to turn on bAllowPreviewMeshCollectionsToSelectFromDifferentSkeletons This creates each component and allow them to copy pose from base mesh This additional meshes don't have to share same skeleton

Improved the details customization of alpha scale bias.

Audio attenuation is now applied in animation editors.

When changing the preview mesh in an animation asset, the change is now temporary and needs to be committed if it needs to be saved

Selection of 'current' asset now opens that asset in the animation asset shortcut bar (top-right toolbar).

Fixed crash right-clicking multiple asset types that include control rig sequences

We now clamp cloth paint values appropriately, disallowing negative paint values

Bug Fix: Added inline editors for time and frame index to montage section/notify menu Expanded montage section struct in details panel so it doesn't appear collapsed first time

Fixed montage segment play rate not affecting the preview viewport. Fixed preview viewport not obeying start/end times of segment if the scrub bar UI is offscreen.

Fixed clothing section combo boxes in skeletal mesh editor not correctly updating when using section selection to create new clothing assets.

Fixed issue where undoing a curve renames in the Anim Curves tab would cause duplicate of the specific curve in the list

Fixed issue where undoing rename of a curve in the Animation Editor would cause all curves to disappear

Fixed 'reset to default' button not showing up in customized properties.

Fixed a crash caused by reloading a referenced Skeleton asset while having the Animation Editor open

Fixed crash when creating a new animation from ref pose on a skeleton that has virtual bones

Fixed editor crash when performing drag operations in the animation notify track window

Fixed invalid check when creating an animation from current pose in the animation editor.

Fixed dangling references to animation preview scene, avoiding crash when undoing when skeletal mesh is re-opened

Fixed stretched icon in preview scene settings

Audio

Removing audio streaming as an experimental feature in the engine.

New: Fixed packaging compilation errors. Consolidated baking into a single window. Users can select multiple sources to bake at once. Added support for transmission. Phonon Probe Volumes are set to NoCollide collision profile by default. Phonon Probe Volumes may be arbitrarily rotated, scaled, and translated. Added Phonon Scene actor for scene export - this removes need for external .phononscene file and simplifies packaging. Added support for multichannel Fixed buffer size related crashes. Added support for Win32.

Audio mixer improvements for android.

Updates and improvements to Steam Audio.

Adding ability to modify Low Pass Filter frequency with audio components.

Deleting unused velocity variable in OpenAL implementation.

Added SoundClassObject to the asset registry searchable data for sound assets, to make it easier to track down volume/muting bugs when assets have the wrong sound class set (Note: Assets will need to be resaved before this data will show up for unloaded assets (loaded assets should work immediately))

No longer forcing pending decodes to ensure completed on shutdown in audio mixer.

Changed to using tasks from task manager vs using Async.h futures in audio mixer decodes.

Added new, combined macOS/iOS/tvOS back-end for new audio engine.

Hiding streaming options (and import options while i'm at it) from media sound waves.

Fix for streaming sound wave in audio mixer during shutdown.

Fixed packaging a project for Windows with the Steam Audio plugin enabled (Contributed by projectgheist via Github pull request)

Fixed crash that could occur while shutting down a streaming SoundSource

Fix for a number of threading issue in audio streaming manager.

Fix crash when duplicating a sound wave asset in content browser due to thumbnail rendering.

Fixed crash that occured when trying to launch the engine with the new Unreal Audio engine while the current audio playback device is disabled on Windows.

Fix for a crash in parallel source processing in audio mixer.

Several optimizations to source manager in audio mixer.

No longer loading XAudio2 module in server builds.

Properly deleting AudioClockVoice in XAudio2 backend.

Crash fix for audio on android.

Fix for crash when an audio streaming sound wave doesn't have serialized stream chunks.

Crash fix for when a map attempts to cook a streaming sound file while targeting Linux.

Automation

Automation - Forcing textures to load before taking screenshot, so that the scene gets another opportunity to render before we render with Slate.

Automation - Fixing a bug with the screenshot comparison tool not replacing (removing) the old screenshot data.

PR #3650: Changed TestNull to accept const pointers. (Contributed by e-agaubatz)

Automation - The system now waits for the asset registry to finish loading assets before running tests.

Automation - Fixing some delay screenshot code in the Screenshot Functional Test Actor that was preventing the delay from having any effect.

Blueprints

Native member variables can now make use of uproperty markup to be exposed to Blueprints via ufunction accessors even if the property had been previously exposed directly using BlueprintReadOnly or BlueprintReadWrite markup.

Added "Importance Texture" Blueprint nodes to place objects according to a density texture.

To help avoid mysterious content breakage as the result of pin removals a new Orphan Pin feature has been added. Any time a pin that is in use has been removed from a node, instead of that pin quietly vanishing, breaking all connections, the pin will now be retained as an Orphan, and an error (if it is connected) or a warning (if it is an input pin with a non-default value) will be emitted.

Added new "Sobol" Blueprint nodes for placing objects in 2D or 3D according to the Sobol distribution.

Find References can now be used which right clicking on components in the component tree.

The Resolve Asset ID node is now called Resolve Soft Reference and can now also be used to convert from normal hard references to Soft References.Add == and IsValid for Soft Reference and Soft Class Reference

Blueprints: Allow non-readonly variables from the My Blueprints panel to be dropped onto exec pins, which creates a variable set node for them

Added support for drag-dropping a function from My Blueprints directly onto a pin, which performs the same action as if they had been picked from the menu after dragging off of that pin

Added support for drag-dropping from the palette onto a pin, which behaves the same as if you'd dragged off of the pin and picked the palette entry from the context menu (wiring the two nodes together if possible)

Added a search bar to the components tree in Blueprints.

Changing default values for functions/macros will correctly update any existing calls, if the parameters were still set to their initial default value. If an instance had already been broken by a resave, it can be fixed by using the new "Reset to default value" option when right clicking a pin

Change Blueprint function/macro inputs to use the Pin Default Value UI instead of a default text field. This allows setting Enum default values correctly. Types that do not have Pin UI will not be available to modify, previously you could set them but they would not work properly.

Improved Input BP library node display names

The intermediate plugin generated by Blueprint nativization is now easily included in your Visual Studio project - making it easier to debug.

Graph pin container type now represented by an enumeration (EPinContainerType) rather than 3 "independent" booleans.

Improved exposure of input settings and binding to Blueprint.

Exposed static mesh material accessors to Blueprints

Expose FVector2D / FVector2D to Blueprints

Native properties that are not exposed to Blueprints will now emit a warning when used as a Get in a Blueprint. In a future release this will be upgraded to an error.Properties defined in a Blueprint but marked private will now provide a warning when used in an invalid context. In a future release this will be upgraded to an error.

Renamed UEdGraph::CreateBlankNode to CreateIntermediateNode Added bIsIntermediate flag to UEdGraphNode which is set via CreateIntermediateNode

When setting the type of an Object variable in Blueprints, renamed AssetID to SoftObjectReference and AssetClassId to SoftClassReference. The native names are still AssetPtr and AssetSubClassOf but they will change in 4.18 to better match the Blueprint names

Non-Blueprint type structs can no longer be made/broken Non-Blueprint visible properties in structs will no longer have pins created for them

Added "sine" as a search keyword to the DegSin and DegAsin UFunctions, for consistency with their radian-based counterparts Sin and Asin.

Added comments to AppendTags and AppendMatchingTags so it's easier to find the functions if you're looking for functions based on set theory (Union, Intersection, etc.).

Improved the details panel customization for optional pin nodes like Struct Member Get/Set The category, raw name, and tooltip of the property are searchable / filterable The tooltip of the underlying property is now displayed when hovering over the property name

Added new config options for execution wire thickness when not debugging (DefaultExecutionWireThickness) and data wire thicknesses (DefaultDataWireThickness) to the Graph Editor Settings page

Display instead of nothing for Pins with blank display name in the Blueprint compiler log.

During Blueprint compilation messages can now be stored off in the compiler log during early parts of validation and then committed to the log later (for example once pruning is completed).

FKismetCompilerContext now has OnPreCompile and OnPostCompile delegates to allow external systems to get notified and react.

Propagates scene capture engine showflag changes fromBlueprint editor to the Blueprint instances.

Move UAnimGraphNode_Base::PreloadRequiredAssets up to K2Node, make sure nodes get a chance to preload data before compilation manager compiles newly loaded Blueprints

Add a K2Node_AddPinInterface to generalize the interface that K2Nodes implement to interact with SGraphNodeK2Sequence so it can be more generally used

Fixed loss of default values in a Blueprint's subobjects when the parent Blueprint was also being regenerated

Assets that are only referenced by pins inside active Blueprints will now correctly be garbage collected. This means that if you use LoadAsset to load something and do not store it for future usage, it will no longer stay in memory forever until the loading Blueprint is destroyed.

Fix several issues where Blueprint Local Variable values were being reset to default incorrectly. They should now only reset when the type is changed.

LoadAssetClass nodes in macros now cook deterministically

Fix several issues with Select Blueprint nodes not properly updating when changing pin connections or defaults

Moved Blueprint-nativized User-Defined Struct implementations into its own generated .cpp file in order to avoid circular header file dependencies at C++ compile time.

Client only Blueprint data is correctly loaded when running the editor with the -server flag

Soft Reference Blueprint pins (previously Asset ID/Class ID) now correctly store their references as soft pointers internally. This prevents editor builds from needing to hard load assets that are only softly referenced.

Fix several issues with Animation pin default values. This stops "phantom" references to old default values existing when pins are connected to runtime variables

Nativizing a Blueprint class with a nativized Data-Only Blueprint class dependency will no longer lead to a C++ compile error at cook/nativization time.

Nativizing a Blueprint class with a non-nativized Blueprint class subobject dependency will no longer lead to a crash at load time.

Fix many bugs with Blueprint pin default values, and add "Reset to Default Value" option to pin context menu

When dragging multiple assets into the components tab create them as sibling components, not nested in a child/parent relationship.

Fix Blueprint string-to-text functions to properly be culturally invariant, if you want translated text you should be using Text variables directly. Also updated the transform-to-text output to match the comment

Maps and set pins created by splitting a struct pin now display correctly.

Suppress array "Get" node fixup notifications on load when the Blueprint Compilation Manager is enabled.

Collapsed graphs containing a local variable node will no longer cause a Blueprint compile error when the parent graph is renamed.

Search box is now correctly focused when expanding the map value type.

Subobjects of components in Blueprint classes now consistently get PostLoad called on them.

Fixed a bug with nativized Blueprints that could produce a compiler error when overriding an interface function in the Blueprint.

The Blueprint Diff tool now properly reports component type changes.

Fixed failed validation of Bitmask Enum types when serializing Make Bitmask Literal nodes.

Fix invalid custom type selections on member fields in the User-Defined Structure Editor after a reload.

Fixed a crash that could occur when using the CookOnTheFly server with Blueprints that share struct dependencies.

Fixed a bug that could cause stale Blueprint script to be ran for instances in hidden sub-levels.

Fixed a bug that caused a Blueprint compile error when using enum literals with maps or sets.

Fixed a crash that could occur when a level Blueprint was auto-saved.

Fixed a bug that prevented you from having local Blueprint struct variables that contained a map or set.

Fixed minor log spam when compiling a Blueprint function with a local TSet/TMap variable.

Fixed broken pin wires after an Expand Node operation.

Blueprint Diffing: Pushed some node diffing code down from UAIGraphNode into UEdGraphNode so nodes with details panel properties will diff correctly (e.g., various animation nodes and BP switch nodes)

Fix a bug where a Blueprint struct could lose its defaults after restarting the editor.

Blueprints loaded as the result of a 'Diff' operation are now properly compiled on load - just as if they were loaded via the content browser

Fixed a blocking error that could occur when building a project with Blueprint nativization. If no Blueprints were nativized, we don't try to build the generated plugin.

Fixed a bug that allowed Blueprint users to mark Object variables as config properties (could later cause an error in Blueprint nativization).

Fixed a bug that could cause a nativization compiler error when using a class array in Blueprints that was originally defined as an array of TSubclassOf pointers.

Fix it so the Load Asset node can be correctly used with the pin drop down instead of forcing you to connect a pin. It also now has a pass through execution pin like other async tasks that can take a long time

Fix it so Local Blueprint Variables correctly handle when referenced assets are renamed

Fixed source of occasional editor crashes that could occur in the Blueprint editor while rebuilding the context menu from the action registry.

Fixed a C++ compilation failure during packaging that would result when nativizing a Blueprint that overrides a native function with a 'TSubclassOf' parameter or return value.

LatentGameplayTask nodes can now have default values for complex types (e.g. LinearColor)

Fixed read-only context-menu palette items showing up as grayed out

Blueprint compiler log now correctly appears on Blueprint editor startup when the log contains warnings or errors. There is no need to recompile to see errors any more.

Fixed potential data loss on load for circularly dependent Blueprints with more than two levels of inheritance (e.g. values would revert to a Blueprint's Parent's Parent values, instead of matching the Blueprint's immediate Parent)

Fixed an Event-Driven Loader assertion on load in a nativized build with one or more Actor subobjects instanced via the EditInlineNew UI in the Blueprint class defaults property editor.

Changed the warning for calling editor-only UFunction to an error during Blueprint compilation

Removed an unnecessary ensure() after pasting an Event node.

Fixing name of pins for AimOffset nodes set by pin.

Checks connected pin that AimOffsets use in Blueprints for their name and value.

Fixed a crash UKismetRenderingLibrary::DrawMaterialToRenderTarget caused by passing a local FName to a lambda by reference instead of by value. Lambda was executed after the local variable was deleted causing a crash.

The 'const' function flag will now propagate from an Interface Blueprint to all implementing Blueprint classes.

Fix it so modifying the Game Mode Blueprint from project settings will now work properly even without manually compiling or restarting the editor

Don't show default value or pass by reference for exec pins in macro input properties.

After undo/redo reference pins correctly visualize with diamond pin shape instead of circle.

Fixed crashes caused by undo/redo of member removal in a user defined struct when a Blueprint node has that struct pin split.

Fix potential crash with the String Mid Blueprint function

Fixed some bugs where a newly added item would fail show up in the "My Blueprints" tree if there was a filter active (e.g., when promoting a variable) Centralized the logic for clearing the filter so it happens when we try and fail to select the item, rather than ad hoc in various other places Made it only clear the filter if necessary, rather than (almost) always clearing it when adding an item

Fixed a regression where the duration of compilation message was not being printed to the output log

Fixed crash that could occur when changing a structure used in a Blueprint Map variable (e.g. as a Key or Value)

Fixed bug where child Blueprint with inherited child actor component could end up with child actor class being null but child actor template being non-null.

Fixed a bug where error messages would compound when a node was reconstructedFixed a bug where signature checking in event nodes didn't handle split pins correctly, causing a bogus message if any pins were split Fixed a bug where UK2Node_Event::IsFunctionEntryCompatible wasn't consistently looking at the delegate pin name

Fix rare crash in RefreshStandAloneDefaultsEditor when the Blueprint Editor is opened while Blueprint had errors in it

Prevent issues with renaming event dispatchers to contain periods where they could no longer be renamed or deleted (note: periods will not be allowed in new names in the future)

Fixed a reported crash when pasting nodes between unrelated Blueprint graphs.

Fixed a crash when launching a packaged build that includes a nativized Blueprint instance with a ChildActorComponent instanced via an AddComponent node.

Fixed crash when multi-editing actor Blueprints.

Expansion of a MakeArray node will no longer add spurious AddInputPin transactions to the undo buffer.Fix inability to undo/redo pin additions to sequence node

Added validation when renaming variables, functions, components, multicast delegates, etc... to prevent names from containing some unacceptable characters This validation only kicks in when trying to rename an item, so bad names in existing content are 'grandfathered in' These bad names can cause bugs when working with content that contains these characters (e.g., names that contain a period cannot be found via FindObject Currently only . is banned, but eventually we may expand it to include all of INVALID_OBJECTNAME_CHARACTERS

Fix crash undoing copy of Blueprint nodes in a level script containing a literal actor reference to an actor in another map.

Fixed undo for "Index" pin type changes on Blueprint graph nodes.

Blueprint calls to Timespan From functions will no longer crash when passed very large values.

Fix crash when using gameplay tag as key for a Blueprint map variable.

Fix crash when undoing a default subobject class change in a Blueprint

Fix Blueprint nodes loaded after a change to a user defined enum not updating to reflect undo/redo of those changes.

We now prevent "Construct Object From Class" Blueprint nodes from compiling if the selected class does not include 'BlueprintType' in its inheritance hierarchy. This was the originally-intended behavior.

Fixed a potential crash when changing a ChildActor component's 'ChildActorClass' default value on a Blueprint that also sets 'ChildActorClass' via a "Set Child Actor Class" function call node in the Construction Script.

Fix crash when calling Blueprint functions that have UStruct parameters with WITH_EDITORONLY_DATA members

Fixed issue where the asset drag-drop tooltip always showed a no/invalid icon when dragging over the graph.

Fixed a Blueprint nativization issue in which project packaging would fail to build the staged EXE with a nativized Blueprint class containing a UInterfaceProperty.

Undo of Copy Signature action for event dispatchers now works correctly.

Connecting a set or map to an expose on spawn pin no longer results in a compile error.

Fix crash when changing the Value type of a Map property

Fixed crash calling OnRemoveExecutionPin on an invalid pin.

Fixed infinite loop/stack crash that would occur if a series of reroute nodes were formed in to a loop.

No longer able to remove a member of a struct's split pin on Make Array or Commutative Binary Operator Nodes.

Fix issues where removing the wrong pin from a Switch Blueprint node could corrupt data

Switch node default pin once again correctly appears as an exec output.

Switch string nodes are now validated that all cases are unique.

Fix Switch On Gameplay Tag Container node to work properly

Core

Delete FixupRedirects commandlet, replace with -FixupRedirects/FixupRedirectors option on the ResavePackages commandlet. This new method is much faster than the old commandlet as it uses the asset registry vs loading all packages.

AssetPtr and AssetSubclassOf can now be used with config Properties

Fix several issues with cooking StringAssetReferences and TAssetPtrs. FStringAssetReferenceSerializationScope can be used to override rather those references should be cooked or are editor only.

Changed UClass::ClassFlags to be of type EClassFlags for improved type safety

Marked TNumericLimits as constexpr so they can be used in static asserts

Several improvements to FAssetData and AssetRegistry memory usage, memory should be reduced by several MB in large cooked games: FAssetData::TagsAndValues was converted to use the more memory efficient TSortedMap structure, and will not be created if there are no tags Added bFilterAssetDataWithNoTags option to the [AssetRegistry] ini section, if set it will reduce cooked memory usage by not saving AssetData that has no tags defined Asset Registry memory usage is now included in the MemReport output

Add Algo::BinarySearch, LowerBound, and UpperBound. These are setup to allow binary searching a presorted array, and allow for specifying projection and sort predicates. Add TSortedMap, which is a map data structure that has the same API as TMap, but is backed by a sorted array. It uses half the memory but will be slow for large maps and it has no UProperty support Add FName::CompareIndexes so a SortedMap with FNames can be used without doing very slow string compares, and FNameSortIndexes predicate to sort by it

Added both a black and whitelist to plugin descriptor files that lets you exclude a plugin from certain targets (client, server, etc.).

Added a feature where plugins included in a project through the .uproject's 'AdditionalPluginDirectories' list automatically get included in the generated code project (for Visual Studio, etc.).

Specifying properties as BlueprintReadWrite or BlueprintReadOnly in a non-BlueprintType is now an Unreal Header Tool error.

Unreal Header Tool will now report multiple less critical errors in a single compile rather than aborting on the first error.

Removing PPF_Localized as it's an old UE3-ism that's no longer tested anywhere.

PR #3226 - Updated some code comments to better describe the usage of the log category definition macros

PR #3197: Improved log message formatting (Contributed by projectgheist)

Add AES and RSA encryption keys to the list of config fields that get stripped from ini files when staging When creating a pak file, do a filtered copy of all ini files to a temp directory so that all confidential fields can be stripped. Equivalent behaviour to staging a loose file distribution

Added C++14 operator delete overloads with size.

Rewrote ARRAY_COUNT to allow it to work with zero-sized arrays in Clang.

Made UFunction flags viewable in the debugger.

Changed .generated.cpp files to .gen.cpp files to give shorter file paths.

When verbose cluster logging is enabled and new object is added to an already existing cluster, the entire cluster will be dumped to log.

Include project name in the UBT error message which appears when a plugin is missing

Added ranged-based for loop support to TChunkedArray, which is more optimal than indexed iteration.

Add prestream capability to allow us to preload always loaded sublevels. Only turned on for Shootergame.

Added helper functions to Garbage Collector API to dissolve specific GC clusters

Fixed Algo::Sort() for C arrays. Deprecated size+count versions of Algo::IsSorted(). Added Algo::IsSortedBy(). Added Algo::FindBy().

Updated apple platform atomics with a new clang version which is intended to be shared among all clang platforms.

Simplified and reworked lock free lists and the task graph bringing all platforms under the same scheme.

Changed UnrealHeaderTool to generate code per-header instead of per-module, in order to better take advantage of IWYU.

Optimized TBitArray::RemoveAt() in the case when all removed bits are at the end of the array. Optimized TBitArray::RemoveAtSwap(). Added a check for negative counts passed to TBitArray::RemoveAt() and TBitArray::RemoveAtSwap().

Moved InitPropertiesFromCustomList to UBlueprintGeneratedClass and made it thread safe

PR #2252: Increase linker reporting for failed imports (Contributed by FineRedMist)

Added more descriptive error text to DetachLinker error check (Pull Request @3167 by rooneym)

Removed unused AGRESSIVE_ARRAY_FORCEINLINE macro.

Removed unused CLASS_PointersDefaultToAutoWeak CLASS_PointersDefaultToWeak class flags.

Added comments to DestructItem and DestructItems to clarify that they do not perform dynamic dispatch.

Simple threaded CSV Profiler To capture a CSV: - On the commandline, add -csvCaptureFrames=N to capture N frames from startup - On the console, use csvprofile start, csvprofile stop or csvprofile frames=N to capture a fixed number of frames - Instrument with CSV_SCOPED_STAT(statname), CSV_CUSTOM_STAT(statname,value). CSV capture is enabled in all builds except shipping. This change does not include any instrumentation of code, although basic unit stats are output.

Implements FDebug::DumpStackTraceToLog() printf debugging utility.

Iterative cooking (enabled via passing -iterate to cook commandlet or enabling "Iterative cooking for builds launched from the editor") now uses the Asset Registry and should be significantly faster than before. The old timestamp and file hash method have been removed. Expose bIgnoreIniSettingsOutOfDateForIteration and bIgnoreScriptPackagesOutOfDateForIteration in cooker settings, affects rather to listen to ini/script changes when doing iterative cooking

UnrealHeaderTool: Improved the warning generated when missing Category= on a function or property declared in an engine module, and centralized the logic that determines if the module is engine or game

Modules - The module manager no longer returns sharedptrs to IModuleInterfaces, this was the source of rare hard to track down crashes due to a shared ptr reference leak when GetModule was called on non-main threads. We now store a TUniquePtr internally, and only lease out raw pointers.

PR #3622: Log category code cleanup (Contributed by projectgheist)

Removed AsyncIOBandwidthLimit as it was no longer being used by anything.

Added controller pairing changed delegate to core delegates

Added "AddReferencedObjects" to FScriptInterface, much like FSlateBrush has, in order to make it possible to use this type outside of a property (via FGCObject).

More named events for profiling FAnalyticsEventAttribute now uses Lex::ToString() to convert the key name. Added AppendAnalyticsEventAttributeArray() to efficiently append to an existing array. Implemented Lex::ToSanitizedString for double. Made Lex::ToSanitizedString an overload instead of a specialization. ﻿Added comments to specify that Lex::ToString just needs to return something implicitly convertible to FString. Added new API FPlatformMisc::GetOSVersion() that returns a string representing the raw OS version info. Added FGenericPlatformHttp::GetDefaultUserAgent() and tweaked all HTTP implementations to use a consistent User-Agent string.

Added IFileHandle::Flush() support

UnrealBuildTool: Improved the wording in the error message printed when a file in an include-what-you-use module has the wrong header as the first include

Core - Adding a frame cached value struct TFrameValue that keeps a value as valid for one GFrameCounter, which is incremented once an engine tick.

Removed private_subobject macro which was a temporary measure to make all subobjects private without breaking game code.

Added malloc proxy that allows capture and replay malloc/free callstream with a different malloc for comparison.

Removed FPackageFileSummary's AdditionalPackagesToCook array as it was not used by anything. This should reduce the package header size considerably for levels with many streaming sublevels.

Optimized FStatMessagesArray iteration. Added a new sorting algorithm called Algo::IntroSort that performs an introspective sort. It starts with quick sort and switches to heap sort when the iteration depth is too big. It improves the sorting speed in some scenarios where quick sort is in its worst case. Added TReversePredicate to invoke Predicate(B, A) when calling algorithms with a predicate.

Added support for linking with a module-definition (.def) file in Unreal Build Tool.

Improved the print-out of FFrame::GetStackTrace() / FFrame::GetScriptCallstack() when there is no script stack (e.g., when FFrame::KismetExecutionMessage is called by native code with no BP above in the call stack)

Made the max package file header size configurable via ini file ([/Script/Engine.StreamingSettings] s.MaxPackageSummarySize=65536) so that in rare cases (hundreds of streaming sub-levels) the user can easily make their levels load in the editor without crashing

Fixed debug config problems with new low level windows async IO layer.

Change pending delete data structure for editor, and more specifically the cooker. Render resources can accumulate for hours in the cooker.

Fixed: -iterativedeploy option is no longer ignored by UAT

Fixed ability to specify incompatible properties as the parameter to the OnRep function as long as the base property type was the same (i.e. UObjectProperty, UArrayProperty, etc.) OnRep verification errors are now "warnings" and will all be reported rather than a single one being fatal.OnRep verification warnings now correctly identify the line they occur on.

Fix issue where SerializingProperty on FArchive was not correctly updated when serializing Arrays and other containers.

Fix issue where assets loaded by StreamableManager would take 2 full GC cycles to free if there were no longer any references to them, it will now take 1 cycle in most cases

Fix issue where FStreamableManager would never try to load an asset once it had failed once. This would cause problems with mounting pak files after initial startup

Fix issues where the cooked AssetRegistry Tag white/blacklist was not working properly with Blueprint classes

Several fixes to command line processing for the run part of the BuildCookRun UAT script, and -ClientCmdLine can now be used to explicitly set the client command line instead of implying 127.0.0.1 as the URL to launch

Instanced nested subobjects no longer get reset to default when edited in the components detail panel.

Made GMalloc creation thread safe (fixes rare crashes on Mac).

Fixed overlapping ranges being passed to memcpy().

Fixed a bug where a trailing quote without a newline at the end of a CSV file would be added to the parsed text rather than converted to a terminator

Make UHT generate WITH_EDITOR guards around UFunctions generated in a WITH_EDITOR C++ block. This prevents these functions from being generated in non-editor builds

Fixed a crash when using an invalid regex pattern

Fixed FastXML not loading XML files with attributes delimited by single quote characters

Fixed FPaths::ChangeExtension and FPaths::SetExtension stomping over the path part of a filename if the name part of the had no extension but the path contained a dot, eg) C:/First.Last/file

Fixed a crash in UnrealHeaderTool when you have a space between the UCLASS or UINTERFACE macro and the opening parenthesis.

Fixed some duplicate log categories.

Make FWindowsPlatformProcess::ApplicationSettingsDir() consistent with other path functions so that it only returns "/" path separators rather than a mix of "/" and "\".

Fixed linker warning formatting that was throwing warnings when cooking.

Non-ASCII characters in console command HTML help are no longer converted to "?".

Added more lock free links to support huge cooks.

Fixed a recurring stats crash.

Fixed attempts to load compiled in packages, which produces warnings and is slow.

Critical fix; stats were non functional.

Fixed array-based MakeUnique to value-initialize the elements.

Repaired botched merge of BroadcastSlow_OnlyUseForSpecialPurposes.

UE4 - Fixed super hazardous bug with FTaskGraphInterface::BroadcastSlow_OnlyUseForSpecialPurposes.

Fixed PRAGMA_ENABLE_OPTIMIZATION and PRAGMA_DISABLE_OPTIMIZATION on iOS for certain Clang versions.

Fixed UnrealHeaderTool parsing UObject* const fields as CPF_ConstParm.

Made TIsTriviallyDestructible<> work with forward-declared enums.

Fixed bug in the pak precacher that would result in blocks being discarded too soon, which, in turn, resulted in redundant reads.

Made changes so that servers, programs and non-engine executables do not create background or high priority threads.

Critical fix: Propoerly disambiguate imports with the same name and the same outer name. This fixes an assert: LocalExportIndex.IsNull.

Improved the error message when UnrealHeaderTool encounters incompatible functions pulled together by multiple inheritance.

Fixed UnrealHeaderTool's failure to parse pointer properties marked as const.

Fixed backwards ifdef for buffered files.

Replaced LogTemp with the appropriate logging categories in GC debug code.

When adding objects to clusters after these clusters have been created it's possible to come across objects that are already in the cluster we're adding the object to so instead of crashing, allow it.

UObject can be added to GC cluster only if all of its Outers can also be added to it. This fixes asserts caused by components that are added to GC clusters even if their owner actors that can't be in GC clusters.

The editor will now collect garbage after a map is loaded to make sure any stale components or other objects that are no longer needed are destroyed. This is to make sure that these components are not resurrected by other editor operations like duplication.

Fixed null dereference of LineBatcher when using DrawDebugSphere and DrawDebugAltCone

Fixed a potential deadlock caused by a race condition when using FMallocVerifyProxy with FMallocBinned

Fixed parameter parsing so that arguments are not parsed if not preceded by a whitespace (for example "-Log" was parsed in "TM-Log")

PR #2096: Fix argument parsing in DiffAssets Comandlet (Contributed by cgrebeld)

PR #2407: Fix LoadLibrary error with Microsoft Group Policy CWDIllegalinDllSearch mode 1 or 2 (Contributed by bozaro)

Long package names are now corrected to match the case of a file on disk when loading. Fixes deterministic cooking issues where case changes due to load order.

Async loading code will no longer crash when the requested package could not be created.

Fixed stale module suffixes which were causing hot reload failures.

Fixed compile error in TPromise's move assignment operator.

Fixed bad code generation for TMap and TSet when they're used as BlueprintCallable UFUNCTION parameters.

Fix streaming visibility logic bug reported on UDN

Remove non-actionable warnings in ObjectTools.ForceReplaceReferences

Fixed async loading from pak files < 64k.

Bug Fix: Fix issue wherein a UPROPERTY that was converted from a hard UObject-based reference to a TAssetSubclassOf would not properly expose its referenced content to be cooked

Moved parsing of LogCategory verbosity slightly sooner to occur before plugins are loaded - fixes plugins not printing proper log levels if initialized too early

Fixed out of bounds access to iChild warning in UModel (clang didn't like a union trick)

Fixed various crashes when using UObject::CallFunctionByNameWithArguments with non-trivial argument types by properly initializing and destructing the allocated parameters

Fixed FMalloc functions missing from poison proxy.

Increased the maximum package summary size to handle levels with multiple streaming sublevels.

Fix for CDO pointer replacement in non-UObject properties during hot reload.

Fixed TSetElement's generic constructor to prevent it from ever being a copy constructor.

Fixed TSparseArray::operator= corrupting non-POD elements.

Changed FRuntimeAssetCacheFilesystemBackend::ClearCache(NAME_None) to not try to clear all cache directories (there is a separate no-args method for that)

Downgrade various checks() to ensures() in the runtime asset cache functions exposed to Blueprints so they don't take down the editor when given bad parameters

Fix issue where AssetRegistry GetAncestorClassNames/GetDerivedClassNames were not working properly in cooked builds for classes not in memory

The recursion guard in async loading code will only be used when the Event Driven Loader is enabled. This fixes some of the startup crashes.

Converted T(Shared)Future to use default move and copy constructors where applicable

Fix it so Blueprint subclasses of StaticMeshActor are not added to GC clusters by default as this is unlikely to be safe

Made sure subobjects recycled in construction code have the pending kill flag cleared so that they don't get garbage collected after creation.

Fixed crash if the UEnum used by an Enum Property no longer exists

Fixed issue with Incredibuild failing with Visual Studio 2015 Update 3 when some helpers have non-US character sets

Fixed crash when using FString::Find end if start position is beyond the end of the string.

Fixed an issue where the level streamer would not stream in a level until it finished streaming out another one.

Fixed a crash during tagged serialization if an enum no longer exists.

Added new Blueprint-exposed functions for procedurally editing Materials, MaterialFunctions and MaterialInstanceConstants in the editor.

Material baking improvements

Added the ability for any component (not only camera components) to have a preview viewport in the editor.

Disallow map building while in PIE, or PIE while buildling lighting to avoid a conflict on accessing BuildData.

Polish the speed tree import dialog

Highest LOD is now forced highres screenshots

PR #3565: add -quality option to buildlighing commandlet (Contributed by kayama-shift)

PR #3556: Git Plugin: fix new option "init Git LFS" that make assets read-only (master/UE4.17) (Contributed by SRombauts)

Color asset editor tabs according to asset type (Contributed by projectgheist). The highlight color is around the icon and matches the content browser color and style.

Exposed EditorLevelUtils to editor scripts. This allows creation of streaming levels, setting the current level and moving actors between levels

Expose editor visibility methods on Actor to Blueprint/script (editor only)

Added a file helpers API to script.

Deprecated actor grouping methods on UUnrealEdEngine and moved their functionality into their own class( UActorGroupingUtils). There is a new editor config setting to set which grouping utils class is used and defaults to the base class. The new utility methods are exposed to script.

Exposed source control helpers methods to script

AssetTools has been converted to a UObject interface and its methods have been exposed to to script.

Added a world accessor to blutilties so they can operate on the editor world (spawn,destroy actors etc)

Fixed plugin browser auto-resizing when scrolling.

Added a way to enable or disable the component transform units display in the editor preferences. Units display is now disabled by default. Improved the import speed for morph targets by only recomputing the affected vertices. Fixed an issue when importing morph targets where some import settings where ignored and could result in incorrect deltas.

UGS: You can now configure UnrealGameSync to filter out arbitrary changelists based on their description. The default filters (see Engine/Programs/UnrealGameSync/UnrealGameSync.ini) exclude changelists which modify collections.

UGS: Now only polls for updated versions every 5 minutes, and newly submitted changes every 60 seconds, to reduce the load on the Perforce server.

UnrealGameSync: Added support for notifying users if CIS steps fail for content changes. Badges which test content should be listed in the [Notifications] section of the project-specific INI file, as +ContentBadges=BadgeName.

Exposed new methods of adding a struct to a details panel and have it work properly with customizations.

Property Editor: Added objects to FPropertyAndParent.

MemoryProfiler2 - Add mprof filename into title bar after opening

Added basic material hookup to USD. Similar to FBX it will find materials based on rules specified by the user in the import settings

PR #2341: Optional Middle Mouse Button panning in Graph Editor (Contributed by flipswitchingmonkey)

Improved layout of Mesh Paint panel to fit better within default layout, and changed styling of action buttons

Make curve tables create temporary CSV files to use during diffs. This matches the current behaviour of data tables.

Changed FEnvDirection Text to display "From: {LineFrom} To: {LineTo}" instead of "{LineFrom} - {LineTo}", because the latter was confusing since a direction is normally defined (in vector math) as To - From.

Click a Hyperlinked Asset in a log window will now attempt to open the editor for it.

UnrealGameSync: Changes related to managing collections are now filtered out by default.

Add "Reset Material Slot" fbx option when doing a re-import with the import dialog option. There is now an editor preference option to show the fbx import dialog when doing a re-import to allow the user to use the new "Reset Material Slot" option.

Moved editor performance settings out of per-project settings so they can be shared across projects

Exposed the asset registry to Blueprints and script. Works in editor scripts and runtime scripts

UnrealGameSync: Added support for multiple tabs. Each tab can monitor changes in a separate workspace, and scheduled syncs will run for all open tabs.

Rewrote SlateFileDlgWindow's file filtering to allow for extensionless file selection and to remove the O(n^2) file filtering

Fixed incorrect filtering of abstract/deprecated UDeveloperSettings and UContentBrowserFrontEndFilterExtension classes caused by a typo (HasAnyCastFlags versus HasAnyClassFlags)

Fixed a bug where duplicating an actor in the level could produce the wrong object, if there's another asset with the same name.

Fbx scene importer: Do not remove existing attribute reference from the Blueprint if the reimport of the associate mesh attribute is not tick.

fbx scene importer: Make sure we set INVALID_UNIQUE_ID to node that has no attribute.

PR #3595: Fixed wrong colour for level status (Contributed by ronve)

PR #3558: UE-44862: Always update SColorPicker color on OK button (Contributed by projectgheist)

Improve asset import data display in static and skeletal meshes

PR #3463: Get bounds for all triangles, not just the first one. WedgeIndex was . (Contributed by DaveC79)

Fix degenerated bounds calculation for skeletal mesh when the skeleton is remove from a re-import

Meshes editors materials and sections panel are now supporting undo and redo.

Fix crash when GC happens while the vr editor radial menu is open.

Make sure re-import skeletal mesh follow the "import morph targets" option

PR #3553: Crashfix for static array properties (Contributed by Pierdek)

Fix lighting becoming unbuilt when mesh painting

Fix a bug when importing USD files that caused internal references to other USD files not being found by relative path

Fix an editor crash when repeatedly spamming ctrl+s and ctrl+shift+s to save.

Slate: Fixed enter edit mode and return handled if not read only.

Fix a crash when importing an animation with a skeleton that do not match the skeleton contain in the fbx file.

Slate - Changing the order that the tabs draw in so that the draw front to back, instead of back to front.

Fixed stats not being possible to enable when in simulate

Mesh painting no longer paints on invisible components. Toggling visibility refreshes the selected set.

Collection Parameters no longer rename their parameters when duplicated.

PR #3453: UE-43004: YesNo MessageDialog instead of YesNoCancel (Contributed by projectgheist)

Stop unrealpak from crashing if generating a patch with more pak files then the original game.

UGS: Fixed editor receipts being deleted when running a custom tool without compiling first.

Fixed ensure when deleting a map that contains build data which also happens to be the currently loaded map.

PR #3607: Improved InputKeySelector functionality (Contributed by projectgheist)

PR #3615: More detailed log messages for debugging warnings/errors (Contributed by projectgheist)

Fix transactions getting stuck in the color grading controls.

Fix issue where StreamableManager and other utility objects were not ticking in the editor if viewports were not set to real time

More accurate messaging for unresponsive target manager interface.

Fixed issue where HLOD cluster preview wireframe would not be removed when the cluster is deleted

Unified the way vertex colors are shown while in Mesh Paint mode, only selected Static/Skeletal-meshes now display their vertex colors

Fixed issue where per-instance shadow and or collision flags were lost when using the Merge Actor functionality

PR #2844: UE-36936: Don't stretch container for Plugin Image (Contributed by projectgheist)

Fixed cheat search in command console

Fix typo in KismetDebugUtilities that was showing up in log output.

Fixed Environment Query System Test details to correctly hide all filter/score properties when scoring/filtering only (respectively).

EQSNormalizationType tooltips will now show up correctly based on which type is chosen in a drop-down. (Previously the tooltip for "Absolute" was erroneosly showing up for "RelativeToScores", while a general description was showing up for "Absolute".)

Object and Struct properties marked as AssetRegistrySearchable will no longer be visible in the Content Browser

Fixing morph target smooth group support. This also has improve the morph target import time.

Fix crash Crash when Selecting Actor in the World Outliner That is Using ColorGradingMode

Editor crash when opening a project that includes a plugin with more than two custom volume classes.

PR #3656: Make References/Referencers List copyable (Contributed by user37337)

Fixed an issue where physics geometry of Spline Meshes was not correctly used by the Merge Actor functionality

Fixed issue where physics geometry was not correctly scaled when using the Merge Actor functionality

Fixed issue where using Per Property Manually Overridden Texture Sizes when merging materials did not work

Fixed an issue where the resulting Static Mesh from using the Merge Actor tool would be culled by a Distance Culling volume

Fixed a USD import crash when importing a mesh with no material

Prevent a crash in UEditorTutorial::OpenAsset when passed a nullptr Asset

Prevented a crash in UMaterialEditingLibrary::RecompileMaterial when passed a nullptr material

Fixed: Player can't move through level by holding one grip button in Editor VR Mode (partially broken in 4.16).

Fixed a crash when the tutorial browser is open during a garbage collect

FSplineComponentVisualizer::CanResetToDefault now returns false rather than crashing if SplineComp is not found

Fixed a crash when reloading a curve asset that was open in an embedded curve editor

Fixed crash when removing the first element from a TMap or TSet property in the editor when it's not the final element

Fix crash when a re-import of a static mesh has failed.

Fixed an editor crash when loading a map with actors named "none". Naming an actor none is no longer allowed

Fix crash in the Editor when multiple instances of the same Blueprint are selected in the level and the Reset to Default button next to a component of the Blueprint is clicked in the Details panel

Improved the leading underscore name sanitization to only prevent names that resolve to 'None'

Asset reloading now defers re-opening asset editors until post-GC phase

Fix crash when modifying array elements in a Blueprint if an instance of that object exists in the level which has modified the array on the instance.

Fix crash changing the from columns view while the view options menu is open in the editor.

Fixed incorrect UVs being used when generating HLOD meshes with multiple actors that contain differing LODs

Fixed crash when doing editor 'Force Delete' on a static mesh whose distance field is still being built.

Fixed typo that forced merged meshes with no backing raw mesh to incorrectly generate non-square merged atlases

Content Browser

Implemented support for hiding empty folders in the Content Browser "Empty" in this case is defined as folders that recursively don't contain assets or classes. Folders that were created or have contained content at any point during the current editing session are always shown. This also fixes some places where the content filters would miss certain folders, and allows asset and path views to be synced to folder selections (as well as asset selections), which improves the experience when renaming folders, and navigating the Content Browser history.

Re-organized some of the "View Options" settings into better groups, and fixed some places where items would still be shown in the asset view when some certain content filter options were disabled.

Improved the display of asset tags in the Content Browser Numeric tags are now displayed pretty printed. Numeric tags can now be displayed as a memory value (the numeric value should be in bytes). Dimensional tags are now split and each part pretty printed. Date/Time tags are now stored as a timestamp (which has the side effect of sorting correctly) and displayed as a localized date/time. The column view now shows the same display values as the tooltips do. The tooltip now uses the tag meta-data display name (if set). The tag meta-data display name can now be used as an alias in the Content Browser search.

Assets and folders can now be drag-dropped at the same time in the Content Browser.

Content Browser search now takes the display names of properties into account

Fixed a crash that could occur due to bad data in the asset registry

Creating a folder in the Content Browser now creates the folder on disk, and cancelling a folder naming now removes the temporary folder

Fixed some cases where folders wouldn't be removed from the Content Browser when deleting them

Fixed moving a folder containing a level not moving the level

Fixed thumbnails getting much darker with forward shading enabled

Fix engine hang when editing an instanced property that may reference BP classes.

Cooker

Cooker output lines containing the strings "Error:" or "Warning:" are now highlighted as red and yellow in the output log.

ResavePackages commandlet can now buildtexturestreaming while rebuildlightmaps

Foliage

The instance buffer is now updating partially instead of being recreate every time there was a change, this was done to improve performance with a lot of painted foliage instances.

Fixed: Avoid creating unnecessary FUniqueObjectGuid in foliage (prevents package dirty on actor deletion)

When selecting a foliage actor and moving it to another level, all instances will be moved properly

Prevent foliage from marking actors dirty as HigherarchicalInstancedStaticMesh components are added and removed from the scene.

Fix automatically dirtying levels just by copying actors if the level contains a foliage actor.

Fixed: Issues with foliage occlusion culling after world origin was rebased

Occlusion result is now kept per view, so a multi local player game will now work properly.

Fixed possible crash when performing drag &drop operation of Target Layers

Landscape

When updating Phyx region take into account simple collision mip.

Landscape info map transactional state is based on its world's transactional state

Fixed a lighting crash when working with non square landscape

Material Editor

Reset arrows now only display for non-default values in the Material Instance editor. Reset to default arrows now are placed in the correct location for SObjectPropertyEntryBox and SPropertyEditorAsset.

Material parameter group dropdown now sorts alphabetically.

You can now set sort priorities to Material Parameters and Parameter Groups. If sort priorities are equal, it falls back to alphabetical sort. Default sort priority is 0, and other priorities can be set on the parameter in the base material. Parameters are still sorted within groups.Group sort priority is set on the main material preferences.

Fixed a pivot painter 2 NAN error.

Adding "texcoord" keyword to UMaterialExpressionTextureCoordinate so you can search for the name that is displayed on the node in the graph.

Fixed an issue where the material editor stats and error animations would stop updating.

Sequencer

Sequencer: Show sequencer spawnables in the world outliner and add the icon overlay for spawnables.

Sequencer: Auto key refactor. Auto key now creates a key only when the property changes and there's an existing track with at least one keyframe.

Sequencer: Added outliner column to show the level sequences that an actor is bound to.

It is now possible to blend between values for numeric types (int, float, transform etc), and add entry/exit easing to sections New Absolute/Relative/Additive section types allow specific control of object values (such as relative actor transforms, or blending between relative and absolute space) This has particular application for UMG widgets, or blending in and out of cutscenes.

Sequencer: Added hotkeys (shift , and shift .) to step to next/previous shot.

Fixed deterministic cooking issues with movie scene data

Sequencer: Set movie scene capture frames only when not using custom frames. This allows the user entered frame numbers to persist in config, rather than overwriting them when doing a "Render Shot".

Sequencer: Added setting to activate realtime viewports when in sequencer.

Sequencer: Added setting for limit scrubbing to playback range.

Sequencer: Added OnCameraCut() event that fires when there is a camera cut.

Sequencer: Added time to transform, color and vector key structs so that key times are editable from the key editors.

Sequencer: Added OnFinished() event when a level sequence completes playback.

Sequencer: Show camera shake/anim track menus even if there aren't any assets.

Sequencer: Added JumpToPosition() function which updates to a position in a scrubbing state.

Changed level sequence object references to always use a package and object path based lookup Newly created binding references now consist of a package name and an inner object path for actors, and just an inner object path for components. The package name is fixed up dynamically for PIE, which means it can work correctly for multiplayer PIE, and when levels are streamed in during PIE (functionality previously unavailable to lazy object ptrs) Added a way of rebinding all possessable objects in the current sequence (Rebind Possessable References) Multiple bindings are now supported in the API layer of level sequence references, although this is not yet exposed to the sequencer UI.

Sequencer: Added Scrub() function to movie scene player.

Sequencer: Load level sequence asynchronously.

Sequencer: Added cinematic options to level sequence player.

Sequencer: Added GoToEndAndStop() function to the movie scene player.

Sequencer: Added attach/detach rules for attach section.

Sequencer: Added attenuation settings for attached audio components.

Sequencer: Added OnMovieSceneBindingsChanged() delegate.

Sequencer: Fixed spawnables not getting removed when deleting a shot or subscene.

Sequencer: Added OnBeginScrubbing() and OnEndScrubbing() event delegates.

Sequencer: Added Level Sequence Actor as an output for CreateLevelSequencePlayer().

Added new experimental plugin that provides a camera aligned image plate, and associated sequencer track This plugin is a stop-gap solution until fully fledged support is introduced with 'Media Framework 3.0' Sequencer track can stream image sequences from disk onto UTexture properties that are exposed to cinematics

Sequencer: Fixed crash on export if there's no shot data.

Sequencer: Fixed bindings not immediately displaying as unbound.

Sequencer: Fixed sequencer spawnables not always appearing by spawning them consistently in the persistent level.

Sequencer: Fixed offsets when moving multiple sections.

Sequencer: Fixed components not getting reassigned to the new actor when assigning a bound actor.

Sequencer: Fixed fov not getting reset when done playing.

Sequencer: Fixed components not getting deselected from the sequencer tree view when they get deselected in the viewport/outliner.

Sequencer: Fixed filtering in the sequencer tree so that it includes parent nodes only and doesn't recurse through to add their children.

Sequencer: Fixed transport controls not appearing in newly created viewports.

Sequencer: Fixed spawnables marking the level as dirtied.

Sequencer: Fixed sequences not evaluating to the end when setting the playback position to the end of a sequence while playing.

Sequencer: Set component velocity for attached objects.

Sequencer: Fixed crash on selecting keyframes in the viewport.

Sequencer: Fixed a bug where the default state of a spawnable doesn't get saved after editing.

Sequencer: Changed OnEditStructChildC