Unreal Engine 4.11 Released!
3.31.2016

Unreal Engine 4.11 Released!

By Alexander Paschall

This release brings hundreds of updates for Unreal Engine 4, including 92 improvements submitted by the community of Unreal Engine developers on GitHub! Thanks to all of these contributors to Unreal Engine 4.11:

Anton Olkhovik (Sektor), Alessandro Osima (AlessandroOsima), Alex Widener, Alexandru Pană (alexpana), Andreas Axelsson (judgeaxl), Andreas Schultes (andreasschultes), Artem (umerov1999), Artem V. Navrotskiy (bozaro), Ben Reeves (BGR360), bensch228, Black Phoenix (PhoenixBlack), Brandon Wamboldt (brandonwamboldt), Cameron Angus (kamrann), Christoph Becher (chbecher) ,Clay Chai (chaiyuntian), Dan Ogles (dogles), David Baack (davidbaack), Don Williamson (dwilliamson), Eli Tayrien (ETayrienHBO), Eren Pinaz (erenpinaz), G4m4, Hannah Gamiel (hgamiel), Hevedy (Hevedy), Hyeon-Cheol Cho (crocuis), Igor Karatayev (yatagarsu25), Jason (Abatron), Jefferson Pinheiro (Ixiguis), kallehamalainen, Kiqras, Konstantin Nosov (gildor2), Leon Rosengarten (lion03), Manny (Manny-MADE), Marat Radchenko (slonopotamus), Markus Breyer (pluranium), marynate, Matthias Huerbe (MatzeOGH), Maxim Pestun (maxpestun), Moritz Wundke (moritz-wundke), Mustafa TOP (MSTF), Nikos Tsatsalmas (ntk4), Pablo Zurita (pzurita), Pavel Dudrenov (dudrenov), Peter Oost (Sirrah), Piotr Bąk (Pierdek), projectgheist, Rama (EverNewJoy), Rene Rivera (grafikrobot), Rob Ray (robdeadtech), Robert Khalikov (nbjk667), sackyhack, sankasan, Sébastien Rombauts (SRombauts), Simon Taylor (simontaylor81), Skylonxe, Spencer Brown (JedTheKrampus), Tam Armstrong (tamarmstrong), Thomas Mayer (tommybear), Thomas McVay (ThomasMcVay), unktomi, Verdoso, ZehM4tt.

What's New

This release is packed with many new features and numerous performance optimizations. Performance has been a big focus for us as we prepare to ship our next game, Paragon. Several new rendering and animation features focused on rendering realistic characters are in 4.11, as are new audio features and tools improvements. UE4 continues to push VR forward with improvements to VR rendering and support for the latest SDKs so that you can ship your games as VR hardware becomes available to consumers.

Major Features

Performance and Multithreading

A major effort for us over the last several months has been optimizing UE4 in order to get our next game, Paragon, running at 60fps on PC and PlayStation 4.

Paragon offered a unique set of challenges to the team. In Paragon, we need to support animating 10 heroes and 120+ minions at a time, tons of FX, and all while rendering a beautiful, detailed map with long sightlines at 60fps. Paragon pushes the engine to its limits, especially when it comes to animation and rendering.

image alt text

Thousands of small optimizations throughout the engine have resulted in a big increase in performance for Paragon and should benefit all games built with UE4. Many of those optimizations are in 4.11, and more will be coming in future releases. Here are some of the larger optimizations we've been working on.

Parallelization. Multicore scaling is crucial to achieving high frame rates on modern PCs and consoles, so we have improved our threading architecture in several ways. We've reduced the cost of creating tasks, added support for high priority tasks, and removed many synchronization points.

Rendering performance. The renderer now does a better job balancing the size of its worker tasks and the command buffers generated for the GPU in order to achieve maximum parallelism without adding overhead on the GPU. We've also worked to remove synchronization points in the renderer so that we can better utilize all available cores.

Cloth simulation is now dramatically faster and makes better use of multi-threading. We now call the APEX solver directly for each asset from a worker thread. This allows for much better scheduling and eliminates many sync points and overhead. Clothing will now be updated after animation (when blending is not needed), otherwise after the skeletal mesh component updates.

Faster garbage collection. We now support garbage collection "clusters", which allows the engine to treat groups of objects as a single unit, drastically reducing the number of objects that need to be considered. Currently, only subobjects for Materials and Particle Systems are clustered. Additionally, the mark and destroy phases are more cache-coherent, resulting in a 9x reduction in time, and memory churn has been reduced during reachability analysis.

Multi-threaded animation. Animation Graph updates can now run on worker threads allowing the number of animated characters to scale with the number of cores. Check out the Upgrade Notes as we've deprecated many animation related APIs and there are limitations on which animation graphs can run in worker threads.

Instant animation variable access. We've added a 'fast-path' for variable access in the Animation Graph update. This allows us to simply copy parameters internally rather than executing Blueprint code. The compiler can currently optimize the following constructs: member variables, negated boolean member variables, and members of a nested structure.

Additive animation 'baking'. We now have an option to turn on baked additive animations. This makes using additive animations roughly3x faster. The work involved in calculating the delta pose for an additive animation is done at cook time rather than run time. This saves not only the calculation work involved in creating the additive deltas but also the memory accesses and allocations involved with decompressing the base animation which is no longer needed at runtime. This feature increases cook times, so you'll need to enable it by setting the cvar "a.UseBakedAdditiveAnimations" to 1. Future versions of the engine will rework animation cooking to avoid this cost and permanently enable this optimization.

New: Realistic Hair Shading

We've added a physically based shading model for realistic hair based on the latest research from film.

image alt text image alt text

It models two specular lobes, transmission, and scattering. To use this feature, simply choose Hair from the list of shading models in the material editor.

New: Realistic Eye Shading

You can now give your characters highly realistic eyes using Unreal Engine's new physically-based shading model for eyes..

image alt text

The shading model approximates subsurface scattering through the sclera, caustics on the iris and specular on the wet layer. To be used in conjunction with the provided eye material and eyeball geometry. Together these additionally model the refraction through the cornea, darkening of the limbal ring, with controls for dilating the pupils.

New: Improved Skin Shading

We've improved the quality and performance of the Subsurface Scattering Profile shading model for realistic skin.

image alt text

The updated shading model runs in half resolution and requires less GPU memory. The scattering is resolution independent and there is no longer a color shift on object edges. Texture and lighting details are better preserved by storing the diffuse and specular lighting separately in a checkerboard pattern rather than packing both into a single pixel.

New: Realistic Cloth Shading

We've added a physically based shading model for cloth. This simulates a fuzz layer and will produce more realistic results for cloth than were achievable before. To use choose the Cloth shading model in the material editor.

image alt text

New: Capsule Shadows

Unreal Engine now supports very soft indirect shadows cast by a capsule representation of the character:

image alt text

Normally when are only indirectly lit they will not have any shadow except for screen-space ambient occlusion. Indirect shadowing needs to be very soft as indirect lighting is coming from many directions, so traditional shadow maps don't work well. The indirect shadow direction and softness come from the Volume Lighting Samples placed and computed by Lightmass during a lighting build.

In game, indirect capsule shadows serve to ground characters to the environment:

image alt text

You can use capsules for direct shadows too. The light's Source Radius or Source Angle determines how soft they will be. This can be used to achieve extremely soft character shadows in an efficient baked lighting environment, which wasn't possible before.

image alt text

This capsule shadow implementation is very efficient as it computes shadowing at half resolution with a depth-aware upsample and uses screen tile culling to limit the shadowing work to where it is needed.

The GPU cost is proportional to the number of capsules and the number of pixels affected by the casted shadow.

How to enable Capsule Shadows

  1. Create a new physics asset using only Sphyl bodies (capsules). Spheres also work but are not as flexible. The capsules should overlap slightly at joints. Foot capsules are the most important to tweak so that the character looks grounded. Arms are often not needed unless you can go into cover or crawl on the ground.
  2. Assign the physics asset to the Skeletal Mesh Asset's Shadow Physics Asset
  3. Finally, enable capsule indirect shadows on the Skeletal Mesh Component

New: Particle Depth of Field

New material functions allow small, out-of-focus particles to be expanded for depth of field the same way that opaque particles would be rendered.

image alt text

The left image shows a simple scene with a lot of particles placed on the ground. The right image has circle depth-of-field enabled and the new material function renders the particles out of focus like all other geometry. The quality is even better as they don't suffer from noise artifacts. We always expand out-of-focus particles by more than a pixel to avoid shimmering.

This feature requires you to make a change in your particle material:

image alt text

New: Dithered Opacity Mask

You can now use Dithered Opacity Mask to emulate a translucent surface using an opaque material.

image alt text

The "Dithered Opacity Mask" checkbox in the material editor provides a stochastic form of order independent translucency when temporal anti-aliasing is enabled. It exploits temporal AA to blend the foreground object with the background over several frames. This can allow semi-transparent objects to use all of our deferred shading features at the cost of some noise and ghosting.

New: Dithered LOD Crossfades

Static meshes can now smoothly crossfade between levels-of-detail using an animated dither pattern!

image alt text

Note: This feature must be enabled on the material as there is a small performance cost to enabling it.

image alt text

New: Improved Hierarchical LOD

This release features major improvements to the Hierarchical Level-of-Detail (HLOD) system. Hierarchical LOD can automatically replace large numbers of detailed meshes with a few simple meshes when they are far away. This helps you achieve much higher quality levels when viewing objects up close, and faster overall performance for your level.

image alt text

Paragon's Agora -- 2.56 Million triangles, 5690 draw calls (reduced from 3.94 million, 7060 draw calls)

In order to get the most benefit from HLOD, you will need the Simplygon SDK (requires a Simplygon license). Simplygon is required to generate a proxy mesh with a reduced number of polygons. Without it, the system will only bake out and combine sections that use different materials into a single draw call.

Also check out the new Hierarchical LOD Outliner feature which has many new settings to help you setup your level's HLODs.

New: VR Instanced Stereo Rendering

Instanced Stereo Rendering is an optimization that makes it more efficient for the engine to render stereoscopic images for VR headsets.

Previously, the engine rendered a stereoscopic image by drawing everything for the left eye, and then drawing everything for the right eye. With Instanced Stereo Rendering, we render both eyes at the same time, which significantly cuts down on the work done by the CPU, and improves efficiency in the GPU. Here are the two techniques running side-by-side:

image alt text

Using Bullet Train as our test content, we saw about a 14% improvement on CPU time, and about a 7% improvement on the GPU with no work required! Note that while most rendering features work with Stereo Instancing, there are a handful that are not supported yet (DFAO, for example.)

To enable this feature in your project, go to your Project Settings in the editor, and check the "Instanced Stereo" box.

image alt text

New: Anim Dynamics (Fast Physics Simulation for Characters)

Anim Dynamics is a brand new self-contained and simple physics simulation node for Animation Blueprints which allows dynamic motion to be procedurally added to skeletal meshes without having to use a full physics solution:

image alt text

Here's an overview of the main features of Anim Dynamics:

  • Simplified rigid body simulation
    • Runs in animation evaluation step.
    • Runs in component-space to react to animations.
    • No collision for faster simulation
    • Only boxes are supported for inertia calculations
  • Rigid body constraints
    • Angular - A two axis constraint with the third being locked. The rigid body can rotate within given angle ranges around the two free axes. Works in conjunction with Prismatic and Planar constraints
    • Cone - A free rotational constraint that keeps the rigid body within a specified angle of its constraint. Works in conjunction with Prismatic and Planar constraints but replaces angular if selected
    • Prismatic - A three axis linear constraint allowing movement along all three principal axes within specified limits.
    • Planar - The planar constraint is a list of infinite extent planes that the rigid bodies cannot cross, this can be used as a ground plane for hanging objects or to stop an object from penetrating a character. Each plane can either be placed in world space or have its transform driven from a bone on the character
  • Chains
    • Each node can either represent a single dynamic bone or a continuous chain of dynamics bones sharing similar constraint data. This allows for more realistic behavior when simulating larger numbers of connected bodies.
    • With single nodes we only push forces down the chain, and never propagate them back - with the chain mode we propagate forces in both directions for nicer chains
  • Spring Targets
    • Linear and angular springs can be used to get more bouncy effects. These springs are configurable independently and can have different spring constants.
  • Wind
    • Anim Dynamics can be used with the same wind source actors that affect APEX cloth objects. This can be toggled on or off per node and can be scaled to create the perfect wind response.
  • Adaptive sub-stepping
    • The simulation can either run with normal tick settings taken from the physics project settings or run using an adaptive substep.
    • The simulation can be configured per node - so if one need needs more iterations for its simulation to converge it can be configured to have as many as necessary without affecting other simulations.
    • In this mode we track the amount of time the game has ticked separately from the time the simulation has actually ran, if we start to fall behind then we maintain time debt and run the simulation multiple times. This is capped to stop spiralling problems but can add stability to complicated simulations
  • Visualisation
    • There are options on the nodes to visualise various things when the node is selected. Available visualisers cover:
      • Angular limits

      • Prismatic limits

      • Planar limits

      • Planar exclusion methods (sphere-like collision with the planar limits)

New: Live Animation Recording from Gameplay

You can now record an animation of a skeletal mesh during live gameplay and save it as an Anim Sequence asset!

image alt text

This asset can be used in-engine or exported as an FBX for use in a 3rd party tool. This should work in any active game scenario, either live or while watching a replay.

How to use this feature:

  • To record an animation, open the console and type: RecordAnimation MyActorClass_05 /Content/Foo/RecordedAnimation
  • To stop recording, type: StopRecordingAnimation MyActorClass_05 or StopRecordingAnimation all
  • If you omit or provide an invalid asset path, you'll get a picker popup where you can choose. You can use the World Outliner to find the name of the actor you're interested in (hover over the actor name to see it's "ID Name")

New: Higher Quality Depth of Field

You can now increase the sample count of depth of field ("Circle DoF") to increase quality by reducing noise, at some additional performance cost.

image alt text

New: Platform and SDK Updates

Along with the usual updates, we've updated all our major VR platforms to use their latest SDKs in preparation for titles shipping in the launch window of the various VR platforms. Along with these updates has been a concentration on stability and final polish, so any UE4 title on 4.11 should be "VR ship ready!"

image alt text

Platform highlights in this release:

  • Oculus Rift 1.3.0 SDK is coming soon in Unreal Engine 4.11.1 hotfix. (Oculus Rift SDK 0.8.0 beta in Unreal Engine 4.11.0)
  • Oculus Mobile SDK 1.01
  • Playstation VR SDK 3
  • SteamVR 0.9.12
  • PS4 SDK 3.008.201 (w/ PSVR)
  • Xbox One XDK November QFE 1
  • HTML5 SDK (Emscripten) 1.35.0
  • Linux Clang 3.7.0
  • Apple tvOS 9.0 support (GitHub only)

New: Improved DirectX 12

image alt text

We've integrated updates to DirectX 12 in Unreal Engine from Microsoft to allow better CPU utilization while generating rendering commands in parallel; also added improvements like support for multiple root signatures, enabled asynchronous pipeline state disk cache by default, reduced memory footprint & fixed leaks, resource transitions optimizations, faster memory allocations and limited GPU starvation by flushing work during idle GPU time.

DirectX 12 for Xbox One

Microsoft engineers have worked to add experimental support for DirectX 12 on Xbox One!

Some steps are required to enable this feature:

  • Set bBuildForD3D12 to true in the XboxOneRuntimeSettings section of BaseEngine.ini
  • Set D3D12_ROOT_SIGNATURE to 1 in XboxOneShaderCompiler.cpp
  • Comment out the use of GetSamplePosition in PostProcessSelectionOutline.usf (not supported on Xbox One yet)
  • Rebuild and restart!

Due to its experimental nature, there may be rendering and/or stability issues with this enabled.

New: Metal Rendering on Mac OS X

Metal is now the default graphics API on Mac OS X El Capitan!

image alt text

Epic have worked closely with Apple, AMD, Nvidia, and Intel to integrate Metal for Mac and in 4.11 it replaces OpenGL as the primary graphics API for OS X El Capitan. The 4.11 release provides the same rendering features across Metal and OpenGL by default. Metal provides a streamlined, low-overhead API with precompiled shaders and efficient multi-threading support to maximise the processing power of the GPU. We will continue to improve and extend support for Mac Metal and look for ways to leverage new API features in upcoming versions of the engine.

There is also experimental Metal support for Shader Model 5 features, try it out using the "-metalsm5" command-line switch.

New: Faster Lighting Builds (Intel Embree support)

We've integrated Intel's Embree ray tracing library into Lightmass and have improved lighting build dramatically with it.

The majority of lighting build time goes toward tracing rays to figure out how light is bouncing. As a test case, the "Sun Temple" level lighting now builds 2.4x faster (from 45 seconds to 18 seconds) by using Embree. The results are visually identical, with Indirect Lighting Quality set to 4.

New: Lightmass Portals

Skylight quality indoors can now be massively improved by setting up Portal actors over openings.

image alt text

Portals tell Lightmass where to look for incoming lighting; they don't actually emit light themselves. Portals are best used covering small openings that are important to the final lighting. This yields higher quality light and shadows, as Lightmass can focus rays toward the incoming light. (Below left: without portals. Below right: with portals.)

image alt text

Several other improvements have been made to Lightmass quality:

  • Fixed light leak artifacts with Point / Spot / Directional lights and small values for Static Lighting Level Scale
  • SkyLight indirect lighting has been improved

New: Animation Posing by Copying from Meshes

We have added a new Animation Node that copies a pose between Skeletal Mesh Components inside the Animation Graph. This is an improved version of Master Pose Component because you can now blend the source animation with new animations.

image alt text

In the above example, the Gauntlet is using the Copy Mesh Pose node in its own Anim Blueprint to copy the hand and arm transforms from a Source Mesh, the female character. At the same time, the Gauntlet's spikes are animating independently.

image alt text

We set the Source Mesh to copy pose from another mesh component. It will only copy transforms where the bone names match. Once you get the pose from the node, you can blend other animations in.

The source mesh has to animate prior to the target, which happens automatically when the target is attached to the source, and the joint names need to match. Also note that bone transforms are copied prior to physics simulation, which means it won't work if the source mesh simulates, although this is not a problem if the target mesh animates after physics runs.

New: LOD Bone Reduction Tool

You can now remove bones from a Skeletal Mesh LOD. Skeletal weighting will automatically be updated! This is an easy way to improve performance of character animations your game.

image alt text

Use the new 'Remove Children' option in the Skeleton Tree's right click menu to disable bones for any given LOD.

image alt text

Previously, this was tightly coupled to the mesh reduction tool. Now you simply view the LOD you want to remove bones from, select the desired joint and remove it, including children if you wish. You are also given the option of removing from only the current LOD or including all lower LODs.

Once you remove the bones, they will turn grey, indicating that they are not skinned at the current LOD. The LOD preview mode in Persona also shows bone names in grey when disabled.

Finally, there is a new "LOD Bones" display option drop-down in the Skeleton Tree toolbar for filtering which bones visible.

image alt text

New: Particle Cutouts (Fast Flipbook Particle Rendering)

Particle cutouts allow for flipbook particles to render as much as three times faster!

Particles using flipbook animations (Sub-UV Animation module) tend to have quite a bit of wasted overdraw - areas where the pixel shader had to be executed, but the final opacity was zero. As an example, the texture below is mostly comprised of transparent pixels.

image alt text

We can now render particles with much tighter bounding geometry, cutting out the invisible areas, instead of using a full quad regardless of what frame of the animation is playing.

image alt text

Setup

The engine can't use Particle Cutouts by default because the material graph allows any logic to create the particle's opacity - it might not even come from a texture. Artists have to opt-in to using Particle Cutouts by setting it up.

  1. Create a new 'SubUV Animation' asset off of the flipbook texture (right click texture in Content Browser)

image alt text

  1. Open the 'SubUV Animation' asset and make sure the Sub Images properties are set correctly. These first two steps only have to be done once per flipbook texture.

image alt text

  1. In Cascade, find the SubUV module and assign the Animation asset

image alt text

Performance results

image alt text

Shader complexity viewmode shows much less overdraw from the particle system using cutouts. Using the cutout geometry reduced the GPU cost of this particle system by 2-3x!

New: Per-vertex Translucent Lighting

Lit translucency can now be rendered much faster using new per-vertex translucent lighting settings!

image alt text

There are two new translucency lighting modes available in the material editor which compute lighting per-vertex

image alt text

  • Per-vertex lighting modes use only half as many shader instructions and texture lookups
  • The "Volumetric PerVertex NonDirectional" setting is extremely fast -- nearly the same as an Unlit material!
  • We recommend using per-vertex translucent lighting as often as possible. The exception is for very large particles or triangles, since lighting will be interpolated across each triangle.

New: Lighting Channels

Lighting channels allow dynamic lights to affect only objects when their lighting channels overlap. We now have support for up to 3 lighting channels.

image alt text

You can set which channels a Primitive Component or a Light Component is in.

image alt text

  • These are really useful for cinematics! For example, you can have a rim light on a character that doesn't affect the surrounding environment.
  • Lighting channel influence is applied dynamically -- that means it won't work with Static Lights. You'll need to use either Stationary or Movable lights. Also, lighting channels will only affect direct lighting on opaque materials.
  • Lighting channels add only a small GPU cost per light when used.
  • Please note, this is available for Deferred Rendering only, so this will not be possible for Mobile or Mac that are not using SM5 or Metal.

New: Stereo Spatialization

3D spatialization is now possible for stereo assets on PC, Xbox One and PS4 platforms. Stereo spatialization essentially spatializes each input source channel (e.g. Left and Right channels) as if they were mono-sources. The positions of the left and right channels are determined by the sound's emitter position offset by a 3D Stereo Spread, a new parameter in Sound Attenuation Settings.

image alt text

The 3D Stereo spread parameter defines the distance in game units between the left and right channels and along a vector perpendicular to the listener-emitter vector. This means that the stereo channel spread parameter is in world-coordinates and will naturally collapse to a mono point source (with left and right channels summed) the further away from the emitter the listener is.

image alt text

New: Sound Focus

The Sound Attenuation settings asset now supports sound focus, a new feature which allows sound designers to control various parameters automatically based on the direction of the sound relative to the listener.

The following diagram illustrates the azimuth settings:

image alt text

Sound designers specify azimuth angle values that define when a sound is in and out of focus. Relative sound positions that are between these azimuth angles are interpolated to blend between the regions. The new settings are specified in the Sound Attenuation Settings UStruct:

image alt text

The focus and non-focus values are used to modify sounds in three ways: Distance Scaling, Volume Scaling, and Priority Scaling. Distance scaling is useful to create a boom-mic or zoom-mic effect by scaling the apparent distance of sounds that are in focus or out of focus. Volume scaling can be used to add another attenuation to sounds based on their visibility. Priority scaling is used to reduce (or enhance) the priority of sounds for sound concurrency.

New: Sound Occlusion

UE4 now supports simple raycast-based sound occlusion. To use enable occlusion calculations on a sound, simply specify it in the Sound Attenuation Settings asset as shown in the following picture:

image alt text

If occlusion is enabled for a Sound Attenuation object, sounds playing with that object will perform raycasts against collision geometry to determine if the sound is occluded or not. If the sound is determined to be occluded, it will apply the given Low Pass Filter Frequency value and volume attenuation. Because the occlusion system is based on a binary raycast (occluded versus not-occluded), an optional occlusion interpolation time is provided which will interpolate from the unoccluded and occluded frequency values. An optional checkbox is provided to enable collision checks against complex geometry.

New: Sound Concurrency

The new concurrency system removes the concurrency data from sound instances and instead puts it into its own asset. You can create these by selecting "Sound Concurrency" under the “New Asset” menu in Content Browser.

In addition to the previous Max Count and Resolution Rule, the new Sound Concurrency object adds a few other concurrency-related bells and whistles which will be described below.

Limit To Owner

This box is used to indicate that any sounds that are played with this concurrency should attempt to do its concurrency counting with the sound's owner. If there is no owner of the sound (i.e. it wasn't played on an actor or through an audio component), then it will count concurrency as if the checkbox were not checked. This is intended to support the ability to have per-actor concurrency limits.

Volume Scale

This feature groups sounds into concurrency groups for volume management. When multiple sounds in a concurrency group are playing at the same time, the older sounds will become quieter. The formula for a sound's volume scaling under this feature is:

VolumeScale = VolumeScaleSettingNewerSoundCount

where VolumeScaleSetting is a user-set value, and NewerSoundCount is the number of currently-playing sounds in the concurrency group that started after this one. For example, if sounds A, B, and C were in the same concurrency group and were played in rapid succession with aVolumeScaleSetting of 0.9, they would be adjusted as follows:

A's VolumeScale = (0.9)2 = 0.81

B's VolumeScale = (0.9)1 = 0.9

C's VolumeScale = (0.9)0 = 1.0

In other words, the most recent sound will not be affected, but each older sound will be ducked so that its volume exponentially decays, effectively acting as an automatic ducking mechanism for sounds that are grouped together.

New Resolution Rules: Stop Lowest Priority and Stop Quietest

The new concurrency object also introduces two new concurrency resolution rules: Stop Lowest Priority and Stop Quietest.

The Stop Lowest Priority rule uses the priority value set on the USoundBase object (SoundCue, SoundWave, etc). Once a concurrency group's limit is reached, the system will run through all active sounds in the group and stop the lowest priority sound (or not play the new sound if it would be the lowest priority).

The Stop Quietest rule does what its name suggests: instead of stopping based on distance (which is often correlated to volume, but not necessarily), it will stop the sound in the group that is quietest or not play the new sound if that new sound would be the quietest. The quietest sound is defined as the sound with the smallest volume scale product after all gain stages of the sound have been evaluated.

Applying the Sound Concurrency Object to Sounds

To use the Sound Concurrency object, you simply supply it to any of your sound calls or sound objects in much the same way that you would the Sound Attenuation Setting object. Below is the details panel of a Sound Wave asset.

image alt text

The new section highlighted above allows you to drop in an asset reference to the new Sound Concurrency asset.

Overriding Sound Concurrency

Both for backwards compatibility and for cases where the old behavior is preferred, you can choose to override the concurrency setting object with a local set of data on the asset. In this case, the sound asset becomes its own concurrency group and the older behavior of limiting concurrency by asset instance is achieved. Older projects that are converted to 4.11 will automatically use the override setting for their sound assets.

New: Marker-Based Animation Syncing

image alt text

Animations can now be synchronized using markers in the animation data. In previous releases the only method of syncing two animations was based on time - animations were just scaled so their lengths matched. You can add marker data by right clicking on a notify track and selecting Add Notify->New Sync Marker.

The feature set for the initial release is as follows:

  • Only animations within the same SyncGroup are synced. The leader drives the positions of followers within same sync group.
  • No play rate adjustment, the play rate is always that of the master animation.
  • Only markers common to all animations within a group are synced. For example, if one animation is missing the 'Right Foot Down' markers, those markers will be ignored for all animations when determining that frame's position.
  • Position is synced based on the relative position of the Leader with respect to its common markers. For example, if the Leader is 25% of the way between its left and right foot markers, then the followers will be synced to 25% of the way between their respective left and right markers.
  • Marker based sync is used automatically when animations in a sync group have enough matching markers. Otherwise the original scaled length syncing behavior is used.
  • Montages also support marker-based sync while blending out, so you can transition back to other animations seamlessly. You can find the Sync Group setting in the Montage.

New: Curve Blending for Animation Montages

Montages now support curve blending. The Blend In and Blend Out options on the Montage control how the Montage should be blended when it plays. Note that if an additional Montage is played, its Blend In settings will be used.

image alt text

New: Hierarchical LOD Outliner

The new Hierarchical LOD Outliner allows you to visualize the clustering of mesh actors and enables editing of the various HLOD settings and generation processes.

image alt text

Material Generation

The material merging process now supports more material properties such as per-vertex colors, vertex positions, and vertex normals. This means that techniques such as world space texturing, blending in snow or moss based on surface normal, and masking material layers by vertex colors now work correctly with HLOD.

Some features are still not supported such as per-pixel normals and the World-to-Tangent transform. In these cases, or other cases where you want to use a different or simplified material for HLOD, the Material Proxy Replace node can be used. It functions much like the Lightmass Replace node: the "real-time" input is used at runtime, and the “material proxy” input is only used during the generation process.

Settings for the material merging process can now be found in the HLOD Outliner panel, in addition to the World Settings panel.

Proxy Mesh Generation

The proxy mesh generation has been streamlined and features the latest integration of the Simplygon SDK, settings for the mesh generation process can now also be found in the HLOD Outliner panel.

Other improvements:

  • Spline meshes are now supported by the HLOD system.
  • Proxy meshes/clusters are now only shown, generated and built for visible (sub-)levels.
  • Emissive colors are now supported by the material merging process.
  • Static meshes with opaque materials are now supported by the material merging process.

New: Complex Text Rendering (Experimental)

We're working on adding right-to-left and bi-directional text support to Slate, including support for complex shaped text (such as Arabic).

image alt text

This feature is still very early. You're encouraged to check it out and provide feedback, although some areas may be a bit rough around the edges in this release.

Known issues:

  • Single-line editable text blocks do not currently work complex text (only multi-line editable text, and static plain/rich text).
  • There is no support for Text Actors or Canvas.
  • Complex text rendering is currently only available for Windows. Mac, and PS4 builds.

New: Advanced Blueprint Search

The Blueprint search tool has been updated to support more advanced search functionality (to get more targeted results).

image alt text

  • You can now target specific elements in your search, such as: nodes, pins, graphs, functions, macros, variables, properties, and components. Full documentation here: https://docs.unrealengine.com/latest/INT/Engine/Blueprints/Search/index.html
  • Supports And (&&) and Or (||) logic operations, as well as Tag/Value matching (using the syntax: Tag=Value).
  • Variables' "Find References" option now leverages this improved functionality for a more precise search.

New: VR Head Mounted Display Camera Improvements

The camera system for Head Mounted Displays has been refactored to make it more versatile and easier to use. We've made it so that your active Camera Component will be offset in the engine in the same way your headset in the real world is offset from its origin. That means you can easily calculate the position of the VR headset in your world, attach meshes and other objects directly to it, and simplify your VR game's control scheme.

In addition, anything attached to the camera component will be "late updated," which means it will use the most up-to-date positional data possible for rendering to reduce latency. Meshes, effects, and sprites attached to the camera will be locked solid there, and updated every frame in the same way that we update the Head Mounted Display itself.

Check out our updated documentation for instructions on how to migrate your current project to use the new system!

New: VR Stereo Layers

Stereo Layers allow you to draw a quad with a texture at any position in the world on a separate layer that's fed into the VR's compositor directly. This allows you to make UI that is more readable and less distorted. Currently, this feature is only implemented for the Oculus Rift headset, but will be coming shortly to other platforms!

New: Major Progress on Sequencer (Experimental)

Sequencer is our new non-linear cinematic animation system. Sequencer is still under heavy development and we don't recommend using it for production work quite yet, but you're welcome to try it out and send us feedback! Expect to hear a lot more about Sequencer in an upcoming UE4 release.

Notable new features in Sequencer for 4.11:

  • New tracks: Shot/director, play rate, slomo, fade, material, particle parameter tracks.
  • Improved movie rendering; .EXR rendering support.
  • Improved keyframing behaviors, copy/paste keyframes, copy keys from matinee, 3d keyframe path display.
  • Master sequence workflow, so you can have sub-scenes within a larger sequence
  • Support for "Spawnables" (actors that exist within your cinematic asset)
  • UI improvements: track coloring, keyframe shapes/coloring, track filtering.

You can turn on Sequencer by opening the Plugins panel and enabling the "Level Sequence Editor" plugin, then restarting the editor.

Release Notes

AI

  • New: A new EQS scoring function, Square Root, has been added.
  • New: A simple "Current Location" EQS generator has been added to support reasoning about AI's current location.
  • New: Added an EQS test for geometry overlaps.
  • New: Added Blackboard Keys support to EQS' NamedParams.
  • New: EQS tests can now be configured to normalize results against declared ideal value rather than max value.
  • New: Made EnvQuery a blueprint type, which enables storing EQS templates in blueprint classes and AI blackboards.
  • New: Added a silent auto-conversion of Controllers to Pawns when calling blueprint RunEQS function.
    • This is usually the desired behavior. But it can be disabled with AISystem.AllowControllersAsEQSQuerier flag in Project Settings
  • New: The way EQS test scoring gets previewed in EQS editor has been improved towards higher display resolution as well as flexibility for future expansion
  • New: AI debug display for several subsystems has been improved by disabling their scene outline drawing in the editor.
  • New: Added a feature to the BT MoveTo task enabling it to observe and react to changes to an indicated blackboard entry storing move goal location or actor.
  • New: Added ability to specify the number of points generated by the OnCircle generator.
  • New: Added time slicing, logging and additional profiling stats to AISense_Sight to help debug and manage performance cost for AI on servers.
    • Exposed new parameters MaxTimeSlicePerTick (in seconds) and MinQueriesPerTimeSliceCheck AI Perception values.
  • New: Pathfollowing parameters responsible for path's mid-points reachability acceptance have been exposed for configuration via AISystem settings.
  • New: Stopping AIController's logic during pawn's unpossess event has been made optional. Use AIController's StopAILogicOnUnposses property to control this mechanism.
  • Bugfix: The blackboard editor no longer crashes when adding new keys while having a search filter applied to keys list.
  • Bugfix: A crash in garbage collection related to a bug in EQS query template caching in certain use cases has been fixed.
  • Bugfix: Fixed a crash in EQS where wrappers could be garbage-collected during queries.
  • Bugfix: Blueprint-implemented EQS generators no longer crash when trying to add a generated value of a wrong type (vector/actor mismatch).
  • Bugfix: A bug in EQS resulting in FEnvQueryInstance's result never getting set to "failed" has been fixed.
  • Bugfix: AIPerceptionSystem.UnregisterSource no longer crashes when perception agents being unregistered don't use all of the defined senses.
  • Bugfix: The AI perception system will no longer allow AIs to bypass visibility-cone checks.
  • Bugfix: AIController.MoveTo will no longer ignore its navigation data's default querying extent.
  • Bugfix: AIController's pawn possession no longer overrides cached GameplayTasksComponent references, which could break AI's gameplay tasks usage.
  • Bugfix: Blueprint interface functions to PawnActions have been fixed to return apropriate values.
  • Bugfix: Fixed AI stimuli never expiring, which resulted in AI never forgetting perceived actors.
  • Bugfix: BTService_BlueprintBase will now correctly trigger "deactivation" events that are implemented in derived blueprint classes, but not the base class.
  • A safety feature has been added to AI's possession logic. AIControllers will no longer try to possess soon-to-be-destroyed pawns.
  • EQS Query instances that run longer than expected will output once to the log, and then once more when the query finishes. The previous behavior was to log repeatedly until the query finished.
  • EQSTestingPawn's ticking has been disabled in game worlds. This can be re-enabled with the bTickDuringGame property.
Behavior Tree
  • New: BTService_RunEQS, a new BT service for regular EQS query execution, has been added.
  • New: Added new property to all EnvQueryTests: TestComment. This property is a simple, optional string used to label the purpose for a test. For now, it only shows up in the details view, but it is still useful for helping to document the reasons for tests, especially when using more than one of the same type.
  • New: Expanded the RunEQSQuery BT task so that users can configure it to use a query template indicated by a key in blackboard.
  • Changed the color of root level decorator nodes in the behavior tree editor to distinguish them from regular decorators.
  • Bugfix: Stopping behavior tree with instantly aborting parallel tasks no longer crashes.
  • Bugfix: Handled an edge case in BT's parallel tasks removal that could result in not cleanly finishing all of tasks, and potentially hanging.
  • Bugfix: Behavior tree focus service reacts to blackboard changes appropriately.
  • Bugfix: Behavior tree's blackboard filters work correctly when a single object uses multiple configurable filters of the same class.
  • Bugfix: BTDecorator_Blackboard now handles user-requested condition inversion properly.
  • Bugfix: Fixed behavior tree decorators not observing in LowerPriority mode when search flow enters and leaves their branch without finding a task to run.
  • Bugfix: Prevented behavior trees from starting new task execution just to be abandoned in next tick due to decorators firing between abort and execute calls.
  • Bugfix: Fixed cleanup of active blueprint actions for blueprint based behavior tree tasks.
  • Bugfix: Fixed missing Tick event in aborting behavior tree tasks from an abandoned subtree.
  • Bugfix: Copy and paste operations in behavior tree's composite decorators subgraphs now work properly.
  • Bugfix: Fixed node memory allocations for injected behavior tree decorators.
  • Bugfix: RotateToFaceBBEntry no longer gets stuck when passed a blackboard key with FRotator value.
  • Bugfix: Fixed order of behavior tree graph nodes when a node is being moved.
  • Bugfix: GameplayDebugger's default settings are now applied properly.
  • Bugfix: Triangulation errors in some convex polygons recorded by visual logger have been fixed.
Navigation
  • New: CompositeNavModifiers have been expanded to support use of convex and sphere physics shapes.
  • New: Enabled custom export of navigable geometry for foliage with InstancedStaticMesh type.
  • Bugfix: Streaming out of a level containing a RecastNavMesh instance no longer crashes the engine.
  • Bugfix: A bug in editor-time navigation system, resulting in removing all the saved data in static navmesh on map load, has been fixed.
  • Bugfix: A memory leak in Recast's heightfield layers building has been fixed.
  • Bugfix: Navigation bounds gathering no longer produces unexpected results while streaming levels with certain streaming setups.
  • Bugfix: NavLinkProxy no longer marks instances containing only smart links as navigation-irrelevant.
  • Bugfix: A missing NavigationSystem notification has been added to let it know about editor-time changes to ActorComponent.CanEverAffectNavigation property. This fixes situations where toggling this flag wouldn't result in rebuilding navmesh.
  • Bugfix: Added a safety feature to address navmesh generation related crashes when BP-implemented actors get their construction script re-run just after navmesh generation finishes.
  • Bugfix: "Navmesh build in progress" editor notifier no longer hangs indefinitely if it's created just after navmesh has finished building.
  • Bugfix: Crowd simulation works properly with auto-possessed pawns placed in a level.
  • Bugfix: Collision data for navigation built from mirrored PxConvexMesh now exports correctly.
  • Bugfix: Fixed geometry projection for navmesh walking mode when a pawn moves far away from the geometry on the Z axis.
  • Bugfix: Corrected HitNormal values reported by navmesh raycasts.
  • Bugfix: Fixed the influence of navmesh edges on crowd simulation near the ends of paths.
  • Bugfix: Navigation export of destructible mesh without collisions enabled now works as expected.
  • Bugfix: Fixed navigation export of NavRelevantComponent attached to an actor not affecting navmesh generation.
  • Bugfix: Navmesh tiles are no longer drawn in red, or not drawn at all, after navmesh generation finishes.
  • Bugfix: Reuse of navigation paths now updates all flags appropriately.
  • Bugfix: Corrected scoring of navmesh boundary segments in detour's crowd simulation.
  • Bugfix: Fixed UNavRelevantComponent not being included in navmesh generation when it's not attached to actor with collision component.
  • Navmesh raycast will use nearest poly containing ray origin instead of just closest one.
  • Added Z check to detour's crowd avoidance segment gathering.
  • RVO avoidance now takes the height of agents into account when culling obstacles.

Animation

  • New: Level-of-Detail Threshold for Animation Graphs
    • Many animation graph nodes now have an LOD Threshold option for performance optimization:
      • Apply Additive

      • Apply Mesh Additive

      • Aim Offset

      • All Skeletal Control nodes

    • Whenever the Skeletal Mesh instance drops below this LOD, the node will not execute.

image alt text

  • New: Per-Animation Compression Settings
    • You can now set animation compression on a per-animation basis.

image alt text

  • Choosing Automatic and then pressing Apply will cause the engine to determine the best setting (based on error metrics) and set that for you.
  • New: Added "Delete All" option to anim curve panel.
  • New: Added a new property called "Min Time Between Ticks" to particle systems. This can be used to force a lower tick rate on a particle system by specifying the minimum number of milliseconds between ticks.
  • New: Added a new role for sync group members: TransitionLeader. It is excluded from the group while it blends in. Once it reaches full weight it becomes leader until it is fully blended out again.
  • New: Added AssetRegistrySearchable tag to AnimSequence's EnableRootMotion property so that it shows in the content browser.
  • New: Added blend profiles to skeleton assets, which allow per-bone multipliers when using blend per bone or other blending nodes.
    • These are accessible from the skeleton tree pane in Persona.

image alt text

  • New: Added DrawCanvas and viewport string support to skeletal controls to enable them to output debug information to the viewport.
    • This feature can be enabled using the Show -> Display -> Skeletal Controls option in Persona's viewport,
  • New: Added a flag to animation evaluator nodes so users can set whether they should loop when being ticked.
    • With the addition of Marker Based sync, evaluator nodes now have the ability to be ticked like sequence players (by adding them to a sync group).
    • By default, the evaluator node's playing direction will be forward or backward based on whether the target time is earlier or later than the current time.
    • With the loop flag enabled the playing direction will be based on whichever direction will reach the target animation time more quickly. For example, going from 4.9 seconds to 0.1 seconds in a 5 second animation will play forward and loop instead of playing backward.
  • New: Added GetCurrentStateName as a blueprint-accessible function on animation instances.
  • New: Added a "Random Player" node for anim graphs. With this node, the user can play a selection of animations in a random order with certain randomized parameters. With Random Player, "Shuffle Mode" acts more like a randomized playlist, in that it will play everything on the list before repeating.
  • New: Added SetMinLOD and SetForcedLOD functions. These enable the user to restrict LODs for the a specific SkeletalMeshComponent.
    • For example, calling SetMinLOD with 1 will mean that the component will not use LOD 0, even if it gets close to the camera, but it can use LODs 1 and higher as it normally would.
    • Similarly, calling SetForcedLOD with 0 will force the component to use only LOD 0 all the time. This can be useful for ensuring that the local player's character is always at maximum quality.
    • If both functions are used, SetForcedLOD will override SetMinLOD.
  • New: Added support to tie update rate optimization directly to LOD level instead of selecting the amount based on screen size.
  • New: Added a "Start Position" to the player node. The Sequence Player and BlendSpace Player both contain the Start Position parameter, which will start the animation at the given position on the first time it plays.
  • New: Added support for space conversion in the copy-bone skeletal controller node.
  • New: Added support to PoseableMeshComponents for the MasterPoseComponent property.
  • New: Added the ability to remap to existing assets when retargeting in Persona.
    • Persona can also attempt to auto fill the correct assets if the source and destination assets use a similar naming scheme.
  • New: Allow users to change animation compression settings per animation in the detail panel.
    • Note that you'll have to click "Apply" to apply to the current compressed data. If not, data will not match the displayed compression setting.
    • Default compression settings are in Project/Animation.
    • An automatic setting exists. This may take a while, as it will try all possible configurations and compare results, but it will find the optimal compression settings.
  • New: Anim Montage now contains FAlphaBlend BlendIn/BlendOut option
    • Supports both preset and custom curve types.
  • New: Blend List node now supports Reset Child On Activation for reinitialization when reactivated.
  • New: Changed TrailRelaxation to Curve type, so that different relaxation values can be used on chains.
  • New: Offline animation retargeting supports rules for naming output animations.
    • Rules supported: Target folder, Prefix, Suffix, Replace.
  • New: Exposed SkeletalMesh property bDisableMorphTarget to blueprints. A new cvar, r.EnableMorphTargets, can be turned off to disable all morph targets.
  • New: FBX import now saves animation length property.
  • New: Persona Asset Browser displays folder path column.
    • Tooltip also displays folder path.
    • Sorting by path in the asset browser is supported.
  • Bugfix: Recompiling anim BPs that are dependencies of parent blueprints no longer causes a crash.
  • Bugfix: Fixed a crash that happened when something other than USkeletalMeshComponent had a MasterPoseComponent set.
  • Bugfix: Fixed a crash with retargeting additive blendspace animation assets.
  • Bugfix: Error is reported instead of crashing when compiling an animation blueprint that has a missing skeleton asset and contains a ModifyBone node.
  • Bugfix: Displaying the debug info of an AnimInstance object whose root node is null will no longer cause a crash.
  • Bugfix: Blendspace editor does not crash when the editor opens for the first time.
  • Bugfix: The random animation sequence player does not crash when there are no entries in the playlist.
  • Bugfix: Fixed a crash when default transition pins are set to true.
  • Bugfix: Reimporting a skeletal mesh that is currently open in Persona does not crash.
  • Bugfix: Fixed a crash with animation editing when the source data gets invalidated, possibly due to retargeting.
  • Bugfix: Fixed a crash with Blendspace having per bone set up when the interpolation value is 0.
  • Bugfix: Fixed a crash with invalid BlendSpace preview input coming when switching preview assets in Persona.
  • Bugfix: Prevented a crash in Persona while reimporting data.
  • Bugfix: Removed possible divide by zero in state machine transitions when using crossfade durations of zero.
  • Bugfix: Fixed assert on executing blueprint code during post load when an animation wants to spawn a "needs re-saving" message.
  • Bugfix: Fixed potential to call incorrect functions in derived anim blueprints, which could make derived anim blueprints function incorrectly.
  • Bugfix: Importing corrupted FBX files no longer crashes.
  • Bugfix: Fixed issue when importing curve values from FBX files with unwind rotation on.
  • Bugfix: When importing curves, the break tangent doesn't work, so now import curve defaults to auto.
  • Bugfix: Particle systems and other events triggered from anim notifies now work properly in the editor and at runtime.
  • Bugfix: Root Motion from Everything is no longer calculated incorrectly with animations that are part of a sync group.
  • Bugfix: Anim montage playback error correction is no longer incorrectly applied when the montage is stopped.
  • Bugfix: Anim instance native transitions no longer rely on state machine initialization to bind delegates.
  • Bugfix: Fixed animation blueprint relevancy nodes returning unexpected values when no relevancy can be determined.
  • Bugfix: Animation graph node properties that have underscores in their names now update appropriately.
  • Bugfix: Blueprint set morph target curves are now being set from master components to slaves.
  • Bugfix: Cloth and skeletal meshes no longer flicker or disappear at the edge of a viewport.
  • Bugfix: Memory is now reported correctly in GetResourceSize for UAnimSequence and USkeletalMesh assets.
  • Bugfix: Removed a one-frame delay when applying animation curve data.
  • Bugfix: A memory leak related to montages during shutdown has been fixed.
  • Bugfix: Negative curve values now work with montages.
  • Bugfix: Fixed issues with montage instances and slot nodes getting inconsistent weight data, causing animations to evaluate in different states.
  • Removed thread-unsafe access to LastRenderTime in animation system.
  • Improved duplicate slot node warning to make it easier to find malformed assets in larger projects.
  • Prevented invalid ranges being entered into FBX import data.
  • Optimized SafeSetCSBoneTransforms used by skeletal controllers after they have submitted their transforms.
    • Removed double iteration over the pose.
    • Removed iteration over the entire pose (we can start at the first bone in the transform list).
    • Removed bone masks and instead collect interesting nodes to perform conversion on.
    • Removed unnecessary conversions.
  • The anim blueprint compiler can now access member variables directly instead of thunking to the VM.
  • OSX version of the Maya rigging tools are now included in the launcher distribution.
  • Some animation nodes have moved to AnimGraphRuntime module.
  • Added a few support functions to UAnimInstance to make querying asset player states easier. Also added more montage stats to UAnimInstance.
  • Added NativeUninitializeAnimation override point to UAnimInstance.
  • Animation Compression: "Automatic" animation compression settings now default to the settings specified in Project Settings: Animation: Compression.
  • Reduced memory churn by removing many unnecessary allocations in various animation update and evaluate methods.
  • Sub-state machines can now work properly with native bindings. Previously, only sub-state machines in entry states worked correctly.

Audio

  • New: Improved Gameplay Statics sound API.
    • New Spawn at Location functions return an Audio Component that allows manipulation of the played sound similar to the Attached version.
    • Play at Location still does not return the audio component and should be used for one-shot sounds.
    • Rotation added to Location and Attached API to allow facing to be specified to work properly with non-spherical attenuation shapes.
    • Play Attached renamed to Spawn Attached.
    • Sound and Dialogue APIs are now consistent.
  • New: Added ability to set a global pitch scale for every non-UI sound in the game via a new blueprint function.
  • New: Made audio component's applied sound attenuation settings accessible from blueprints.
  • New: Orphaned sounds due to a Sound Node Looping now output a warning to the log.
  • New: Sound attenuation boundaries match the attenuation curves at min/max.
  • New: Sound attenuation values match attenuation curves at min and max rather than assuming 1.0 or 0.0 respectively.
    • This allows for more unusual distance-based attenuation curves, such as donut-shaped curves, or curves that cause audio to be loud far away but quiet nearby.
  • New: Support for playing sounds with audio component properties without needing an audio component as long as the sound's properties do not change.
  • New: XAudio2 voices for PC/XBoxOne platforms are pooled and reused.
  • New: Volume-weight voice prioritization sorting for active voices.
    • This allows for sounds with zero volume, but high priority, to be stopped by lower priority, but audible, sounds.
    • Bugfix: This feature includes a fix for when sounds go out of range (attenuation reaches zero) and then come back in range while still active. If not stopped in between, the sound won't automatically restart from the beginning.
  • Bugfix: Fixed a probable crash that could have happened if 9 reverbs became activated at once.
  • Bugfix: Concatenator sound cue nodes will now wait for all sounds to finish in child mixer nodes before playing next sound in sequence.
  • Bugfix: On PC/XBoxOne, an audio skip in sounds past a certain length have been removed.
  • Bugfix: On Mac, splitting and merging audio streams when using reverb, EQ, or radio effects no longer causes volume levels to to change.
    • Added low-pass filter for voice audio units to closer match PC audio.
  • Bugfix: Play In Editor Sound Quality Level is now being used correctly for Sound Quality nodes in Sound Cues when playing in editor.
  • Bugfix: A rare case where a sound would not be played because an async load request had been made too recently has been fixed.
  • Bugfix: Core Audio API no longer crashes on Mac when the number of active sounds exceeded the number of available audio units.
  • Updated OVR Audio SDK.

Automation

  • New: Added config entries to determine which platforms and configurations are available in an installed build
    • Also specifies whether platforms are available for code or content projects only
  • New: Added -FastPDB commandline parameter for UnrealBuildTool, so that we can make use of the /DEBUG:FASTLINK option in Visual Studio 2015
    • Used by default in Visual Studio Projects and Hot Reload, with a Build Configuration override if you don't want to use it
  • New: Adding option to mark the output of a module as publicly distributable if the module source code is not
  • New: Improved methods of identifying installed builds
  • New: Improved methods of identifying installed builds
  • New: Refactored automated test flags
    • Added Disabled flag to disable tests without commenting-out or deleting code.
    • Replaced Smoke Test button in Automation Front End with a Filters dropdown.
    • Test configurations do not compile out Automation features (except in Shipping mode).
    • Automation tests can be triggered from in-game console in non-editor builds (automation controller is enabled).
  • Added Third Party binaries folder to Build Plugin command
  • Changed BuildDerivedDataCacheNode to use target receipts to add runtime dependencies.
  • Deprecating -rocket command line argument as it is no longer needed to identify installed builds
  • Bugfix: Fixed a bug that could cause a crash when running automation tests from the commandline.
  • Bugfix: Fixed issue with Packaging DLC on Mac
  • Bugfix: Use runtime dependencies from module files to determine what needs to be included in released builds

Blueprints

  • New: Blueprint "Development Only" Functions
    • Native C++ functions marked BlueprintCallable can now also be optionally marked as DevelopmentOnly. This new metadata allows calls to those functions to be disabled (compiled out) of all Blueprint function graphs in cooked/packaged builds without breaking the execution flow.  image alt text
  • The PrintString and PrintText system library functions have now been marked DevelopmentOnly by default. This allows for a quick removal of Blueprint logging in the final build product.
  • To get packaged/cooked Blueprints to compile without the "DevelopmentOnly“ nodes, disable the “Compile Blueprints in Development Mode" option found in the project's Cooker settings (this option is on by default to preserve functionality).
  • New: Condensed Blueprint Struct Nodes
    • We've improved and refined usability for structs that contain toggle values that are conceptually linked to other property "settings" in the same struct (like how our PostProcessSettings struct operates).  image alt text
  • Different override/enabled states are now managed through a toggle or dropdown widget that is exposed along with the setting on "Make Struct" and “Set Member” nodes.
  • To associate a toggle variable with another property, use the "EditCondition" metadata like is pictured above.
  • We've adopted this workflow for our PostProcessSetting nodes, which have proven to be unwieldy and confusing without it.
  • New: Added advanced searching syntax to Find-in-Blueprints.
  • New: Added experimental option to use the Blueprint Diff Tool with Animation Blueprints and Widget Blueprints.
  • New: Added facilities for specifying override vertex colors for meshes via Blueprints: PaintVerticesSingleColor and PaintVerticesLerpAlongAxis.
    • PaintVerticesSingleColor sets all mesh vertices to the specified color.
    • PaintVerticesLerpAlongAxis allows you to specify a linear blend along a mesh axis from one color to another.
  • New: Added Min and Max nodes for byte variables.
  • New: Added CopyPoseFromSkeletalMesh node, which takes a snapshot of a skeletal mesh pose and applies it to another skeletal mesh component.
  • New: Added support to AsyncTask nodes so that their corresponding functions can return null.
  • New: Added the ability to mark BlueprintCallable functions as development only.
    • By default, these nodes will be compiled out of Blueprint class function graphs at cook/package time, potentially improving runtime performance.
    • The "Print String" and "Print Text" functions are now marked as development-only, and will not be executed at runtime in cooked builds by default.
  • New: Added asset registry tags "NativeComponents" and "BlueprintComponents" to store the number of native and blueprint components, respectively. These counts can be used to identify targets for optimization.
  • Blueprint context menu performance improved.
  • By default, Buildmachines will no longer ignore compile on load errors for Blueprints.
  • Users can no longer edit Actor default values on properties in User Defined Structs or in CDOs that have structs with Actor properties.
  • New: Users can now delete function graph overrides that used to be interface implementations.
  • Bugfix: Crash fix when undoing add/remove operations on default instanced subobjects in a Blueprint.
  • Blueprint division nodes now show the callstack if a divide by zero is attempted.
  • During undo/redo, when deleted Blueprint instances are restored to the scene, they will be reinstanced using the newest version of their BlueprintGeneratedClass.
  • New: GetPathName node created. This node returns the full path name of a UObject.
  • New: Exposed many scalability settings to Blueprints via UGameUserSettings, making it easy to build a settings screen entirely in UMG.
  • New: The Blueprint Profiler is now available as an experimental feature to help identify costly operations in blueprints and guide optimization.
    • Enable the Blueprint performance analysis tools option in editor preferences under General - Experimental in the Blueprints section.
    • Analysis is currently enabled on a per-blueprint basis in PIE only.
    • To profile a blueprint, enable the profiler option in the blueprint editor and recompile the blueprint to add instrumentation. Then enter PIE and the editor will display the blueprint profiler tab and display timing data.
    • Work is ongoing in this area and the feature is not expected to be fully complete in this release.
  • New: Vector2D now has equal and not equal functions, just like Vector3D.
  • When adding new variables to user defined structures, the variable type will be the same as the last set type.
  • Bugfix: When converting a selection of components into a Blueprint, CDO values will no longer be lost.
  • Bugfix: "Convert Selected Components to Blueprint Class" no longer generates new components when used repeatedly.
  • Bugfix: Find-in-Blueprints will correctly check-out all out-of-date Blueprints if Index All With Source Control is selected.
  • Bugfix: When modifying default values on inherited Blueprint variables, the default values in the parent Blueprint will not be affected.
  • Bugfix: "Add Component" node adds components with exposed variables to the correct target actor (previously always went to "self").
  • "Color" name is no longer restricted.
  • Bugfix: "Convert selected actor to blueprint class" and "Convert selected components into blueprint class" actions can no longer be used to convert types that aren't blueprintable.
  • Added "focus" keyword to "AIController::SetFocalPoint".
  • Bugfix: Adding a WeakObjectPtr to an array of object references in a Blueprint now works correctly.
  • Bugfix: Assigning an interface property that is exposed on spawn using the Spawn Actor of Class node will no longer error.
  • Bugfix: Async Task nodes and Load Asset nodes no longer change superficially each time they are cooked
  • Bugfix: Attempting to follow a Blueprint compile error message to a node that has been delete no longer crashes
  • Blueprint Options and Class Options details view will correctly display in non-English languages.
  • Bugfix: Blueprint VM no longer crashes when encountering a type mismatch, throws an exception instead.
  • Bugfix: Blueprints duplicated for PIE will no longer register as dependencies to other Blueprint.
  • Bugfix: Blueprints with events in them no longer indicate they are different when compared against themselves using the Blueprint Diff Tool.
  • Bugfix: Can no longer add reroute nodes to read-only graphs such as math expression graphs.
  • Bugfix: Can no longer change the "Parent Socket" member of an inherited component.
  • Can no longer reparent level Blueprints to other level Blueprints, though native classes are still an option.
  • Changed an ensure to an error when attempting to generate literals for unsupported properties in Blueprints.
  • Bugfix: Child components in a Blueprint Class asset attached to a default scene root will no longer be lost after reparenting to a Blueprint Class that also has a default scene root.
  • Bugfix: Copy and pasting local variable nodes for functions into collapsed graphs will no longer invalidate the node.
  • Bugfix: Crash fix for prompting user to check out Blueprint during the compilation stage.
  • Bugfix: Crash fix in Find-in-Blueprints after switching languages and searching.
  • Bugfix: Crash fix when AIController possesses a Pawn during Pawn's Unpossess event while exiting PIE.
  • Bugfix: Crash fix when attempting to override Timeline event nodes in a child Blueprint.
  • Bugfix: Crash fix when hiding the "CameraSettings" category on custom Camera Component classes.
  • Bugfix: Crash fix when pasting an event node is undone/redone.
  • Bugfix: Crash fix when doing a "Find Reference" on local variables without any placed nodes for the variable.
  • Bugfix: Crash fix when creating a local variable from an orphaned node inside a collapsed graph.
  • Bugfix: Custom event nodes bound to delegate signatures that include 'const&' and/or TArray input parameters will no longer emit a compiler note/warning.
  • Bugfix: Delay nodes can now be used in GameInstance's Initialize function. Previously they would only work in PIE.
  • Bugfix: Dependencies that arise due to Blueprint Macros are now correctly detected so that bytecode can be regenerated when needed - fixes one cause of TRASHCLASS appearing in bytecode.
  • Bugfix: Diffing Blueprints with deleted component assets will no longer cause an assert.
  • Bugfix: Warnings about missing parent functions no longer appear if the child function is invalid as a result of compile-on-load.
  • Bugfix: Dragging and dropping to create pins on function Return nodes when there are multiple of them will correctly update all Return nodes.
  • Bugfix: Dynamic Component delegate bindings to self are no longer exported on copy/paste & ALT-drag. This corrects the side effect of a copied Actor instance also affecting the original.
  • Bugfix: Find-in-Blueprints no longer requires the Asset Registry to initialize.
  • Bugfix: Crash fix when editing an instanced variable nested within another instanced variable.
  • Bugfix: Crash fix deleting graphs or delegates while a "Create Event" node's graph is in the transaction buffer.
  • Bugfix: Crash fix when a Blueprint's skeleton class is null.
  • Bugfix: Fixed a Blueprint breaking bug where invalid "PLACEHOLDER" classes would replace Blueprint class references.
  • Bugfix: Crash fix in Blueprint Editor after removing a previously-serialized root and/or parent component within the native scene component hierarchy of a native C++ parent class.
  • Bugfix: Crash fix in Blueprint Editor when a specific HideCategory (PrimaryTickProperty) was set on an Actor-based Blueprint Class.
  • Bugfix: Crash fix in Blueprint Editor when deleting a root scene component with 2 or more children followed by deleting a non-root child of the promoted child node.
  • Bugfix: Crash fix in Blueprint Graph editor after an undo of an unlinked user-defined pin removal action (e.g. removing an unlinked Function Input).
  • Bugfix: Fixed a Blueprint Graph editor issue that caused Add Component nodes not to be restored properly on an undo/redo after a deletion followed by a compile.
  • Bugfix: Fixed a bug in duplicated event nodes that could cause unrelated content to be referenced and loaded.
  • Bugfix: Fixed a bug in the array Shuffle method where the last entry wasn't as randomized as the other elements.
  • Bugfix: Crash bug during garbage collection for child Blueprints cyclically dependent on their parent.
  • Bugfix: Crash fix when applying instance changes to a Blueprint.
  • Bugfix: Crash fix while dragging off pins.
  • Bugfix: New components are now able to have the same name as a deleted component without having to compile after deleting the old component.
  • Bugfix: Copy, duplicate, and rename hotkeys wor correctly in the Blueprint viewport.
  • Bugfix: Fixed a bug that was resetting arbitrary defaults on Blueprint sub-classes.
  • Bugfix: ClassAssetIDs properly resolve circular dependencies.
  • Bugfix: Fixed a bug where special game specific event nodes could be removed on load (when they're associated with interface functions).
  • Bugfix: Fixed bugs with parent/child cyclic dependencies, where the child's overridden property values would be cleared on load and inherited components would be trashed during compilation.
  • Bugfix: Crash fix on undo of an Actor-based Blueprint Class instance deletion if it followed a previous redo.
  • Bugfix: Crash fix when using the diff tool with a Blueprint that implements an interface.
  • Bugfix: Crash fix on save with an EditInline instanced object owned by an Actor component instance.
  • Bugfix: Crash fix when modifying a function signature after deleting a sub-class override for it.
  • Bugfix: Crash fix when passing a default BlueprintSessionResult object to the "Join Session" Blueprint node. Instead of crashing, the join will fail and execution will continue from the "On Failure" pin.
  • Bugfix: Crash fix when using the "Replace References" feature when deleting a Blueprint asset.
  • Bugfix: Crash fix in specific cyclic dependency cases involving an Actor and ActorComponent Blueprints.
  • Bugfix: Crash fix when removing a event/function param in a Blueprint that was associated with the set GameMode.
  • Bugfix: Crash fix when deleting a map while its level Blueprint is opened.
  • Bugfix: Crash fix after a hot reload of the compiled game project.
  • Bugfix: Fixed a potential infinite loop runtime crash when adjusting Actor rotation in a Blueprint function.
  • Bugfix: Crash fix in to component reconstruction in a Blueprint Class instance related to undo/redo operations.
  • Bugfix: Fixed an internal Blueprint compile error on expansion of a Macro Instance node with one or more unconnected Enum output pins.
  • Bugfix: Crash fix when force-deleting a non-Actor parent Blueprint Class asset in the Content Browser if a child Blueprint Class asset was also loaded.
  • Bugfix: Event Dispatchers do not become unmodifiable after reparenting the Blueprint.
  • Bugfix: Component property values on a Blueprint class instance in the current scene are no longer reset as a result of recompiling the Blueprint class.
  • Bugfix: Convert Selected Components to Blueprint Class no longer asserts inappropriately.
  • Bugfix: Fixed collision response options editing for instances of Skeletal Mesh components added to a Blueprint Class.
  • Bugfix: Sliders behave properly on Capsule Collision component shape properties in the Blueprint editor.
  • Bugfix: Find-in-Blueprint goes to an item after the user double-clicks on it when searching locally.
  • Bugfix: Fixed compile errors after creating a local function variable from a node that could not find its assigned property.
  • Bugfix: Crash fix from invalid macros resulting from deleting the source graph in MacroLibrary.
  • Bugfix: Crash fix on Blueprint load when a macro instance referenced a struct.
  • Bugfix: Crash fix when generating bytecode for circularly-dependent blueprints.
  • Bugfix: Crash fix when a Blueprint Enum name collides with a Details Customization Name. For example, "Color" is now a safe name to use for a Blueprint Enum.
  • Bugfix: Crash fix when a Blueprint is saved without valid default values.
  • Bugfix: Crash fix Fixed when attempting to open the Property Matrix for a Blueprint that is missing its parent.
  • Bugfix: Crash fix when indexing all Blueprints in the Find Results window.
  • Bugfix: Crash fix when making changes with multiple components selected in the blueprint editor.
  • Bugfix: Crash fix when using "Find References" on a struct operation node (Make, Break, Set Members).
  • Bugfix: Crash fix when modifying some properties in sub-struct variables inside user-defined structs.
  • Bugfix: Crash fix when using the target of an Interpolate Component To node is destroyed before the node finishes.
  • Bugfix: Crash fix when using the Editor to debug breakpoints in blueprints with a null MacroGraph. Now it calls Ensure and recovers gracefully.
  • Bugfix: Crash fix with duplicating Timeline nodes, which was causing the new Timeline's tracks to be misplaced.
  • Bugfix: Crash fix after reinstancing Component BPs in thumbnails.
  • Bugfix: Crash fix in editor when using hotkeys to create local variables in graphs that do not support locals.
  • Bugfix: Crash fix when applying instance changes to a struct array back to the blueprint using the IWCE interface.
  • Bugfix: Crash fix when using "Draw Debug Float History" and "Draw Debug Transform History" in Blueprints.
  • Bugfix: Crash fix while garbage collecting recompiled Blueprints.
  • Bugfix: Promoting function graphs from interfaces during interface removal no longer calls Ensure.
  • Bugfix: Fixed thread-unsafe code in the Blueprint VM by removing static/global data.
  • Bugfix: Fixed errors that would sometimes appear when reloading a level that referenced a sub-level.
  • Bugfix: Fixed issue with appearing to be able to select actors in the viewport using Level Blueprints loaded through the Find-in-Blueprint system.
  • Bugfix: Deleting macros in Macro Libraries and then using undo no longer causes external dependencies.
  • Bugfix: Fixed UI issues when clearing GameplayTagContainers.
  • Bugfix: Fixed issues that could occur if an existing Blueprint class default object or instance contained one or more invalid property values for native component subobjects on load.
  • Bugfix: Fixed issues with "Find References" on local variables located in function graphs with a space in the name.
  • Bugfix: Fixed issues with graph node bubbles rendering incorrectly when there is nothing in the top slot.
  • Bugfix: Fixed the inability to save a Blueprint Class asset after renaming another Blueprint Class asset on which it depends.
  • Bugfix: Fixed warnings that would sometimes appear when using level Blueprint communications.
  • Bugfix: Fixed an issue causing Find-in-all-Blueprints to not be able to load up Blueprints due to missing path.
  • Bugfix: ForEachEnum will now correctly iterate over all enum values.
  • Bugfix: Functions correctly inherit purity in Blueprints and will update to reflect the current purity state of the inherited function.
  • Bugfix: GameplayTag and GameplayTagContainer switches will now work in standalone and cooked builds.
  • Bugfix: Harvesting components into a new Blueprint will correctly mark the components as movable so they can properly attach to the root.
  • Bugfix: Macros leveraging wildcard parameters will no longer fail to expand during compile-on-load.
  • Bugfix: Moved error bar for variable nodes to the bottom instead of the top to prevent shifting of nodes when there are errors.
  • No longer possible to duplicate Blueprint graphs while in PIE.
  • Optimization for Find-in-Blueprints gathering of property data.
  • Per instance lighting and vertex coloring on static mesh components is now only applied after the user construction script when the actor is reconstructed.
  • Removed direct dependency on GameplayAbilities from GameplayDebugger to solve problems with its classes showing in blueprints editor as a result of the OS automatically loading the library.
  • Bugfix: Removing an interface and keeping the functions will correctly make the pins on the function available in the details panel.
  • Bugfix: Renaming a component and then adding a new component of the same type in the Blueprint editor will no longer result in broken defaults editing.
  • Bugfix: Renaming a component no longer renames all components of the same name in dependent Blueprints (inherited components are still updated as expected).
  • Bugfix: Resolved Blueprint compiler errors with duplicating Matinee Actors and adding controllers.
  • Bugfix: Right clicking on the graph instruction text for new Blueprints will no longer prevent the node context menu from appearing.
  • Bugfix: Setting default values of Text properties in the User Defined Struct or for Local Variable properties in Blueprints will correctly assign the value and preserve the value between instances of the editor.
  • Slight improvement to native Actor instance construction time.
  • Bugfix: Spawn Actor From Class nodes can no longer be placed in Blueprints that do not support a world context.
  • Suppressed import linker errors related to Blueprint Generated Classes.
  • Bugfix: Child actor construction scripts run appropriately when starting Play In Editor sessions.
  • Bugfix: Blueprint graphs don't lose focus after pressing debugging keys in the blueprint editor.
  • Bugfix: Validated Get nodes can now be used on local variables.
  • Bugfix: This fixes an issue with array nodes where the top input pin would be obscured by the comment bubble making it hard to wire up the nodes.
  • Bugfix: Undoing changes to a Blueprint Actor Class's component hierarchy when the Blueprint Editor is closed now works correctly.
  • Bugfix: Undoing changes to object reference properties in a Blueprint no longer causes "Graph is linked to private object(s) in an external package" errors.
  • Bugfix: User Defined Enums begin counting at 0, and will no longer increase by two's.
  • Bugfix: User defined structs with Blueprint class references in their defaults will no longer lose their defaults when loading.
  • Bugfix: User defined structs and Local Variables can have non-basic type arrays of size 1 without resetting size 0.
  • Bugfix: When promoting an orphaned variable node to a local variable, all orphaned variable nodes in the local scope will point at the new local variable as expected.
  • When using a pin connection to specify the class for "Spawn Actor From Class", the default value overrides from the node are assigned to the new actor when it is spawned.
  • WorldContext pins will no longer be visible when the editor starts up if a Blueprint is loaded during game module load (actor/object constructors).
  • Exposed the ESplineMeshAxis type to Blueprints.
  • Improved "Find References" for variable nodes to more directly search for references to the specific variable.
  • Improvements to the usability of PostProcessSettings structure in Blueprints.
  • Log statements coming from blueprints now include the blueprint's name. This can be disabled in [Kismet] in Engine.ini via bLogPrintStringSource.
  • Optimized performance of USimpleConstructionScript::GetAllNodes. This dramatically improves the performance of FindArchetype which is relied upon heavily when spawning a Blueprint defined Actor with components added in blueprints.
  • PinTypeSelector has improved usability with the sub-menu for object types.
  • Added a warning when a deprecated output from Break Struct node is used.
  • Toggling a function to pure will automatically remove all breakpoints from call sites.

Core

  • New: .ue4stats file will now have ".inprogress" extension for the duration of stats capture. This prevents accidental use of an incomplete file.
  • New: Added compile-time define support to filter out command line args on a per-game basis.
  • New: Added configurable threshold settings for fps/frame time displays.
    • t.TargetFrameTimeThreshold and t.UnacceptableFrameTimeThreshold set the thresholds (in ms, defaulting to 33.9 and 50.0, respectively).
    • Values below the target level are green, values above the unacceptable level are red, and the ones in between are yellow.
    • The bar for on-screen cycle counters is now based on t.TargetFrameTimeThreshold rather than a hardcoded 33.3 ms.
  • New: Added console command "LoadTimes.DumpReport" which provides a report of the exclusive load time of packages.
  • New: Added debug renderensure console command.
  • New: Added -DUMPALLWARNINGS command line param to force dump all warnings and errors after after executing commandlets.
  • New: Added -fullcrashdumpalways commandline option to force full crash minidumps.
  • New: Added garbage collection array pool leak checks.
  • New: Added LIKELY/UNLIKELY macros for static branch prediction hinting.
  • New: Added -MatchAutoStatCapture command line switch to save .ue4stats automatically during each match.
  • New: Added more log info when saving temporary shader files fails. Increased the number of attempts when moving a file fails.
  • New: Added new hitch detection CVars to make it easier to control how hitches are detected and reported
    • t.HitchFrameTimeThreshold is the definition of a hitchy frame (in ms), defaulting to 60 ms.
    • t.HitchDeadTimeWindow is the minimum time that must pass before we'll record a new hitch (in ms), defaulting to 200 ms.
    • t.HitchVersusNonHitchRatio is the minimum ratio between the last frame time and the current frame time to consider it a hitch, defaulting to 1.5 (e.g., if the last frame time was 50, the current frame must be at least 75 to be considered a hitch).
    • They can also be set in the [SystemSettings] section of DefaultEngine.ini for games that target something other than 30 fps.
    • Switched 'stat hitches' display to use the t.HitchFrameTimeThreshold value, and updated coloring to use the related coloring thresholds (at 25% of the hitch value) instead of using hardcoded yellow at 100 ms and red at 200 ms.
  • New: Added "stat startfile", “stat stopfile”, “stat hitches”, and “stat namedevents” to the console command autocomplete list.
  • New: Active class redirectors map is loaded from all config files, so plugins can define redirectors.
  • New: Asset Registry tags are now excluded from cooked builds. This reduces memory usage. Tags needed at runtime must be added to the CookedTagsWhitelist list in DefaultEngine.ini
  • New: Async loading priority has been given a typedef and made into a signed type.
  • New: Async: Added ability to register an optional callback function that is executed when a Future completes.
  • New: Console windows opened by the engine on Windows, such as for log output, will now attempt to match their horizontal size to the console's buffer size to minimize the need for manual scrolling or resizing.
  • New: Added unit test for ISO date/time conversion of empty strings.
  • New: Allowed for specifying custom data in FStructOnScope.
  • New: Templatized TypeContainer implementation to allow for thread-safe objects; updated unit test
  • New: Enabled user-defined suffixes on Saved folders with the -saveddirsuffix= command line parameter.
  • New: Exposed async load priority through streamable manager.
  • New: FCachedReadPlatformFile can now be disabled to decrease memory usage in exchange for decreased speed.
  • New: Function for getting total and free disk space on Mac.
  • New: Garbage collector will now spawn sub-tasks as soon as there's enough work without waiting for the parent task to finish processing all objects.
  • New: Implemented Undo Barriers on the transaction buffer.
    • This adds some new methods to the UTransactor interface for adding and removing Undo Barriers.
    • PIE now adds an Undo Barrier upon startup, so that it is not possible to undo beyond the start of the PIE session.
  • New: Pkginfo commandlet can now open packages from outside of the current project by specifying the absolute package path.
  • New: Script callstacks are now printed out on ensures.
  • New: Added support for FText properties to serialization.
  • New: Added support for TMap property serialization.
  • New: Exposed entire serializer state in backend API.
  • New: Added HUDinformation about currently running stats file command (in format "STATS FILE: Duration: {0}, Filesize: {1}").
  • New: Stats converter is using a new stats reader which runs 10x times faster.
  • New: When cooking by the book, saving packages will now skip creating exports and imports that are editor-only (are instances of an editor class).
  • New: Profiler loading time optimized to be up to 6x times faster.
  • Bugfix: Crash fix in undo/redo when a lazy object pointer refers to a garbage collected object.
  • Bugfix: Crash fix in async loading caused by iterating over an array while new elements were being added to it.
  • Bugfix: Crash fix when loading the AssetRegistry cache.
  • Bugfix: Crash fix on failure of request file functionality to UnrealSwarm. It will no longer crash on sporadic network problems.
  • Bugfix: Crash fix to UnrealHeaderTool in some rare cases if the parsing step had other errors.
  • Bugfix: Crash fix when replacing references to a deleted anim blueprint with a duplicate.
  • Bugfix: Crash fix to hot reload when dealing with empty user-defined enums.
  • Bugfix: Profiler indication loading progress reworked so it no longer freezes without a progress bar.
  • Bugfix: Fixed missing return value in TAsyncResult assignment operator.
  • Bugfix: CrashReporter records crashes properly on Windows 10.
  • Bugfix: Async loading system will not promote an existing request's priority where a new higher priority request for an already requested package wn't promote the existing requests priority to match the new one.
  • Bugfix: Cooked asset registry generation now takes redirectors into account.
  • Bugfix: "-benchmark" command line switch is now honored in non-editor builds so that benchmarking games is possible again.
  • Bugfix: Servers no longer make repeated attempts to initialize the HighRes screenshot system.
  • Bugfix: Fixed a case where FAssetRegistry::RemoveDependsNode could potentially delete an allocation from within an array allocation.
  • Bugfix: Removed a potential deadlock when suspending and resuming async loading multiple times.
  • Bugfix: Thread local values are no longer accessed with invalid TLS keys in Stats2 code.
  • Bugfix: Fixed an assert when cancelling async loading with async loading thread enabled.
  • Bugfix: Game-agnostic editor settings are now processed correctly when output to the engine saved config directory.
  • Bugfix: Fixed blueprints compilation errors after hot reload.
  • Bugfix: UnrealBuildTool dependency file caches are no longer broken when the process is terminated unexpectedly.
  • Bugfix: Comparisons between module names of different case are now handled correctly when checking files for rebuilds in UnrealBuildTool.
  • Bugfix: Fixed 'debug ensure' console command logic.
  • Bugfix: FAssetRegistry::DependencyDataGathered no longer favors soft asset dependencies.
    • FAssetRegistry::DependencyDataGathered was potentially replacing hard asset dependencies with soft asset dependencies, but the hard asset dependencies need to take precedence.
  • Bugfix: FURL comments are now properly gathered for documentation.
  • Bugfix: Fixed leaking certain auto-generated structures (ICppStructOps) on exit (reduces spurious memory leak reports by memory profiling tools like valgrind).
  • Bugfix: Memory leaks related to async loading have been fixed. Array memory churn has been reduced.
  • Bugfix: JsonReader::ParseNumberToken now terminates properly on sudden end of stream.
  • Bugfix: There is no longer a race condition where StaticFindObject can be called from another thread while SavePackage is running.
  • Bugfix: Fixed 'remove' actions when processing .ini files in UnrealBuildTool.
  • Bugfix: Removed a possible infinite loop and avoided skipping elements in UMapProperty::Identical.
  • Bugfix: Various issues fixed with hot reload on Mac.
  • Bugfix: Time markers in the log file when using -LOGTIMESINCESTART are now logged correctly.
  • Bugfix: Fixed issue where memory counters are not correctly listed in the profiler's window.
  • Bugfix: Path generation errors in streaming network file platform layer fixed.
  • Bugfix: Fixed stack corruption in UnrealHeaderTool when increasing NAME_SIZE.
  • Bugfix: "Stat MemoryPlatform" no longer exhibiting errors the first time it is used in a run.
  • Bugfix: UnrealBuildTool is now able to harvest environment variables when the user's Windows login name contains non-ASCII characters.
  • Bugfix: UnrealHeaderTool now stops the build when a warning occurs and "warnings as errors" is enabled.
  • Improved the readability of on-screen stat displays.
    • The background color for each row is now solid instead of a gradient, and it alternates colors from row to row to improve reading across a line.
  • Hot-reload performance has been improved with parallelized search for old class default objects' referencers.
  • Added "out of space" checks to the build patch services.
  • CrashReporter always dumps minidumps even when the full crash dump mode is enabled, mostly to avoid hitches during writing the minidump.
  • Increased the default UObject count limit in the editor to 16 million objects.
  • BuildConfiguration.xml changes will now cause a makefile rebuild.
  • Minimized allocations made by garbage collection process by pooling UObject arrays.
  • Optimized UObject array copying during garbage collection by using memcpy instead of iterating over the array.
  • Minor improvements to scoped timing functionality.
    • Make scoped seconds timer class available outside of stats build. Normal usage macros still remain guarded.
    • Added SCOPE_SECONDS_COUNTER_RECURSION_SAFE, which only times during the outmost instance of a recursive function
    • Added SCOPE_SECONDS_COUNTER_RECURSION_SAFE_BASE and SCOPE_SECONDS_COUNTER_BASE, which are defined in all build types, for easy temporary timing in Test/Shipping builds.
    • Added a boolean parameter to the timer class which can be used to disable it without having to scope the calling code.
  • Added a more verbose message when crashing due to seeking to invalid file positions.
  • Optimized custom version system so that it takes less space in saved packages and is faster to access at runtime.
  • Optimized FElementBatchMap usage in Slate rendering.
  • Optimized FMemory::Memswap and TSparseArray::Compact.
  • Optimized object iterator by storing the current object pointer in the iterator object.
  • Optimized performance of FindFunction, which decreases overhead for calling all UFUNCTIONs.
  • Optimized the code generation path in UnrealHeaderTool.
  • Fonts will no longer be loaded on the server.
  • Framesync for external profilers now happens reliably around gamethread frames.
  • Game resolution now will always be smaller than the primary desktop size, even if the command line specifies a bigger resolution.
  • Memory stats are logged on OOM.
  • Made sure that all instanced subobjects are not reset on actor construction and not only components.
  • TMap properties are now processed when searching for object references.
  • Moved FriendsAndChat module to Runtime folder.
  • OS memory stats are no longer acquired every tick unless stats are being captured.
  • Bound by (GT, RT, GPU) calculations now uses the t.TargetFrameTimeThreshold cvar (in ms) rather than being hardcoded to kick in only when over 30 fps.
  • Changed the ini file name generation for PerObjectConfig objects that are saved into a package to use the file name specified by the object instead of the content path where they live.
  • Cook-by-the-book will now skip saving packages that are only referenced through editor-only properties.
  • Cooked packages can now be loaded in the editor if cooked for the same non-editor version of the platform the editor runs on.
  • Buttons on CrashReporter window have been updated for better user experience.
  • Stats are now visible in VR mode.
  • String output functions in JsonObjectConverter now ignore Deprecated properties by default.
  • Various fixes and improvements to asset-registry-based package dependency preloading

Editor and Tools

  • New: SessionFrontend now has the ability to set session name and owner from the command line, e.g. on consoles running from Visual Studio.
  • New: "Reset to default" button on the Image Size property of a brush now resets to the size of the brush's texture, if one is set.
  • New: "Scalabilty Group" console variable category has been added to the device profile editor view.
  • New: Added "-FixupStringAssetReferences" command line option to use with the ResavePackages commandlet. This will forcibly fix any string asset references the same way it fixes hard object references.
  • New: Level sequences now support particle system parameter animation.
  • New: Animation tracks can be copied from a matinee to a level sequence.
  • New: Added support for slot name animation to the skeletal animation track in the level sequence editor.
  • New: A font metrics visualiser has been added to the font editor preview. This helps you ensure that all of your sub fonts are within the clipping region (the green box) of your main font.
  • New: Added a horizontal scrollbar to the Message Log so that very long lines can be seen in their entirety.
  • New: Added a new add key mode in the curve editor. Shift + ctrl + left mouse will add new keys (value and time) on all editable curves at the mouse location.
  • New: Added a new Blueprint-callable method to force an update on a Spline Mesh (to recalculate its collision), and also added it as an extra optional parameter on any Blueprint calls which set spline mesh parameters so that mesh/collision update can be deferred if desired. This can provide a big performance optimization in Construction Scripts which manipulate Spline Mesh Components.
  • New: Added a new Editor Preference (Editor Preferences -> Level Editor -> Miscellaneous -> Move BSP Pivot Offset Automatically) which maintains a Brush's pivot in the center of its geometry when its vertices are being edited in Geometry Mode.
  • New: Added a new simplified plugin creation wizard.
    • It can be opened from the plugin browser instead of being another plugin that needs to be enabled.
    • Now, users only need to choose a plugin template and a path/name for it.
  • New: Added the ability to bind a delegate to a property to react to a child property changing.
  • New: Added an option (in editor style settings) to mirror output log warnings or errors into the message log during PIE.
  • New: Added Data Table support for static sized arrays.
  • New: Added sRGB color input support in ColorPicker.
  • New: Added support for a package to be launched to multiple targets from a single launch command line.
  • New: Material parameters can now be animated in level sequences.
  • New: User Defined Struct string and text properties can be marked as multi-line text.
  • New: "Convert to Static Mesh" can be used on volumes and works the same way as it does for brushes.
  • New: Added template to the Plugin Creator that will help you create a plugin using a Third Party library.
  • New: Added the ability to take, save, and load widget snapshots via the widget reflector. This works for both local and remote targets, and allows you to do things like take a widget reflector snapshot from your game running on a PS4, and then inspect that snapshot on PC
  • New: Added the ability to type in a path for the reference viewer, which makes it much easier to track down assets that are broken due to references to missing assets. Paste in the missing asset path to view the assets that referenced it.
  • New: After making changes to certain language settings which require an editor restart, a toast prompt is now displayed indicating this to the user, with a button for performing the restart.
  • New: Camera preview window in the level viewport now has better support for actors with multiple camera components. It will ignore camera components with bIsActive set to false, letting the user decide which component to use.
  • New: Changed Plugin Creator to allow new plugins to be created in subdirectories.
  • New: Changed the hierarchy of some of the command lists to better reflect when a keypress has the potential to be handled by a parent if necessary.
    • This fixes the issue where some hot keys were not alerting the user that they had already been assigned in the Keyboard Shortcuts editor.
  • New: Changed the placement offset for lights so that they're placed closer to the cursor.
  • New: Changes to spawning / duplicating actors in Simulate In Editor: now actors are always spawned non-permanently into the SIE world, in line with other edits to actors which are reverted upon exiting SIE.
  • New: Clarified the use of Server Game Options and Command Line Options in the tooltips for the Level Editor -> Play settings.
  • New: Disabled the "Refresh/Generate Project" and "Open C++ Code" actions for Blueprint projects with no C++ code.
  • New: Engine: Allowed the use of tokens {GameName}, {PlatformArchitecture}, or {RHIName} in UGeneralProjectSettings::ProjectDisplayedTitle
    • Note: The value must be manually edited in the ini file and wrapped with "" currently, due to a core issue with ini values for strings/text that contain { or })
  • New: Experimental "Merge Actors" feature now merges collision bodies.
  • New: Fixed and enabled UnrealBuildTool makefiles on Mac. This should give faster build iteration times on Mac.
  • New: FPngImageWrapper now has working error handling. This was previously causing the editor to crash on launch if a project thumbnail had become corrupted.
  • New: Improved lightmap import performance in editor, improves build lighting time.
  • New: Improved searching in the console. Typing "? " at the beginning of the console command will make it search for all cheat commands containing your terms instead of just those starting with what you type.
  • New: In the UI widget animation editor and level sequencer editor, you can now change auto key options to auto-key off, auto-key existing animations only, and auto-key all.
  • New: Made an optimization to component instance data cache application, resulting in big savings for Actors with a large number of construction script created components. Moving actors with many components now works much more quickly.
  • New: MessagingDebugger: Added keyboard shortcuts for debugger actions
  • New: MessagingDebugger: Implemented details view for messages
  • New: MessagingDebugger: Simplified message tracer API
  • New: New Quad Complexity view mode displaying the amount of rasterized quad overshading.
    • The quad overshading can also be taken into account in the Shader Complexity view mode by enabling the "Visualize.Quad Overhead" show flag.
  • New: Added limited support for text based filtering of the event list in Profile.
  • New: Profiler:made filter box resizable; replaced spaces with slot paddings; more sensible default sizes.
  • New: Reinstated the ability to edit Spline Components via their visualizer even if the Construction Script sets the points itself. This is done by checking 'Override Construction Script' in the Spline Component's details.
  • New: Reinstated the control mechanism to move the pivot by Middle-dragging the center point in perspective mode; this allows the vertex snapping mode (holding V+MMB drag) to work as before.
  • New: Implemented session authorization for remote users in SessionFrontend.
  • New: Sound class assets no longer modify their package as soon as they are opened in the editor.
  • New: Stopped the builder brush from being erroneously rendered by 'show collision'.
  • New: The "Maximum Texture Size" property now yields an error dialog when attempting to change it for non power of two textures which do not have a padded Power of Two Mode.
  • New: The auto-save feature has been revamped and now functions as intended. It will wait for a small period of inactivity prior to operating, so as not to intrusively interrupt the user's workflow.
  • New: The light complexity view mode now has improved, more readable color coding. The color per number of lights are configured in BaseEngine.ini under Light Complexity Colors.
  • New: The process of duplicating Brushes in the editor has now been hugely optimized.
    • In a test level with 227 brushes, these are now duplicated in around 2 seconds instead of nearly 4 minutes as before.
    • A dialog has been added to show progress on the operation if it takes more than a few seconds.
  • New: The reflection visualization viewport mode is now available when using Feature Level ES2, to help visualize mobile reflection differences compared to PC
  • New: You can now specify a collection to ParticleSystemAudit which will cause you to only audit particle systems in that collection via -FilterCollection=.
  • Bugfix: Crash fix when using custom structs with custom slate UI inside Blueprints.
  • Bugfix: Crash fix setting struct variable to CurveTableRowHandle.
  • Bugfix: Crash fix when the engine exits during PIE.
  • Bugfix: Crash fix when attempting to edit plugin metadata in the Plugins Viewer.
  • Bugfix: Crash fix when dragging junk text from an external program into the graph editor.
  • Bugfix: Crash fix when importing multiple objects with the same name at the same time when one of them is an FBX file.
  • Bugfix: Crash fix when importing an animation containing different rotation order in different bones from an FBX file.
  • Bugfix: Crash fix when saving a Data Table that didn't have a row-struct set.
  • Bugfix: Crash fix when using an empty FKey property with a Data Table.
  • Bugfix: Crash fix when using the eye dropper on color pickers in Material Editor graph nodes.
  • Bugfix: Crash fix when shutting down the engine while a Play in Editor (PIE) instance is running.
  • Bugfix: Crash fix when scaling Speedtree assets.
  • Bugfix: Crash fix when editing an array in the Widget Blueprint editor when there was an active widget animation in the animation editor.
  • Bugfix: Crash fix when packaging a game after creating a plugin through the editor.
  • Bugfix: Crash fix when dragging materials onto BSP surfaces within the level editor viewport.
  • Bugfix: Crash fix to SessionFrontend when right clicking UFE session browser section headers.
  • Bugfix: "Play in Standalone Game" games now show up in SessionFrontEnd session list.
  • Bugfix: Unnamed, non-standalone sessions are now correctly showing as "unnamed" in the SessionBrowser.
  • Bugfix: Fixed an issue in the Widget Blueprint animation editor and level sequence editor timelines where the key editor in the tree view would not stay in sync with property changes when auto-key was turned off.
  • Bugfix: Byte and enum properties are now evaluating correctly for values greater than 1 in the widget blueprint animation editor and level sequence editor.
  • Bugfix: Single component values like floats are now showing up in the curve editor within the timeline in the widget blueprint animation and the level sequence editors.
  • Bugfix: Mac no longer experiences editor hang when removing devices.
  • Bugfix: Fixed a major issue with rebuilding the collision mesh on Spline Mesh Components when spline parameters are changed. Now collision geometry is always updated correctly when deforming the spline mesh in the editor. Also made the mesh generation more robust for highly deformed spline meshes, which should avoid PhysX warnings in the log and the creation of bogus geometry.
  • Bugfix: Empty Material Functions no longer mark themselves as dirty when first opened.
  • Bugfix: Content-only projects will now properly use their config files instead of the defaults when building.
  • Bugfix: Duplicating, in a Property Tree, an array of instanced objects will correctly deep copy the objects instead of a shallow (referenced) copy.
  • Bugfix: FBX exporter has two fixes:
    • Fixed the export order to make sure the hierarchy is exported correctly.
    • Fixed a crash when an exported selection does not contain a parent.
  • Bugfix: "Replace Selected Actors With" feature correctly changes all references to the replaced actors.
  • Bugfix: In the Spline Component visualizer, points are correctly selected on a new spline when a different spline was previously selected.
  • Bugfix: Speedtree assets will no longer receive blank materials.
  • Bugfix: Fixed a failure to build Windows and Mac Client from the Project Launcher.
  • Bugfix: Fixed an issue in calculating the vertical scrollbar ratio for the Curve Editor and Cascade viewports. This was leading to curves not appearing in the Track list when added.
  • Bugfix: Canceling the color picker dialog in the Curve Editor now correctly preserves the original color.
  • Bugfix: Fixed an issue where "Show Only Selected" would not show members of actor groups.
  • Bugfix: Clicking a Text property field corresponding to multiple properties no longer causes the "Multiple Values" text to be erroneously committed to those properties.
  • Bugfix: Closing the editor with a dirty material open in the Material Editor no longer invokes multiple prompts.
  • Bugfix: Menu options no longer remain highlighted after the menu closes.
  • Bugfix: Mobile certificates that are valid do not show up as expired, even if other certificates are expired.
  • Bugfix: Spline Components added dynamically through the in-world details panel are now editable with the visualizer.
  • Bugfix: Actor scale (when entered directly in the details panel) works correctly with undo.
  • Bugfix: Setting the Brush Type of a BSP Brush to default does not put it into an unsupported state.
  • Bugfix: Hidden BSP geometry will no longer occlude BSP geometry behind it during selection attempts.
  • Bugfix: Brush extrusion tool now yields correct results if the Brush actor is rotated.
  • Bugfix: Fixed an issue with files which have been marked as writable not appearing on the list of items to save.
  • Bugfix: When staging DLC from the Project Launcher, .uplugin files are no longer repeatedly copied.
  • Bugfix: Changing editor visibility via the World Outliner now correctly hides lights.
  • Bugfix: Player Collision view mode now draws mirrored collision volumes correctly.
  • Bugfix: Fixed makefile errors when hot reloading multiple different modules.
  • Bugfix: "-manifests" parameter is now included when packaging with chunking (PlayGo, Streaming Install etc).
  • Bugfix: Fixed NavMesh generation around mirrored blocking volumes.
  • Bugfix: Transformation widgets scale correctly with screen percentage in SIE mode or when using "r.ScreenPercentage.Editor"
  • Bugfix: Profiler window now is correctly disabled when no session instances are selected.
  • Bugfix: Fixed not being able to open Sequencer files with audio tracks.
  • Bugfix: Exiting from the editor during a Launch On will no longer crash.
  • Bugfix: Camera roll is no longer applied to level viewport cameras after ejecting from the player in a PIE session in the existing editor viewport.
  • Bugfix: UE4 prerequisites installer will no longer fail when attempting to install an older version.
  • Bugfix: T3D exporter now properly exports empty arrays and arrays that were larger than the default but otherwise unmodified.Bugfix: Data Table CSV/JSON import now works correctly with FName properties that contain a space.
  • Bugfix: Fixed undo/redo when locking levels.
  • Bugfix: AssetImportData for an asset is no longer being lost when the asset is loaded.
  • Bugfix: Tag and Tag Query Editor windows on Mac can now be clicked.Bugfix: Widget deltas are now correctly calculated when the widget is positioned behind the camera. This was affecting the "Ctrl + Mouse Button" actor movement mode when the widget was offscreen.
  • Bugfix: The Windows / Command key is now handled correctly as a modifier key. This addresses an issue where switching away from and back to the editor with Win+Tab would result in it no longer responding to input.
  • Bugfix: Clicking the clear button on the SearchBox widget will no longer close the parent menu (this was affecting context menus in the Blueprint / Material editors amongst others).
  • Made a number of substantial optimizations and improvements to Mesh Paint mode. This addresses very poor performance when vertex painting on spline meshes or static meshes with a large number of vertices, and also addresses an issue of gradual slowdown when left in Paint Mode for a while.
  • Added automatic fixup code on load for brushes that were mirrored (which could have resulted in inverted/invalid collision).
  • BSP is now immediately rebuilt after converting brushes to volumes.
  • Camera preview window in the level viewport now has better support for actors with multiple camera components. It will ignore components with bIsActive=false, letting the user decide which component to look through.
  • Color properties with HideAlphaChannel metadata now set the default alpha value to 1.0, instead of 0.0 when the color picker is used to select a new value.
  • Compilation audio cues now mute if the user disables editor sounds.
  • Disallowed deletion of assets while PIE is active. Deleting an asset while PIE is active can have a number of adverse effects; before doing so, any current PIE session needs to be finished.
  • Correct session names are now used by the launch-on feature.
  • Ensured that all files are deleted when editor fails to create a new project for any reason.
  • Ensured that Plugin Browser displays correct results after adding a new plugin.
  • Fixed log spam attributed to redundant component tree updates in the level editor's Details view when the Actor's root component is both native and editor-only.
  • Internal references in a group of duplicated actors will be fixed up if the referenced object's name coincides with the name of a different object.
  • Fixed path found for CRT libraries when Windows Driver Kit is installed.
  • Fixed PIE window positioning when starting a multiplayer PIE session. The 'Center New Window' option is ignored in this case, so that the windows aren't created on top of one another.
  • Improved rendering performance with very long tangent handles in the spline component visualizer.
  • Brush Builder parameter editing in the Details panel of a Brush Actor will prevent invalid combinations of parameters. For example, setting inner radius greater than outer radius.
  • Importing 8bpp BMP images and BMP images stored in reverse row order is now supported.
  • Fixed the visual appearance of submenu buttons when the submenu is open.
  • Graph panels no longer handle numpad and direction keys when they are pressed with a modifier.
  • Grouped actors pasted with 'Paste Here' now have their group actor and pivot position set correctly.
  • High-res screenshots delay for a few frames to allow temporal artifacts to resolve.
  • Inertial scroll methods and cached geometry of STableViewBase are now available to derived types.
  • Made a change so that the Materials category always appears in Primitive Component detail panels with Material properties.
  • The Maps and Modes setting panel now uses standard asset picker for map configuration properties.
  • Made minor optimizations to HDR image export process.
  • Made the shadow color for in-viewport text in the profiler more opaque to increase readability.
  • Percentage-based scaling is no longer enabled when multiple actors/components are selected.
  • Redesigned SessionFrontend session browser.
  • Plugin names are now disallowed from starting with non-alphabetic characters.
  • StableSort is now used to sort pak files. This preserves file order across builds and can make patch sizes smaller.
  • Fixed various typos in UMG.
  • Added FInteractiveProcess class to handle creation and interaction with external processes.
  • Prevented node flickering when changing details properties with the slider in the Sound Cue Editor.
  • Reinstated the Plugins menu option in the Edit menu when "Expand Configuration Menus" is enabled.
  • Reworked plugin templates so that they are laid out with desired folder structure, making it easier to add new templates without relying on existing ones.
  • Scene component translation manipulator drag is now properly handling the scale and rotation from the parent hierarchy.
  • Selecting all actors of the same class as the selection (Ctrl+Shift+A) now works when there are actors selected from more than one class.
  • Smoother scrolling in "Save Packages" dialog when many assets have been changed.
  • The "New Plugin" button now appears grayed out for Blueprint projects, with an explanatory tooltip. If a Blueprint project is changed into a C++ project by adding a new C++ file, this change is reflected in other project related dialogs.
  • The data table editor now handles multi-line rows of text.
  • The editor now only adds plugin directories to the environment path when the plugin is enabled.
  • The FBX SDK has been upgraded to version 2016.1.1.
  • The FBX importer is now as fast as it was in version 4.9.
  • The Level Viewports' Exposure settings are now correctly saved and restored between editor sessions.
  • Skeletal meshes now use smoothing groups when using mikktspace for calculating normals and tangents.
  • The User Defined Struct editor now treats TAssetPtr as an asset property type.
  • Asset discovery performance improved.
Content Browser
  • New: Added a prototype content browser search filter for assets that use a specific gameplay tag.
    • Note: The filter currently only shows matching assets that are already loaded, it will not discover tag usage in an unloaded asset!
  • New: Added a way to forcibly refresh the source control status of a collection.
  • New: Improved the asset gathering and path prioritization workflow for very large projects.
    • Previously, the file discovery phase of the asset gathering process would block the entire process until it had found all of the files it needed to test.
    • This can take quite some time for projects with a large amount of assets, so this change adjusts the process so that discovered paths will be reported back to the asset registry while the file discovery is on-going. This allows you to prioritize the scanning of certain folders before the initial discovery phase has finished.
  • New: Reinstated Thumbnail Edit Mode Primitive Tools. Now the mesh used by the Content Browser when editing thumbnails can be changed.
  • New: Removed the UCurve derived asset types from the Create Asset menu in the Content Browser, while still presenting the option to create them as new assets in the asset picker dropdown menu in details panels.
  • Auto re-import improvement: When a new file is added alongside an asset that has no source file associated with it, a re-import will be attempted instead of reporting a warning.
  • Bugfix: Editor content browser is now showing an error instead of crashing when user rename a map outside of the editor and then try to manipulate the file in the content browser.
  • Bugfix: Fixed a bug that could cause a crash when searching asset tags in the Content Browser.
  • Bugfix: Crash when searching by tag in a folder with redirectors.
  • Bugfix: Content browser filters used the default category could result in an extra copy of the default category in the menu
  • Bugfix: Crash that could be caused by creating, reverting, and then moving a file with the same name
    • FAssetRenameManager::FindCDOReferencedAssets now ignores deprecated and dead classes
  • Bugfix: There was a potential editor crash when moving assets between folders in the Content Browser.
  • Bugfix: A new package name was auto-generated when duplicating an asset whose name ends with a numeric suffix. This addresses a crash bug when copy + pasting map assets in the Content Browser.
  • Bugfix: Crash when importing some FBX files
  • Bugfix: Drag and drop only worked in the Content Browser tile view
  • Bugfix: The "Show in Explorer" action in the Content Browser works correctly for C++ classes and finds the associated header file.
  • Bugfix: The collection manager was sometimes watching non-collection directories for changes
  • Bugfix: Realtime Thumbnail toggle now correctly remembers state after restarting editor.
  • Modified DDS cubemap loading to prevent an array overflow when importing a cubemap with too many mips.
  • Moving assets now corrects source reimport paths where possible
  • Some performance improvements when opening the Content Browser
Landscape
  • New: Added a new Landscape Layer Usage visualization mode. This allows you to easily see and optimize which landscape components are using which layers to improve performance.
    • Each layer has a color code which can be chosen by clicking on the layer thumbnail while the Layer Usage visualization mode is active.
    • Each landscape component renders a stripe pattern across the entire component. The stripe is made up of the color codes for the layers that are applied to the component.
  • New: Added layer whitelisting by component to the landscape editor
    • Enabled via the layer restriction dropdown in paint mode
    • The brush will go red in areas that aren't whitelisted and will block painting
    • Hold the main keyboard +/- and click to add/remove layers from the whitelist (not the numpad, the ones next to backspace)
    • Warning: Removing a layer from components with "-" + click will also delete that layer's painted data on those components
  • New: Landscape can now have "world position offset" from the landscape material baked into its collision
    • This feature is experimental and currently has the following restrictions:
      • Only z (vertical) offset is supported. XY offsets are ignored.

      • Does not work with CollisionMipLevel > 0

      • Does not work with an XY offset map (from retopologize tool)

  • Bugfix: Landscape editor did not show layers that were only defined inside a Material Function used by the landscape material, and not the landscape material itself.
  • Bugfix: Fixed black spot / hole if all layers on a component use height blending and add to <= 0
  • Bugfix: Fixed crash in LowPassFilter when landscape smoothing brush is used with bDetailSmooth set and a very small brush size
  • Bugfix: There was a crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
    • Also hardened the landscape spline tool, although I don't believe it was crashing it could still try to render for a frame after the landscape was hidden/destroyed.
  • Bugfix: Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
  • Bugfix: Can now import landscapes over 8161 verts in size
  • Bugfix: Landscape would become offset and have corrupted blend weights when using the "change component size" tool if an edge row/column of landscape components had been deleted
  • Bugfix: Landscape component resize tool moved the landscape into the persistent level, and crashing if the persistent level was hidden
  • Bugfix: Landscape material instances were not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later
  • Bugfix: Landscape sculpting with a brush below a certain size and strength was not having any effect
  • Bugfix: Landscape smooth tool was doing strange things near cliffs
  • Bugfix: Various landscape editor materials (e.g. brushes) being easily obscured by grass or world-position-offset effects in the landscape material
  • Improved handling of erasing painted landscape layers
    • Erasing is now possible on vertices 100% painted with one layer, it will now fill with the next most dominant layer on the component
    • Note: Erasing is still impossible on components which are entirely painted with only a single layer - where there is no next most dominant layer on that component
  • Bugfix: More robust handling for landscape editor missing the "mouse up" message and getting stuck or crashing
Material Editor
  • New: Comment nodes added in the Material Editor now start with the focus on the editable text.
  • New: Landscape Layer Blend now works with Material Attributes
  • New: Material inputs are now greyed based on translucency lighting mode
  • New: Removed duplicate entries in the list of Material Functions for the Material Editor right-click context menu.
  • Bugfix: Corrected an issue with the Material Editor constantly updating node titles while a details slider is moved, leading to flickering.
  • Bugfix: Crash when selecting a vector and a scalar parameter in the Material Editor at the same time.
  • Bugfix: A group of material nodes containing a MaterialFunctionCall node would lose their connections when copy+pasted.
  • Bugfix: Changing a texture's Texture Group was not causing any dependent materials to be refreshed.
  • Bugfix: Fixed material errors using Custom nodes with LandscapeGrassOutput or other CustomOutput node types.
  • Bugfix: Parameters connected to LandscapeGrass or other CustomOutput nodes were not appearing in the Material Instance Constant editor
Matinee
  • Bugfix: The editor would hang when performing a viewport camera transition (by pressing F) while Matinee has a locked actor defined.
  • Bugfix: Movie scene captures where hardware mapped surfaces to memory of a different stride to the render target is fixed
  • Bugfix: Matinee audio tracks now properly start at the correct point when scrubbing.
  • Bugfix: Sound now correctly restarts in matinee preview when jumping back along timeline after reaching end.
Cascade
  • Bugfix: Fixed a bug that could cause a crash when exporting an emitter
Persona
  • New: Simplygon Reduction tool
    • Fixed so that you only apply your reduction setting to certain LOD only
    • Fixed so that it does regenerate with the setting that was there before.
    • Fixed so that it warns the users if you'd like to reduce mesh for imported mesh
    • Now displays in the material section if generated.
    • Allow BaseLOD to change - for example if you want to generate simplygon from LOD 1, you can using BaseLOD.
  • Bugfix: Fix for SkeletalMesh section highlighting when number of mesh materials is smaller than number of sections.
  • Bugfix: Crash in Persona when undoing duplication of state nodes.
  • Bugfix: Multiple crashes and instances of incorrect behavior fixed when undoing and redoing repeatedly while editing state machines.
  • Bugfix: Crash on undo when changing child animation blueprint overrides.
  • Bugfix: Crash when editing details of an animation object and losing focus to another window.
  • Bugfix: Crash when undoing changes to a socket property in a notify
  • Bugfix: Mesh reduction tool bugs resolved
    • Fixed so that it keeps the ScreenSize set before for the regenerated mesh reduction
    • Fixed so that materials created by Simplygon are to be assigned
  • Bugfix: Persona and PHaT viewport client can now handle changes in translucency when drawing physics constraints
  • Bugfix: The playrate in Persona will use the viewport worlds time dilation instead of managing time dilation separately
Static Mesh Editor
  • New: Cancelling at the prompt to change LOD Group in the Static Mesh Editor now no longer changes the LOD group.
  • New: Added feature to visually isolate meshes by material