Unreal Engine 4.14 Released!
November 15, 2016

Unreal Engine 4.14 Released!

By Alexander Paschall

This release includes hundreds of updates from Epic and 71 improvements submitted by the incredible community of Unreal Engine developers on GitHub! Thanks to each of these contributors to Unreal Engine 4.14:

Adam Moss (adamnv), Alan Edwardesa (alanedwardes), Andreas Axelsson (judgeaxl), Andreas Schultes (andreasschultes), Andrew Armbruster (aarmbruster), Artem V. Navrotskiy (bozaro), Audiokinetic Inc. (audiokinetic), BaxterJF, CA-ADuran, Cameron Angus (kamrann), Cengiz Terzibas (yaakuro), Christian Hutsch (UnrealEverything), CodeSpartan, Cuo Xia (shrimpy56), Damir Halilovic (DamirHalilovic), dcyoung, Deniz Piri (DenizPiri), Dennis Wissel (dsine-de), Dominic Guana (jobs-git), Dorgon Chang (dorgonman), dsine-de, Filip Brcic (brcha), Hakki Ozturk (ozturkhakki), Hannah Gamiel (hgamiel), Hao Wang (haowang1013), Jarl Gullberg (Nihlus), Jason (Abatron), Jeff Rous (JeffRous), Jeremy Yeung (jeremyyeung), Jørgen P. Tjernø (jorgenpt), Josh Kay (joshkay), jpl-mac, KashiKyrios, Kory Postma (korypostma), Kyle Langley (Vawx), Laurie (Laurie-Hedge), Lei Lei (adcentury), Leszek Godlewski (inequation), Marat Radchenko (slonopotamus), Matthew Davey (reapazor), Matthias Huerbe (MatzeOGH), Matthijs Lavrijsen (Mattiwatti), mbGIT, Michael Geary (geary), Michail Nikolaev (michail-nikolaev), Moritz Wundke (moritz-wundke), Narendra Umate (ardneran), Nelson Rodrigues (NelsonBilber), null7238, Paul Evans (paulevans), PjotrSvetachov, projectgheist, Rama (EverNewJoy), rcywongaa, rekko, Ryan C. Gordon (rcgordon), sangpan, Sébastien Rombauts (SRombauts), Shihai (geediiiiky), stfx, straymist, Theodoros Ntakouris (Zarkopafilis), tmiv, ungalyant, Webster Sheets (Web-eWorks), x414e54, yehaike, YossiMHWF, Yukariin, Zachary Burke (error454), Zhiguang Wang (zhiguangwang)

What’s New

Unreal Engine 4.14 introduces a new forward shading renderer optimized for VR, enabling crisp multi-sampled anti-aliasing in your games. The new Contact Shadows feature renders beautifully detailed shadows for intricate objects. We've also introduced a new automatic LOD generation feature for static meshes that does not require a third-party library.

We’ve streamlined the animation tools to help you be more productive, and added many new features to Sequencer (UE4’s non-linear cinematic tool), as well as improvements to vehicles, clothing and animation Blueprints.

For mobile developers, Vulkan support is ready to use on compatible Android devices! And, we've added various new mobile rendering features such as reading from scene color and depth, and the ability to draw 3D objects on top of your UI.

On the Windows platform, C++ programmers can now use Visual Studio "15" for development. Visual Studio 2015 is still supported.

Major Features

New: Forward Shading Renderer with MSAA

The new forward shading renderer combines high-quality UE4 lighting features with Multisample Anti-Aliasing (MSAA) support! MSAA and the option to enable per-material optimizations make the forward renderer well suited for VR.


The forward renderer works by culling lights and reflection captures to a frustum-space grid. Each pixel in the forward pass then iterates over the lights and reflection captures affecting it, shading the material with them. Dynamic shadows for stationary lights are computed beforehand and packed into channels of a screen-space shadow mask allowing multiple shadowing features to be used efficiently. Enable ‘Forward Shading’ in the Rendering Project settings and restart the editor to use the forward renderer.

Forward Shading

Supported forward rendering features include:

  • Full support for stationary lights, including dynamic shadows from movable objects which blend together with precomputed environment shadows
  • Multiple reflection captures blended together with parallax correction
  • Planar reflections of a partial scene, composited into reflection captures
  • D-Buffer decals
  • Precomputed lighting and skylights
  • Unshadowed movable lights
  • Capsule shadows
  • Instanced stereo compatible

Some features are not yet supported with Forward Shading:

  • Screen space techniques (SSR, SSAO, Contact Shadows)
  • Shadow casting Movable Lights
  • Dynamically shadowed translucency
  • Translucency receiving environment shadows from a stationary light
  • Light functions and IES profiles
  • Alpha to Coverage
  • MSAA on D-Buffer decals, motion blur, dynamic shadows and capsule shadows


The forward renderer supports both multi sample anti-aliasing (MSAA) and temporal anti-aliasing (TAA). In most cases TAA is preferable because it removes both geometric aliasing and specular aliasing. In VR, the constant sub-pixel movement introduced by head tracking introduces unwanted blurriness, making MSAA a better choice.

Projects that choose to use MSAA will want to build content to mitigate specular aliasing. The ‘Normal to Roughness’ feature can help reduce specular aliasing from detailed normal maps. Automatic LOD generation for static meshes can flatten features on distant meshes and help reduce aliasing from small triangles.

In our tests, using MSAA instead of TAA increases GPU frame time by about 25%. Actual cost will depend on your content.

To use MSAA, set the default Anti-Aliasing Method in the Rendering project settings:

The console variable ‘r.MSAACount’ controls how many MSAA samples are computed for every pixel. ‘r.MSAACount 1’ has special meaning and falls back to Temporal AA, which allows for convenient toggling between anti-aliasing methods.


The forward renderer can be faster than the deferred renderer for some content. Most of the performance improvement comes from features that can be disabled per material. By default, only the nearest reflection capture will be applied without parallax correction unless the material opts-in to High Quality Reflections, height fog is computed per-vertex, and planar reflections are only applied to materials that enable it.

Leveraging these options in Epic’s new VR game, Robo Recall, the forward renderer is about 22% faster than the deferred renderer on an NVIDIA 970 GTX.

New: Contact Shadows

Contact shadows allow for highly detailed dynamic shadows on objects.

The ivy below is only a few flat cards but is able to self-shadow in a very convincing way due to outputting Pixel Depth Offset in the material.

The Contact Shadows feature adds a short ray cast in screen space against the depth buffer to know whether a pixel is occluded from a given light or not. This helps provide sharp detailed shadows at the contact point of geometry. There are a number of reasons why shadows through other algorithms may have missing or blurry contacts. Typically it is due to lack of resolution or a depth bias. Regardless of the reason, the new Contact Shadows feature can fill in the gap very well for a small cost.

Contact shadows can be used by setting the Contact Shadow Length property on your light. This controls the length of the ray cast in screen space where 1 is all the way across the screen. Large values can degrade quality and performance so try and keep the length to the minimum that achieves your desired look.

Another use case of contact shadows is to get self-shadowing from the parallax occlusion mapping from arbitrary lights. This requires outputting pixel depth offset in the material. This animation shows a parallax occlusion mapped surface with contact shadow length set to 0.1.

New: Automatic LOD Generation

Unreal Engine now automatically reduces the polygon count of your static meshes to create LODs!

The above animation shows five LODs that were generated automatically. Each is half the number of triangles as the previous.

Automatic LOD generation uses what is called quadric mesh simplification. The mesh simplifier will calculate the amount of visual difference that collapsing an edge by merging two vertices would generate. It then picks the edge with the least amount of visual impact and collapses it. When it does, it picks the best place to put the newly merged vertex and removes any triangles which have also collapsed along with the edge. It will continue to collapse edges like this until it reaches the requested target number of triangles.

This mesh simplifier maintains UVs including generated lightmap UVs, normals, tangents, and vertex colors. Because UVs are maintained the same materials can be used as well as all LODs can share the same lightmap.

The high level settings for controlling the generated LODs are in the static mesh viewer under LOD Settings.

"LOD Group" provides a list of presets. These can be changed per project in BaseEngine.ini under [StaticMeshLODSettings]. We encourage you to set up good categories for your project and mostly use LOD groups instead of controlling the details of every LOD.

An important setting to note is "Auto Compute LOD Distances". Because the algorithm knows how much visual difference every edge collapse is adding it can use this information to determine what distance that amount of error is acceptable. That means it will automatically calculate the screen size to use for each LOD as well.

If you wish to muck with the details of auto generation for each LOD they can be found under Reduction Settings. Note that this feature currently only works with static meshes and that mesh proxy LOD generation is not yet supported.

New: Precomputed Lighting Scenarios

We now support precomputing lighting for multiple lighting setups with the same geometry! This is especially important for use cases such as VR and architectural visualization where you need the highest possible quality at the fastest possible performance.

In the above example the directional light, sky light and skybox have been placed in a Lighting Scenario level called DayScenario. The streetlights have been placed in NightScenario.

To use Lighting Scenarios:

  • Right click on a sublevel in the Levels window and change it to Lighting Scenario. When a Lighting Scenario level is made visible, its lightmaps will be applied to the world.
  • Change the level streaming method to Blueprint on the Lighting Scenario level
  • Place meshes and lights into this level and build lighting
  • In the BeginPlay of your persistent level’s Level Blueprint, execute a Load Stream Level on the Lighting Scenario level that you want active.


  • Only one Lighting Scenario level should be visible at a time in game.
  • When a Lighting Scenario level is present, lightmap data from all sublevels will be placed inside it so that only the DayScenario lightmaps are loaded when it’s daytime. As a result, lightmaps will no longer be streamed by sublevel.
  • A Reflection Capture updated is forced when making a Lighting Scenario level visible, which can increase load time.

New: Improved Per-Pixel Translucent Lighting

In the deferred renderer, the new forward shading functionality can now be used on translucent surfaces to get specular highlights from multiple lights and image-based reflections from parallax-corrected reflection captures!

New: Full Resolution Skin Shading

UE4 now supports full resolution skin shading for the Subsurface Profile shading model. This provides high-fidelity lighting for surface details such as pores and wrinkles.

Checkerboard rendered skin (left), Full resolution skin (right) (Note: 3D head model by Lee Perry-Smith)

Surface detail - checkerboard (left), full resolution (right)

Previously, lighting on skin was represented using a checkerboard pattern, where half the pixels contained diffuse lighting and the other half, specular lighting. The lighting was recombined during a final subsurface profile fullscreen pass. That approach gave good results for subsurface lighting (which is low-frequency by nature), but it could result in lower fidelity lighting for surface details.

With the new approach, every pixel contains diffuse and specular lighting information, packed into an RGBA encoding. This allows us to reconstruct full-resolution lighting during the final subsurface profile fullscreen pass, giving better results for surface details and more stable behavior with temporal antialiasing.

Compatibility Full resolution skin shading requires at least a 64-bit scene color format with a full alpha channel. The default FloatRGBA scene color format works fine, but 32-bit representations such as FloatRGB are not supported. If the scene color format is not compatible with full resolution skin, we fall back to checkerboard-based lighting. This behaviour can be overridden using the r.SSS.Checkerboard console variable. The possible values for this are:

0: Checkerboard disabled (full resolution)

1: Checkerboard enabled (old behavior)

2: Automatic (default) -

Full resolution lighting will be used if the scene color pixelformat supports it Limitations It’s worth noting that the full-resolution skin shading is an approximation. It works well in the vast majority of cases, but certain material features can be problematic due to the encoding method. In particular:

  • Metallic materials
  • Emissive materials

These features will work, but you may notice differences in output compared to checkerboard due to the packed RGBA diffuse/specular encoding. It is possible to workaround particular issues when authoring materials by setting the opacity to 0 in areas where skin shading is not desirable. Pixels with an opacity of zero are treated as default lit for the purposes of shading.

Note: Masking non-opaque pixels in this way is also worthwhile for performance reasons, since these pixels are bypassed by the subsurface postprocess.

Performance Considerations

f your title has a 64-bit scene color format then full resolution subsurface lighting will typically be faster than checkerboard due to the reduced number of texture fetches. However, if your title has a 32-bit scene color then the performance gain from the reduced texture bandwidth will likely outweigh the benefits (although this is hardware dependent).

New: Reflection Capture Quality Improvements

When you use Reflection Captures, the engine mixes the indirect specular from the Reflection Capture with indirect diffuse from lightmaps. This helps to reduce leaking, since the reflection cubemap was only captured at one point in space, but the lightmaps were computed on all the receiver surfaces and contain local shadowing.

(With lightmap mixing on the left, without on the right)

Mixing works well for rough surfaces, but for smooth surfaces the reflections from Reflection Captures no longer match reflections from other methods, like Screen Space Reflections or Planar Reflections.

Lightmap mixing is no longer done on very smooth surfaces. A surface with roughness .3 will get full lightmap mixing, fading out to no lightmap mixing by Roughness .1 and below. This allows Reflection Captures and SSR to match much better and it's harder to spot transitions.

The below shot shows mirror surface reflections before and after. Note the difference in the reflection of the wall between SSR and reflection captures. The artifact is especially noticeable in motion, because it will move with your camera due to SSR limitations.

This affects existing content - in cases where you had reflection leaking on smooth surfaces, that leaking will be much more apparent. To solve this, place additional reflection probes to reduce the leaking. Levels should have one large spherical capture at a minimum. You can also revert to the old lightmap mixing behavior with a rendering project setting:

New: Visual Studio "15" Support

Unreal Engine 4.14 now the upcoming Visual Studio "15" out of the box. Visual Studio 2015 is still supported as well. Visual Studio “15” is currently available in “Preview” from Microsoft’s Visual Studio web site.

If you have multiple versions of Visual Studio installed, you can select which to use through the ‘Source Code’ section in ‘Editor Preferences.’

New: Create Static Mesh from Actors

You can now right-click actor(s) in the level viewport and convert their current state to a new Static Mesh asset. This even works with skeletal meshes, so you can capture a mesh from posed characters.

New: NVIDIA Ansel Support

UE4 4.14 adds support for NVIDIA Ansel Photography! Ansel is a new tool from NVIDIA that enables players to take in-game screenshots. While in Ansel mode the game will pause and players will have camera control to compose shots and apply various screen effects. It can also capture a variety of screenshots, from HDR to 360 stereo. See NVIDIA’s website for more details.

Ansel support is now exposed as a new UE4 plugin. After enabling the plugin in your project, you can access Ansel in a standalone game session.

(Viewing an Ansel 360 capture in a web browser)

We have also exposed functions on the Player Camera Manager class so your games can customize Ansel capture behavior. Games may wish to limit the distance of camera movement, disable UI elements, disable/enable certain lighting or post processing effects, etc. Thanks to Adam Moss and NVIDIA for providing the implementation. To get started using this feature, check out the ‘Ansel_integration_guide.html’ document under the Ansel plugin folder. Official UE4 documentation for Ansel will be coming soon.

New: Improved Cable Component

The Cable Component plugin has been updated with new features, including collision support and sockets for attaching objects or effects.

Cable Component now includes these new features:

  • Simple collision, including friction settings
  • Stiffness setting, which tries to reduce bending
  • Sockets at each end of the cable
  • Ability to set either end to ‘free’

New: UI Font Outlines

Fonts for UMG and Slate now have an optional outline that can be applied to them.

Any widget that specifies a font can change the outline setting, color, or material to be used with the outline.

A font material on an outline can be used in the same way that any other font material is used except that a material specified for an outline only applies to the outline. Font materials can be used on the outline to create lots of different effects.

New: Editable Map and Set Properties

We now support editing Map and Set properties from within the Details Panel!

Sets are similar to Arrays, but you can never have the same element in a set twice and the order of elements is not guaranteed. However, it’s extremely quick to lookup into a set to see whether it contains an element.

Maps will have a key and a value and you can edit both within the details panel. Like Sets, all keys must be unique, and the order of elements is not guaranteed to persist. However, it’s very quick to lookup an element’s value as long as you know it’s key.

New: Vector Noise in Materials

The Noise material graph node includes several functions useful for procedural shading that produce a single-valued (scalar) result. |

| | | | | |

| Cellnoise | Vector Noise | Gradient | Curl | Voronoi |

The new Vector Noise node adds several more with 3D or 4D vector results. Due to the run-time expense of these functions, it is recommended that once a look is developed with them, all or part of the computation be baked into a texture using the Draw Material to Render Target Blueprint feature introduced in 4.13. These material graph nodes allow procedural looks to be developed in engine on final assets, providing an alternative to creating procedurally generated textures with an external tool to apply to assets in the engine. The new functions are:

1. Cellnoise: Returns a random color for each cell in a 3D grid (i.e. from the mathematical floor operation applied to the node input). The results are always consistent for a given position, so can provide a reliable way to add randomness to a material. This Vector Noise function is extremely cheap to compute, so it is not necessary to bake it into a texture for performance.

2. Perlin 3D Noise: Computes a version of Perlin Simplex Noise with 3D vector output. Each output component is in the range -1 to 1. Computing three channels of noise output at once is cheaper than merging the results from three scalar noise functions.

3. Perlin Gradient: Computes the analytical 3D gradient of a scalar Perlin Simplex Noise. The output is four channels, where the first three (RGB) are the gradient, and the fourth (A) is the scalar noise. This is useful for bumps and for flow maps on a surface

4. Perlin Curl: Computes the analytical 3D curl of a vector Perlin Simplex Noise (aka Curl Noise). The output is a 3D signed curl vector. This is useful for fluid or particle flow.

5. Voronoi: Computes the same Voronoi noise as the scalar Noise material node. The scalar Voronoi noise scatters seed points in 3D space and returns the distance to the closest one. The Vector Noise version returns the location of the closest seed point in RGB, and the distance to it in A. Especially coupled with Cellnoise, this can allow some randomized behavior per Voronoi cell. Below is a simple stone bed material using the distance component of the Vector Noise / Voronoi to modulate some surface bumps and blend in moss in the cracks, and the seed position together with Vector Noise / Cellnoise to change the color and bump height per rock.


Perlin Curl and Perlin Gradient can be added together in octaves, just as regular Perlin noise can. For more complex expressions, it is necessary to compute the gradient of the result of the expression. To help with this, place the expression to compute into a material function and use it with the helper nodes Prepare3DDeriv, Compute3DDeriv, and either GradFrom3DDeriv or CurlFrom3DDeriv. These use four evaluations of the base expression spaced in a tetrahedral pattern to approximate these derivative-based operations. For example, this network uses the gradient to compute bump normals from a bump height function.

New: PhysX 3.4 Upgrade

Unreal Engine now uses the latest version of NVIDIA PhysX, which is 3.4. This brings improved performance and memory usage for rigid bodies and scene queries (especially multi-core performance.)

This version of PhysX allows for Continuous Collision Detection (CCD) on kinematic objects, which allows for accurate collisions between very fast moving rigid bodies! In the animation below from a Robo Recall test level, a player is swiping a weapon to impact an oncoming bullet!

New features available to use in UE4 right away:

  • Continuous Collision Detection (CCD) support for kinematic objects (shown in the animation above!)
  • Faster updating of kinematic objects
  • Faster convex hull cooking

In future releases, we’ll expose more new physics features available in the latest version of PhysX.

New: Animation Editor Revamp

Animation-related tools have been split into separate asset editors rather than using one editor with multiple modes.

Many other improvements have been made as well. Functionality that is common to each of the editors is now generally found in the viewport and the improved Skeleton Tree.

  • The Skeletal Mesh editor has had modifications to its layout and to the asset details panel, specifically the materials and LOD sections have been overhauled.
  • The Skeleton editor has had its layout tweaked and the skeleton tree itself has been polished.
  • The Animation editor has had its layout tweaked and the asset browser has gained the ability to optionally add and remove its columns.
  • The Animation Blueprint editor has had its layout tweaked to more closely follow that of the standard Blueprint editor. The Anim Preview Editor can now optionally apply changes that are made to the preview’s properties to the class defaults.

Asset Shortcut Bar

You can jump between related animation assets that share a skeleton using the improved Asset Shortcut Bar.

Recording Moved to Transport Controls

Recording used to be performed via a button in the toolbar. Now it has been moved to a recording button in the transport controls, similar to Sequencer.

Preview Scene Setup

The objects in the scene and their animation can be modified in each of the editors via the "Scene Setup" menu. This allows preview animations to be applied, different preview meshes to be set (this is either specified for the skeleton or for individual animations) and additional meshes to be attached. Additional meshes are now specified as separate editor-only assets that define a set of skeletal meshes that are driven as slaves of the main mesh.

New: Animation Curve Window

You can now easily tweak Animation Curves using the new dedicated window for this in the Animation Editor. Curves are previewed live as you edit them.

Previously you could only configure curves on the animation assets themselves, but now you’ll set these for the skeleton instead.

New: Child Actor Templates

Child Actor Components added to a Blueprint can have their properties customized via Child Actor Templates.

Once you add a Child Actor Component, you will see an expandable template in the Details panel of the owning Actor's Blueprint Editor. From here, you can access all the properties of the Child Actor, including public variables. For example, if you have Blueprint_A

  • containing a PointLight Component with a public variable driving its color, and then make that Blueprint a Child Actor Component within *Blueprint_B*, you can now adjust that color variable from within *Blueprint_B's Details panel!

This is a dramatic improvement over previous behavior, wherein users were restricted to the default properties of the Child Actor Component and could only make updates via gameplay script.

New: Default Animation Blueprint

Allows you to assign an animation Blueprint to a skeletal mesh that will always be run after any animation Blueprint assigned in the component. This allows you to set up anim dynamics or other controllers that will always be applied, whether that mesh is viewed in the animation tools, a Sequencer cinematic or just placed in a level.

This allows for dynamics, controllers, IK or any other anim Blueprint feature to be related to a mesh and not have to be duplicated in every animation Blueprint intended to be used on that mesh.

‘Post process’ animation Blueprints also have their own native and Blueprint update step so parameters can be read or calculated for use in the animation graph.

New: Landscape Editing in VR

You can now create and sculpt terrain and paint landscape materials using motion controllers in VR!

You can summon the Landscape Editing tools from the "Modes" panel on your Quick Menu. Then choose a brush from the UI and start painting! If you hold the “Modifier” button on the motion controller, you can erase instead of painting.

New: Improved Support for Vehicles

We’ve changed where tire forces are applied. Previously, tire forces were applied at the vehicle’s center of mass. We now apply force at the tire’s center of mass which makes it easier to achieve load sway in cars.

We’ve also added Simple Wheeled Vehicle Movement Component which provides wheel suspension and tire friction without the complexities of engine and drivetrain simulation. This component allows you to easily apply torque to individual tires. All components inheriting from Wheeled Vehicle Movement Component can now be used on arbitrary components, and you no longer have to rely on the Wheeled Vehicle actor.

Existing content will automatically have Deprecated Spring Offset Mode set to true which will maintain the old behavior. You can tune this behavior further by changing Suspension Force Offset.

New: Improved Vulkan support on Android

Unreal Engine 4.14 is ready for shipping games with Vulkan support!

  • UE4 supports Android 7 (Nougat) devices with Vulkan drivers as well as the Samsung Galaxy S7 running a recent OTA update.
  • Many rendering issues have been fixed with the UE4 Vulkan renderer on Android devices.
  • The renderer will automatically fall back to OpenGL ES when launched on Android devices that are not Vulkan-capable.
  • Vulkan support on specific devices and driver versions can now be enabled or disabled using device profiles, with fallback to ES 3.1 and ES 2. This allows UE4 games to disable Vulkan support and use OpenGL ES on phones with incomplete or broken Vulkan implementations.

New: Support for Custom Depth on Mobile

Custom Depth is now supported in the mobile rendering path. Custom post-process materials can now sample from Scene Depth, Custom Depth as well as Scene Color.

As it requires post-processing, Mobile HDR must be enabled, and the feature does not currently work while Mobile MSAA is enabled.

New: Scene Capture Improvements on Mobile

When rendering scene captures, the Scene Capture Source settings that output Inverse Opacity and Depth values are now supported on mobile.

  • The "SceneColor (HDR) in RGB, Inv Opacity in A" option can be used to render objects with translucency into a texture which can then be alpha-blended over a scene or widget blueprint.
  • Similarly, the depth value can be used as a mask when using the resulting texture.
  • Generating the opacity data has some cost, so use "SceneColor (HDR) in RGB, 0 in A" for improved performance if you do not need opacity
  • Scene captures now work correctly on devices that do not support floating point targets, such as Galaxy S6 prior to Android 6.

New: Improved Cloth Skinning

We have added the ability to calculate our own mesh-to-mesh skinning data for clothing within the engine, so rather than using the render data exported in an .apx or .apb file we now use the render data UE4 already has. We take the simulation mesh from the APEX-exported asset and reskin our render data onto that mesh. This means that the final data should look as good as the data you originally imported.

This brings a few benefits. Normals could previously appear incorrect (see image below) and you were previously restricted to one UV channel. Both of these issues are solved with the new skinning system.

New: Material Attribute Nodes

Working with material attributes is now easier to read and less error prone as part of an ongoing update to improving extensibility of material properties.

  • GetMaterialAttributes - This node is a compact replacement for BreakMaterialAttributes
  • SetMaterialAttributes - This node is a compact replacement for MakeMaterialAttributes
  • BlendMaterialAttributes - This is a new node to allow easier blending of Material Attributes structures.

The main improvement for the Get and Set nodes is that pins are optionally added unlike the Break and Make nodes which expose all attributes by default. This allows graphs to avoid the old workflow that required manually connecting every attribute pin. Selecting a node shows the list of current pins in the details panel which can be expanded or removed. For an example, the material function below takes a set of attributes then blends the Base Color and Roughness to a shiny, red surface.

As well as reducing clutter in the graphs, these nodes take advantage of many backend changes to be forward-compatible with any custom material attributes that a project may need to add. Sharing materials between projects is more viable as missing attributes are automatically detected and users given a chance to handle the errors. Any attribute not explicitly listed on a node is passed through with the main Material Attributes pin, including any that are added after the material graph is created. With the Make and Break nodes a new pin would be added and all graphs would need manually updating.

The new Blend node is intended to allow blending of multiple sets of attributes using a mask, a common operation when working with detailed layers of materials. The example below evenly blends Red and Green materials (defined as functions) then has a node that applies a clear-coat to the result:

By default the Blend node performs a linear interpolation (lerp) for all material attributes using the Alpha input. The node has checkboxes to opt-out of blending on a per-vertex/pixel level to allow easier control when using vertex-only or pixel-only mask data. Similarly to the new Get and Set nodes above, the Blend node will automatically handle new attributes being added or removed and allows programmers to specify custom blending behavior when registering attributes.

New: Pre-Skinned Local Position in Materials

Materials now have access to a skeletal mesh’s reference pose position for use in per-vertex outputs. This allows localized effects on an animated character. The node can be shared for static meshes also for which it returns the standard local position. The example graph below creates a grid pattern in local-space which remains relative to the skeletal mesh during animation:

New: Improved Sequencer Shot Import/Export

Movie recording with frame handles per shot. Master sequences can now be rendered with extra frames at the start and end of each shot. These extra frames are cut into and out of by an Edit Decision List (EDL), which can be used in an external video editing package to adjust the cuts between shots.

New: Improved Camera Rig Crane

We’ve tweaked the camera rig crane behavior so that it mimics the movement of a physical crane.

  • Roll and yaw of the camera crane mount is 0.
  • Add toggles to lock the mount pitch/yaw for the crane. By default they are not locked so that the camera will stay level with the ground.

New: Sequencer Audio Recording

You can now record audio from a microphone while recording into a sequence.

New: Pose Driver Improvements

The Pose Driver node allows a bone to drive other aspects of animation, based on a set of ‘example poses’. In this release, it can now drive bone transforms as well as morph targets, for example driving a shoulder pad bone based on arm rotation. We have also added an option to use the translation of the driving bone instead of its orientation. Debug drawing has been improved to show each ‘target’ pose and how close the bone is currently considered to it.

New: Virtual Bones

We’ve added the ability to add ‘virtual bones’ to a skeleton. Virtual bones are not skinnable, but constrained between two existing bones on the skeleton and automatically have data generated for them for each animation on the skeleton. For example, you could add a joint that is a child of a hand, but constrained to a palm joint. Unlike socket, then this joint can be used in Animation Blueprint as a target - i.e. IK target or look at target - or you could modify them in AnimBP for later use.

This helps to improve character iteration time. Previously, if you change your target joint hierarchy for IK or aim, you have to do this in outside of engine, DCC, and import back all the animations to fix the animation data with that new joint included, but this virtual bone will allow you to skip that and do all of work in engine. However this will require recompressing of the animation data to include that joint back to the animation data. To see more practical usage of virtual bones, see "Animation Techniques used in Paragon" for more information. It can be used to make it easier to retarget or change reference frames for controllers and are used for orientation and slope warping in Paragon.

New: Morph Target Debug View Mode

The new Morph Target View Mode makes it easy to see which vertices are affected by each morph target.

New: Child Animation Montages

Create a Child Montage based on a parent Montage, allowing you to replace animation clips, whilst maintaining overall timing. Useful for adding variations to a move whilst guaranteeing it won’t affect gameplay.

New: MIDI Device Plugin

This release contains a new "MIDI Device" plugin for interaction with music hardware

This is a simple MIDI interface that allows you to receive MIDI events from devices connected to your computer. Currently only input is supported. In Blueprints, here's how to use it:

  • Enable the "MIDI Device" plugin using the Plugins UI, then restart Unreal Editor.
  • Look for "MIDI Device Manager" in the Blueprint RMB menu.
  • Call "Find MIDI Devices" to choose your favorite device.
  • Break the "Found MIDI Device" struct to see what's available.
  • Then call "Create MIDI Device Controller" for the device you want. Store that in a variable. (It’s really important to store the reference to the object in a variable, otherwise it will be garbage collected and won’t receive events!)
  • On your MIDI Device Controller, bind your own Event to the "On MIDI Event" event. This will be called every game Tick when there is at least one new MIDI event to receive.
  • Process the data passed into the Event to make your project do stuff!

New: Landscape Rotation Tool

The landscape mirror tool can now flip the reflected geometry parallel to the mirror plane, to create diagonally-opposed multiplayer maps.

New: Improved Mesh Material Slot Importing

The material workflow has been changed in order to give more control and information on how every material is used static and skeletal meshes and to improve material ordering inconsistencies when reimporting meshes.

Each element in the list is a material slot with the following information

  • Name of the slot
    • The name of the slot is used to match up the material on reimport. When a mesh is reimported it looks for this name in the FBX file to determine which sections should match up to existing materials. Previously this relied on index ordering which was easy to become out of order.
    • Meshes that were imported before this change will have their material slot set to none. Meshes imported after this change will have their material slot set to the imported material name by default.
  • Material asset reference
  • The original imported material name (in the tooltip)

In Blueprints and C++ it is now possible to use the material slot name instead of using a hard coded index to retrieve a material slot. Call Set Material By Name to set a dynamic material on a skeletal mesh or static mesh component. Using a name lookup instead of an index ensures gameplay code still works properly if the order of materials on a mesh changes.

New: Platform SDK Upgrades

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

  • Xbox One: Upgraded to August 2016 QFE 2
  • Playstation 4: Upgraded to PSR SDK 4.008.061
  • HTML5: Upgraded to Emscripten 1.36.13
  • macOS: Now supports 10.12 Sierra, Xcode 8.1
  • iOS/tvOS: Now supports iOS10/tvOS10, Xcode 8.1

New: Blueprint Library for Mobile Downloading/Patching

The new Mobile Patch Utilities Blueprint library contains all the functionality required to allow a mobile game to download and install game contents and patches from a cloud website instead of being distributed as part of the initial download from the App Store.

There is functionality to determine if updated game content is available, initiate the download, track progress, handle any errors and finally install the content paks that are downloaded successfully. Functionality to check for sufficient storage space and WiFi connectivity is also available, so the blueprint can warn the user in such cases. Both Android and iOS are supported.

New: Amazon GameCircle Plugin for Kindle Fire

A new Online Subsystem GameCircle plugin is now included!

GameCircle Achievements, Leaderboards, and Friends is supports as well as Amazon In-App Purchases. Enabling the plugin will provide access to a new Amazon GameCircle project settings panel under the Plugins category. Changes to the AndroidManifest.xml for Fire TV may be enabled here.

New: Live GPU Profiler

UE 4.14 includes a real-time GPU profiler which provides per-frame stats for the major rendering categories. To use it, enter the console command ‘stat gpu.’ You can also bring these up in the editor via the ‘Stat’ submenu in the Viewport Options dropdown.

The stats are cumulative and non-hierarchical, so you can see the major categories without having to dig down through a tree of events. For example, shadow projection is the sum of all the shadow projections for all lights (across all the views).

The on-screen GPU stats provide a simple visual breakdown of the GPU load when your title is running. They are also useful to measure the impact of changes instantaneously; for example when changing console variables, modifying materials in the editor or modifying and recompiling shaders on the fly (with recompile shaders changed).

The GPU stats can be recorded to a file when the title is running for analysis later. As with existing stats, you can use the console commands ‘stat startfile’ and ‘stat stopfile’ to record the stats to a ue4stats file, and then visualize them by opening the file in the Unreal Frontend tool.

Profiling the GPU with UnrealFrontend. Total, postprocessing and basepass times are shown

Stats are declared in code as float counters, e.g:

DECLARE_FLOAT_COUNTER_STAT(TEXT("Postprocessing"), Stat_GPU_Postprocessing, STATGROUP_GPU);

Code blocks on the rendering thread can then be instrumented with SCOPED_GPU_STAT macros which reference those stat names. These work similarly to SCOPED_DRAW_EVENT. For example:

SCOPED_GPU_STAT(RHICmdList, Stat_GPU_Postprocessing);

GPU work that isn’t explicitly instrumented will be included in a catch-all [unaccounted] stat. If that gets too high, it indicates that some additional SCOPED_GPU_STAT events are needed to account for the missing work. It’s worth noting that unlike the draw events, GPU stats are cumulative. You can add multiple entries for the same stat and these are aggregated across the frame.

Certain CPU-bound cases the GPU timings can be affected by CPU bottlenecks (bubbles) where the GPU is waiting for the CPU to catch up, so please consider that if you see unexpected results in cases where draw thread time is high. On PlayStation 4 we correct those bubbles by excluding the time between command list submissions from the timings. In future releases we will be extending that functionality to other modern rendering APIs.

New: Improved Merge Actor Texture Atlas (experimental)

We’ve improved how texture space is utilized when merging actors together and combining materials, by introducing a new option to generate a weighted (binned) atlas texture, instead of having a atlas-texture in which each material is equally weighted.

(Left: Equal-weighted materials. Right: Binned method) The new functionality first calculates the importance of an individual material according to the maximum sized texture it samples. These values are then used to calculate the amount of space the material should occupy and to iteratively add each texture to the atlas-texture. This makes the atlas-texture more representative for the input materials because it takes the original texture data size into account for the resulting space it occupies in the atlas texture.

New: Android Support on Linux

Thanks to pull requests from the community we now have Android support for Linux. CodeWorks for Android from NVIDIA for Linux is the easiest way to set up the NDK and SDK tools needed. In addition, OpenJDK 1.8 should be installed; set JAVA_HOME to point to your install. Please note Android Vulkan on Linux is not supported at this time.

New: Media Player Editor

You can now drag and drop files from your computer into the Media Player’s viewport, thus allowing you to preview video files without having to create a FileMediaSource asset first

  • A tab for decoder performance statistics has been added. The output depends on the player plug-in being used for playback

New: VR Multiview Support for Mobile

You can now use the mobile multiview path on supported devices! Mobile multiview is similar to instanced stereo on the desktop, and provides an optimized path for stereo rendering on the CPU.

To use this feature, enable it in your Project Settings, under the VR section. For the feature to work, Android build settings should be set to OpenGL ES2, Mobile HDR should be disabled, and instanced stereo should be disabled. Currently, the feature is compatible with modern Mali-based GPUs. If you package with the feature on, but don't have a compatible GPU, it will be disabled at runtime.

This feature is still considered experimental as we verify compatibility with more features and devices.

Enable Mobile Multiview in your Project Settings menu as seen above, then restart your editor for the changes to take effect.

New: Layer Support for SteamVR and PSVR

Layer support has now been added for both SteamVR and PSVR! It works exactly like it does for the Oculus Rift plugin, using the Stereo Layer component.

New: VR Loading Movies

The engine now supports loading movies on Oculus, GearVR, SteamVR, and PSVR. These run on the rendering thread, and can mask framerate hiccups as you load up your content. To use the splash screen, you can set a texture using the "Set Splash Screen" node, or choose to automatically have it appear when you load a map with the “Enable Auto Loading Splash Screen” node.

New: PSVR Support for Multiple Framerate Targets

We now support native 90Hz to 90Hz reprojection and 120Hz to 120Hz reprojection on the PSVR! This means you can opt in to running at a higher framerate to minimize latency and reprojection artifacts. The engine will limit your framerate to your selected option, but it’s still your responsibility to make sure you consistently maintain that framerate!

New: Multitouch Support in Windows

Touch events will now be generated in Windows 7, 8, and 10 when using a touch screen. This will enable touch enabled games and experiences on new Windows tablets and also enables testing touch controls for mobile games without having to deploy to a target device.

New: Fast Asynchronous Loading System (experimental)

Cooked builds can now use a completely new Event Driven Loader which is far more efficient than the old streaming code. Games using the EDL should see the load times drop by about 50%, but in many cases it may be dramatically faster. The Event Driven Loader comes with an unified code path for loading assets. This means that all packages will be loaded using the new async path instead of the old blocking path. EDL is currently an experimental feature and disabled by default, but can easily be enabled through Project Settings.

New: Simplified Game Mode and Game State Classes

We’ve added the new Game Mode Base and Game State Base classes as parents of existing classes Game Mode and Game State. Core features needed by all games are now in the Base classes, while legacy and shooter-specific features are in the Game Mode/Game State. Newly-started projects will inherit from the Base classes, while existing projects will default to using their legacy counterparts. Additionally, some new functions have been exposed to Blueprints.

This change is part of an ongoing effort to update older gameplay classes to be easier to understand and subclass for projects of all types. All of the samples other than Shooter Game have been updated to use the Base classes, while Shooter Game shows how to use some of the more shooter-specific features in the legacy classes. Game Mode/Game State will continue to be supported, and you should subclass the version which is more appropriate for your game.

New: Faster Network Replication

An internal re-factor was done to how we replicate properties from the server to connected clients.

We have modified the code to more efficiently share property replication work across many connections. Before this change was made, we used to only share the work of unconditional properties (properties registered with DOREPLIFETIME rather than DOREPLIFETIME_CONDITION). We now share the work for all types of properties. What this means, is the work we do to check when properties have changed (and need to be sent), happens way less often.

This has shown to have an increase internally by as much as 40%. We have more work to do here, but wanted to share this good news and progress with you in the meantime!

Release Notes


  • New: Added an “Enable AI System” flag to the World Settings that controls whether the AI System will be created for the given map.

  • Bugfix: Fixed an issue with AI Sense Sight’s time slicing unintentionally skipping queue-aging if the given time limit was reached.

  • Bugfix: Fixed an issue basing whether the AI should turn or not by comparing the current desired rotation vs the last update's desired rotation. The AI should be turning based on whether or not the current desired rotation is different from the rotation of the Pawn.

  • Improvements for the consistency of loudness usage in AI Sense Hearing.

  • Minor cosmetic fix to EQS test scoring function’s preview.

  • Selecting Geometry trace mode will no longer project onto the Nav Mesh first in the Projected Points EQS generators.

Behavior Tree
  • New: Expanded the BT Decorator Is At Location function with an option to use AI Data Provider.

  • New: Multi-node comments are now supported in the Behavior Tree editor. This is similar functionality to the Blueprint editor.

  • Bugfix: Fixed an issue with BT Decorator Compare BB Entries function so that it works regardless of the order of the supplied BB keys.

  • Bugfix: Blackboard key synchronization mechanics correctly handle more edge cases and complex inheritance scenarios.

  • Bugfix: Fixed an issue in propagation of persistent Blackboard keys resulting in these keys missing or being doubled in child Blackboard assets.

  • Bugfix: Fixed an issue for derived Blackboard sometimes getting post-load mechanics run before their parents.

  • Bugfix: Aborting previous movement requests as part of requesting a new one no longer resets the agent’s current velocity.

  • Bugfix: Blueprint “AI Move To” function no longer uses the default AI Controller’s navigation filter.

  • Bugfix: Fixed navigation export for landscape not handling mirroring and async gathering correctly.

  • Bugfix: Fixed an issue with navigation export for the capsule component.  

  • Bugfix: Navlink’s “Snap to cheapest area” mode now works correctly with dynamic navmeshes.

  • Bugfix: Navmesh generation no longer gets stuck in an infinite loop.

  • Bugfix: Fixed an issue with parameters of vehicle RVO avoidance.

  • Bugfix: Fixed an issue with Path Following Component for “Has Reached” not using the Goal’s Radius when “Use Nav Agent Goal Location” is set to false. When “Use Nav Agent Goal Location” is set to true, we want to avoid using the Goal’s location on the navmesh, but instead the acceptability of a radius should be based on the Goal’s radius.

  • Path Following Component distinguishes between partial and full paths in terms of acceptance radius used. This will make partial paths behave as expected with non-trivial big acceptance radii.

  • Layer limit for navmesh generation has been increased.

  • Update Move Focus will only clear the focus if the path following component is idle. This keeps the AI rotated in the correct direction when movements get paused.


  • New: Added “Strip Animation Data On Dedicated Server” option to Animation Settings. This will remove all compressed data from cooked server data. Disabled by Default.

  • New: Added “Aim Offset Look At” node. Aim Offset node that drives its inputs automatically from a Target Location and a Source Socket.

  • New: Added Conversion settings to the Alembic import process. This enables the following:

    • Inverting UV Channels.

    • Applying a conversion matrix to the Alembic File.

    • Presets for Autodesk Maya and 3DS Max.

  • New: Added “LegIK” Anim node, which supports two or more bones per limb with min compression rotational constraint.

  • New: Added logic to separate overlapping notifies onto separate tracks. Notifies can no longer end up hidden from the user by occupying the same time on the same track.

  • New: Added the option to copy selected Morph Target names to clipboard.

  • New: Added a start time to Montage Play node and Play Slot Animation as Dynamic Montage.

  • New: Added the ability to skip empty “preroll” frames when importing an Alembic file and improved the frame information for the Import Options UI.

  • New: The animation “Sequence Length” property can now be read in Blueprints.

  • New: Added the ability to open Anim Montage to open asset from the context menu of the segment.

  • New: Added ability for selected Morph Target to view the modified vertices while in the Persona.

  • New: Added option to now insert current pose to the Pose Asset with Insert Pose.

  • New: Added SmartName Deterministic Cooking:

    • SmartName discards GUID during cooking and DisplayName becomes the identifier during cooking.

    • The GUID created nondeterministic cooking causing patch size to become huge without any actual data change.

  • Bugfix: Fixed a crash when attaching slave components with differing bone counts.

  • Bugfix: Fixed a crash with retargeting Additive Animation Montage.

  • Bugfix: Fixed a crash when routing a wire through multiple re-route nodes in an Animation Blueprint.

  • Bugfix: Fixed a crash in “Get Post Curve” when importing a pose to pose asset.

  • Bugfix: Fixed a crash when retargeting Anim Blueprint with “Allow remapping to existing assets” was enabled.

  • Bugfix: Fixed a crash when calling “Set Animation Mode” on a component with no Skeletal Mesh.

  • Bugfix: Fixed an issue when re-creating a skeleton due to a merge conflict it will add all Skeletal Meshes back to the skeleton so that it recreates all hierarchy.

  • Bugfix: Fixed an issue with invalid bound calculation in Calculate LOD Count.

  • Bugfix: Ensure the runaway loop counter gets reset when processing parallel animation.

  • Bugfix: Fixed an issue for fast path struct copy being broken for Vectors.

  • Bugfix: Fixed an issue for warning triggered by calling “Get Bone Transform” before the master pose component has been registered

  • Bugfix: Fixed an issue where layered blend per bone odd/even connection counts alternately working/not working

  • Bugfix: Fixed an issue with offset of the floor mesh in Persona when Auto-Alignment was enabled.

  • Bugfix: Fixed an issue with pose flickering on LOD change when using “Layered Blend by Bone” node.

  • Bugfix: Fixed an issue to stop empty states being created when dragging montages into State Machines.

  • Bugfix: Fixed an issue with Anim Instance “Is Running Parallel Evaluation” check to correctly test if the Skeletal Mesh Component still references the Anim Instance being used.

  • Bugfix: Fixed an issue with “generated” string appearing for a Skeletal Mesh LOD that was previously auto-generated but had been reimported from an FBX.

  • Bugfix: Fixed an issue with displaying one more frame for an animation.

    • For example, for 30 frames, it was displaying 0-30, which is incorrect and should be 0-29.

    • To avoid confusion, now it doesn’t display key count. It will display the last frame number, so it will look different, but the data is still the same.

  • Bugfix: Fixed an issue with a number of cases where sub-instance animation instance functions weren’t being correctly passed through the main instance.

  • Bugfix: Fixed an issue with “auto” check box in the Morph Target panel.

  • Bugfix: Fixed an issue with functionality of “show uncompressed animation” option in Persona viewports.

  • Bugfix: Fixed an issue with entries in the Anim Curves tab losing “auto” state when hidden/reshown.

  • Bugfix: Removed errant asterisks in the tooltips on the “Rotation Multiplier” node.

  • Bugfix: Fixed incorrect tooltips on the “Hand IK Retargeting” node.

  • Bugfix: Fixed an issue in montages where the wrong section was updated with changes from a Details panel when clicking on a different section.

  • Bugfix: Fixed an issue when duplicating an Anim Sequence that has been layer-edited would apply the layer twice.

  • Bugfix: Fixed an issue where Geometry Cache objects would not be visible in Standalone (packaged) builds.

  • Bugfix: Fixed an issue with keyboard shortcuts for Pose Asset editor panel.

  • Bugfix: Fixed an issue with keyboard shortcuts in the Curve Viewer panel.

  • Bugfix: Fixed an issue with notify states not ending when the Animation Instance was cleared.

  • Bugfix: Fixed an issue with orphaned transition nodes being created when they were duplicated or pasted without two valid pin links.

  • Bugfix: Fixed an issue with Override Materials hanging around when setting Skeletal Meshes.

  • Bugfix: Fixed an issue with pin defaults on sub-instance nodes overwriting the defaults on the inner class.

    • The class defaults will now be copied out to the pin.

  • Bugfix: Fixed an issue with pose asset blending.

    • Normalization has been removed for weights that are less than one so the poses do not instantly snap.

  • Bugfix: Fixed an issue where Pose Asset was evaluating the curve in the wrong frame.

  • Bugfix: Fixed an issue where the Pose Asset editor list was not updating when changing the source animation.

  • Bugfix: Fixed an issue with “Remove Linear Key” for Additive Animations since DDC has been added.

  • Bugfix: Fixed an issue with “Root Motion from everything” calculating incorrect root motion when animations haven’t been ticking.

  • Bugfix: Fixed an issue with sample rate not applied for non-default sample rate when importing an animation.

  • Bugfix: Fixed some inconsistencies in IK editing in the viewports inside Persona when changing effector spaces.

  • Bugfix: Fixed an issue with split struct pins on animation nodes sometimes losing their links on editor restart.

  • Bugfix: Fixed an issue where sub-instance automatic properties would appear in the Details panel.

  • Bugfix: Fixed a typo in “Root motion from everything” accumulation code where we calculated root motion weight using the wrong variable.

  • Bugfix: Fixed an issue where Undoing and Redoing would force the Skeletal Mesh into T-pose.

  • Bugfix: Fixed an issue when importing Morph Targets with fixed frame count.

  • Bugfix: Fixed an issue with Blendspace triangulation.

  • Improved editor response during dragging on additive frame index (stop animation compression happening for each mouse move).

  • Non-POD structs can now be copied using the 'fast path' in animation blueprints.

  • Prevented invalid GUIDs from being saved into SmartName containers.

  • Removed save warning about empty animations from assets that contain curve data.

  • Animation Curve Cached UID list has now been moved to Bone Container from Anim Instance in preparation of supporting curve linking to bone feature, so that you could cull out for a certain LOD.

  • Changed “Create Physics Asset” in the context menu for Skeletal Meshes to enable creation of a Physics Asset without having to assign it to the Skeletal Mesh. This makes it easier to make new assets for Capsule Shadows.

  • Changed inline curve name editing to only change the name of that specific curve, instead of renaming the SmartName itself.


Animation Blueprint
  • Bugfix: Fixed a crash using anim debug with sub-instances that are preceded by branching nodes.

  • Bugfix: Fixed a crash when forcing ref pose during Anim Blueprint initialization when using sub anim instances.

  • Bugfix: Fixed a crash when using sub-instances in non-entry states.

  • New: Added Skeletal LOD workflow refactor.

    • Now we track source files for LODs to save time when reimporting LODs often.


  • New: Added a debug command to solo specific sound waves, sound cues, and sound classes.

  • New: Audio thread is now enabled by default.

  • New: Gameplay Statics’ “Create Sound 2D” and “Spawn Sound 2D” now have a boolean parameter that specifies the sound should persist across level transitions.

    • Note that the returned component must continue to be referenced by something (Game Instance is a good option) or else it will be garbage collected and the sound will stop.

  • New: Looping sounds are now searchable by the asset registry.

  • New: Making ability to suppress subtitles a UPROPERTY.

  • New: Added support for parsing .wav files with a WAVE_FORMAT_EXTENSIBLE format chunk.

  • New: Added support for pausing individual audio components.

  • Bugfix: Fixed a crash which would occur when copying and pasting an undefined custom sound node from one project to a project which doesn't have the custom node.

  • Bugfix: Fixed an issue for one-shot sound wave instances triggering unintentionally from active sounds when volume mix is 0.

  • Bugfix: Fixed an issue for sound cue delay not consuming startime correctly.

  • Bugfix: Fixed an issue with attenuation on 2D multi-channel sound sources.

  • Bugfix: Fixed an issue with concurrency resolution rule stop quietest with looping sound waves.

  • Bugfix: Fixed an issue with sound node distance cross fade for case of looping sounds.

  • Bugfix: Fixed an issue where Undo in Sound Cue editor does not undo looping changes.

  • Bugfix: Fixed various thread safety issues with occlusion on the audio thread.

  • Hooked up compression quality settings to AT9 files.

  • Prevent procedural sound waves from stopping if they generate 0 bytes of data.

  • Read Compressed Info calculates duration for ADPCM audio.


  • New: Added a json summary report file generation as part of all automated test summaries.

  • New: Functional tests now support warnings as errors on a per test basis.

  • New: Included .tps files in the installed build to make it easier for users to identify third party software in use. Also included source for additional programs to Installed Build.

  • New: Added Documentation/Extras in Installed Build.

  • Bugfix: Fixed an issue with Test Equal Add Error Message in Automation Test Base

  • Bugfix: Fixed issues with Mobile Device Interface in Installed Builds.

  • Bugfix: Fixed an issue with Android sessions not appearing in the Session Frontend.

  • Bugfix: Fixed support for PS4 in Installed Builds.

  • Bugfix: Fixed various connection reliability issues with TCP Message Transport used for automation testing on mobile devices.

  • Bugfix: Fixed various issues for PS4 deployment.

  • Bugfix: Fixed support for Xbox for Installed Builds created via Build Graph script.

  • Automation - Presets are now stored in json files stored in Config so they can be shared, and human readable. Working on screenshot automation, getting it where it needs to be to permit us to have repeatable tests for comparison.

  • Each session launched from the Session Frontend Launch tab now has a unique GUID and they will correctly appear as separate sessions in the Automation tab.

  • Excluded some more intermediates from the Installed Build.

  • Functional Tests now run correctly in non-editor build.

  • Functional tests will no longer move the camera if the user is using a debug camera.


  • New: Added a new “Is Standalone” node which returns true if the game is running in Standalone.

  • New: Added ability to change curves used by a Timeline at runtime.

  • New: Added an option in Editor Preferences Blueprint section to “Display Unique Names for Blueprint Nodes” rather than the node type.

  • New: Blueprint Nativization: Reduced size of the executable file.

  • New: Added ability to flag Components added via Blueprints as editor only.

  • New: Exposed “Get Component By Class” to Blueprints.

  • New: Exposed the method to "Is Any Rigid Body Awake" for primitive components to Blueprints. This enables a Blueprint to determine if Physics Simulation is being done on the object and fulfills a request to determine if an object is "awake" or "asleep".

  • New: Replication condition property flags are now exposed to Blueprints. This can be set in the Properties Details panel.

  • New: Single layout Blueprint is no longer an experimental feature. The option to disable it has been removed.

  • New: Widget and Animation rich diff tool is no longer experimental.

    • Some changes are not detectable by the diff tool, but they are mentioned in a warning to the user.

  • New: Enabled instances of Hierarchical Instanced Mesh Components to be moved around with the transform widget in the Blueprint Editor, just like Instanced Mesh Components!

  • Bugfix: Fixed a crash in the Blueprint Profiler when compiling or profiling that had the following:

    • Contains a loop.

    • Nested Macros.

    • Collapsed Nodes.

    • Called parent functions or events.

  • Bugfix: Fixed a crash caused when compiling a Blueprint after hot-reloading its base class.

  • Bugfix: Fixed a crash when compiling particularly cross-dependent Blueprints.

  • Bugfix: Fixed a crash when trying to pick a debug world for the Blueprint debugger.

  • Bugfix: Fixed a crash when implementing an interface to a child Blueprint and then implementing it with a parent Blueprint.

  • Bugfix: Fixed a crash that could occur when reparenting a child Blueprint class that had inherited its default scene root component from the parent class.

  • Bugfix: Fixed a crash that would occur on a right-click in the Blueprint editor’s component tree view after having copied one or more BSP actors to the clipboard.

  • Bugfix: Fixed a crash that could happen when pasting a copied “Select” node.

  • Bugfix: Fixed a crash on load in “Remove Node and Promote Children” when removing a corrupted SCS node if it has no parent link (the children are moved to the root node instead).

  • Bugfix: Fixed a rare crash in “Get Default Value Visibility” after removing a pin from a Blueprint node.

  • Bugfix: Fixed a crash when one attempts to generate an abstract class from a Blueprint.

  • Bugfix: Fixed a crash in FCDODiffControl when CDOs being compared had different numbers of properties.

  • Bugfix: Fixed a crash that could occur when pasting graph nodes with orphaned connections to a different graph.

  • Bugfix: Fixed a crash when deleting many Blueprint assets.

  • Bugfix: Fixed an issue where a function, created from collapsed nodes, cannot have a parameter of a weak pointer type.

  • Bugfix: Fixed an issue with assets referenced by a function’s local variables won’t be garbage-collected.

  • Bugfix: Fixed an issue where the Blueprint Editor viewport now correctly displays the result of an undo action that changes the default transformation of the Blueprint Actor.

  • Bugfix: Fixed an issue where changes in User Defined Structure will be properly applied in local variables, without resetting the values.

  • Bugfix: Fixed circular dependencies introduced by default values on User Defined Structs that are now loaded correctly. This fixes on cause of data resetting to default on load.

  • Bugfix: Fixed an issue where compiling a Blueprint would trigger the World Outliner to sometimes detach.

  • Bugfix: Fixed an issue where entering “foreach” in the Blueprint Editor context menu will not result in “For Each Loop” being the first selection.

  • Bugfix: Fixed an issue where moving a variable from a child class to a parent class would break variable Blueprint nodes.

  • Bugfix: Fixed an issue in the Blueprint context menu where options would be unavailable when you hid a sub-level.

  • Bugfix: Fixed an issue so that the “Create Save Game Object” node will now change its output type to match the class you select.

  • Bugfix: Fixed an issue that caused comment bubbles to display incorrectly when using Play-In-Editor.

  • Bugfix: Fixed an issue where functions could lose inputs after adopting them from an interface.

  • Bugfix: Fixed an issue that would cause split-pins on latent “Gameplay Task” nodes to lose connection.

  • Bugfix: Fixed an issue that could hang the editor indefinitely during Blueprint Compilation.

  • Bugfix: Fixed an issue that prevented the option to split a struct pin from appearing on a “Get Variable” node.

  • Bugfix: Fixed an issue that prevented you from ctrl-dragging pin links from macro nodes.

  • Bugfix: Fixed an issue that would cause subsequent latent nodes to fail to execute once one was running.

  • Bugfix: Fixed an issue that would prevent saving a Blueprint after compiling a component that it used.

  • Bugfix: Fixed an issue where Blueprints were not properly inheriting their associated config file.

  • Bugfix: Fixed an issue with rotation struct input pins where splitting them would cause each of the values to shift to the wrong axis.

  • Bugfix: Fixed an issue in which data loss could occur for inherited component default value overrides within a child Blueprint class after recompiling a Blueprinted component class.

  • Bugfix: Fixed an issue that could lead to data loss at runtime when choosing to enable the optimized Blueprint component instancing path for a cooked build.

  • Bugfix: Fixed an issue that could lead to per-instance data loss in Blueprint-constructed components after renaming component variables in the components tree view.

  • Bugfix: Fixed an issue that would lead to Blueprint class compile errors caused by missing client-only component class reference properties in an uncooked server-only context (e.g. UE4Editor.exe -server)

  • Bugfix: Fixed an issue where “Custom Event” was no longer the top option when searching the Blueprint menu for “custom.”

  • Bugfix: Fixed the directions of parameters in functions like “Get Overlap Infos.”

  • Bugfix: Fixed an error when output references parameters of Blueprint Native Event are not in a specific order.

  • Bugfix: Fixed failed “ensures” when pasting linked Anim Blueprint nodes.

  • Bugfix: Fixed issues that could lead to per-instance component data loss after reconstruction of a Blueprint class containing one or more “Add Component” nodes in the Construction Script.

  • Bugfix: Fixed issues with Object Library. It now stores “Blueprint Generated Graph” object instead of “Blueprint” object.

  • Bugfix: Fixed an out-of-order registration issue with native and/or non-scene components and Blueprint-constructed components.

  • Bugfix: Fixed an issue with “Time Seconds To String” format so it matches the comment.

  • Bugfix: Fixed a validation of incompatible pines issues. It will now generate an error.

  • Graphs in a Blueprint can properly be deleted even if they were once part of an interface on the Blueprint.

  • Inherited components in a child Blueprint class will no longer trigger a warning message when the original component has been removed from its parent class.

  • Moving a child component in a child Blueprint doesn't force a parent to become dirty anymore.

  • Nested Default Sub-objects no longer trigger an assertion failure in “Static Allocate Object” when used by a Blueprint type.

  • Reduced PIE startup time significantly when auto-recompiling a Blueprint class with multiple dependencies.

  • Removed warning that would complain about “Make Struct” nodes that didn't have any properties exposed, enabling Blueprint users to return default struct data.

  • “Show World Context Object” markup is now fully inherited. Previously only inherited for one level of a hierarchy.

  • Stale breakpoints saved in Blueprint assets no longer trigger a warning on load. Message moved to 'Display' channel.

  • Struct Ref Pins in “Set Fields In Struct” node can no longer be split when optional pins as this created ambiguous behavior.

  • Blueprint function “Get Direction Vector” has been renamed “Get Direction Unit Vector” to reflect details of its result.

  • Can no longer drag child actor from World Outliner to a Level Blueprint and create an invalid actor reference.

  • Default event nodes in child Blueprints now wire up parent call inputs so you can use them as is without breaking functionality.

  • Duplicating levels that have Blueprints with “Knot” nodes attached to events will no longer fail with a "Graph is linked to external private object" error.

  • EaseIn/EaseOut descriptions corrected to match actual behavior.


  • New: Added a config based system for specifying which classes should be stripped on dedicated server and client builds.

    • Class names can be specified in the project cooking settings in the editor

    • All engine classes that relied on “Needs Load For Server” or “Needs Load For Client” have been moved over to the config based system.

    • “Needs Load For Server” and “Needs Load For Client” still function as they previously did.

  • New: Added a new file into the ini hierarchy to begin fixing the Engine/Base > Project/Default > Engine/Platform > Project/Platform confusion.

    • We now have Engine/Base -> Engine/BasePlatform -> Project/Default -> Engine/Platform -> Project/Platform. However, Engine/Platform will soon be deprecated as we move things over to Engine/BasePlatform, that are safe to move.

  • New: Added ability for arrays of structs to specify a property to be the key.

    • So, with LODGroups, the Name key inside the struct can be the unique key, so when you have multiple .ini files in the hierarchy overriding the same LODGroup by name, it will replace the first with the second, instead of adding two entries with the same name. Set by @ArrayName=KeyPropertyName. Per Object Config sections need a little different handling, which uses * (see Base

  • New: Added new Module Types: "ClientOnly" and "ServerOnly"enabling better control of when modules are compiled and loaded.

    • Can be used to slim down server / client builds.

  • New: Added some extra information to an assert when “Cpp Structs Ops” has not been initialized.

  • New: Added the ability for plugins to reside outside of the Engine/Plugins and Game/Plugins directory.

    • This is useful for plugins that are shared across game teams, but don't want to be placed in Engine/Plugins.

  • New: Accepting comma in milliseconds separator when parsing Timespan.

  • New: Minor changes to pak file security delegate. Now all files that don't exist in the pak file will be passed through the security delegate, regardless of whether they exist on disc or not.

  • New: Only accept "log=<filename>" and "abslog=<filename>" command line values if the filename has a ".log" or ".txt" extension.

  • New: Refactored handling of some UI and rendering code when running headless (i.e. with -nullrhi switch).

  • New: Upgrading an existing UProperty from FVector to FVector4 is now seamless and preserves data properly.

  • Bugfix: Fixed a rare crash when async loading objects caused by linker being detached too early, before other package’s import has been fully processed.

  • Bugfix: Fixed a crash on cooker exit due to unpredictable destruction order of static tickable objects and their collection.

  • Bugfix: Fixed a crash with potential memory corruption when loading Data Tables. It sometimes would allocate less memory than was required.

  • Bugfix: Fixed a crash in PhysX cleanup if an exception occurred during shutdown.

  • Bugfix: Fixed a thread safety issue in the load module code that could crash if multiple threads were trying to load the same module at the same time.

  • Bugfix: Fixed an issue where “Get All Assets” would not return data about live objects when passing bIncludeOnlyOnDiskAssets=false.

  • Bugfix: Fixed an issue with task graph memory leaks.

  • Bugfix: Fixed an issue with TMap deserialization in struct serializer and updated unit tests.

  • Bugfix: Fixed an issue to display a meaningful error and shutdown cleanly if Core modules fail to load on engine startup.

  • Bugfix: Fixed an issue so that dynamic delegates can no longer get double bound when copying an Actor.

  • Bugfix: Fixed a potential race condition and minor memory leak in FMonitoredProcess. This could result in the editor hanging on startup.

  • Bugfix: Fixed an issue where “Force Garbage Collection” might not force a GC immediately if run on a server with no clients connected.

  • Bugfix: Fixed a memory corruption when instancing subobjects of a TArray property.

    • Fixed a memory overrun when reading an SSL certificate.

    • Fixed an invalid memory access when shutting down FInputBindingEditorModule.

  • Bugfix: Fixed an issue where duplicate log lines appear when commandlet “Log To Console” is set.

  • Bugfix: Fixed an issue with FAssetPtr remapping issues for duplicated packages, which was a case with operations like Level Save As and Level Duplicate.

  • Bugfix: Fixed an issue with Malloc Binned “Get Allocation Size” for aligned allocations, which caused crashes with the poison proxy.

  • Bugfix: Fixed an issue with Parse “Value” when there is whitespace between the command and the argument.

  • Bugfix: Fixed an issue with “Is A” race condition during async loading.

  • Bugfix: Fixed an issue where Unreal Build Tool would fail when trying to delete a module’s manifest file in a non-existent directory.

  • Bugfix: Fixed an issue where newline escape sequence wasn’t written to the pipe.

  • FScopedCreateImportCounter will now always store the current linker and restore the previous one when it exits.

    • This should fix some of the linker warning messages reporting wrong package name.

  • Invalidate string asset reference tags after finishing up loading of an async package.

    • Fixes some problems with asset refs not updating correctly after a package was loaded asynchronously

  • Lines of output text from FMonitoredProcess are no longer truncated at the default pipe buffer size, and are no longer returned with trailing CR characters on Windows.

  • Made sure Skeleton assets are loaded before “PostLoad” is called on them to avoid crashes when async loading animations.

  • Silently skip creating exports from a package where the outer is also an export and has been filtered at runtime during loading.

  • Thread safety fixes for the async log writer + made the async log writer flush its archive more often.

  • Thread safety fixes when using the async loading thread.

  • We now abort a directory watch if we lose access to the directory in question to prevent an infinite loop.

Editor and Tools

  • New: Added a warning message to indicate that HLOD clusters do not have a valid proxy mesh, similar to the “lighting unbuilt” message.

  • New: Added a commandlet to enable command line importing of any asset type that the engine supports.

  • New: Added an ability to vsync the editor. This is disabled by default. Set “r.VSyncEditor” to 1 to enable it.

  • New: Added an option in the FBX importer to automatically convert the unit in the FBX file to Unreal Units.

  • New: Added asset cooking path length in their tooltips so that you can detect cooking path issue before you are cooking.

  • New Added checkbox for “Show All Advanced Details” config variable so that it will auto-expand all advanced property categories.

  • New added command line option to enable movie capture burnin.Use the commandline -UseBurnIn=yes.

  • New Added mesh simplification plugin picker to the Project Setting under Editor > Mesh Simplification. The menu to pick simplification plugins also contains a link to find other plugins in the Epic Games Launcher Marketplace.

  • New: Added metadata to remove “reset to default” button for certain properties.

  • New: added new shortcut “Ctrl + Shift + B” to build current level geometry.

  • New Added the ability to import grayscale Targa (.tga) files in the editor.

  • New Added the ability to search through all Editor Preferences and Project Settings at once. Use the selection in these windows at the top for “All Settings.”

  • New: Added the possibility to preview a wave sound in the Content Browser from the thumbnail.

  • New: Added Undo/Redo functionality to the Editor Preferences and Project Settings windows.

  • New: Changed and unified saved shortcuts across all editors.

    • Save As is now Ctrl + Alt + S.

    • Save All is now Ctrl + Shift + S.

    • Save Current is now Ctrl + S.

  • New: Added shortcut Ctrl+Shift+Space to quickly rotate through different viewports (left, up, front, back ,etc).

  • New: Changed the FBX batch import workflow to let the user fix all missing source files before starting the FBX batch import process.

  • New: The Content Browser now supports hiding/toggling specific asset detail columns.

  • New: Added the ability for Ctrl + Middle Mouse drag will give options to switch to different viewports.

    • Drag to Left, Right, Up, and Down will match the viewport intuitively.

    • Drag to Up-Left is Front, Up-Right is Back, Bottom-Left and Bottom-Right are both for the Perspective viewports.

    • Dragging exceeding a certain distance will jump to that viewport directly whereas dragging a little will bring up a popup menu showing which viewport it’s going to switch to.

  • New: Added a new view option for “Show C++ Classes” in the Content Browser to enable you to hide the C++ classes you may not want to see.

  • New: The Engine version including branch name will now be displayed in the Title bar by default.

  • New: Extended “Select all input nodes” function to general Blueprint editor.

  • New: FBX Exporter now exports all LODs.

  • New: The Date Time fields in the editor are now displayed and entered in the local user’s timezone.

    • The time entered is saved into assets using the value converted in the UTC timezone.

    • The timezone that is used is configurable in the Editor Settings  under Region & Language for Internationalization settings.

  • New: There’s now support for generating a “Content-Only” plugin from the new Plugin Wizard.

  • New: Added Show Flags for Widget Components.

  • New: Reference viewer now provides options to show/hide soft and hard references and dependencies with different line color.

  • New: Added Asset Picker support to the Script Interface properties.

  • New: Added unique asset icons for Sound Concurrency assets.

  • New: The Widget Reflector now has a configurable delay between clicking to take a snapshot and taking the snapshot, which is helpful for reflecting widgets in a state that involves the cursor or other timing factors.

  • New: Added the ability for users to specify a Base material to create Material Instances instead of just creating materials when importing an FBX.

  • New: Added project file to source control when creating a new project.

  • Bugfix: Fixed a crash when moving Instanced Static Mesh Component in editor when it had no mesh set, but had instances.

  • Bugfix: Fixed a crash on undoing a deletion of a mesh in mesh painting mode in the VR Editor.

  • Bugfix: Fixed an occasional crash on editor shutdown due to a race condition in FTcpMessageTransportConnection.

  • Bugfix: Fixed several crashes in the Session Frontend when viewing profiles.

  • Bugfix: Fixed a crash issue where making changes to components in the Blueprint editor when there is an active component in the component visualizer.

  • Bugfix: Fixed an issue where batching optimization for dragging components onto Blueprints. Adding thousands of static mesh components now takes seconds instead of up to an hour.

  • Bugfix: Fixed an issue so that comments will now be preserved on “Parameter” nodes when converting them to “Constant” nodes within the Material Editor.

  • Bugfix: Fixed an issue that prevented a material from being saved when copying a comment node from a Material Function to a Material.

  • Bugfix: Fixed an issue so that the Crash Report Client can now correctly restart Editor sessions that were run from the Launcher.

  • Bugfix: Fixed an issue where the cursor would remain hidden after left-clicking in the Orthographic view.

  • Bugfix: Fixed an issue that would cause Custom keyboard shortcuts to no longer switch between the Command and Control keys on Mac when the editor was restarted.

  • Bugfix: Fixed an issue so that debug lines will now render correctly in orthographic views if their thickness has been specified.

  • Bugfix: Fixed an issue where FBX and OBJ files containing a UV channel with no name were not imported correctly into the editor.

  • Bugfix: Fixed an issue so that the FBX importer will correctly re-import a mesh when the combined mesh checkbox was set to true.

  • Bugfix: Fixed an issue with “On Mouse Button Up” not resetting SButton’s Brush state from “Pressed” to “Hovered.”

  • Bugfix: Fixed some issues with the LODGroup workflow:

    • During FBX Import, LODs are now recomputed with the correct settings.

    • In the Static Mesh editor, Extra LODs are removed when changing the LODGroup.

  • Bugfix: Fixed various crashes when manipulating BSP geometry in the editor.

  • Bugfix: Fixed a crash while importing FBX scenes if objects contain procedural textures, which is not supported.

  • Bugfix: Fixed a crash when setting a closed loop on a Spline component which has no spline points defined.

  • Bugfix: Fixed an issue where the dialogue “Actors are referenced, are you sure you want to delete?” from appearing when you are copying a lot of actors to another level.

  • Bugfix: Fixed a warning that would spam the log when opening the Editor’s Blueprint menu.

  • Bugfix: Fixed an issue where an actor deletion while in Mesh Paint mode would not be undoable.

  • Bugfix: Fixed an issue where all collision would be disabled if you don’t auto-generate a simple hull when importing an FBX.

  • Bugfix: Fixed an issue where importing a Texture asset while an editor window was open for that asset would cause the Details Panel to disappear.

  • Bugfix: Fixed an issue where occasionally changing tabs in the Editor would cause the UI to freeze briefly and undock the selected tab.

  • Bugfix: Fixed an issue where painting override vertex colors on a SpeedTree mesh would cause its wind animation to cease or look incorrect.

  • Bugfix: Fixed an issue where structs containing enum values with whitespace characters would not correctly serialize when copied from the Details Panel.

  • Bugfix: Fixed an issue where Unreal Frontend and other standalone tools would not display tooltips on dropdown menu items.

  • Bugfix: Fixed an issue with assigning of materials on components would not work if you multi-select multiple components of a Blueprint and assign the Material.

  • Bugfix: Fixed an issue when choosing “Yes to All” was not functioning properly when asked to delete many actors.

  • Bugfix: Fixed an issue  with in-game console command parameter display to include all parameters.

  • Bugfix: Fixed an issue with loctext related warnings when opening the Blueprints submenus on the Level Editor toolbar.

  • Bugfix: Fixed an issue with missing widgets when using Mobile Preview mode with a Mobile HDR disabled project.

  • Bugfix: Fixed an issue with single player PIE so that the window position is correctly fetched and saved when running a dedicated server. This is held separately to stored positions for multiple client PIE.

  • Bugfix: Fixed an issue in the output log filter not updating when text was committed.

  • Bugfix: Fixed an issue where Mobile Packaging Wizard will not find any project maps if UE4 and the Project are installed on different drives.

  • Device button text in “Device Output Log” window should be more readable now.

  • Bugfix: Fixed an issue so that .exe icon is correctly set for packaged Windows games.

  • Bugfix: Fixed an issue so that String Asset Reference properties will now only open an Asset picker (not an actor picker) as the goal is to reference an asset.

  • Bugfix: Fixed an issue where “find culprit” dialog did not honor the user's choice.

  • Bugfix: Fixed an issue with Unreal Game Sync where database events were being returned out of order could cause builds to show as never completing.

  • Bugfix: Fixed an issue with Unreal Game Sync showing a build failure/warning dialog immediately if you submit while the build is yellow/red. This now ignores builds before your last submitted CL.

  • Bugfix: “Play in Standalone Game” does not assume -window as a launch parameter therefore you can now specify -window or -fullscreen.

  • "Select all input nodes" now have a corresponding "Select all output nodes" for nodes that are output nodes.

  • Deleting many assets at once will now batch them as a single source control command instead of one for each asset.

  • Directional Light icon in the viewport changed (the two arrows within the icon were removed), as the asset itself provide another arrow indicating the light direction.

  • “HighResShot” console command now supports the same functionality as the Editor UI version and improved the help with usage examples.

  • Improved editor hitching while using launch on by delaying package save until all data is cached.

  • Minor update to the layout of the User Defined Struct editor.

  • Improvements have been made to the Unreal Frontend Project Launcher Progress page:

    • The custom profile name is now visible above the progress bar when launching a profile.

    • The Task and Status views can now be resized.

    • Columns for “Errors” and “Warnings” have been added to the Task view to show which tasks have problems.

    • Previously completed tasks are no longer cleared when the launch is cancelled.

    • The message log will now only scroll to the newest message when the log is scrolled to the very bottom.

  • Removed the Experimental “Live Editor” feature from UE4

    • Live Editor was an early attempt at automation of editor features using external hardware, such as MIDI.

    • This feature was never fully completed and we have no plans to continue work on it.

    • If you’d like to use MIDI devices in your editor plugins or games, please check out the new “MIDI Device” plugin available in this release!

  • Unreal Game Sync: Improvements to “Clean Workspace” dialog.

    • Empty folders are now set to be deleted by default.

    • Added a context menu to select all/none/empty/default for a subtree, as well as to open Windows Explorer at that location.

  • We now export the collision mesh when exporting to FBX. Disabled by default.

    • Added an Editor Preference option to enable or disable the export of collisions. Editor Preferences > General > FBX Export Collision Mesh.

  • Focusing an Actor that has 0 size bounds now works.

  • Play in editor will no longer auto resume a game on focus received if it was previously paused.

  • Rebuild lightmaps commandlet now doesn't apply world transforms twice.

  • Removed duplicate platforms from deploy list in Unreal Frontend.

  • Scalability settings will no longer auto-apply if the low performance warning message is ignored.

  • Source file paths are now normalized when caching their state.

  • The Auto Distance Error value for Static Mesh LODs can now be set to a value smaller than 1.

  • The Hue value displayed in tooltips for colors within the Theme bar will now match the hue value displayed for that color in the Color Picker.

  • The orbit camera should no longer reverse zoom direction when zoomed with the mouse wheel.

  • The performance when selecting thousands of actors has increased and should no longer render the editor unusable when lots of actors are selected.

  • The pin-type filter now filters on both the localized and source type descriptions.

  • The placement mode now filters on both the localized and source item descriptions.

  • Undo/redo of mobility changes will also undo/redo the mobility changes on ancestors/descendants that were changed along with it.

  • Visual logger icon updated.

  • When importing a FBX file containing multiple animations, user can re-import any animation without overriding it with the first animation in the FBX file.

  • Updated Map and Set Properties so they can now be edited from within the Details Panel. Sets ensure that all of its elements are unique, and Maps ensure that all of its keys are unique.

Content Browser
  • New: Deleting folders in the Content Browser now removes the folder from disk.

  • Bugfix: Fixed a crash renaming a collection with multiple collections selected.

  • Bugfix: Fixed a crash when force deleting a blueprint with a child actor component from the Content Browser.

  • Bugfix: Fixed an issue with dynamic collections not returning anything.

  • Added ~ to the list of invalid characters for object/package names.

  • New: Added 180° rotation support to the Landscape Mirror tool.

  • New: The Landscape LOD visualization mode now renders material tessellation while in the Viewport is in Wireframe mode.

  • Bugfix: Fixed a crash entering Landscape mode when there is a Landscape in a sublevel that is loaded but hidden.

  • Bugfix: Fixed a crash editing Landscapes with the “r.LightPropagationVolume” console variable enabled.

  • Bugfix: Fixed a crash when applying a material with tessellation enabled to a landscape or when painting a material with tessellation on a newly added component.

  • Bugfix: Fixed a crash when duplicating a level containing a Landscape through the Content Browser.

  • Bugfix: Fixed a crash when loading duplicated Landscape levels.

  • Bugfix: Fixed a crash when merging levels containing a Landscape.

  • Bugfix: Fixed a crash with Landscapes caused by using undo after using the Move-To-Level tool and then selecting a Landscape Proxy in a sub-level.

  • Bugfix: Fixed a crash if a Landscape Layer Info object is force deleted while it is in use.

  • Bugfix: Fixed an inability to import Landscape Layer weight maps when creating a Landscape.

  • Bugfix: Fixed an issue that would cause Landscape Components to be invisible when using tessellation on a Landscape.

  • Bugfix: Fixed an issue with Landscape rendering errors after using the “Change Component Size” tool.

    • Also affects initial import of a Landscape with weight maps.

  • Bugfix: Fixed a regression with performance when importing Landscape heightmaps.

  • Bugfix: Fixed some small typos in the Landscape tutorial.

  • Bugfix: Reduced material update log spam when creating and editing Landscapes. Some will remain since Landscape fundamentally manipulates a lot of material instances.

  • Removed "Cmd: UpdateLandscapeSetup" log file spam during while editing World Settings on maps with landscape.

Material Editor
  • New: Added the ability to clear the preview mesh on a material instance.

  • New: Added the ability to highlight all nodes connected to an input.

  • New: Added tooltips to the inputs of the Material Final Result node.

  • Bugfix: Fixed a crash when loading cooked Materials in the editor.

  • Bugfix: Fixed an issue where "Select all linked nodes" function would not show up in Material Editor for output nodes.

  • Bugfix: Fixed an issue with incorrect subtitle timing and rendering when scrubbing.

  • New: Added better bulk import reporting so current progress through a bulk animation import can be seen, rather than only showing progress through the current animation.

  • Bugfix: Fixed a crash when changing scene settings and hitting undo in Persona with complex cloth active.

  • Bugfix: Fixed bounds calculations in Persona that include bones to respect LOD (and other required bones).

World Outliner
  • New: Added the ability to collapse and expand folders in the World Outliner.

Static Mesh Editor
  • New: Added Console Command "FORCELODGROUP" that will apply a Static Mesh LODGroup to selected groupless meshes in the editor. This can batch mesh-reduce (ie, Simplygon) all meshes in a level.

Source Control
  • Bugfix: Fixed an issue where history and merging do not work if the user has “format.pretty” setting in their gitconfig.

  • Silenced some redundant P4 errors that could be generated when running a “stat update” on a file. Some of the options produced errors when working with newly added files. These errors are now downgraded to infos like they are for the main stat command.

World Browser
  • Bugfix: Fixed a crash on Changing sub-level visibility under certain conditions.

  • Disabled use of World Composition with multiplayer PIE using separate process option, as it not properly supported now.

  • New: Added console variables to discard grass and/or scalable foliage data on load.

    • If set in the scalability settings, it reduces the memory requirements of the "off" setting at the expense of having to reload the level when changing the setting from "off" to a higher level.

  • New: Implemented filter to enable painting foliage on other foliage (e.g. vines on trees).

  • Bugfix: Fixed an issue where painting foliage on blocking "query" actors was not working. Actors which are not themselves moving only need to be set to "Query" to be blocking, but the foliage tool was checking for both "Query & Physics."

  • Bugfix: Fixed an issue where disabling 'Use Landscape Lightmap' option was skewing Procedural Foliage Instances.

  • Prevent landscape grass generated in the editor viewport from being duplicated for Play In Editor (PIE) sessions.

  • New: Added -mallocbinned commandline option to use it while cooking. Binned allocator is faster to cook in some cases.

  • New: Added experimental Partial Garbage Collection feature for cooker. Added “-partialgc” commandline option for cooker. Instead of cleaning all packages when GC, this cleans up packages which will not be required for cooking later.

  • New: Fixed an issue with deterministic cooking for bake distributions.

  • New: Improved peak memory usage by the cooker by only resolving string asset references for the current package being saved.

  • New: Now cooker processes async shader compilation while blocked doing other work. This gives a minor improvement in cook time.

  • Bugfix: Fixed an issue for partial LOD level deterministic cooking issue. Spawn Module now has its postload called before being used.

  • Cooker forces a shader compilation flush when it detects that it has passed the max memory budget. This helps to avoid out of memory problems when cooking large projects.

  • “Directories To Always Stage As UFS” now filters .uasset and .umap files. Cooked assets will no longer be replaced by their uncooked version during staging UFS.

  • Launch on in the editor will save required packages before cooking so that changes are correctly reflected.

  • New: Added an option to map the transform motion of a Skeletal mesh to the root bone on FBX export. This option is in the General Settings in the Miscellaneous section.

  • New: Added “Get Cine Camera Component” function from Cine Camera Actor.

  • New: Added option to convert a spawnable track to a possessable track.

  • New: Added option to create sub sequences for each master sequence shot.

  • New: Added the ability to keyframe Geometry Cache Actor properties in order to use it in sequencer.

  • New: Enable "Actor to Track" on the Cine Camera Actor as a keyable property.

  • New: Enabled subtitles for audio tracks.

  • New: Force the roll and yaw of the camera crane mount to be 0 so that the camera stays level to the ground. The yaw is controlled by the crane yaw control.

  • New: Sequencer can now playback Anim Montages.

  • New: Set Skeletal meshes to always tick pose and refresh bones when there's an Animation track in Sequencer.

  • New: Tweaked default Sequencer colors.

    • Audio track is brighter.

    • Transform, bool, event tracks are less saturated.

    • Recording subsection is more saturated.

    • Fade track now shows a gradient.

  • New: Added icons for Cine Camera, Camera Rig Rail, and Camera Rig Crane Actors.

  • Bugfix: Fixed a crash when using sequence recorder with -game. Added GEditor check.

  • Bugfix: Fixed an issue where it was impossible to animate a single component of a structure property while still enabling the original value for non-animated components to be set externally.

  • Bugfix: Fixed an issue where the values in the key editors in Sequencer would become out of sync with the property values.

  • Bugfix: Fixed an issue with the Fade track so that is only affects the current player and not all worlds.

  • Bugfix: Fixed an issue with Game Mode Override option in movie capture so that it works when capturing the Editor.

  • Bugfix: Fixed issues where properties were not getting bound when converting from Matinee to Level Sequence tracks.

  • Bugfix: Fixed an issue with Anim Notifies not working when playing an Animation on Blueprint-driven Skeletal meshes.

  • Bugfix: Fixed an issue with Anim Trails not playing in full with a Sequencer-driven animation.

  • Bugfix: Fixed an issue with byte and integer properties not being able to be exposed to Cinematics on Blueprints.

  • Bugfix: Fixed an issue where the cursor would jump around inconsistently when ending a drag.

  • Changed curve editor visibility so that it's no longer a toggleable saved config.

    • It's now just a toggleable state because it was unexpected to have Sequencer restart with the curve editor visible.

  • Changed FMovieScene3DTransformTrackInstance “Update” to properly update “Component Velocity.”

  • Disabled auto-possess player for recorded pawns.

    • This fixes a bug where if you record a Third Person Template character when you open the Sequence the recorded character will possess the viewport.

  • Restore state when stopping the level sequence player so that objects controlled by Sequencer return to their positions.

  • Spawnables now use deferred spawning.

VR Editor
  • New: You can now instantly reset the world’s scale to its default by tapping the touchpad button while gripping the world. This makes it easy to get back to your “Player’s Size” while editing.

  • New: You can now disable VR Editor Tutorial in Editor Preferences > Experimental > VR.

  • Bugfix: Fixed an issue with blurry toolbar icon when “Use Small Toolbar Icons” was enabled in the Editor Preferences.

  • Bugfix: Fixed various issues and regressions with Mesh Paint in VR:

    • Brush preview not being rendered for lasers/mouse when not actively painting.

    • “Full press” over actors that was preventing the UI from being clickable.

    • Brush cursor displayed when hovering over UI (including selection bar/close button).

    • VR transform gizmo getting in the way of everything while painting, it is now hidden while in Mesh Paint mode.

    • Not being able to fully interact with UIs after messing around with Mesh Paint

Gameplay Framework

  • New: Added a cvar “t.FPSChart.OpenFolderOnDump” to control whether or not FPS charts automatically open the profiling folder when stopfpschart is executed.

    • This can be useful to avoid a bunch of open windows while doing automated testing.

  • New: Added “Suppress Stacking Cues” flag to Gameplay Effect options to avoid sending a Gameplay Cue RPC for each instance of a stacking Gameplay Effect.

  • New: Added “GameModeBase” and “GameStateBase” classes as parents of existing classes “GameMode” and “GameState.” The core functionality needed by all games is in the Base classes, legacy and match-specific features are in the child classes.

    • Blueprint access has been added to Game State Base for “Has Begun Play”, “Has Match Started”, “Get Player Start Time”, “Get Player Respawn Delay”, “Game Mode Class”, and “Spectator Class.”

    • Game Mode Base “Must Spectate” and “On Change Name” are now called properly.

    • Added “Restart Player At Player Start” and “Restart PLayer At Transform” to manually control of where player pawns are spawned.

    • Updated the GameMode documentation to reflect these changes and add extra context.

  • New: Added access to both the game's “Unpaused Time Seconds” and “Time Seconds” from Blueprints.

  • New: Added the ability to set the mouse position from Blueprints via the Player Controller.

  • New: Components can now specify whether they replicate from the Blueprint Property editor.

  • New: Components that are referenced by an “Edit Anywhere” property but are not created as part of object construction can now be edited via the in-world component editing panel.

  • New: Cull Distance Volumes no longer globally update on every Actor property change. This should reduce hitches after changing properties entirely unrelated to cull distance in levels with large Actor counts.

  • New: More Cheat Manager functions have been made available to call and to override from Blueprints.

  • New: Added “Use Client Side Level Streaming” property added to World Settings.

    • When enabled, the server doesn't evaluate streaming volumes. Instead, each client independently decides what volumes to stream in/out, depending on its players' cameras.

  • New: Particle System and Audio Components now route “Activate” and “Deactivate” events to Blueprints.

  • The “Delta Seconds” passed to Tick functions when using a “Tick Interval” will now represent the amount of world time that has passed since the last tick of the function.

  • The levels of a world are now categorized into different collections: dynamic, static, or duplicated. Levels default to dynamic, and this preserves existing behavior.

    • Streaming levels can be marked as static in the Levels Details panel. This distinction has no effect on how the levels are rendered, but it will cause the levels to be placed into the corresponding collection.

    • Games may opt-in to duplicating the dynamic levels when the world is loaded, and they will be maintained separately from the original levels. The game may use these duplicated levels at runtime, if desired.

  • New: The logic for selecting which Game Mode to spawn for a URL can now be overridden in “Game Instance”, implemented in “Preload Content For URL”, “Create Game Mode For URL”, and “Override Game Mode” Class.

    • The rules for selecting GameMode based on map prefix or alias is now modifiable in the Project Settings > Maps and Modes under the advanced options.

  • Bugfix: Fixed a crash undoing "replace actor with" when replaced object constructs child actors.

  • Bugfix: Fixed an issue where after duplicating a level you would have two instances of a Child Actor.

  • Bugfix: Fixed an issue where Child Actors would sometimes be created at the wrong location.

  • Bugfix: Client-side only components attached to a replicated component will no longer be removed from the “Attach Children” array when a change to attachment is made on the server.

  • Bugfix: Fixed a check in Character Movement’s “Step Up” to properly account for distance the component is above the floor.

  • Bugfix: Fixed an out of date with Radial Force Component’s “Collision Object Query Params” by adding a “Begin Play” event callback.

  • Bugfix: Fixed an issue with Gameplay Statistic’s “Spawn Emitter Attached” using wrong scale when “Snap To Target (Keep World Scale)” option is used. It was being used as a relative scale. Also, improved the comments for “Spawn Emitter Attached.”

  • Bugfix: Fixed an issue with bounds calculations for local camera animations.

    • Correctly calculated bounds as local to the initial transform in the track.

  • Bugfix: Fixed issues with “Can Jump” inconsistencies with previous versions.

  • Bugfix: Fixed a crash during garbage collection after deleting Audio Volume.

  • Bugfix: Fixed a crash in GetPredictionData_Server() when a player is destroyed and the server Player Controller checks to see if it needs to force a network update. This, also, fixes similar crashes when calling a Character’s “Set Replicate Movement” when not on the server.

  • Bugfix: Fixed an error icon indicating lighting issues not going away after resolving the issue on a light that was created by copy/pasting a light that had a lighting issue.

  • Bugfix: Fixed some typos in “Only Trace While Ascending” and “Deproject Screen To World.”

  • Bugfix: Fixed UK2Node_GetInputAxisValue using default flag for “Override Parent” value on the created binding, causing  previous bindings to be squashed.

  • Bugfix: Fixed an issue with network replication for actors in “Always Loaded” sub-levels not working after seamless travel.

  • Bugfix: Fixed an issue with FPreviewScene-based worlds so that they now render correctly in-game.

    • Added new “Editor Preview” and “Game Preview” world types and deprecated old “Preview” world type.

  • Bugfix: Fixed an issue to prevent Camera Anims without a “Field of View” track from making any modifications to the camera’s FOV.

  • Bugfix: Fixed “Set Game Paused” now correctly returns whether the paused state was changed when setting it to false.

  • Component “Activate” functions now fire for “auto-activate” components if the component belongs to an actor placed in a level.

  • Component's are now correctly removed from their World's needs end of frame update list. This fixes a rare crash when a component is moved between worlds as part of seamless travel.

  • Consolidated rotation settings (Rotation Rate, Use Controller Desired Rotation flag, Orient Rotation To Movement flag) in a new "Rotation Settings" category. The Character Movement Component’s flag for “Use Controller Desired Rotation is no longer an advanced property. This makes it more easily discoverable.

  • Direct access to Static Mesh in “Static Mesh Component” has been deprecated. Please use “Get Static Mesh” and “Set Static Mesh” accessors.

  • Disabled some NaN checks in shipping builds.

  • Improved logic for when the transform of a static scene component can be modified.

  • Load game from slot will no longer sometimes fail if using a Blueprint defined class.

  • Mouse smoothing is now based on the application frame time rather than the dilated world time.

  • Native classes will now properly run construction script on PostEditMove.

  • Native Components created by “Create Default Subobject” that have been removed will no longer still exist in existing instances of that class.

  • Scene Component Attach Children will no longer periodically get duplicate entries on the client for some replicated components.

  • The FOV is now reset on the Player Camera Manager’s Camera Actor when it's initialized.

    • This fixes cases of stale FOV values after playing Camera Anims that don't end with the FOV at its base value.

    • Base FOV can now be edited in the Camera Anim properties. This enables you to specify what the FOV keys are relative to. Previously it was always using a base FOV of 90 degrees.

  • The position of the (null) bounding volume of an empty Text Render component is now correct.

  • Wind source components now correctly “Activate” and “Deactivate.”


  • New: Added a way to mark text in text properties as culture invariant.

    • This enables you to flag properties containing text that doesn't need to be gathered.

  • New: Added “As Time”, “As Date Time”, and “As Date” overrides to Blueprints to let you format a UTC time in a given timezone. This defaults to your local timezone. Previously you could only format times using the "invariant" timezone, which assumed that the time was already specified in the correct timezone for display.

  • New: FText properties/pins will now preserve their existing identity (namespace + key) where possible when changing the source text.

  • New: Translations are now exported/imported per-identity rather than collapsing identical strings within the same namespace.

    • This enables translators to translate each instance of a piece of text based upon its context, rather than requiring a content producer to go back and give the entry a unique namespace.

    • It also enables us to optionally compile out-of-date translations, as they are now mapped to their source identity (namespace + key) rather than their source text.

    • This change also adds FLocTextHelper as a high-level API for dealing with uncompiled localized text. This should be preferred for all new code rather than dealing with manifests/archives directly.

  • Bugfix: Fixed a crash when dealing with code-points outside the basic multilingual plane on platforms with UTF-32 FStrings.

  • Bugfix: Fixed a crash that could occur in the source code gatherer where it would sometimes underflow an array.

  • Bugfix: Fixed an issue where localized assets were not working with “Launch On” in the editor.

  • Bugfix: Fixed an issue where the PO exporter writing out invalid escape sequences.

  • FText can now format pre-Gregorian dates correctly.

  • Removed validity check on source cultures when remapping, as platforms may use invalid cultures that need to be remapped.

  • The internationalization system now correctly detects whether the local machine is in a timezone with daylight savings active

  • We now favor Traditional Chinese for Hong Kong and Macau.


  • New: World Origin rebasing has been added as an experimental feature!

    • This means that the World Origin can be different on both the client and the server.

    • This feature will continue to be improved over the next releases.

  • Bugfix: Fixed a crash that could occur with FCurlHttpRequest’s “Debug Callback”.

  • Bugfix: Fixed an assert that could occur when playing back a replay that was recorded on a client that uses torn-off actors.

  • Bugfix: Fixed an assert in channel cleanup code that could occur if the connection was cleaned up and there were “Keep Processing Actor Channel Bunches Map” in-flight still.

  • Bugfix: Fixed an issue where gameplay tags will work better with backwards compatibility in replays.

  • Bugfix: Fixed various issues with remapping objects that lose/gain relevancy.

  • Bugfix: Fixed an issue with replays that could cause scrubbing to a specific time to go to the wrong time.

  • Bugfix: Fixed an issue that could cause memory-constrained platforms (such as consoles) to run out of memory when scrubbing in replays in rapid succession.

  • Bugfix: Fixed an issue where replicated references that would remain null indefinitely due to becoming non relevant, and then becoming relevant again

  • Disable hot reloading when using single process MP PIE. This fixes some conflicts that can otherwise occur.

  • Don't strip map/package name from commandline on shipping config on dedicated server in the Game Instance’s “Start Game Instance”. Don’t ever parse “-replay” on dedicated servers. This enables specifying map name on servers via commandline.

  • We no longer record dormant actors in replays for better performance



  • New: Added “Simple Wheeled Vehicle Movement” Component which allows for n wheels with no motor simulation.

    • Exposed “Wheeled Vehicle Movement Component 4W” so that it can be added to any Blueprint.

  • New: Added “Get Bone Mass” and “Get Skeletal Center Of Mass” functions for Skeletal meshes.

  • New: Added more vehicle stats for the profiler.

  • New: BSP now supports returning texture coordinates from line traces.

  • New: Exposed “Grab Rotation” for physics handle component. Also introduce hard vs soft physics handle.

  • New: Exposed the ability to separate reverse and brake on vehicles.

  • New: Improved cook times for “Procedural Mesh” Component collision. Fixed issue where “Update Mesh Section” on Procedural Mesh may update wrong collision verts due to mesh being cleaned in cooking.

  • New: Improved warning when trying to create a constraint between different scenes.

  • New: Improvements to data caching for Destructible meshes on save. This gives an 8x-10x improvement in load times for more complex meshes.

  • Bugfix: Fixed a crash when a physical animation component’s mesh is changed out from under it.

  • Bugfix: Fixed an issue in PhAT so that multiple constraints can be selected and edited properly at the same time.

  • Bugfix: Fixed an issue where constraint component not using root body when no bone name is provided.

  • Bugfix: Fixed an issue where the constraint index was not being assigned correctly. Also, exposed “Find Constraint Bone Name” to Blueprints.

  • Bugfix: Fixed an issue with FConstraintingBaseParam’s “Contact Distance” clamping.

  • Bugfix: Fixed an issue with PhAT “Snap Constraint To Bone.”

  • Bugfix: Fixed an issue with physics handle component not accounting for bone rotation/offset.

  • Bugfix: Fixed an issue with “Set Root Body Index” so that it uses world space transform instead of reference skeleton.

    • Fixes a few issues when using ragdolls on Skeletal mesh assets that were imported with offset/rotation.

    • Also, fixes a crash when opening up old physics asset and changing its mesh.

  • Bugfix: Fixed an issue with vehicle suspension force offset to work from the spring location (in the z-axis) instead of the vehicle COM.

  • Bugfix: Fixed a crash caused by changing the collision response parameters of a Destructible mesh after it had been fractured.

  • Bugfix: Fixed a crash spawning complex Destructible meshes in multiplayer games.

  • Bugfix: Fixed a crash when creating a Destructible mesh from a static mesh that uses SpeedTree materials.

    • Added a warning message when attempting to do so now.

  • Bugfix: Fixed an issue with APEX Cloth disappearing if an actor containing a component with clothing had its custom time dilation set to 0.0.

  • Bugfix: Fixed an issue with box collision shapes not scaling correctly after using Merge Actor tool.

  • Bugfix: Fixed an issue with Destructible asset importing failing if one of the submeshes in the asset file had no geometry.

  • Bugfix: Fixed incorrect tooltips for collision channels.

  • Bugfix: Fixed an issue with line traces against a component not returning face index, where appropriate.

  • Bugfix: Fixed an issue with line traces against a specific component not returning closest hit in triangle mesh case.

  • Bugfix: Fixed an issue where mesh corruption in clothing assets would happen when importing a new mesh that requires a uint32 index buffer over a clothing asset that previously required uint16 indices.

  • Bugfix: Fixed an issue where scales like (1,0,1) not being clamped to something valid in physics code.

  • Bugfix: Fixed an issue where “Support UV From Hit Results” not informing user an editor restart is required.

  • Altered Skeletal mesh bounds calculations to ignore clothing actors if they aren't simulating on the currently active LOD.

  • Changed some exposed properties on Destructible meshes to be hidden as they are only supported for non-Destructible Skeletal meshes. This addresses an issue where Physics Shadow Assets were properties were visible.

  • Enforced block size of 16K for PhysX scratch memory when simulating.

  • Ensure that physics handle automatically wakes up any object it's grabbing on release.

  • Improved comments for Hit callbacks.



  • New: Add HarfBuzz support for proper text shaping in languages the require it such as Arabic.

  • New: Add support to Windows and Linux for swapping allocators with -ansimalloc, -binnedmalloc, and -binnedmalloc2 to enable easy comparison at runtime.

  • New: Added "Is Gamepad Attached" to Android so users can determine when a gamepad is attached to the device.

  • New: Added support for Android local notifications using the existing local notification Blueprint mechanisms. Using these Blueprint nodes will work on both Android and iOS now.

  • New: Added support for making the game window borderless (no system border or title bar) on desktop platforms. Disabled by default.

    • Enabling requires adding “UseBorderlessWindow=True” to [/Script/EngineSettings.GeneralProjectSettings] in DefaultGame.ini.

    • The game using this is responsible for adding a “Window Title Bar Area” widget to its UI, as well as window minimize/maximize/close buttons.

  • New: Adding interstitial ad support for Android using AdMob, including Blueprint functions.

    • Four functions have been added: “Load Interstitial Ad”, “Is Interstitial Ad Available”, “Is Interstitial Ad Requested”, and “Show Interstitial Ad.”

  • New: AndroidManifest.xml will now include the texture format used in packaging. The appropriate "supports-gl-texture" tags will be added for the texture format chosen at packaging.

  • New: Engine will select the first shader platform in [/Script/WindowsTargetPlatform.WindowsTargetSettings] as the current RHI.

  • New: Support Metal shader compiling when cross compiling on Windows.

    • This must be enabled in the IOS Build Settings page since it can significantly increase build time.

  • New: Enable the ability to change ports for a firewall to pass them through rsync. This addresses UE-24679.

  • New: Upgrade emsdk toolchain to 1.36.11 - emscripten.

  • New: When launching the app on iOS within the editor, the device console logs are piped into the Editor's Console Log window.

  • Bugfix: Fixed an issue with cooking for compressed content where the bit window used for compression was consumed by the wrong parameter.

  • Bugfix: Fixed a couple of problems with Mac app bundles modifying their content that made them incompatible with the Mac App Store.

  • Bugfix: Fixed an issue that was causing Sound Mixes to not properly finish at the end of certain sound effects when played on a device. Now, their behavior now matches PIE.

  • Bugfix: Fixed an issue that was causing the module Android_ASTCTargetPlatform to fail to load on Mac.

  • Bugfix: Fixed an issue where setting a new Touch Interface to none would cause any input present on the Virtual Joysticks to continue on indefinitely. Input now clears before setting a new Touch Interface.

  • Bugfix: Fixed an issue where shader compression used the cooking host platform instead of the target platform when selecting shader compression settings.

  • Bugfix: Fixed a race condition in threading code that affected pthread-based platforms, such as Linux, Mac, Android, iOS, etc. Threads are now properly joined instead of busy waiting.

  • Bugfix: Fixed an issue where iOS Movie Player can’t handle videos at resolutions that aren’t multiple of 16. Now an assert is thrown when attempting to play a non-power of 16 resolution.

  • Bugfix: Fixed an issue where occasionally a movie isn’t played on iOS.

  • Give a more friendly error message when UHT fails with an invalid error code. This will help when trying to build without the prerequisites installed.

  • Make the "Running <Projectname> on <Device>" Toast stay active when launching a game to an Android device until the game has finished running on the device. Previously the toast was closing prematurely.

  • Pass down any extras used to launch SplashActivity to GameActivity. This enables code that relies on intent data (such as GCM) to function as expected. The GameActivity will receive the info and not just SplashActivity.

  • The cooking process now respects the per-platform chunking manifest configuration in the game ini. If you specify -manifests it forces all platforms to generate a manifest.

  • Improved the error message that displays as Unknown Error when failing to supply a Remove Build server for iOS on Windows.

  • Changed the “OOM Backup Memory Pool” to enable each platform to set how much memory to allocate. See the “Get Back Memory Pool Size” function in “Platform Memory.” Defaults to 0, which was the previous behavior with the now removed “Support Backup Memory Pool” function in “Platform Memory,” which was only true in Windows and PS4.

  • New: Updated libpng to 1.5.27 for Android to fix Google security notifications

  • New: Updated to CodeWorks for Android 1R5.

  • New: Enabled Windows types in vulkan.h from later SDKs.

  • New: ES 3.1 detection now handles 3.2 in the version string from newer devices.

  • Bugfix: Fixed a crash that would occur on Kindle Fire when trying to load a project that had enabled the Oculus plugins.

  • Bugfix: Fixed a crash on devices, such as Huawei Honor G750, which do not support the EXT_debug_lable and EXT_debug_marker extensions.

  • Bugfix: Fixed a crash that could occur when a Vulkan based project is resumed after losing focus.

  • Bugfix: Fixed an issue where some Android apps would crash if the device orientation changed when the launch splash screen was active.

  • Bugfix: Fixed an issue where OpenGL ES 3.1 detection was failing on devices which support OpenGL ES 3.2.

  • Bugfix: Fixed an issue with out of spec GLSL operations.

  • Bugfix: Fixed the Vulkan include path in the NDK check.

  • Disabled Google Play Games for ARM64 because native library causes crash on launch.

  • Hiding the virtual keyboard on Android properly closes input dialog.

  • Only use alternative event flow for Daydream packaged applications.

  • Pass through the intent action from Splash Activity to Game Activity.

  • We now properly handle seeking in Android Media Player, which did not work past 999ms before.

  • Read Android environment variables from .bashrc on Linux.

  • Restore texture filtering mode properly when movie played on Android.

  • Update cached length when file is written to on Android.

  • Use .sh extension for Android install scripts on Linux.

  • Bugfix: Fixed a crash with reflection capturing in Metal.

  • Bugfix: Fixed an issue with Metal Dynamic RHI’s “RHIReadSurfaceData” for shared textures on iOS.

  • No longer allow ES2 shaders to be compiled for tvOS.

  • Worked around some bad Xcode headers to enable compiling with Xcode8 / iOS10.

  • New: Updated installation scripts to run on Ubuntu 16.10.

  • New: Added "offscreen" video driver to SDL so the engine can now create GL context on headless machines not running any display servers (EGL is enough).

  • New: Added support for creating Linux installed builds.

  • New: Bundled libc++ with the engine to guard against STL incompatibility problems.

    • Third party code that uses STL needs to to compiled against the bundled library to benefit from this.

  • New: Bundled SDL updated to trunk as of late September 2016.

  • New: Choose OpenGL version based on the first targeted RHI, which enables setting the version through the .ini.

  • New: Crash error message will print more details about erroneous memory access on Linux.

  • New: Last page of the signal handler alt stack is made read-only to guard against accidental smashing of it.

  • New: Added precompiled WebRTC (xmpp) libs.

  • New: Packaged non-code projects now include a 'bootstrap' shell script for convenience.

  • New: The engine will profile and choose the fastest available clock source, which also, fixes running on Windows 10 Linux subsystem.

  • New: Updated cross-toolchain to target CentOS7 and multiple architectures.

  • New: Enabled use of xgConsole in Unreal Automation Tool.

  • Bugfix: Fixed a crash when editing Widget Blueprints.

  • Bugfix: Fixed an issue with client and server hanging when decoding voice chat.

  • Bugfix: Fixed an issue with compilation of ARM (32-bit) server builds.

  • Bugfix: Fixed an issue with copy/paste failing on Linux when the clipboard was empty.

  • Bugfix: Fixed an issue with the heartbeat thread not being stopped during handling of a crash.

  • Bugfix: Fixed an issue with QtCreator and Makefile generators, which missed some include paths and had others duplicated.

  • Bugfix: Fixed an issue with SDL EGL API binding.

  • Bugfix: Fixed an issue with UBT hanging after Ctrl + C when mono thread creation fails.

  • Bugfix: Fixed an unnecessary execution of some binding steps even when nothing has changed.

  • Bugfix: Treat abort() / SIGABRT as a crash.

    • This fixes some abnormal exits not being reported.

  • Disabled rebuilding hlslcc during installation given that it is now built against the bundled C++ library and will always match the engine.

  • Equals character is now enabled as part of commandline parameter value.

  • Minor robustness improvement in Linux crash handler.

  • More robust check of installed packages on Ubuntu in installation scripts.

  • Reduce amount of logging when launching externals procs.

  • ShaderCompileWorker will be told to dump core on crash in Debug editor builds to aid debugging.

  • Startup time of modular builds (e.g. editor) are 10x faster due to exclusion of unnecessary symbols.


  • New: OpenGL support is now deprecated and Metal SM4 was replaced by SM5 in 4.13.

    • We no longer compile OpenGL and Metal SM4 shaders by default to save cook time and decrease cooked data size.

    • Running under OpenGL will now display a dialog warning that Mac OpenGL is no longer supported and may not run correctly.

  • New: Added a commandline switch for Mac "-RedirectNSLog" that will capture the output of NSLog using an NSPipe and write it into our log instead when not running under the debugger.

    • This will capture the output from underlying libraries that would otherwise be lost when outside a debugger.

  • New: Added a cvar named “r.Mac.OpenGLDisabled” to disable OpenGL support on Mac.

    • If a Mac that does not support Metal launches while this cvar is set to 1 then they will get a dialog box describing that they do not support Metal and the process will close.

  • New: Added more statistics for Metal to track how many textures are allocated a frame and how much buffer memory is allocated per frame.

  • New: Added support for compiling Vulkan shaders for Android on Mac.

  • New: Added optional cache inside Metal RHI for disposed texture objects so we may reuse them. This is controlled by the console variable "rhi.Metal.TextureCacheMode".

    • 0 = off.

    • 1 (default) = will attempt to reuse private memory texture objects within the frame they are released otherwise they are disposed of as before.

    • 2 = extends the caching to all textures - though Managed/Shared textures cannot be reused until after the frame in which they were released has been processed on the GPU. In this mode id<MTLTexture> objects are never returned to the OS so in order to conserve VRAM calls to setPurgeableState are made to enable the driver to reclaim unused memory if required.

    • This setting can't be changed at runtime.

  • New: On MacOS, tvOS and iOS, the RHI and shader platform initialised on startup will now be decided by the options specified in the project's target settings rather than assumed in code.

    • When the initial selection in the target settings is not available on the current device the code will gracefully fallback, if possible or alert the user if not.

    • On Mac: Order of initialisation is the order listed in TargetedRHIs specification.

    • On iOS/tvOS: Order is explicit: Metal MRT > Metal ES 3.1 > OpenGL ES 2.

  • Bugfix: Fixed a crash under the validation layer and Nvidia’s El Capitan (10.11) drivers when Distance Field Particle Collisions are used without any scene Distance Fields available. We now bind the black volume texture when that is the case to avoid bad access on the GPU.

  • Bugfix: Fixed a crash caused by trying to restore Help menu item on Mac if MenuBlock didn't contain it.

  • Bugfix: Fixed a crash caused by Metal context releasing its contents in some cases on MacOS 10.12.1.

  • Bugfix: Fixed a crash in CoreAudio on unpause.

  • Bugfix: Fixed a crash in the editor on displaying a new window on MacOS 10.12+.

  • Bugfix: Fixed an issue to always bind buffers to all particle shader inputs to avoid a validation error in Metal.

  • Bugfix: Fixed an issue with AV Foundation video playback causing validation errors in Apple's debug tools, as the textures that it returns to us can't be used as render-targets and are stored in CPU-accessible memory.

  • Bugfix: Fixed an issue with AVFMedia plugin failing when a movie has captions.

  • Bugfix: Fixed an issue in MetalRHI that caused the first render query result to return the wrong result, which manifested as paused particle animations.

  • Bugfix: Fixed a focus problem in the asset picker that forced users to click on the search text field to be able to type.

  • Bugfix: Fixed an issue with game window not rendering its contents in some cases on macOS 10.12.1.

  • Bugfix: Fixed an issue with HLSL->Metal conversion for calls to asuint/asfloat where the input type matches the output type.

  • Bugfix: Fixed an issue MetalRHI's handling of calling “Set Render Targets Info” without any render targets.

  • Bugfix: Fixed an issue with TBasePassVertexShaderPolicyParamType not setting values for all shader parameters that would then cause an error in Metal's validation layer.

  • Bugfix: Fixed an issue for Metal shader translation retain more precision for float constants -1.0f >< 1.0f by emitting them in scientific notation.

    • This prevents Hammersley constant amongst others from being flushed to 0.

  • Bugfix: Fixed an issue with FMac Metal not natively supporting PF_G8 + sRGB as Apple claims that not all Mac GPUs have single-channel sRGB formats.

  • Changed the ShaderCache not to cache resource bindings in the draw states for shader platforms that don't use them.

  • Disabled the lazy-encoder construction in Metal for AMD. There is a situation that causes the lazy construction to perform a clear that isn't wanted.

  • Enabled more concurrent ShaderCompileWorker instances on Mac now that they don't consume such excessive amounts of memory.

  • Ensure that command-buffer failure in Metal is always fatal as there is no way to recover and make the default number of command-buffers sufficiently large to handle texture streaming in Mac games.

  • Rework Metal's handling of RHI Set Stream Source calls that override the stride of vertex declarations to be much more efficient.

  • Update the GPU identification code in Metal to handle changes made in macOS Sierra.

  • Use a read/write mutex to protect access to Metal's internal shader pipeline caches so that parallel threads can progress in the common case where new shaders are not being compiled.

  • Use Metal's internal setBytes API to upload buffer data that is less than a single CPU page as this is much faster and avoids fragmenting Metal's internal heaps. On Nvidia GPUs this is always used but for iOS versions without the feature or Macs running El Capitan on Intel GPUs an extra ring-buffer is used instead.

  • Use private memory for the Metal stencil SRV workaround needed on OS X El Capitan for a small performance improvement.

PlayStation 4
  • New: Added a PS4 Device Profile when connected to a 4K TV.

  • New: “Get Num Of Tracking Sensors” and “Get Tracking Sensor Properties” are now supported by PSVR. This will return the properties for the PS4 tracking camera.

  • New: When a game supporting PlayStation Pro is connected to a 4K TV, the game may choose to automatically create 4K backbuffers or to continue with 1080p backbuffers.

    • This choice should be made on a per-game basis taking memory cost and performance into account.

    • Use “r.PS4Allow4kOutput” to enable. Disabled by default.

  • Bugfix: Fixed a crash that could occur with audio threading when the Kernel took over core 7 and starved the audio thread.

  • Bugfix: Fixed a possible GPU hang on PS4 when using DrawIndirect or DispatchIndirect. This hang could be seen in projects using DistanceField AO or DistanceField Shadowing.

  • Bugfix: Fixed an issue with render target alignment bugs on PS4 Pro.

  • Bugfix: Fixed some audio drops on PS4 media playback.

  • PS4 Time’s “SystemTime” now returns local machine time instead of UTC.

  • Stopped PS4 from always staging all ICU data files.

  • Upgradeable apps will now have the app_type field in Sony Project Files (.gp4) generated with the spelling 'upgradable' which is consistent with what Sony expects.

  • Removed the mapping for the Play controller's "Select" button, as it is reserved by the system.

Xbox One
  • New: The default Xbox One XDK is now August 2016 QFE 2.

  • New: Added support for multiple binaries in Xbox One deployments. Removed the need for binary renaming during deploy.

  • New: Added support for using the virtual keyboard on Xbox One.

  • New: D3D12 Movie player updated to a fast SIMD implementation. This will be replaced in a future SDK when the hardware decoder is supported.

  • New: Improved Xbox One deployment performance and iteration times.

    • Fixed an issue where staging could be performed twice per build from Visual Studio.

    • Ensured files that have not changed are not recopied for staging or deployment.

    • Modified manifest generation to avoid writing a new manifest if the contents are unchanged.

  • New: Refactored Xbox One controller handling to reduce Cross-OS calls to improve performance and to reduce memory usage.

  • New: Support for the media foundation player added for Xbox One.