Unreal Engine 4.17 Released!
August 7, 2017

Unreal Engine 4.17 Released!

By Jeff Wilson

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

image alt text

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 has been simplified to be a single toggleable state in order to improve usability and clarity.

image alt text

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.

image alt text

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.

image alt text

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


  • Plugin and Project modules that have global shaders require use of the PostConfigInit 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.

image alt text

image alt text



New: Xbox One X Support

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

image alt text

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:

image alt text

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!

image alt text

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.


image alt text

image alt text

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:

image alt text

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.

New: Clothing Tools (Experimental/Beta)

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

image alt text

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.

image alt text

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.


image alt text

image alt text

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.

image alt text

New: Orphan Pins

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

image alt text

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.

image alt text

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.

image alt text

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.

image alt text

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

image alt text

New: Android Toolchain and SDK Updates

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.

image alt text

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

image alt text

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


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


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


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


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


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


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


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