New: Blackboard assets are now easier to create - via right-click menu in the Content Browser or from inside the Behavior Tree Editor.

Fixed Behavior Tree nodes going pink after undo.

Fixed Behavior Tree root nodes to now have the correct tooltip.

Scene Outliner

New: Added functionality stop the double click events from propagating up to the parent widget.

New: Scene Outliner folder expansion states are now saved.

Changed Scene Outliner inactive selection state to be derived from the main selection state, rather than being hard-coded.

Changed expansion states for outliner folders to now be stored in per-user temporary config files.

Static Mesh Editor

New: Static mesh editor can now create Box/Sphyl and have multiple collision primitives, which can be manipulated.

Fixed Sphere collision to apply BuildScale.

Fixed Ctrl+W to duplicate the select physics body correctly.

Material Editor

New: Any material nodes that have a preview which serves no purpose are now set to collapsed by default.

Fixed the LandscapeLayerBlend material node when using non-weight blending. Previous content using LB_AlphaBlend will be automatically updated to use LB_WeightBlend, and LB_AlphaBlend now performs regular alpha blending for non-weight layers.

Introduced a new material compiler error "Only 'surface' material domain can use the scene color node"

Tiled Landscape

New: Added option for weight-blended layers

New: Added reimporting of a tiled landscape (heightmap, weightmaps). Reimporting options can be found in context menu of a loaded and selected levels.

Slate

New: Multi-line text editing support!

Added SMultiLineEditableText and SMultiLineEditableTextBox.

These should have feature parity with SEditableText and SEditableTextBox, however please note that they are still under development so may yet require API changes.

Blueprints

New: SplineComponent and SplineMeshComponent now usable in Blueprints.

Includes ability to edit SplineComponents in the level.

New: Added a generic Array Shuffle to the Blueprint array lib.

New: Added reroute nodes to help organize wires.

'Add Reroute Node...' shows up in the context menu when you click-drag off of a pin; you can make connections to a reroute pin like normal, move it around (by dragging near it or Ctrl + dragging on it), and remove it by Alt + Clicking.

You can also put comments on a reroute node by double-clicking on the draggable area below, or hitting F2.

New: Math expression node added to Blueprints (no longer "experimental"), where you can enter a textual math expression which in turn gets translated into a set of nodes.

New: ShowLayer command - can toggle the visibility of any meshes in a layer.

New: Static and Stationary SkyLights now have one bounce of diffuse GI computed by Lightmass.

New: Translucent materials are now shadowed from Stationary lights.

New: Added MSAA support to the mobile rendering path.

New: Added clear coat shading model.

Changed order of refraction with translucency (non separate translucency is now refracted, can change look).

Changed the default setting of the LensFlareIntensity property to be 0 (off) for better performance and a clean look out of the box , can be set to 1.0 if you want the old look.

Changed default quality of screen space reflections to start lower for better performance. It can be changed in postprocess settings to be like before.

Fixed issue where distortion does not work properly with translucenct objects.

Fixed issue with ScreenSpaceAmbientOcclusion (was not applied any more).

Fixed issue with Shadow Bias being exposed on Pointlight and Spotlights and has no effect, removed legacy value.

Fixed issue where Owen material was very light.

Fixed crash when using AffectsIndirectLight checkbox and not having LPV enabled.

Fixed incorrect reflection capture filtering.

Fixed SSR noise when temporal AA is off.

Fixed transform of Canvas Material rendering for ES2 on devices.

Fixed the Clamped Material node inputs to avoid negative colors, NaN and inconsistent shading. This can change the look of translucent materials that formerly relied on non physical color ranges. Too dark particles can be fixed using the emissive output.

Movable SkyLight

New: Uses a new feature Distance Field Ambient Occlusion to provide occlusion from scene meshes which can change dynamically.

Gameplay and Framework

New: Anim Trails can now be used via Blueprints. See Docs for details.

New: Added font attribute to SErrorText widget.

New: Navmesh library (Recast/Detour) moved to UE4 module, will be added to project automatically depending on bCompileRecast flag in target's build configuration

New: Added crowd simulation based on DetourCrowds.

Can be used by AIControllers with CrowdFollowingComponent (replaces PathFollowingComponent).

Supports custom velocity sampling patterns.

Detailed per agent config.

New: UBT XML configuration improvements:

XSD driven IntelliSense.

Defaults read from code (default XML file will be regenerated on UBT startup if is different than it should be).

Configurable fields have to be now annotated with XmlConfig attributes.

New: New feature that enables setting affinity profile per thread..

New: Added FBox2D type.

New: Allow TActorIteractor to take actor class to look for.

New: Optimized ArrowComponent rendering .

New: Added the ability to use unlit materials with Slate. Materials are usable on any brush type and there is a new brush type (FSlateMaterialBrush) for dynamic materials.

New: CPU usage has been significantly reduced when the editor is minimized. Added a setting to also apply this reduction when the editor is not in the foreground but still could be visible.

New: Support casting static shadows from foliage.

Note: We still do not support static lighting or shadowing of foliage.

New: Particles using the Skel Vert/Surf Location module can now inherit the color information from mesh vertices using the Inherit Vertex Color property.

New: Stale shader compilation jobs are now removed from the compile queue. In many cases this should greatly reduce the number of shaders being compiled and improve material editor workflow.

New: Windows Redistributable prerequisites for running UE4 games on Windows (Visual Studio and DirectX DLLs) are available into a standalone installer at Engine\Extras\Redist\en-us\UE4PrereqSetup.msi.

New: Editor modules now have an 'API version' changelist number embedded into them by UnrealBuildTool for determining API compatibility. It is no longer necessary to include a custom VERSIONINFO section in Windows RC files.

New: IDE project generation now works correctly for foreign projects created in the same root as the engine.

New: FText's can be regenerated when the culture changes, rebuilding even concatenated FText's.

New: Added support for storing compressed and encrypted files in .pak files. Enabled by adding -compress or -encrypt to files in UnrealPak response file or by passing -compressed to UAT.

New: Allow animation evaluation to be run as a graph task, spreading the load across worker threads.

New: Functional Testing framework got a face-lift, lots of features and full compatibility with Unreal Frontend's Automation.

New: A Max Threshold can now be specified for Passive Sound Mixes OEM keys can now be bound as FKeys A plugin has been added to allow Mod Tracker files (StreamTracker, ImpulseTracker, etc.) to be imported in to the editor and played back.

New: Added side scroller template for code and blueprints that uses the experimental paper plugin.

New: Spline Component visualizer improvements: tangents now editable, undo/redo support, and a right click context menu allows segment types to be defined (curve, linear, constant). Endpoints can optionally be specified as having no tangents (stationary).

New: Provided native device access from the RHI, useful for 3rd party plugins that wish to directly render using the underlying device. Currently only exposed for D3D11. Based on GitHub pull request 199 by CoherentUE4.

New: Overlap/Touch notifications are now processed before blocking hit notifications during component movement.

New: Make sure to abort overlap reporting if previous events mark the actor or component for destruction.

Prevents incorrect overlaps reported in cases such as a fast moving projectile that explodes early in a sweep, and which should not report overlaps with objects later in the sweep.

New: Exposed control over max simulation iterations and max simulation time step per frame for Character Movement Component.

New: Use -rpath to link dylibs via @rpath/.dylib and therefore make it easier to share and/or package .dylibs into Mac apps.

New: Improvements to LLDB data formatters so that references & pointers to container classes show children, make the FName& FString summary strings show for pointers too and use the object name for the summary of a UObject.

New: Use WindowedFullscreen mode on OS X when enabling fullscreen via Alt+Enter as that scales the window to the monitor size which is all we currently support.

'Proper' fullscreen mode requires an explicit CGL back-buffer size and mouse<->display coordinate conversions that we don't have code for yet.

New: Prevented the high-precision mouse mode from revealing the main menu bar and dock when used in fullscreen mode on OS X.

Deprecated API still exists and works to some degree, but please update your code as this will be removed in the next release.

GEditorModeTools has been renamed to GLevelEditorModeTools to signify that it applies only to the level editor modes.

Mode registration and creation is now handled by FEditorModeRegistry. Modes are no longer registered with an instance of the mode, instead with a mode factory that is able to create a new mode of that type. Please update any usage of deprecated APIs to use FEditorModeRegistry.

Editor modes now operate on FEditorViewportClients rather than FLevelEditorViewportClients.

All existing UMG assets should be abandoned, no upgrade path is provided for them.

Materials with LandscapeLayerBlend material nodes using the LB_AlphaBlend blending mode will be automatically updated to LB_WeightBlend, which more accurately describes the weight-based blending that is occurring. There is a new LB_AlphaBlend which performs actual alpha blending when wanted, but LB_WeightBlend should be used for cases where the previous blending behavior is desired.

Blueprint

UCanvas now has Blueprint API.

Gameplay and Framework

Significant Changes to Engine Headers

Engine.h has had lots of headers removed to reduce game compile times. We have tried to only remove classes that are unlikely to be used by a game project, but if you see compile errors, you may need to include additional headers.

Slate.h no longer included by Engine.h, so if you are using Slate, you will need to include yourself.

EnginePrivate.h is now actually private to Engine module and should not be used externally

"Gameplay Tags" have undergone a large refactor in API and data storage that alter how they behave.

Added the ability to customize any low level UProperty type. The IPropertyTypeCustomization interface replaces the IStructCustomization interface. All customization functionality related specifically to structs has been deprecated but will still continue to function for this build.

Within *.Build.CS files, UEThirdPartyDirectory is now obsolete and should be replaced with UEThirdPartySourceDirectory. An error message will appear when attempting to build if this is not heeded.

Add ENGINE_API to UBodySetup::GetPhysMaterial().

Optimized FBox::TransformBy()

Added "IsWalking" helper to CharacterMovementComponent.

Equivalent to IsMovingOnGround()

Tags are no longer explicitly FNames, but instead FGameplayTags

FGameplayTagContainer only stores "leaf-most" tags instead of every tag in a hierarchy. As an example, pre-refactor if a user specified a container to hold the tag "Root.Child.Leaf," the container would actually have "Root," "Root.Child," and "Root.Child.Leaf" within it as separate tags. This caused logical problems during certain types of comparisons. The container in this example will now explicitly only hold the tag "Root.Child.Leaf" and none of the parent tags. The API has changed accordingly to allow queries against tags with or without their parents included.

Gameplay tags are now required to be located in existing data-driven dictionaries and cannot be individually created in code on the fly. Code can request a tag from the dictionary, but not explicitly create a tag by itself. This change allows for verification and ensures that tags used by code are also visible in editor.

Split non-EdGraph.h types out of EdGraph.cpp into individual files.

Change UKismetSystemLibrary::GetDisplayName to use UActorComponent::GetReadableName on components.

Added a helper function GetSimulationTimeStep(float RemainingTime, int32 Iterations) that computes the timestep given the total remaining time and current iteration.

During the final iteration, if there is not enough time within the time step limit, all remaining time is used and a warning is logged.

Added streamed audio chunk storage for runtime streaming or from DDC in editor.

In Default Engine.ini declare the section [GameplayTags] and then add tag tables to GameplayTagTableList .

For Example: +GameplayTagTableList=/Game/DataTables/GameplayTagTable.GameplayTagTable.

Changed Gameplay Tag Pin to now only allows single select.

The list of enabled plugins is now stored in each game's .uproject file. The EnabledPlugins list in the engine config files is no longer used.

Game plugins are now enabled by default.

To enable an engine plugin, use the plugins window in the editor or manually edit the plugin list in your game's .uproject file:

"Plugins": [ { "Name": "LiveEditor", "Enabled": "true" } ]

To make an engine plugin enabled by default, set "EnabledByDefault": "true" in the plugin's .uplugin descriptor.

The "Packaging" settings in the editor now store the "additional directories to cook" relative to your project Content directory.

If you are using this feature, then you'll need to update your paths.

All of non-navigation AI code has been moved to a separate module, AIModule

May require including some headers in code using engine-level AI classes

World Browser was removed from Experimental section and now enabled by default. It replaces old Levels Browser. Old Levels Browser can still be activated using -oldlevels startup parameter. World Browser views were separated into three independent windows, each window can be summoned from a Levels Browser toolbar. World Browser managed worlds can now be toggled on through WorldSettings -> bEnableWorldComposition. Once enabled persistent level will be treated as a world root. No more '?worldcompistion' parameter workarounds. 'Open World' command was removed, all levels saved with world composition option can be opened through 'Open Level' command. Added bEnableWorldOriginRebasing parameter to WorldSettings, which controls whether world origin shifting should be used.

FString::IsNumeric() now accepts a leading '+' in numeric strings.

Made TMap::RemoveAndCopyValue and TMap::FindAndRemoveChecked move the value out instead of copying as an optimisation.

Made FText movable

Swap() is now implemented in terms of moves rather than copies by default.

Renamed variable UPrimitiveComponent::CanBeCharacterBase to CanCharacterStepUpOn, and UPrimitiveComponent::CanBeBaseForCharacter() to CanCharacterStepUp().

Made UCharacterMovementComponent::StepUp() check the surface it lands on with CanStepUp(), and reject if false and trying to step higher.

Level Browser can now summon details panel for a selected streaming levels. Details panel can be used for managing level transformations, streaming volumes and other streaming settings.

Renamed FStatusMessageContext to FScopedSlowTask which describes its purpose much more clearly.

Old implementations and uses of these functions should use GetMaxSpeed() and GetMaxAcceleration() instead, and apply the multiplier internally in their implementations or by changing the base values. The old functions are no longer used by engine code and only remain to maintain compilation and provide the deprecation message.

Added MaxCustomSpeed - max speed used in custom movement mode (previously used MaxWalkSpeed, and will default to that value for existing content).

Added UCharacterMovementComponent::GetMaxAcceleration().

New: CharacterMovementComponent::bAlwaysCheckFloor now defaults to true.

Performance is only affected for Characters when they are not moving (by adding a floor check every update when standing still).

Some users may wish to set this back to false (especially for AI) for a small performance gain if they can verify that this is not needed for stationary characters in their games.

New: Revised assets causing Automation error in content examples.

Revised card cleanup in blackjack sample.

General improvements to network PIE game launching. Added waiting to connect message for editor. Fixed number of spawned instances. Improved window positions to accommodate multiple monitors.

New: Moved the project locations array into the game .ini for launcher created projects.

New: Removed assumption from GetBrush that second actor is always a brush and renamed it to GetDefaultBrush. Replaced GetBrush with GetDefaultBrush and made GetBrush deprecated. Revised comments appropriately.

Revised handling of incorrect commandlet. Now shows console and exits if commandlet is invalid.

Moved landscape MICs and textures to have the UWorld as their outer instead of the UPackage.

Previously it was possible to supply an optional int32 pointer, into which the segment index used by the spline evaluation would be put. The method for obtaining the spline segment was recently changed and now yields different results, so it was decided not to expose this to users as it is an implementation detail.

New: ICU has been upgraded to 53.1 and modified to use loose files rather than a single data archive/package.

NOTE: Using the EQS now is NOT recommended. It is still in heavy flux due to early development, and it is completely disabled by default. If you do use it, be warned that we do not guarantee backwards compatibility in changes yet. We will announce when it's moved into the "Experimental" section in a future release.

Significant changes have been made to UEnvQueryTest and related files. If you are using EQS, you need to resave your Environment Query assets.

EQS Tests now support filtering on a range as well as just Min/Max.

EQS Test Details UI is significantly changed (hopefully improved), with more improvements to come. Filtering and Scoring are now handled in a more distinct fashion with less implicit reliance on each other.

Shootergame

Added code to assign created light component as RootComponent in ExplosionEffect - this prevented explosion effects from showing were not shown explosion blueprint was opened.