Unreal Engine 4.8 Release Notes

This release includes 189 great changes that were submitted from Unreal Engine's amazing community of developers. Thanks to all of these contributors to Unreal Engine 4.8:

3dluvr, Adrian Gasinski (gasnica), Adrian Irwin (adrianirwin), Albino Rodrigues (Bino-), Alexander O'Mara (AlexanderOMara), Andrew Zhilin (zoon), Angelo Miner (angjminer), Artem V. Navrotskiy (bozaro), Ash Matheson (Nuclearfossil), Audiokinetic Inc. (audiokinetic), Ben Rog-Wilhelm(zorbathut), BhaaL (BhaaLseN), Black Phoenix (PheonixBlack), Błażej Szczygieł (zaps166), Cengiz Terzibas (yaakuro), Christopher P. Yarger (cpyarger), codetackler, Craig Wilson (hamo2k1), Dainius Masiliūnas (GreatEmerald), Daniel Mahashin (dmahashin), Daniel Zeligman (dzeligman), David Palacios (hevedy), Derek van Vliet (derekvanvliet), devbm, Dewitt Buckingham (DaJoker29), Eugene Elkin (eelkin2000), Ezekiel Warren (zaucy), gatools, Henrik Danielsson (TwoD), Jackson Egan (Sneagan), JaredTherriault, Jason (Abatron), Jason Maskell (TamedTornado), Jay Mattis (braindx), jdh84, Jeff Rous (JeffRous), Jefferson Pinheiro (Ixiguis), Jeremy (OPTIPlanet), jlamarche, Joshua Sheard (jsheard), karolz, Kazumasa Ohashi (KazumasaOhashi), Korshikov Anton (tnako), korypostma, Lee Berger (MrCrowbar), Leon Rosengarten (lion03), Leszek Godlewski (inequation), Lucas Dohring (nykac), Lukasz Baran (iniside), Luna Duclos (PSG-Luna), Marat Radchenko (slonopotamus), Marc Kamradt (MarcKamradt), Marco Antonio Alvarez (surakin), marynate, Maurice Laveaux (mlaveaux), Michael Allar (Allar), nsf, Omar Pakker (Omar007), Paul Eremeeff (PaulEremeeff), Pierdek, PjotrSvetachov, radu-danciu, Rama (EverNewJoy), Rene Rivera (grafikrobot), Richárd Németh (hsdxpro), Richard Biely (richardbiely), Robert Chubb (SaxonRah), Robert Williams (Rottbott), Salamanderrake, Sasha Petrovich (xulture), Satheesh (ryanjon2040), Sebastian Köcke (byte3), Sébastien Rombauts (SRombauts), Stephen Whittle (stephenwhittle), Simon Taylor (simontaylor81), Spencer Brown (JedTheKrampus), thk123, Thomas Mayer (tommybear), threadlock, Tobias Mollstam (mollstam), Tore Lervik (hallatore), Will Stahl (merlin91), x414e54, Yohann Martel (ymartel06), zombiesnu

Major Features

Improved Editor Stability and Quality of Life

This was a really big focus for Unreal Engine 4.8. With every Unreal Engine release we fix hundreds of bugs and add many new features, but with Unreal Engine 4.8 we've worked hard to improve editor and game stability, as well as to address many of the most common engine bugs and small feature requests. We hope that the result is a very solid engine runtime and editor, and we'll continue to make stability a big focus of future releases.

New: SteamVR/HTC Vive Support

Unreal Engine now has comprehensive support for Valve's SteamVR API and HTC Vive hardware!

image alt text

  • Preview your game instantly on a connected HTC Vive using the "VR Preview" button!

  • All HTC Vive motion controller features are supported, and controller buttons/touchpads are bindable

  • Full support for both room scale and seated experiences.

New: Playstation 4 Morpheus VR with 120Hz Reprojection

The latest Sony Morpheus hardware is now supported, along with support for 120Hz rendering using temporal reprojection.

image alt text

  • Unreal Engine now supports both 60hz and 120hz Morpheus development kits

  • 3D audio playback in VR has also been greatly improved for this release.

New: Landscape Grass Renderer

The new grass system dynamically renders instanced grass and other ground clutter meshes on the landscape around the player.

image alt text

  • As the player moves through the world, new instances are added, and instances no longer in range are removed.

  • Artists author grass density through the landscape material, by outputting density to a Landscape Grass Output node. This allows the grass placement to match the terrain texturing!

  • Grass instances are procedurally generated by a background task according to the grass density map.

  • Grass is efficiently rendered using a hierarchical instancing system that implements culling while keeping draw calls to a minimum. LOD transitions are per-pixel and fairly seamless due to Temporal AA.

  • See the "Landscape Grass Tools" section below for information about how to set this up!

New: Hierarchical Level-Of-Detail System

This new Hierarchical LOD feature automatically creates LODs for groups of meshes! This greatly reduces draw calls and polygon counts when they are visible from a distance. This is great for open world games!

image alt text

  • Groups of meshes to combine are found automatically. If Simplygon is available, it will be used to generate the low-detail mesh for a group. If not, the LOD version of each mesh will be combined (using the Merge Actors feature). Materials are merged automatically if possible, to reduce section (material) count.

  • To use Hierarchical LOD, set Enable Hierarchical LOD System to be true in World Settings. Once enabled, you'll be able to edit settings in the LODSystem section.

  • Individual Actors can opt out by disabling their Enable Auto LOD Generation option.

  • LOD meshes are generated as part of the 'Level Build' process, or by selecting Build LODs in the Build menu.

New: Procedural Foliage Generator (Experimental)

There is a new experimental feature for procedurally generating huge (or tiny, or medium-sized) regions of foliage instances quickly.

image alt text

  • Foliage Type assets now have properties to customize how they spread and grow over the course of a simulation.

  • Multiple procedural foliage types can be simulated alongside one another to generate the foundations of an entire forest!

New: Scrubbable Network Replays

Unreal Engine games have full game replay recording and playback. New in 4.8, you can now "scrub" to a specific time while viewing network replays!

image alt text

Take a look at Shooter Game to check out this feature.

  • At the main menu, host a new game

  • Fill it up with bots (to make it interesting!)

  • Make sure "Record Demo" is on

  • Play the match

  • Exit to the main menu when you have enough footage

  • At the main menu, select "Demos"

  • Find your replay in the replay browser, and select it to play it

While viewing a replay:

  • Mouse wheel will control playback speed

  • There is a button on screen to pause/play

  • You can click anywhere on the timeline bar to scrub to that location!

Out of the box, the engine is configured to store replays locally. We have a system that allows you to easily swap out replay streamers. This allows you to use a streamer that saves replays locally, or you can use a streamer that is designed to save replays to the cloud with full streaming support. More on that in future releases!

New: High Quality Depth of Field and Tone Mapping

image alt text

  • New depth of field algorithm called "Circle DOF"

    • High performance DOF technique with circle bokeh and nice transitions from in to out of focus

    • Circle DOF controlled by physical camera parameters: fstop, focal length, focal distance

    • Supports a distance based blur to simulate light scattering through the atmosphere

  • New film like color and tone response

New: Redesigned Foliage Editor

The foliage editor has recently undergone a redesign! Besides improved usability, the new layout gives you the ability to more easily work with a large number of foliage types in the palette at once.

image alt text

  • Easily create new Foliage Types directly from the foliage view with the "Add Foliage Type" button.

  • Foliage thumbnails have buttons for toggling visibility and saving the asset, as well as the total instance count.

  • You can now activate or deactivate multiple foliage types at once with multi-select.

New: Dynamic Navigation Mesh for Open Worlds

We have a brand new system for supporting dynamic NavMeshes in large open worlds.

image alt text

  • The engine now dynamically generates NavMesh on demand in the areas where it is needed.

  • To enable this, configure your project's Navigation System for this mode and add a Navigation Invoker Component to relevant actors.

New: New Unreal Example Character

We've designed a new, high resolution version of the Unreal Example Character included with our templates!

image alt text

  • There are two versions, a high resolution model and a low resolution version suitable for mobile devices.

  • The high resolution version is included -- you can grab the low resolution character from the Marketplace for free!

New: Curve Editing for Unreal Motion Graphics UI

Unreal Motion Graphics now has a curve editor!

image alt text

  • You can select numeric value tracks in a widget animation and animate those using the new curve editor.

  • You can also play, rewind and loop your animation while previewing it using the new Transport control buttons.

New: Screen-Space Reflections for Translucent Surfaces

Translucent surfaces can now dynamically reflect other objects on the screen!

  • Enable on translucent materials with the 'Screen space reflections' option

image alt text

New: Quick Window Switching (Control+Tab)

You can now summon a pop-up menu to quickly switch between different asset editors and tool tabs by pressing Ctrl+Tab.

image alt text

  • You can Ctrl+Tab or Shift+Ctrl+Tab to cycle thru open assets, sorted by last activation time; releasing Ctrl activates the asset you picked

  • You can also activate a tool tab in the editor for the current selected asset or show the asset in the content browser by using the mouse

New: Landscape Grass Tools

New editor features have been added for setting up instanced meshes for the grass rendering system.

image alt text

  • Each type of grass is described by a new Landscape Grass Type asset type, and each grass type can specify multiple static meshes for variation.

  • A grass density map is generated from the landscape's material. A Landscape Grass Output node should be added to your landscape material, and one or more Landscape Grass Type assets can be assigned. For each grass type, a new input connection will appear, which is used to specify the grass density.

  • Connecting a Landscape Layer Sample node directly will allow a landscape layer to specify the grass density. You can also connect a network of nodes to create more complex placement rules such as automatically removing grass based on surface normal or altitude or using multiple landscape layers.

New: Edit Properties on Instances of Actor Blueprints

Just as you can in subclasses, properties of components added in the components section of the Blueprint can be modified on a per-actor instance basis.

  • Just as with Actor properties, modified Component properties can be applied to the Blueprint defaults with the Apply to Blueprint

  • A few caveats: Components created by the Construction Script cannot be modified, and properties that are modified on components by the Construction Script cannot be modified on the instance and will appear as read-only in the Actor details panel. However, if the Construction Script explicitly sets the property value to the default, we cannot distinguish that from not having set it at all and it will be editable at the instance level.

New: Asset Size Mapper

Ever wondered how much memory an asset takes up? Well, we have a new editor feature called "Size Mapper" that helps you figure that out!

image alt text

  • It shows the memory used by an asset along with everything it depends on. Use the mouse wheel to "drill down" into referenced assets, and double-click to jump to that asset in Content Browser.

  • You can also view the sizes of lots of assets at once! Size Mapper will show all assets that are shared between your selected assets inside its own top-level group.

  • You can access this feature all over the editor:

  • Content Browser: Right-click on assets (or a whole folder full of assets) and select "Size Map."

  • Level Editor: Right-click on actors and select "Size Map", or press Alt+Shift+M with actors selected.

  • Reference Viewer: Right-click on some nodes and select "Size Map."

  • Any asset editor: Open the File menu and choose "Size Map."

Shared Editor Layout and Keybinds

Your editor layout and keybinding settings are now shared between all of your projects!

Previously, every project had its own saved layout/keybinding settings, and it was cumbersome to rebuild your layout with every project you switch to. In the future we'll be moving even more editor preferences to be globally shared between all projects.

New: Interactive Wires in Graph Editors

You can now interact with wires directly in any graph editor!

image alt text

  • Alt+LMB Click to break the connection

  • Ctrl+LMB Drag to move the connection to a different pin

  • Hover over the wire to highlight it or see the tool-tip for the associated pin

  • Double-click to insert a reroute node (Blueprint graphs only)

New: Procedural Mesh Component (Experimental)

The new Procedural Mesh Component lets you create meshes at runtime using C++ or Blueprints.

image alt text

  • This is similar to the existing Custom Mesh Component, but has many new features such as multiple sections (materials), collision support, and the ability to specify normal, tangent, UV and color per vertex.

  • We have also added a utility library, including a function to generate smooth normals and tangents, given mesh vertex positions and UVs.

New: Improved Automatic Convex Collision Meshes

When using the Static Mesh Editor to automatically generate a collision mesh for your model, the generated mesh will be of much higher quality and will complete more quickly!

image alt text

New: Configurable Animation Notify Triggers

There are helpful new settings on all notifies to control when animation notifies trigger:

image alt text

  • Notify Trigger Chance - A number between 0.0 and 1.0 to denote a random change for the notify to trigger (0.0 = Never Trigger, 1.0 = Always Trigger)

  • Notify Filter Type - The Filtering mode to apply to the notify, currently there are two choices:

    • No Filtering - Notify will always trigger (assuming it passes the Trigger Chance setting)

    • LOD - Only trigger this notify if the owning mesh is below this LOD. For example a setting of 2 will mean that the LOD will only trigger if the mesh component is rendering at LODs 0 and 1

New: On-Demand Asset Cooking ("Cook on the Side")

  • "Cook on the Side" is a new Project Setting that allows your game to startup on a device very quickly.

  • To enable this for your game, check out the "Enable cook on the side" option in the Cooker section of your project's settings.

    • When enabled, the Launch On button will now do perform all asset cooking inside the editor, on demand, over the network. This will allow your game to start much more quickly (similar to when using the "Cook on the Fly" feature.)

    • When running the game in a debugger or similar, you will need to add -filehostip=xx.xx.xx.xx (using the IP address of the computer running the editor)

  • Previously to 4.8, this feature was available as an Experimental setting. It's now fully supported in 4.8!

New: Downloadable Content (DLC) Support

  • Added support for cooking DLC (Downloadable Content). This allows you to create Pak files that can be distributed to users later.

    • Games can choose to make sure DLC doesn't reference Engine content (that Epic will be changing over time).

    • In Unreal Frontend, make a custom profile, then select Cook -> Release / DLC / Patch Settings -> Include Engine Content.

New: Content Patching Support

You can now generate Patch Files for your game that have only the content files that have changed since a previous release!

image alt text

  • These are generated by comparing new assets with the files that were originally in the shipped game. Check out the new Unreal Frontend settings for this (shown above.)

  • When releasing games use the "Create release version" check box in project launcher and give it a name (example "1.0")

  • To generate a patch off that release use the "generate patch" check box in project launcher

New: Localization Dashboard

The Localization Dashboard is now usable as an experimental feature. Use this feature to manage your project's localization pipeline.

image alt text

  • You can organize localization targets (sets of localization data), and which cultures (languages, regions, and scripts) should be localized for are specified.

  • You can also manage outstanding issues with any of the existing localization data, as well as control all aspects of localization data gathering here.

Paper2D: Paint Directly on Sprite Textures

Sprite components can be selected and painted on when in Mesh Paint mode

image alt text

  • The source texture, any additional textures, or textures referenced via the material can be selected and painted on

  • Note: Only texture painting mode is supported, vertex painting does not currently work with sprite components.

Paper2D: Tile Maps are promoted out of experimental into Early Access Preview

image alt text

  • Programmatically working with Tile Map Components from Blueprints (both querying and building from scratch) is now fully supported

  • Tile map color can now be controlled both per-layer and across the entire tile map

  • Staggered Isometric and Staggered Hexagonal projections are now supported, and the grid/cursor previews are improved in all modes

  • Added support for rotated and flipped tiles

  • Various workflow/editing improvements (key binds for layer operations, drag-drop works as expected, existing painted tiles can be selected using Shift+LMB+Drag, etc...)

  • Collision geometry and a custom metadata key can now be specified on a per-tile basis in the tile set editor

    image alt text

Paper2D: Support for sprites that require multiple paired textures

Materials for sprites can define additional texture 'slots', with the actual textures defined in each sprite asset, allowing multi-texture sprites to be easily used.

  • Some examples where you might want to use this are custom materials requiring additional mask textures (e.g., pulsating emissive eyes/lines), a lit sprite with an associated normal map, or splitting a translucent texture into two opaque textures (one containing alpha data) for ETC1 compression on Android.

  • Place SpriteTextureSampler nodes in the material, defining whether each should sample from the source texture or one of the additional textures

  • Connect your additional textures in the sprite asset.

    image alt text

  • When you create a sprite or import a sprite sheet, the source folder is automatically checked for an associated normal map named the same as the base texture with a N or Normal suffix, which will be plugged into additional texture slot 0 for you. This can be configured in Project Settings (Paper2D - Import)

  • Note: Each texture does not have to be the same size, but the portion corresponding to a specific sprite must be at the same relative location in each (there is only one source region defined per sprite)

Paper2D: Snap layers for speedy 2D level layout

2D Snap Layers are an easy way to manage level layout when working with a 2D game (or a 3D game with 2D gameplay)

  • Snap layers can be used to either automatically or manually snap actors to a specified layer (e.g., Foreground, Playfield, or Background)

  • The settings for the snap layers feature are in Project Settings - 2D

    image alt text

  • The overall feature can be enabled or disabled, controlling the presence of the Snap Layers control in the editor viewport

  • The snap axis and snap depths / names are customizable as well

  • When the layer snap mode is enabled, any newly placed actors will automatically snap to the active snap layer

  • At any time (even when disabled), a series of keyboard shortcuts can be used to snap to the active snap layer or change layers

    image alt text

  • Snap to the current layer (Ctrl+SpaceBar)

  • Move selection up a layer (Ctrl+PageUp, also changes active layer)

  • Move selection down a layer (Ctrl+PageDown, also changes active layer)

  • Move selection to the top layer (Shift+Ctrl+PageUp, also changes active layer)

  • Move selection to the bottom layer (Shift+Ctrl+PageDown, also changes active layer)

  • Cycle active snap layer forwards (Alt+PageUp)

  • Cycle active snap layer backwards (Alt+PageDown)

Paper2D: Interactive Extract Sprites Dialog

The Extract sprites dialog allows more control over how sprites are split out from a texture, making it quicker and easier to import/prepare assets for use with Paper2D

  • The dialog can be triggered on a texture via the Content Browser context menu Sprite Actions..Extract Sprites, or on an existing sprite in the Source Region Edit mode using the toolbar button

    image alt text

  • You can specify a naming pattern and starting offset for the created sprites

  • There are two modes: Automatic and Grid-based

    • Automatic will identify islands of continuous pixels and treat each one as a sprite, which works well for many kinds of assets, but may require custom pivots for flipbook animations that are different heights or create too many sprites for things like particle systems

    • Grid-based allows you to specify the width/height of one grid cell, and optionally how many cells wide/tall to extract (in case there are different sized grids sharing the same texture)

Paper2D: Grouped Sprite Components

A grouped sprite component allows many instances of one or more sprite assets to be drawn together in a minimal number of batches (separate materials or textures will still split batches).

image alt text

  • Working with groups is pretty simple:

    • You can build them programmatically in the same way you might use a UInstancedStaticMeshComponent for 3D meshes, but they have fewer limitations (you can mix/match sprites and materials in one, it will generate additional draw calls as necessary)

    • You can convert selections in the level editor into a grouped component using the Merge button in the details panel if all selected items are sprite actors, or the right-click context menu if the selection is mixed (it will leave non-sprite objects alone but delete sprite actors, replacing them with a merged actor).

    • You can split a sprite group back into separate actors if you need to move/reposition something, and can then re-merge them.

    • You can sort them based on the rendering project settings TranslucencySortAxis, so that batches that contain translucent sprites render as expected.

  • Note: All sprites in a group will be drawn as one or a few draw calls (the minimum required given the materials and textures). This means that:

    • Culling will be done as a whole unit. Either all instances are drawn or none of the instances are drawn. You probably don't want to group sprites from opposite ends of the map together.

    • Sorting will be done as a whole unit. If you have some translucent foreground sprites and some translucent background sprites, you probably don't want to group them together. With the sort button they'll sort correctly relative to each other, but a translucent player in the mid-ground can't pass in between the two of them, it'll either draw in front of both or behind both.

    • These kinds of sorting issues only apply to Translucent materials, Masked materials don't have the same issues but they only work for binary (0 or 1) opacity.

New: 'Interpolate To' Component

The new "Interpolate To" Movement Component can be dropped onto actors. This will let the actor move automatically!

image alt text

  • You can specify multiple points to interpolate between, and a number of different behaviour options are available (e.g. looping, ping pong, etc.)

New: Support for Large Android Games

Added support for downloading .obb (large data) files from the Google Play Store has been added.

image alt text

  • Sometimes the data file isn't downloaded from the Store, this ensures the game downloads it and can run.

  • Allows for a custom background image support for the download screen.

New: Build iOS Projects from Windows (Remotely)

Added support for building iOS Code Projects on a remote Mac using SSH.

image alt text

  • Requirements:

    • A login to a Mac with Xcode installed.

    • An iOS signing certificate installed in the system keychain

    • DeltaCopy or other SSH and Rsync software for Windows

  • Use the Generate SSH Key button to generate local credentials to a password isn't needed when compiling

    • You can check the key into source control to share with your team.

    • The previous, but unsupported, method (UnrealRemoteTool) can still be used if you set bUseRsync to false DefaultEngine.ini

New: Motion Blur and Anti-aliasing for Vertex Animation Materials

Materials that animate vertices using World Position Offset can now output accurate motion vectors. The motion vectors allow per-pixel motion blur from the procedural animation. Additionally Temporal Anti-Aliasing and Distance Field Ambient Occlusion can correctly reproject to prevent undesirable blurring.

Visualization of per-pixel velocities from a tree animated with World Position Offset.

image alt text

  • You must enable the new project setting 'Accurate velocities from Vertex Deformation'. This feature causes motion vectors to be output during the base pass which has a small performance cost whether you use these materials or not. Changing this setting requires a restart of the editor.

  • You can disable the feature per-material with the setting 'Support accurate velocities from Vertex Deformation'

  • The Speedtree wind node needs 'Accurate Wind Velocities' to be enabled

  • Note that this feature can only support velocities from changing time, not parameters set by blueprint or gameplay code.

New: Multi-threaded Asynchronous Asset Loading

Cooked builds can use a dedicated thread for package streaming instead of using time-slicing approach. You can enable this in your project with a new config option. This can make asynchronous loading of assets up to three times faster!

  • PostLoad is still performed on the main thread and is time-sliced due to most of the PostLoad functions not being thread safe yet.

  • All Serialize functions defined for UObjects and UStructs are now required to be thread safe.

  • Due to the above restrictions, async loading thread is disabled by default to give everyone time to make sure their code meets the thread-safety requirements. Async loading thread can be enabled via AsyncLoadingThreadEnabled ini setting under [Core.System] section.

  • Async loading thread will be automatically disabled on platforms that do not support multithreading and on dedicated servers.

  • UObjects construction is now thread safe and can be performed on worker threads. This requires all UObject-derived class constructors to be thread safe.

  • StaticFindObject, FindObject and FindObjectFast functions are now thread safe too. Keep in mind that if they're used on a worker thread and the return value is referenced only on the stack, garbage collector may claim the object if not referenced by anything.

  • Introduced FGCScopeGuard helper struct that works on a similar basis to FScopeLock except that it prevents GC from running while the current scope is being executed on a worker thread.

  • Introduced TryCollectGarbage function which skips garbage collection if any of the worker threads executes code inside of FGCScopeGuard scope. TryCollectGarbage is now used by default by level ticking code.

  • Async load percentage accessible via 'stat levels' now takes PostLoad into account

Release Notes

AI

  • AI: Blueprint Support for EQS

    • You can now use the Environment Querying System from Blueprints!

    image alt text

    • When you run a query you get a 'query instance', which has an Event called On Query Finished Event that will fire once the query is finished. The instance also has functions for accessing the query's results.

  • New: Added a function to Perception Component to retrieve all actors perceived with a given sense.

  • New: Added batch pathfinding EQS test. Better performance for scoring multiple items in single area, not suited for few items far away from each other.

  • New: Added console command DestroyAllPawnsExceptTarget which will destroy all other non-player pawns except for the one you are pointing at

  • New: Added new modes for EQS test's scoring/filtering against multiple contexts.

  • New: Added new modes for selecting single result from EQS query: random from best items (top 5%) and random from good items (top 25%)

  • New: Added support for physx based projection in EQS generators.

  • New: AI Perception System fixes and improvements

    • Added a way for AI senses to request auto-registering of new Pawns as sources of this sense stimuli

    • Senses can now specify if AI Perception Component's On Perception pdated should be called for their stimuli only if the perception state changes (like sight) or on every update (like hearing)

    • Made all Pawns by default auto-register as sight stimuli sources

    • Added a component that when added to an actor will make that actor auto-register with AI Perception System

    • Added a BP function for easy spawning of AI noise events, damage events and requesting prediction update

  • Fixed AI not ignoring their own pawns when checking for visibility

  • New: Made Blackboard Component blueprint-spawnable so that blueprint users can start using it outside of AI Controllers

  • New: Made Blackboard's key names editable in key's details tab

  • New: Unified support for nested nodes, copy & paste and drag & drop operations in AI editors (Behavior Tree, EQS)

  • Added editor-time changes to a Blackboard asset propagate to all other assets derived from that particular assets

  • Fixed a broken condition in AI Perception Component's Get Actors Perception function that was making the while function useless by never returning any information.

  • Fixed a bug in AI Controller that would result in a crash if AI Controller was called to posses a Null-pawn while already having a valid pawn already set.

  • Fixed Blackboard Component's ClearValue function not really doing what it says

  • Improved Environment Querying System query editor's menus to include new blueprint classes created during given editor session, as well as remove freshly deleted classes.

  • Lots of AI Perception bugfixes and improvements to bring it up to blueprint-usable state

  • Marked AISenseConfig_Blueprint as abstract so that it doesn't clutter senses' dropdowns

  • Marked Character Movement Component's Set Avoidance Enabled function as unsafe for blueprint construction scripts, since it's not safe to be called there

  • Removed redundant data gathering from NavMesh, to optimize NavMesh rendering.

Debugging Tools

  • Fixed a bug in Gameplay Debugger that would result in a crash when used tried to debug a Pawn and there was no navigation data present on the map.

  • Fixed crash on collecting Visual Log snapshot from uninitialized blackboard.

  • New: A way to limit number of simultaneously rebuild NavMesh tiles has been added.

  • New: Added a configurable flag to Navigation System that if set will result in creating navigation system on multiplayer clients.

  • New: Added a configurable limit to total number of tiles NavMesh can contain.

  • New: Added a feature to Static Mesh Editor to preview the way static mesh will be presented to Navigation System. There is a new tool bar button for this.

  • New: Added a per-instance way to configure whether navigation collision of a navigation relevant actor is gathered lazily or instantly

  • New: Added more NavMesh generation properties' validation for safer parameter tinkering

  • New: Added navigation export for Shape Components including dynamic obstacle creation.

  • New: Added option to skip navigable geometry export from primitive components that are relevant for navigation.

  • New: Added optional raycast to conform NavMesh walking closer to underlying geometry

  • New: Added vertical compensation for NavMesh query extent

  • Fixes NavMesh projection in area with significant height difference between NavMesh polys and walkable ground.

  • New: Crowd's avoidance query range is now independent from velocity.

  • New: Custom navigation components can now override parent actor's relevancy.

  • New: Exposed detour collision resolution as a customizable navigation system setting

  • New: Improved AI Controller's logging of failed movement requests

  • New: Navigation links will now connect to cheapest area in snap radius.

  • New: Navigation mesh has new option for runtime rebuilding - Dynamic Modifiers Only. It's the same as completely static navigation mesh but supports mesh modifications through NavMesh modifiers (dynamic obstacles). It has a little extra memory overhead compared to the completely static version. Supports streaming.

  • New: Tweaked default "AI Move To" blueprint node's Acceptance Radius parameter for better AI stability

  • Fixed Navigation System's issues that resulted in improper handling of actors in "always loaded" sublevels

  • Fixed NavMesh generation crashes occurring as a result of user changing NavMesh generation properties via Project Settings

  • Editor should now correctly stream-in chunks of a navigation mesh. Before it was working only in game worlds.

  • Fixed a bug in "AI Move To" blueprint node that resulted in AI not being able to properly move to dynamic actors. AI simply would not update the path when goal actor changed location.

  • Fixed AI moving to actor occasionally failing due to path's final point not being on NavMesh. In practice these points were usually too far above NavMesh.

  • Fixed AI not getting notified about externally-caused navigation path updates, like for example when move goal actor changes location

  • Fixed AI path following crashes happening when AI tries to follow a straight-line path while there's no navigation data on the level (no NavMesh).

  • Fixed AI path-following issue where AI wouldn't care about NavMesh while following last path segment to a dynamic goal actor

  • Fixed Navigation Data's Runtime Generation option not being settable to "Static" in Project Settings

  • Fixed automatic repathing when AI resumes movement after finishing hotspot interaction or falling.

  • Fixed crash on using direct navigation paths (without pathfinding).

  • Fixed crowd simulation for move without pathfinding.

  • Fixed crowd simulation sending AI directly through wall in some rare cases.

  • Fixed cycles in pathfinding when using overestimating heuristic weight.

  • Fixed immediate rebuilding of postponed paths after moving or invalidating goal.

  • Fixed issues with NavMesh rendering in editor. It's consistent with other Show flags now.

  • Fixed Min Region Area parameter not being used in NavMesh generation.

  • Fixed missing navigation links after loading static NavMesh.

  • Fixed Navigation Octree creation policy so that it doesn't get created if Navigation System is not expected to generate navigation data

  • Fixed NavMesh generation bug when single layer had huge height difference (exceeding 255 cells).

  • Fixed a bug with NavMesh hierarchical graph connections.

  • Fixed NavMesh movement so velocity is reported correctly

  • Fixed NavMesh not rebuilding to proper settings when changing NavMesh generation properties

  • Fixed occasional jittering of slow moving agents.

  • Fixed Path Following Component's issues with determining path's starting point on receiving new path

  • Fixed single-navigation-polygon paths erroneously claiming their cost was 0

  • Fixed triangulation issue in NavMesh's detailed polys.

  • Fixed warnings reported during Play In Editor session from simple move to functions.

  • Improved and optimized crowd avoidance near NavMesh borders.

  • Improved mechanics of figuring out if a Primitive Component should influence NavMesh generation

  • Made a change to determining navigation relevancy of components to improve its reliability. It directly affects influence of component's collision toggling on NavMesh generation.

  • Made a change to Floating Pawn Movement that allows controlling it with "player-like" input even if it's owned by AI. This kind of control is possible only when AI is not following a path at the moment.

  • Made Scene Previews not construct Navigation System instances, which was a source of multiple awkward navigation-related glitches

  • Navigation System improvements towards better NavMesh generation performance.

  • Navmesh generation issues with World Composition have been fixed

Animation

  • New: Improved Animation Slot Editing

  • This release adds the ability to rename and delete Slot names (for use with Montages).

  • The new feature is accessed through the Slot Group window. Note: the user must resolve any references to the slots in existing Montages before deleting.

  • The slot manager will search references and prompt for them to be reconciled before performing the operation

    image alt text

  • New: Added 5 custom fields to the Humanoid Rig which you can be used for game-specific additions

  • New: Added a drop-shadow to bone names when rendered in the Persona viewport

  • New: Added ability insert a frame while editing animation in Persona

  • New: Added Animation Editor Settings page to Editor Preference

    image alt text

  • New: Added Animation Settings page to Project Settings

    image alt text

  • New: Added filtering to Preview Asset Menu in Persona so that unattachable items are not shown.

  • New: Added logging of material names to material merging during Merge Actor

  • New: Added Look at controller interpolation/clamp options

  • New: Added Montage_Pause function to AnimInstance.

  • New: Added native support for native transition rules

  • New: Added native support for state entry/exit callbacks

  • New: Added Root Motion from Everything support to Skeletal Mesh Update Rate Optimization.

    • Allows root motion without having to tick every frame

    • Calculates a pose a certain amount into the future and interpolates towards that

  • New: Anim Notify Editor changes:

    • Added "Replace with" option in right click menu for existing notify nodes.

    • Fixed issue with deleting multiple animations at the same time deleting the wrong notifies

  • New: Automatic transition rule prototype in Animation State Machines

    • It is an opt-in on the transition node, available when there is only a single sequence player node in the source state

    • The 'can take transition' rule is defined as Player.CurrentTime + CrossfadeDuration >= Player.SequenceLength

    • The BP defined transition rule is ignored and the automatic rule is evaluated directly in C++ when this is enabled, providing a speed and workflow benefit whenever the rule is sufficient

  • New: Exposed Skeletal Mesh Component's Find Socket function to the blueprint system

  • New: Optimized code that updates physics bodies/collision shapes to match animation.

  • New: Optimized state machine ticking

    • Prevented most allocations and reallocations for transition evaluation

    • Avoided calling the BP transition rule when there is a C++ rule

  • New: Added new option in Persona to toggle "Auto align floor to mesh" on and off

    image alt text

  • Previous behaviour was equivalent to Auto Align being switched on. This would move the floor in Persona to align with the bottom of the mesh bounds. Switching Auto Align off moves the floor back to the origin

  • Accessed via the viewport Show Menu (Show -> Scene Setup -> Auto Align Floor To Mesh)

  • New: We now queue Montage events during ticking, so they're triggered after Anim Notifies.

  • New: When you import animation, now it provides a option to delete all existing morph target curves

  • Added ability for retargeting window search to include bone name, display name and node name

  • Adding an Anim Notify state to an animation should properly mark the asset as needing to be saved

  • We now allow deselecting bones in Persona by clicking on a bone that is not in the mesh

  • Changed Retargeting Option to be Advanced Option in Skeleton tab since it includes a variety of other options.

  • Changed the anim compression dialog so that it automatically closes at the end of compression.

  • Disabled creating new animation from Content Browser. You'll create animation assets by importing them from FBX files.

  • FBX importer/exporter now supports UTF8 for name of meshes, bones, materials, and morph targets.

  • Fixed root motion not being cleared on additive animations. This caused the preview mesh in Persona to move when it shouldn't

  • Fixed multiplication order of root motion

  • Fixed root motion weighting issue when blending between animations in sync groups

  • Fixed a crash when selecting an existing "Two Bone IK" node in an animation graph.

  • Fixed a variety of cases where a negative play rate would break the animation system

    • Fixed root motion output during negative play rates

    • Fixed issue where montages with a play rate of -1 and a current position of 0 would not progress.

    • Fixed crash when playing an anim montage in reverse with a segment that has a negative play rate

    • Fixed infinite loop that would occur when playing montages with a negative play rate

    • Fix use of negative play rates in composite animations

    • Change Single Node Anim Instance to account for asset play rate when performing "is finished" logic

  • Fixed an issue where Blend Space input preview isn't working when opened first time.

  • Fixed an issue where Native Transition Delegate wasn't checked when dealing with conduit entry rules

  • Fixed an issue with retarget translation option crashing the editor for different compression setting

  • Fixed an issue with selecting bone dropbox not displaying after search in retarget manager.

  • Fixed animation length calculation being incorrect when importing an animation with a length not divisible by the resample rate.

  • Fixed being unable to record animation when not simulating.

  • Fixed bug in the creation of the output package during Merge Actors

  • Fixed crash when "modify bone" node bone name is set to None

  • Fixed crash when attempting to retarget an animation with a single key

  • Fixed hiding slave bones when bones are hidden on a master pose component

  • Fixed index mismatch in child anim blueprints if the parent is structurally changed and the child is a data-only blueprint causing incorrect behaviour and crashes

  • Fixed issue in notify track panel where vertical scrolling of the panel would take precedence over panning the track

  • Fixed issue where update rate wasn't properly applied to all the skeletal mesh components of a single actor

  • Fixed location offset value not being hooked up properly in Play Particle Effect blueprint notify.

  • Fixed master pose component being able to be assigned in construction scripts

  • Fixed Montage not being stopped if Blend Out Time changes after it's been triggered once.

  • Fixed morph target identifiers sometimes being corrupted on load.

  • Fixed morph target loading issue where smart name gets corrupted due to loading order.

  • Fixed node title display for sequence player nodes with a sync group

  • Fixed notifies at the end of animation sequences in montages not triggering because of blend out.

  • Fixed physics bones blending issue caused by double buffered bones

  • Fixed play state in Persona getting reset when changing which montage is being played

  • Fixed potential crash with blendspace preview.

  • Fixed root motion calculation when component space does not match actor space

  • Fixed aim offset not being converted correctly during retargeting anim Blueprint

  • Fixed skeletal mesh actors that are placed in the level not updating animation when animation has changed in the detail panel

  • Fixed sockets on skeletal meshes ending up in the wrong place if the bone they are attached to is not part of the current LOD

  • Fixed state machine update crash caused by the Persona preview instance being deleted

  • Fixed a crash with Spring Bone Controller when running with Parallel Anim Evaluation

  • Fixed undo not working properly when changing a material on a skeletal mesh

  • Fixed viewport visibility calculation in Persona so that multiple hidden instances of Persona no longer cripple editor performance.

  • Improved skeleton reimporting. If the skeleton's hierarchy has changed dramatically during reimport, it will fix up all animation assets.

  • Improved support for importing meshes generated by Mixamo Fuse

  • Improved Notify snapping issue when editor is reloaded.

  • Improved the way we import tangents of curves from FBX files

  • Minor optimization for anim node updates when one or more non-pose input pins are wired to an expression or variable in the graph by using a fast calling path

  • Optimized animation code that that was copying a reference skeleton instead of taking a reference.

  • Optimized state machine ticking

    • Prevent most allocations and reallocations for transition evaluation

    • Avoid calling the Blueprint transition rule when there is a C++ rule

  • Prevented a crash when a skeletal mesh LOD has zero vertices

Audio

  • New: A unique audio device instance will now be created for each PIE window.

    • This allows for a more accurate representation of audio from different player's perspectives.

    • One device serves as the "main" audio device for the Editor, and is where "real-time" audio plays, then new PIE sessions will create new unique audio devices.

    • Because new audio devices may impact Editor performance for lower-perf machines, a default of 2 audio devices is currently set (1 for the main audio device, and 1 for a PIE session). More than 1 PIE session will fallback to using the main audio device.

    • To enable creating a new audio device for every PIE session launched, there is a new advanced multiplayer option.

      image alt text

  • New: Audio Component's Is Playing function is now a Pure blueprint function

  • Copy-pasting an Ambient Sound that uses an internal SoundCue now works correctly

  • Fixed an issue where the stat display for audio components did not include the associated asset

  • Fixed bug where sounds that were playing when the source .wav was reimported would not be restarted.

  • Fixed issue with Sound Cue Editor not showing execution path

  • Fixed mathematical error with the "Log Reverse" Attenuation function.

  • Fixed problem with stat memory tracking for audio assets.

  • Fixed random weight choosing algorithm in Sound Node Random for Sound Cues.

  • Fixing sound source volume setting on Android platforms so that they are accurate to the linear volume and are inaudible when set to 0.0.

  • Removing distance as a factor for Sound Node Param Cross Fade when calculating the max distance of a Sound Cue.

  • Spatialization being used on a multi-channel sound will correctly report only once per Sound Wave asset, not once per time that Sound Wave is played.

  • Stop any sound cue previews playing when sound cue editor closes.

Automation

  • New: Added additive flag to rotation multiplier bone controller node in animation graphs

  • New: Engine automation tests are now grouped into two categories: System and Project.

    • The 'system' category is for any test or tool that is project agnostic.

    • The 'project' category is for any test or tool that is project specific.

  • New: Refactored the static mesh UVs check so that it is now a 'complex' test.

    • It can check individual meshes instead of all of them at once.

    • The static mesh UVs check no longer runs on the engine content assets.

  • New: The open asset type automation test is a 'complex' test again.

    • This allows you to run this test on an individual asset instead of all of them at once for that same asset type.

    • The open asset types tests can be found in the Tools section of the automation test hierarchy in the Unreal Frontend.

  • New: Added automation script to list connected mobile devices

  • Certain complex automation tests that relied on content need the asset registry to be full loaded. The automation framework will now wait for the registry to be loaded before tests are run.

  • Fixed the cooking process on exFAT file systems, which was failing due to the way it stores timestamps.

  • The Load All Maps in Editor automation test will no longer run on the maps found in the engine content folder.

Blueprints

  • Blueprints: Drag and Drop to Create New Pins

    • Drag and drop a pin connection onto Function and Macro Entry/Result nodes, Collapsed Graph nodes (and their entry/result nodes in their graphs), and Custom Event nodes to create a pin connection.

    • To use this feature, just drag a pin connection over the node:

    image alt text

    • The results will be a new pin, already named and connected.

  • Get Nodes can Check for Validity

    • You can now right-click any GET variable node and convert it to an "impure" node that will branch based on the validity of the value. This makes it easier to handle errors.

    image alt text

    • Just right-click on a GET node and select "Convert to Validated Get" to toggle the feature!

    image alt text

  • New: "The execution path doesn't end with a return node." blueprint compiler note.

  • New: "The path is never executed." blueprint compiler note added.

  • New: "The path is never executed." blueprint compiler note.

  • New: Actor SetOwner now callable from blueprints

  • New: Added a "target context" menu to the Blueprint graph menu, to give users more control over the menu's context. Users can now search functions belonging to the Blueprint, when dragging from an object pin.

    image alt text

  • New: Added a menu option when right clicking on Blueprint nodes to view node's documentation.

    image alt text

  • New: Added an option to the Blueprint Editor settings to control the visibility of components added in the Construction Script in the components tree view in the Details panel.

    • Editor Preferences -> Blueprint Editor -> Hide Construction Script Components in Details View (default is ON)

  • New: Added an optional "Owner" parameter to the Blueprint Spawn Actor From Class node.

  • New: Added Blueprint Editor Setting for enabling/disabling of the default nodes being placing in new Blueprints. They are enabled by default.

  • New: Added Blueprint node for testing enum inequality (!=)

  • New: Added Get Light Color blueprint accessor for Blueprints that returns a Linear Color.

  • New: Added GetDisplayName as an acceptable autocast from object to string

  • New: Added GetObjectName to return the exact object name of a UObject

  • New: Added new increment, decrement and negate macros

  • New: Added support for direction flipping for reroute nodes that travel backwards, avoiding the 'topknot' effect

    image alt text

  • New: Blueprint Call Function nodes will now display localized function names.

  • New: Blueprint search makes better use of multiple processors, doubling search speed for some machines

  • New: Can drag and drop multiple components variables into a Blueprint to have them all be placed as nodes.

  • New: Can undo changes to drag and dropping variables to change category.

  • New: Change to implement the ability to pin reroute node comments that offers an alternative for users to the current display on hover functionality.

  • New: Exposed subtraction of two DateTimes to Blueprint

  • New: Fixed Event Dispatcher, that wasn't called properly

  • New: Input: Gesture Keys are now blueprint bindable

  • New: Improved searching for pin type classes to find classes, structs, enums, and objects when searching with a sanitized versus the unsanitized version of the name.

  • New: In "Region and Language" you can toggle localization of node and pins in all graph editors.

  • New: Infinite loop messages while running PIE will now be posted to the message log instead of a modal dialog.

  • New: Added inverse lerp function for blueprints

  • New: Can now append multiple strings using a single 'Append' node by right clicking on the node and selecting 'Add Pin'

  • New: Added Grid Snap node to blueprints

  • New: Interpolation functions are now available for 2D vectors, previously these were only available for 3D vectors

  • New: When a select node is created from the context menu we now connect the dragged pin to the index pin of the select node

  • New: Join String Array function added.

  • New: Light Component classes can now be subclassed via Blueprints

  • New: Math expression nodes support local variables.

  • New: New functions for timer: they takes a delegate of an event instead of the event's name.

  • New: Object and class pins will now filter listed items based on parameter metadata.

  • New: Player Start can now be subclassed via blueprints

  • New: Replacing actors in the level viewport will automatically replace all references in the level Blueprint.

  • New: Streaming Level LOD now exposed to blueprints

  • New: Streaming levels now expose an Is Streaming State Pending function to blueprints. This can be used to check if a sub-level is fully streamed-in or out.

  • New: Subclasses of Actor Component defined via Blueprints can now call Destroy Component on themselves.

  • New: The Render To Texture Blueprint camera orientation was flipped to match the way normal maps are rendered in world space. This removes the need for any channel flipping in captured textures.

  • New: The Render To Texture Blueprint can now render motion vectors for Flipbooks. Motion vectors are used to morph frames so that fewer frames are needed to get a smooth result. There is a companion material function called Flipbook_MotionVectors; it can also be used with motion vectors generated in separate programs. Coming soon to imposters.

  • New: The Render to Texture Blueprint has two new modes:

    • "Random Tiling Physics Drop" which simulates a given number of meshes from a list colliding into a plane and then converts the result into a tiling texture automatically. Useful for making riverbeds or tiling pebbles. Collision can be disabled to generate simple random mesh distribution such as grass or flowers. By pressing 'K' to keep simulation a layered result can be created.

    • "Tiling Hand Placed Meshes" is a mode that auto wraps each placed mesh across the canvas to create a tiling texture. This mode is most useful for making tiling rock textures from high resolution source rocks.

  • New: Added the ability for advanced users to set blueprint variable default values from the config files which can then be customised between different projects and configuration setups.

    • The option is located in the advanced section of the blueprint variable details panel and should provide indication of which config file should be used to set the value.

  • New: This change modifies the behavior of drag dropping variables into a graph to consider if Ctrl/Alt modifier keys are active at any point during placement rather than only before placement begins to place a get/set node.

    • The ability to hold both Ctrl and Alt simultaneously and place both a get and a set node was also added.

  • New: Exposed the default comment node title color to node comment bubbles so users can set their own color preferences.

    • The setting is located in editor preferences under the graph editors section and is named Default Comment Node Title Color

    • This setting also controls the default comment node colors

    • When you change this setting you will be required to close and re-open any graph editor before changes are observable.

  • New: Camera Component is now Blueprintable, allowing self-contained 'smart' cameras to be created more easily

  • New: The text and string pins now are now multiline capable. Using Shift+Enter will create a new line.

  • New: Undo/Redo actions that do not affect a Blueprint will no longer cause it to become unsaved when open

  • New: Use compact representation for Increment, Decrement and Negate macros

  • New: When converting a Blueprint cast node from impure to pure, surrounding execution wires will now be automatically fixed to maintain execution flow.

  • New: "Spawn Actor From Class" node will no longer disconnect remaining pins when changing the class.

  • New: A native structure containing a static array can be a parameter of a function in blueprint.

  • Absolute (int) and Sign (int) functions updated to normal naming conventions in the Kismet Math Library.

  • Actor properties no longer appear in the details view when editing native C++ component defaults in the Blueprint editor.

  • Added a number of small fixes to deferred dependency loading (the system, introduced in 4.7, that fixed Blueprint cyclic dependency load issues).

  • Added better guards to prevent the Blueprint Editor's node menus from crashing on invalid entries.

  • Added support for interface pins connecting object pins. Conversion nodes are now auto-injected upon connection, and cast nodes will accept either type.

  • Added support to catch Blueprint variables that conflict with new parent variables. We auto-rename the child's variable to avoid a name collision.

  • Adding or renaming function pins in Blueprints, will correctly refresh all active uses of the function.

  • All input pins in "Set member in .." node are hidden by default.

  • Automatically generated array for macro input is empty. Previously it had one default element.

  • Blueprint nodes are not executed after the return node is reached. The "Print String" node on the picture won't be executed.

    image alt text

  • Blueprints are marked dirty when they are re-parented.

  • Blueprints can no longer attempt to enable/disable Cull Distance Volumes or modify their Cull Distances dynamically.

  • Can hide the "Tick" category in Actor classes from displaying in Blueprint details.

  • Can no longer duplicate Timeline variables in the My Blueprint window.

  • Changed Blueprint "unneeded cast" errors into warnings.

  • Changed Blueprint palette tooltips to more closely reflect the corresponding node's tooltip.

  • Changelist number in Blueprint diff tool will no longer display with commas.

  • Changes made to GameMode via the Blueprints dropdown on the level editor toolbar will now mark the GameMode/Level as dirty

  • Changing a custom event's replication will immediately update the node's title.

  • Changing pin values can now be undone.

  • Changing the value of a component property on an instance of a Blueprint Class asset will now clear any event bindings to delegates on the component instance referenced by the previous value. This fixes an issue in which all previous bindings would persist each time the value was changed.

  • Comment bubble colors now obey property set on the comment node.

  • Conversion from mouse/screen position to world and back to screen position now works correctly when Resolution Quality reduced.

  • Converting a cast node to/from pure will add an undo/redo transaction.

  • Cooked projects with a Blueprint Game Instance assigned will no longer crash.

  • Copy and pasting custom events that have pins with spaces in their name will no longer create individual pins for each word.

  • Copy pasting collapsed graph nodes with spaces in their name will no longer lose pin connection data.

  • Crash fix that would occur when deleting an in-level Blueprint and it's parent with attempting to retrieve some Asset Registry tags.

  • Crash fixed, when Text was passed from None object into native function.

  • Creating a Blueprint based off another will no longer cause a transaction for an "Add Node".

  • Current Max Draw Distance can now only be read in blueprints, not written to.

  • Decals and Emitters spawned from Blueprints will no longer be inadvertently garbage collected.

  • Default placed events in Blueprints correctly have their comment bubbles showing.

  • Default values from User Defined Struct properly override values in a Blueprint

  • Divide-by-zero warnings (and others) at runtime in a Blueprint function will now include a script callstack when '-scriptstackwarnings' is enabled on the command line.

  • Do Once Multi Input now works in languages other than English

  • Dragging local variables over other actions in the My Blueprint window gives an error stating that it is invalid to do.

  • Editor should not stall when pasting large amounts of text into the Blueprint node context menu filter.

  • Expanding a function node with function nodes inside that are scoped to the current Blueprint will no longer be missing the call function nodes.

  • Exposed Get Actor Eyes Viewpoint to blueprints (Pawn class).

  • Exposed a 'const' attribute on user-defined functions as an advanced option in order to allow other Blueprint functions to be called from 'const' BlueprintImplementableEvent overrides.

    • Note that 'const' and 'pure' as function attributes have different meanings in the Blueprint edtior. 'Pure' controls whether or not the execution pins will appear on the function call node; true functional purity is not currently enforced.

    • Alternatively, exposing the advanced section and checking 'const' will enable some compile-time checks that will enforce a read-only 'self' context within the function graph. This allows the function to be called from other 'const' functions.

  • Fix a bug where split array node pins could be recombine on Blueprint load (disconnecting certain wire connections).

  • Fix crash during blueprint recompile when a scene component has been removed.

  • Fix crash when adding local variables to overridden functions.

  • Fix for "Graph Linked to External Object" error in Data Only Blueprint.

  • Fix for new Blueprints not immediately appearing in the Class Viewer (or Class Picker instances).

  • Fix graph linked to external object errors when saving a map that contains an actor with a blueprint created component that has its own default subobjects.

  • Fix issues after undo/redo caused by registering a component that is about to be destroyed by rerun construction scripts.

  • Fix issues in Blueprint preview window resultant from using game behaviors

  • Fix undo/redo issues where destroyed blueprint created components could remain attached to an actor

  • Fixed "Graph Linked to External Objects" error caused by copy/pasting components

  • Fixed a Blueprint Merge Tool crash when attempting to view component differences.

  • Fixed a bug in Physics Collision Handler Blueprints that would cause a crash when using the right-click context menu.

  • Fixed a bug in the Blueprint component hierarchy that would crash when reparenting the Blueprint and reordering components.

  • Fixed a bug in the Blueprint context menu that would not show array-node options when dragging from non-array pins.

  • Fixed a bug on Mac, where you couldn't delete a component selected in the Blueprint Editor's viewport.

  • Fixed a bug that could cause a Blueprint to not revert its default values when nodes overwriting them are removed from the construction script.

  • Fixed a bug that could cause a crash when deleting a Blueprint function-event from a super-class.

  • Fixed a bug that could cause a crash when loading a level with a Blueprint that implements an event that has since been removed.

  • Fixed a bug that could cause a crash when opening the context menu in a Blueprint that was created from the Content Browser via the "Create Blueprint Using This..." option.

  • Fixed a bug that could cause a crash while opening the Blueprint context menu after changes have been made to a Blueprint with open children.

  • Fixed a bug that could cause a seemingly random crash sometime after opening the Blueprint Editor (after an aborted asset deletion took place).

  • Fixed a bug that could cause Actor bound event-dispatcher nodes to break on load (no longer firing when the associated Actor triggered the event).

  • Fixed a bug that could cause Blueprint EventDispatcher nodes to have the wrong signature.

  • Fixed a bug that could result in a crash when deleting a Blueprint interface, before removing it from other Blueprints.

  • Fixed a bug that would let you modify a Blueprint's defaults while playing in the Editor.

  • Fixed a bug that would mark new function call nodes with an error until that Blueprint was fully recompiled.

  • Fixed a bug where renaming a timeline node would not update timeline variable nodes.

  • Fixed a bug where the Blueprint context menu wouldn't show AddComponent options associated with assets you have selected in the Content Browser.

  • Fixed a bug with Multi Gate nodes, where executing multiple from different functions would stomp memory and likely cause a crash.

  • Fixed a bug with the Blueprint editor's details tab, where a crash could happen if you closed and reopened it.

  • Fixed a bug with the Get Data Table Row node, where its output type could revert on load resulting to disconnected pins.

  • Fixed a crash caused by improper handling of Restrict To Class metadata keyword

  • Fixed a crash hitting F7 to compile a Blueprint while focused on a default value entry node in the Blueprint editor

  • Fixed a crash when closing a Blueprint Editor while a variable is selected.

  • Fixed a crash when creating a blueprint that is based on a C++ class if no destination folder was selected during creation.

  • Fixed a crash when undoing pasting a Custom Event node.

  • Fixed a crash with creating Macro Blueprint Libraries or Function Blueprint Libraries and attempting to spawn default events.

  • Fixed a cyclic dependency bug where changes made to a Blueprint's defaults wouldn't save until you compiled the Blueprint first.

  • Fixed a regression in the Blueprint class defaults editor in which changing the material on a mesh component would not be applied to instances of the Blueprint class.

  • Fixed 'Add call to parent function' for event overrides

  • Fixed an issue where it was possible to end up with an orphaned Animation Blueprint in a PIE session, which could result in more than one available instance in the Debug Filter menu while debugging the event graph.

  • Fixed an issue with dependent parent/child Blueprints, where the child's property values could be reset on load.

  • Fixed Blueprint compile issues after undo/redo of any action involving a Format Text node.

  • Fixed Blueprint compiler error after deleting a Format Text node.

  • Fixed blueprint error "Directions are not Compatible"

  • Fixed broken Actor attachments during post-compile reinstancing when the parent and child Actor are of the same Blueprint Class type.

  • Fixed crash caused by graph's names collision.

  • Fixed crash caused by hanging event graph in Data Only blueprint.

  • Fixed crash caused by trashed class referenced by context menu database.

  • Fixed crash caused by DateTime variable while blueprint compilation

  • Fixed crash that occurred when shutting down the Blueprint Diff or Blueprint Merge tool when they were launched via the command line

  • Fixed crash when a node expands pins for a structure that was deleted.

  • Fixed crash when a parent class of an actor in a level is recompiled.

  • Fixed crash when an event on a component, that is called from an actor's constructor, is deleted.

  • Fixed crash when applying changes to blueprint if an Actor needed to be reinstanced.

  • Fixed crash when blueprint is compiled shortly after its child was reparented.

  • Fixed crash when blueprint uses an interface function , that takes as parameter another interface.

  • Fixed crash when caused by Anim Blueprint while Hot Reload

  • Fixed crash when rotation value in transform struct is edited

  • Fixed crash when Text property was read from null object.

  • Fixed crash when Timeline Play Rate Blueprint node was copied and pasted between Blueprints.

  • Fixed crash when using Canvas Render Target objects in Blueprints

  • Fixed crash while blueprint renaming

  • Fixed crash while blueprint reparenting

  • Fixed crash while compiling blueprints

  • Fixed editor crash when an inherited variable is set in a child blueprint

  • Fixed faulty assertion in Make Struct node when adding a text array to a user defined structure.

  • Fixed handling of blueprint merges when no changes to the local blueprint were desired

  • Fixed inability to save a Blueprint Function Library asset containing a function that references another function in the same library after it's been loaded.

  • Fixed issue that could cause circularly dependent blueprints to crash with a TRASHCLASS error when executed

  • Fixed issue that prevented Blueprints from being based on other Object Blueprints.

  • Fixed issue where adding triggers to Matinee particle tracks would cause the associated Matinee Blueprint node to have redundant pins

  • Fixed issue with default values in nested structures used in blueprints - under some conditions they would reset to the original default value

  • Fixed issue with some ease node pins resetting themselves when the node was refreshed or reloaded

  • Fixed issues with editing local variables multiple times, often seen when editing vectors or transforms.

  • Fixed member functions of output pin objects not showing up when dragging off a different output pin

  • Fixed member functions of some output pin objects not showing up when dragging off a different output pin.

  • Fixed naming convention issues when adding new variables or event dispatchers to Blueprints. They will now be formatted like other items in Blueprints: New[Type]_[Number].

  • Fixed objects referenced only by the undo/redo buffer for blueprint constructed components being garbage collected.

  • Fixed possibility of name collision between component variables and component nodes that would prevent blueprint compilation

  • Fixed problem that caused many unnecessary warnings while Blueprint loading.

  • Fixed problem, when blueprint was marked as dirty after Play In Editor was triggered.

  • Fixed problems related to renaming and removing event dispatcher.

  • Fixed Refresh behavior of Make Array node - previously it would not remember which pins had been 'split'

  • Fixed replicated variables defined in actor component blueprints. These variables will now actually replicate.

  • Fixed several crashes when calling certain functions from Game Instance's Receive Init event in a standalone game.

  • Fixed spline mesh components in blueprints adding a new entry to the derived data cache for their collision data every time the map is loaded

    • This was causing a huge increase in the size of the DDC, especially for network shared DDCs with multiple people working on the same map

  • Fixed the name of the Cross product node to be correctly labeled "X"

  • Fixed trailing numbers and letters that appeared on initial load of a blueprint for some set/break struct nodes

  • Fixed Undo/Redo of changes to properties defined in "Native" C++ components

  • Fixes a Blueprint-related crash during editor shutdown relating to the ClassV iewer.

  • Keys that are not blueprint bindable will no longer appear in Key selector dropdowns

  • For Loop With Break and For Each Loop With Break don't increment index after break anymore.

  • Format Text nodes can no longer have breakpoints set on them.

  • Function tooltips will display the sanitized function name if there is no other tooltip available.

  • Functions from function libraries will not be filtered from the Blueprint context menu based on the Blueprint's hidden category metadata.

  • Hidden comment bubbles will no longer reappear when doing unrelated actions.

  • Improvements and optimization to node title refresh

  • Input pins for macros can again be set to type 'wildcard'

  • Input pins in call function node are properly updated after hot reload.

  • Functions with no return value and no input parameter show up as overridable in the My Blueprint dropdown

  • Float to int conversion defaults to truncate rather than floor. Does not change behavior of existing blueprints

  • Strings in bytecode reference graph names no longer change between each compilation of the blueprint

  • Improved default values for some blueprint math nodes. This will not affect existing blueprints

  • Fixed one cause of disappearing default values in blueprint classes

  • It's no longer possible to add incompatible macro actions to a graph that would prevent child Blueprint Class assets from saving.

  • Minor fix to ensure only editor worlds are considered when gathering valid level script blueprint actions.

  • Minor performance improvements when finding referencers during post-compile reinstancing (slight reduction in overall Blueprint Class compile time).

  • Modifying multiple Math Expression nodes at once will no longer crash.

  • Native C++ components marked 'Edit Anywhere' can now be re-edited after being set to 'None' in the Blueprint editor Details panel.

  • Newly created Blueprints will no longer be marked as needing to compile.

  • No longer given the option to override functions in macro libraries in the right click menu of the My Blueprint window.

  • No longer spamming "Files need check-out!" when compiling a blueprint - especially verbose when compiling a blueprint from which many other blueprints derive

  • Overridable functions list in My Blueprints now correctly hides hidden categories and functions for the class hierarchy.

  • Pasting local variable nodes outside of scope will no longer show them as valid.

  • Relative transform updates resulting from component attach/detach operations in the Blueprint class component editor are now immediately applied to instances of the Blueprint class.

  • Removed a redundant preview Actor construction pass on Blueprint editor load (minor performance improvement).

  • Removed repeated component function options from the Blueprint's context menu.

  • Removed requirement that Blueprint variables be marked "Editable" to be accessible from other Blueprints.

  • Removed 's' at the beginning of a return pin tooltip when @returns is used instead of @return in the comment block

  • Removed some excessive verbose logging when the "Find Sessions" node finds sessions.

  • Removed the Blueprint Editor's legacy node menu system.

  • Removing Custom Event nodes and other nodes that spawn graphs will free up the name.

  • Renaming macro pins will no longer rename any macros within the graph that have pins with the same name.

  • Reparenting a component-based Blueprint Class asset between scene/non-scene base types will no longer corrupt an Actor-based Blueprint Class asset's component hierarchy.

  • Replacing function local variables in collapsed graph works.

  • Reroute nodes now function correctly in an Animation graph after compiling an Animation Blueprint.

  • Selecting all nodes in a graph using keybindings will no longer assert due to null nodes being present in the graph list.

  • Small fix to prevent automatically added parent nodes from overlapping the child nodes.

  • Sub-items in the My Blueprint panel will no longer be mis-categorized into the Function's section.

  • Suppressed "Access None ..." errors.

  • Suppressed wrong warning "No value will be returned by reference."

  • Switch On String node will obey case insensitivity by default as the details view says it is set to.

  • The Custom Event Node now handles generating the proper signature when dragged from a standard, non-multicast delegate pin

  • The Days In Month Blueprint function now logs a warning instead of asserting when an invalid month is used.

  • The Render to Texture blueprint no longer requires using the "High Resolution Screenshot" dialogue to export visualization buffers as it handles that by entering the console command 'r.BufferVisualizationDumpFrames 1'

  • Fixed an issue with Gameplay Tag Widgets whereby the the popup menu would be unusable when a graph window was zoomed.

    • The pop up menu will now scale with zoom instead of clipping the content in the menu.

  • Fixed differences between the way comment bubbles worked on re-route and other nodes.

    • Now the re-route node comment can be pinned and shown/hidden the same way other nodes comments can.

  • The re-route node will show its comment bubble if hidden when the mouse hovers over the node.

    • This addresses issues with node comment bubbles newline modifier key not matching similar examples in the editor.

  • The comment bubbles now require shift + enter to insert a newline when editing text.

  • Added automatic shutdown of any asset editors that are currently editing play in editor scoped assets upon exit of play in editor mode.

  • Fixed issues when editing instances of blueprint components in the actor details panel in the main editor.

  • Compiling the component blueprint would result in component values being displayed incorrectly and out of date.

  • We now track component blueprint compilation and update the relevant part of the actor details panel so it stays up to date.

  • Fixed text visibility issues with blueprint documentation nodes. Previously we had black text on a black background which was unreadable. This has now been modified to display a lighter background.

  • Changed multi-line comment bubble's text to be more inline with editor standards. In order to insert a newline in the comments you are now required to use Ctrl + Enter

  • Fixed nested comments having issues with user selection

  • Fixed bugs when comments are resized to contain other comments, fixing the relative depth to all enclosed comments ensuring selection is possible afterwards.

  • Fixed a problem that caused a crash in editor blutilities when the custom event had parameters.

  • Fixed an issue with functions being dropped onto graphs using the skeleton class rather than the authoritative class which resulted child blueprints losing array parameter pins

  • Fixed detection of Global Editor Utility based blueprint functions and exposes the blueprints editable variable's to the Call In Editor actor blutilities through the actor details panel.

  • Fixed problems with watch values in the blueprint debugger reporting themselves as out of scope incorrectly.

  • Improved updating of available level script blueprint actions between map changes to ensure they are kept up to date more dynamically.

  • Modified timing component naming so the actual timeline node name is indicated for clarity to the user

  • Disallowed blueprint components from being re-parented to anything other than Actor Component and derived classes incorrectly.

  • Disallowed comment bubbles from having their visibility or pinned state changed when they are situated in read-only graphs.

  • Disallowed levelscript actions from external levelscripts incorrectly being placed in the current blueprint.

  • Disallowed nodes from allowing pins to be added/removed incorrectly when the owning graph is read only.

  • Disallowed the ability to modify nodes comment bubble's visibility state in read only graphs

    • After this change if the owning graph is read-only the title bar toggle button for the bubbles will no longer display.

  • Disallowed users from editing the comment text in the reference viewer.

  • Removed the workaround code to display hint text in the comment bubble's and enables the newly available functionality to display the hint in the text field widget.

  • Restored the correct functionality specific to comment nodes with regards to their comment bubbles. The comment bubbles designed purpose here is to display when the comment nodes title is no longer easily readable under zoom and to be not present otherwise.

  • Fixed a bug in the blueprint action database refresh that would assert if a blank level is compiled.

  • Fixed an issue causing asserts related to the way the map levelscript is renamed and regenerated during duplication

  • Fixed an issue where comment bubbles could modify comment text in read only graphs.

  • Fixed an issue whereby timelines containing external curves attempted to deep copy the curve as if it was owned by the timeline. External curves are now skipped leaving the reference in tact. Additionally deep copies on owned curves are now not redundantly deep copied during blueprint re-instancing.

  • Fixed issues found with blueprint graph actions causing garbage collection to fail when switching levels in certain circumstances.

  • Fixed some of the following problems with comment bubbles in material expressions.

    • The comment being applied as a custom event name instead of affecting the comment text

    • Comments being lost when compiling or closing the blueprint

    • Inconsistencies between the comment bubble and material expression properties

  • Fixed the problem with variables showing as out of scope in the blueprint debugger.

  • Implemented missing comment bubbles from array nodes which had previously just been overlooked.

  • Modified actor workflow so that when an actor is converted to a blueprint the component names the user has chosen are preserved.

  • Updates comment bubbles so that when a comment is entered through the context menu the bubble automatically displays/hides based on comment string content.

  • Uncategorized functions will no longer be categorized into a "Class" category in the Blueprint node context menu when a being displayed for a currently selected level Actor.

  • Undoing an "Apply Changes to Blueprint" action will no longer leave the editor in an invalid state that will lead to crashes with proceeding to redo and undo, or move the selected component.

  • Using the up and down arrow keys for selection in the My Blueprint window will correctly select them.

  • Variable renames will no longer break math expression nodes that utilize them.

  • We now refresh the selected Actor's component tree in the Level Editor when a component Blueprint Class changes its parent class.

  • When deleting Blueprint assets, child Blueprints will not be re-parented and recompiled when they are also slated for deletion.

  • When dragging a function in the My Blueprint window, a mouse decorator is immediately shown.

  • When entering PIE, there will no longer be log errors from function call nodes in the level Blueprint due to missing scope.

  • When pasting Event nodes in Blueprints, if there is a ghost node version of the Event, that node will be removed in favor of the newly pasted Event.

Core

  • New: Added HSV-based linear color interpolation function (Blueprint and C++)

    • New Blueprint function: "Lerp Using HSV (Linear Color)" (in C++, you can call FLinearColor::LerpUsingHSV)

    • This interpolates between colors in HSV space, taking the shortest route between hues. Also interpolates alpha.

  • New: Added 'togglecvar' console command which allows toggling an arbitrary CVar between two values (useful when bound to a key).

  • New: Added warning log message when Engine fails to read an environment variable.

  • New: All Objects contained in a world will now be marked for garbage collection when transitioning between worlds avoiding the possibility of lingering references that prevent the old map from being garbage collected.

    • This makes the Load Map transition consistent with Seamless Travel transition.

  • New: Alt-Enter will now work to toggle fullscreen in cooked builds

  • New: Automatic world origin rebasing behavior (Distance, 3D or 2D) can now be adjusted from config files.

  • New: Enabled the ability for content projects to include plugins from third-party developers. This will link the game with the plugin making it available during game execution.

  • New: Encapsulated Child Actor Class and exposed Set Child Actor Class to Blueprints

  • New: Fixed the Editor crash during auto-save failure, which could happen even if the failure was a result of OS state (e.g. no disk space). Now it will log the error and notify the user about it without crashing.

  • New: Improve floating point precision when rendering very far from the origin. This change can prevent subtle bugs such as camera wobble or vertex wobble.

  • New: Added a guard to abort opening a project if the project's PackageFileUE4Version is higher than the currently running engine's.

  • New: Improved loading times of large profiler data sets.

  • New: It's now possible to cancel async loading.

    • This can be achieved through Cancel Async Loading function in Blueprints

    • Or by CancelAsyncLoading() native C++ function

    • Or through "CANCELASYNCLOAD" console command

  • New: Level Streaming objects have a new property "Disable Distance Streaming". This can be used by a Blueprint to temporarily disable distance-based streaming for any streaming level.

  • New: Minor improvements to 'stat levels' output to include the loading progress of a packages imports in its load percentage

  • New: Modified how feature packs are built from template data to reduce download size.

  • New: Reduced ticking overhead and optimized the task graph

  • New: Removed ability to test if a console variable has changed.

  • New: Memory Allocation Profiler using Stats

    • To run the game with the profiler use command line parameter "-memoryprofiler", to stop the profiling use the console command "stat stopfile", it will generate a new file with extension ue4statsraw located in the folder \Saved\Profiling\UnrealStats

    • To see the results use the Unreal Frontend command, usage: "UnrealFrontend.exe -run=MEMORYDUMP -INFILE=", it will generate two CSV files with all memory allocations

  • New: Added a new stats group "LoadTimeVerbose", which is disabled by default, this group can be used to monitor a very frequent stats that should be disabled by default to not decrease the performance, currently used when memory profiler is active

  • New: Added more stats to improve memory profiler accuracy

  • New: Added performance stats for tasks running on the thread pool

  • New: After executing the command "StopFPSChart" the location of the stats will be opened via file explorer

  • New: Better stats for decompress audio worker, now it also includes a name of the wave

  • New: The editor now allows modifying metadata for user plugins from the plugin browser.

  • New: The editor now checks for additional command line arguments stored in a UE4CommandLine.txt file in the root installation directory. Create this file to set arguments that the editor should always be run with.

  • New: The Flush Level Streaming function is now exposed into blueprints. Flush Level Streaming blocks the game thread until all level streaming operations have finished.

  • New: Timeline Set Playback Position now has a boolean parameter to determine whether to fire the update pin after changing the playback position.

  • New: Tweaked stats processing for better performance for high fps, 60 and above

  • New: Tweaked task graph visualizer to display more elements on the screen

  • Added checks to skip duplicating objects while saving packages. This prevents breaking assets on save if engine is in inconsistent state.

  • Added safeguards to prevent the engine from crashing when opening corrupted packages that are very small or empty.

  • Alt-Enter will now work to toggle fullscreen in cooked builds

  • Attached actors will no longer pop to the world origin and cause overlap events as part of being destroyed.

  • Begin Play will no longer called on Actors that are marked Pending Kill (about to be destroyed)

  • Change many string replace/compare/find operations which use a fixed case search pattern to be case sensitive. This avoids unnecessary expensive string case operations when searching for things like dots and slashes.

  • Changing the value of a parent class variable will now properly update after hot reload

  • Custom replication conditions like Owner Only are now checked for custom delta serialization, previously they always replicated and ignored the condition.

  • Date & time objects now provide accurate Unix timestamps for dates using a 64-bit value, rather than a 32-bit value.

  • Dynamically spawned Actors/Components that are static will now be affect by Cull Distance Volumes.

  • Fix bug where actors without a position were treated as being at 0,0,0 for computing net priority, causing replication differences depending on camera position

  • Fix component-bound events to correctly bind to the class that owns the delegate signature. This fixes issues with renaming events.

  • Fix crash when calling RPCs with complicated struct parameters

  • Fix crash when Child Actor Component is used without an owning Actor.

  • Fix crash when doing seamless level transitions in PIE due to garbage collection failing to clean up the previous World.

  • Fix issue that could cause an Actor to get Begin Play called on it twice on the client.

  • Fix issue where Begin Play would get called on Actors that had already had Begin Play called on them due to being carried over from previous level during seamless travel.

  • Fixed Client Restart not getting called correctly when depossessing and possessing a new pawn

  • Fixed subtitles showing the same line multiple times instead of each line once when using multi-line subtitle

  • Fixed a bug that caused dynamic primitives using distortion (e.g. effects) to never render if no static primitives (e.g. meshes) with distortion were also present on the screen.

  • Fixed a crash when loading a package with invalid package version caused by progress reporting object not being cleaned up properly.

  • Fixed assertion at startup when same shader format is specified twice in a project's engine config file

  • Fixed check() when console variables are getting set in a certain order.

  • Fixed config system bug that meant default ini syntax was not used when editing a file outside the games config directory.

  • Fixed crash when Pointer Event was passed to an event dispatcher

  • Fixed destructibles ignoring damage parameters that are imported from APB

  • Fixed issues that would allow Actor's Attachment Replication structure to become out of date resulting in incorrect attachment hierarchies on the client.

  • Fixed issues with flushing asynchronous loading.

  • Fixed Lightmass crash that was occurring for big enough (~4GB) files during saving.

  • Fixed map's missing asset reference, which could appear if that asset wasn't saved before the map was saved. This situation could happen for newly created objects in the Editor.

  • Fixed merging config files on Engine startup, which could result in the engine locking up

  • Fixed newly spawned tick group to not run a second time

  • Fixed property change propagation from default object to its instances.

  • Fixed rare crash during seamless travel.

  • Fixed some of the the Editor's BSP (binary space partitioning) operations, that were mistakenly clearing flags informing if given object shouldn't be loaded for client or server.

  • Fixed texture DDC threading issue that could crash on boot

  • Fixed Unreal Swarm occasional reporting "Error: A 32 bit processes cannot access modules of a 64 bit process.".

  • Fixed Unreal Swarm resolving its own IP address when the machine had more than one network adapter.

  • Improved garbage collection performance.

  • Improved the method by which we allow dynamic data changes during the Construction Script to target non-movable components (changes which are otherwise not allowed at runtime).

  • Linker circular dependency fixes: ensure that any parent default subobjects have been loaded before trying to create a CDO.

    • Fixes components in derived blueprints not inheriting default values from their parent blueprint.

  • Profiler - "Filters'n'Presets" window should now update properly according to the selected profile

  • Profiler - Fixed a crash when opening any asset with live data preview running in the Profiler

  • Reduced the likelihood of hitching during texture streaming by moving some temporary memory allocations to a worker thread.

  • Removing a stray '/' character from the final user ini, in the config cache.

  • Simple stat commands no longer hang the game when triggered from blueprints in shipping builds

  • Stats - Added missing stats for hierarchical view

  • Stats - All stats should be visible now on the hud when using command 'stat groupname+'

  • Stats - Fixed a crash when capturing stats from the beginning

  • Stats - Fixed a memory leak when destroying threads (Linux, Mac)

  • Stats - Fixed bad memory accounting for static meshes, added distance field memory usage

  • Structures, with values different than default ones, are properly saved.

  • Suppressed "Access None" errors.

  • Timer functions on objects that exist across level transitions now continue to fire in the new level.

  • UAT will not skip symbolic links on non-Linux platforms (fixes packaging projects on Windows servers that have data deduplication enabled).

  • Updated config files created on packaged games.

  • Coalesced ini files are no longer written out.

  • XML parser can now parse nested '=' characters and named entities correctly in attribute strings.

Editor and Tools

  • New: Added the ability to specify build settings and enable plugins for content-only projects.

    • This will cause the project to be treated as if it were a code-based project.

    • The editor will attempt to build the project with the selected options.

    • This will allow users to be able to utilize non-standard plugins as well as compile the default game executable with different options.

  • New: Plugin Creation Wizard

    • Note: The wizard plugin is an early access preview that is disabled by default and must be itself enabled in the Plugin Browser before being used

    • It can then be summoned from the main frame File menu as "Add Plugin...", and includes three templates currently:

      • Blank: Creates a minimal plugin with no functionality

      • Basic: Creates a plugin that adds a button to the main frame toolbar

      • Advanced: Creates a standalone tab window, summoned via a button on the main frame toolbar

  • New: Auto reimport improvements

    • Renames and moves within monitored directories are now detected and reacted to correctly.

    • Users can now specify virtual mapped paths for monitored directories (this allows new content files to prompt the auto creation of assets relative to the specified mapped directory)

    • It's now possible to add wildcards to include and exclude specific files from monitored directories.

    • Added a new option to ignore asset source changes on initial editor load. This is really useful when working with source control, as you can get latest without the editor running, and not have those changes all reimported.

  • New: Automatic Asset Checkout

    • Introduced an "auto checkout" mode to the Editor Preferences

    • Assets can now be optionally checked out automatically when they are modified, instead of prompting the user for checkout via a notification.

    • Additionally, attempting to modify an asset which cannot be checked out (e.g. because another user has it exclusively checked out, or because it is not at head revision) results in a warning dialog.

  • New: Added three new orthographic viewport modes

    • Added Right, Bottom and Back to the list of orthographic viewport modes, so the world can be visualized from all angles.

  • New: The pivot can now be positioned in both perspective and orthographic viewports

    • Dragging the translation widget with Alt+MMB will move the pivot location in any viewport mode.

  • New: Added a Source Control Actions button into the level toolbar

    • There is a new Source Control button on the level toolbar.

    • From here you can perform a number of source control related actions, as well as see the current state of the source control connection. The old status icon in the top right of the editor window has been removed.

  • New: Editor layouts and key binding settings are now saved common to all projects

  • New: Added ability to specify units on properties

    • Units are now shown by default on transforms and rotations. They can be customized on a per-project basis in Project Settings -> Editor -> Appearance

    • Units can be specified using a Units= meta tag.

  • New: Added "Snap Object To View" to the actor context menu.

  • New: 64 bits per pixel textures can now be exported, although the bit depth of the exported texture will be reduced (as neither .tga nor .bmp support 64-bit textures).

  • New: A.R.T. OSX port is now available

  • New: Actors referencing Blueprint assets now open the Blueprint in preference to any other referenced asset when pressing Ctrl+E in the editor.

  • New: Added a "Restart" button to the Crash Report Client.

  • New: Added a blueprint callable function that can show/hide the engine content in the content browser

  • New: Added a button to restart the editor when changing hardware settings.

  • New: Added a dummy plugin for WebBrowser so that it can be included optionally

  • New: Added a keybinding for zooming in a graph editor. The default binding is '+' and '-' to zoom in and out

  • New: Added a method to allow classes to register with the 'Super Search' to allow them to process search strings and return search hits as well as act on them accordingly.

  • New: Added a new scrolling mode to the Output Log window, dragging inside the window with the right mouse button. This equally applies to any instance of the SMultiLineEditableText widget.

  • New: Added a visualization of the preview light direction in asset editors when moving it via L+Click (remains visible for 1 second after releasing the mouse button)

  • New: Added Blueprint callable functions for getting and setting the Attach End To position in Cable Component.

  • New: Added configurable Hit Result Trace Distance property to Player Controller to allow customization of the trace distance used for the Actor mouse click and touch interface.

  • New: Added customization to improve display of crossfade params

  • New: Added functionality for project settings to be edited in specific config files

    • This is enabled on a per-property basis

    • Enabled for a number of IOS Project Settings (Enable Game Center, etc.)

  • New: Added ini option to be able to enable flushing of streaming before each garbage collector call.

    • This can be enabled via FlushStreamingOnGC value under [Core.System] section in engine ini.

  • New: Added log messages for Web Browser errors

  • New: Added method to set default visibility of the Unreal Widget in viewport clients.

  • New: Added option to specify whether a save dialog can be declined as opposed to cancelled. The Save All dialog now only offers 'Save' or 'Cancel' options

  • New: Added script contents validation when importing scripts for the script plugin. Added support for custom file extensions for script plugin.

  • New: Added support for loading objects with StaticLoadObject without specifying the object's name inside the package. Short package name is assumed to be the object name in such case.

  • New: Added the ability to have tags in tutorials that can be searched with the 'super search' box

  • New: Added the ability to load the latest opened level at editor startup

  • New: Added the ability to multiple select spline key points when visualizing a spline component instance in the world. Operations can then be performed on all points at once (transform, change of type, etc)

  • New: Added the ability to right click in a level editor viewport and select "Go to" to move the viewport camera the clicked location

  • New: Added the ability to specify a pixel format for RHI viewports

    • This allows us control over what back buffer format to use for specific RHI viewports. This is ignored on some RHIs (metal, gnm) where it doesn't make sense.

  • New: Added Thickness parameter to Draw Debug Directional Arrow function

  • New: Added tooltip support to Content Browser header row columns. Added Asset Registry Tag Metadata class to Editor builds, for reporting additional tag information.

  • New: Added ToolTip text to the various geometry modifier widgets.

  • New: Added use of LoadString to Web Browser window so that it can display html code directly

  • New: Added view mode menu to SCS Editor Viewport.

  • New: Allowed launcher builds to check for existence of .uprojectdirs files to add search directories

  • New: Autosave is now deferred if shaders are compiling.

  • New: Available platform editor modules are now searched for rather than being hardcoded

  • New: Changed "Create Child Blueprint Class" option in a Blueprint asset's context menu so that the new asset is created and set up for inline renaming in the Content Browser, instead of assigning a default name and opening it immediately in the Blueprint Editor.

  • New: Changed default Texture Editor background to be Checkered. Renamed Saturation view option to Desaturation.

  • New: Changed favorites menu to not have an upper limit. Favorites now organized so the most recently added/opened is at the head of the list. Only the first five favorite levels are displayed on the main menu, the others are on a submenu.

  • New: Changed Input Settings UI to use full names for punctuation keys that were hard to read before (comma etc.)

  • New: Changed the errors related to writing to a file to include the filename for which the error occurred.

  • New: Changed the Texture Editor to default to showing the alpha channel for some kinds of textures most likely to be used as alpha instead of as a mask channel

  • New: Changed Web Browser Viewport to use local size so that image is zoomed when application scale is changed.

  • New: Changed to the way default scene root components are edited.

    • Empty actors have a Default Scene Root. It was previously deleted by the first scene component you added.

    • The Default Scene Root now stays until you delete it or drag another scene component into the root position.

    • The way child components are reparented when their parent is removed has also changed slightly to preserve sibling relationships.

  • New: Data Table Editor has had a few usability improvements

    • The data table editor now has a new look and feel, and supports user resizeable columns, reordering of rows, and full undo and redo support.

    image alt text

    • You can now edit asset and class properties from within the data table editor, and array properties are now supported by the export/import process.

    image alt text

    • You can now export your data/curve tables to CSV or JSON files, and import your data/curve tables from JSON (as well as the existing CSV support).

  • New: Dragging material or texture assets over the level viewport now retains the cursor decorator window. It will be overlaid with the 'Not allowed' icon if the cursor is over a scene element which cannot have a texture or material applied to it.

  • New: Editor sessions now remember the view modes set for perspective / orthographic viewports.

  • New: Ensured that web browser window size is set correctly

  • New: Experimental and Early Access warning banner will be displayed in details panels when a Component is selected in both the Blueprints and Level Editor Component trees.

  • New: Fixed an issue where copying from multiline editable text widgets would copy the incorrect newline sequence in Windows.

  • New: Fixed an issue where the drag start position in zoomed orthographic modes is incorrect, due to the trigger for drag start being determined by a scaled delta. Now uses the new RawDelta property.

  • New: Fixed issue in which the spline wasn't updated when setting/unsetting the closed loop property via a Blueprint.

  • New: Fixed various issues with taking screenshots (high res or normal). This now works correctly in all types of editor/game windows. The default image format is now .png.

  • New: If you have Simplygon, you can regenerate LODs without creating new ones.

  • New: Implemented better filtering in the "Replace References" part of the Delete Asset dialog, so that Blueprint assets are filtered by their parent class as well.

  • New: Improved splash screen to include more accurate initialization progress indication.

  • New: Improved the heuristics for detecting normal maps when importing a texture. Now normal maps with alpha should be correctly identified.

  • New: Made some optimizations to the Details panel when there are many large array properties.

  • New: In the BSP Surface Properties category in the Details panel, the scale now initialized to selected surface scale.

  • New: Level Editor viewport transform widgets are now hidden for actors that can't be moved because they don't have a scene component.

  • New: Level Export now supports everything including Skeletal Mesh, Child Actor Component (recursively), and Camera.

    • Also supports Keep Hierarchy option in Editor User Setting : this keeps current attachment hierarchy.

  • New: Localization exec and console commands now work when running games in standalone.

  • New: Lots of missing icons have been created for actions and tabs throughout the editor

  • New: Merge Actors tool has been reskinned and now has its own tab. Just enable it in Experimental Settings, and then open its tab from the Window menu. Then select the Actors you wish to merge, and click 'Merge Actors'.

  • New: New tab closing commands in the Editor

    • Close Major Tab command closes the focused major editor tab (default Ctrl+F4)

    • Close Minor Tab command closes the active window's active minor tab. The active minor tab is the one with the highlight in the tab header.

  • New: Play in Editor (PIE) has a new option that forces sub-levels to be streamed-in from the disk even if they're already loaded in the editor. 'Editor Preferences->Play->Stream Sub-Levels during Play in Editor'.

    • Normally PIE will duplicate a level already in memory the game world wants to stream the level in. PIE with this option set behaves closer how the level will be streamed in during real gameplay

    • Note that levels modified in the editor but not yet saved will still be duplicated instead of streamed.

  • New: Profiler: Added ability to resize named events list

  • New: Project Title is now displayed on PIE windows

  • New: Renamed Actor Locking editor functionality to Actor Pilot

    • Actor pilots are now initiated from the actor's context menu, rather than an unrelated menu on the viewport. Similarly, pilots can be stopped via the context menu for the actor, or from the viewport toolbar that is visible when a pilot is active.

  • New: Reworked "Create Blueprint Class" dialog in class viewer.

  • New: Russian language keyboards will now have a default console key mapped

  • New: Spline Mesh Component now has a Min/Max Boundary property to specify the bounds of the curve numerically instead of by the mesh bounds.

  • Fixed the bounds calculation for Spline Mesh Components so that it is calculated correctly given custom boundaries.

  • New: Streamlined the Select submenu in the level viewport contest menu to remove uncommon or deprecated items.

  • New: Texture LOD Settings are now configured on a per device profile basis.

    • This adds greater control for users to specify Texture LODs based on their Target Platforms and Devices.

    • Configurable, in Editor, through, View->Developer Tools->Device Profiles.

  • New: The "Merge Actors" tool now also merges LODs for the meshes

  • New: The "Merge Actors" tool now has an option to also merge materials. Each source material's components (Base Color, Normal, Roughness etc) will be flattened into a texture and arranged into a texture atlas. Supports only opaque materials.

  • New: The general feel of the Unreal Widget has been improved, in particular that of rotation, which should now respond smoothly to the user's mouse movements.

  • New: The Message Log system now supports adding a button to perform one-time actions such as repairing damaged content. Once the button is pressed and the action has been performed, the button is removed.

  • New: The OBJ file format is now accepted when importing LODs

  • New: The Pen tool in Geometry mode now disallows creating geometry whose edges self-intersect.

  • New: The Simplygon Mesh Proxy tool now has support for Metallic, Roughness and Specular material properties.

  • New: Transform and Vector properties on Scene Component subclasses can be manipulated in the level editor

    image alt text

    • Editable properties on scene component and actor subclasses can be tagged in C++ using meta=(MakeEditWidget) or in Blueprints using "Show 3D Widget"

    • It works on arrays of Transform or Vector properties as well, showing one widget for each element of the array

  • New: Updated how importing factories are sorted and prioritized.

  • New: User is warned when packaging a binary that doesn't exist.

  • New: Valid stats console commands now appear in the in-game console auto-complete list, and no longer output an 'unrecognized command' message.

  • New: You can now double-click components in your Blueprint or actor details to focus the viewport on the component.

  • Added a setting in the Matinee record movie tool to specify whether or not UMG/Slate HUD should be included in the recorded movie

  • Added back in the setting to toggle using MiKKTSpace tangent generation for static meshes

  • Adjusting the mouse capture tip to only ever be collapsed or hit test invisible. It was previously blocking clicks because the border was visible.

  • All users focus are now set to the main viewport in PIE, fixes 2nd + players controllers not having control until you click in the PIE viewport.

  • BSP converted to static meshes will no longer leave the BSP brush remaining in the level

  • Changed Play From Here so that it doesn't snap-adjust the click location to use.

  • Corrected the name of the folder to import to when inserting feature packs

  • Fix an issue where icons would not display in the curve asset editor if you enabled small icon mode.

  • Fix crash attempting to reimport a render target. Render targets cannot be reimported since they aren't generated from source art data

  • Fix crash running game/PIE when an image asset has be set to none in the touch interface layout.

  • Fix skeletal meshes not allowing editing of any materials if none were found during FBX import.

  • Fix so that pausing a PIE session (with the Pause key) actually works when PIE is in a new editor window.

  • Fix stall during streaming in sublevels due to async loading being flushed by destroying a child actor component.

  • Fixed "BugItGo" console command to work in play-in-editor mode.

  • Fixed "Map Check" error messages that were added during loading a map not being shown

    • We don't perform a full map check on loading a map in the editor, but some objects perform self-checks on load and add them as map check errors

  • Fixed "select immediate children" in the world outliner selecting recursively

  • Fixed a bug that could cause Play-in-Editor client instances to load an incorrect map if the current map hadn't been saved yet.

  • Fixed a bug that could cause the line attractor to crash the engine if both start and end point were in the same location.

  • Fixed a bug that could crash the editor under OpenGL.

  • fixed a bug where automated tests could crash if the host platform was not defined

  • Fixed a bug where the "image" field on a Slate brush was not found when searching the details panel

  • Fixed a crash importing FBX files if analytics is disabled

  • Fixed a crash in GUID struct customization

  • Fixed a crash in the Property Editor when validating an external property while there are no instances

  • Fixed a crash in the Simplygon Mesh Proxy utility when one of the source meshes has no material assigned

  • Fixed a crash on exiting the game after package streaming failed.

  • Fixed a crash renaming a level which has not been saved yet

  • Fixed a crash setting a BSP box to tessellated.

  • Fixed a crash summoning the component visualizer context menu when a viewport was in immersive mode

  • Fixed a crash when a material is used in a loading screen before the engine is fully initialized

  • Fixed a crash when adding a text array to a user defined structure.

  • Fixed a crash when attempting to generate too large a font texture.

  • Fixed a crash when attempting to turn an edge in Geometry Mode whose associated polys are coincident.

  • Fixed a crash when Garbage Collector is triggered while streaming caused by Garbage Collector claiming objects referenced only by streaming code.

  • Fixed a crash when loading corrupted asset. This will now result in a warning instead.

  • Fixed a crash when mirroring a BSP brush

  • Fixed a crash when opening the Level Blueprint for the first time, if there is an Actor in the level with the same name as the level.

  • Fixed a crash when replacing an actor with a new actor twice in a row

  • Fixed a crash when stopping Play In Editor or Simulate. It happened when Play In Editor or Simulate was started using a keyboard shortcut while dragging an actor in the viewport.

    • If an actor is mid-drag in the viewport and Play In Editor or Simulate is started, the drag operation will be cancelled and undone before starting the game.

    • If any other edit is being made (any change that can be undone in the editor) when Play In Editor or Simulate is started, the start command will be ignored and a message will be displayed to explain why this happened.

  • Fixed a crash when texture painting in Paint Mode.

  • Fixed a crash which could occur when drag selecting actors in orthographic mode if there were already a large number selected.

  • Fixed a crash which occurred when opening a texture in the Texture Editor whose assigned LOD group had been deleted from BaseEngine.ini.

  • Fixed a few framerate spikes when streaming content caused by big seek times when loading bulk data

  • Fixed a problem that could cause a crash when trying to show collision in a cooked build.

  • Fixed a small issue where custom set LoD materials were lost after reimporting a mesh.

  • Fixed an editor crash when attempting to assign a maximum texture size to a non power-of-two sized texture.

  • Fixed an editor crash when renaming levels in the content browser which are referenced as streaming levels in the world.

  • Fixed an editor crash when using 'undo' and painted vertex colors.

  • Fixed an error being generated when creating a project if new project files could not be added to source control

  • Fixed an issue in the Class Viewer which was preventing the currently selected class from being dragged and dropped into the level.

  • Fixed an issue in which the root component of an actor would be lost after hot reload if its class had changed.

  • Fixed an issue where if a project or the engine was located in a directory which UE4 uses as a platform name, the entire project or engine would be excluded from the build/creation of a game.

  • Fixed an issue where project settings updated the default config files with two entries.

  • Fixed an issue where startup movies were not being rendered in the viewport.

  • Fixed an issue where the Data Table editor could stop working depending on its window layout

  • Fixed an issue where the orbit camera delayed hiding the mouse cursor until the following update.

  • Fixed an issue where the output log would sometimes not auto-scroll to the bottom during initialization.

  • Fixed an issue where world types might change when loading a world through a redirector when streaming levels in PIE

  • Fixed animation and UMG blueprints having the wrong corner text

  • Fixed browse button in the details panel not being usable on object properties when a value cannot be edited

  • Fixed brush transform settings not updating in real time when changed in the details panel

  • Fixed BSP mirror operation so that undo works correctly.

  • Fixed bug in Color Picker where original color wasn't correctly restored upon pressing Cancel.

  • Fixed bug when fading in sounds with a start time set

  • Fixed crash clicking on columns in the Visualize Texture window

  • Fixed crash during hot reload after removing code responsible for creating a default subobject without removing its property.

  • Fixed crash on opening SoundCue Editor

  • Fixed crash when clicking repeatedly on a sprite with multiple source regions.

  • Fixed crash when importing multiple assets at once with the same name.

  • Fixed crash when launching or Stopping PIE when Running 'Effects Cave' and 'Elemental' Demos.

  • Fixed crash when pressing shift while already in tile map painting mode.

  • Fixed details panel buttons not being clickable in object properties with very large names. Slightly reworked were the asset buttons are.

  • Fixed drag-dropping a child-attached actor in the scene outliner to the World giving a bogus error message and not allowing you to reparent it.

  • Fixed edit/extrude BSP operation with multiply selected brushes. Also fixed scale for the limited case that there is exactly one surface selected.

  • Fixed editor viewports drawing when their tab was not active or visible

  • Fixed empty categories appearing in the details panel of the UMG editor

  • Fixed FBX export not exporting vertex colors for static meshes

  • Fixed FBX import menu using incorrect details panel object

  • Fixed FBX import window sometimes getting locked into an inconsistent state when importing static meshes as skeletal meshes

  • Fixed foliage tutorial to line up with new setting and UI changes.

  • Fixed graphical corruption in the editor when on a breakpoint inside a UMG widget tick event

  • Fixed inability to use ctrl modified hotkeys when tile map editor was focused.

  • Fixed issue where "Assets could not be loaded" notification was misleadingly appearing when fixing up redirectors on a folder.

  • Fixed issue where Actor properties were not having their name fetched from the actor label if no PropertyEditor were specified.

  • Fixed issue where certain physics-simulated components would have incorrect transforms when running in standalone mode.

  • Fixed issue where Dialogue Waves play with incorrect Sound Class

  • Fixed issue where moving actors from one level into the currently selected level, when hidden, would result in the actor being mutated or deleted entirely.

  • Fixed issues when building filenames for maps in the top level folder of a new project.

  • Fixed issues with actors sometimes being deleted when moving them to a new level

  • Fixed issues with BSP surface texture transform when the parent brush is scaled or rotated.

  • Fixed issues with the Brush Clip tool which would prevent clipped brushes being copied/pasted.

  • Fixed local transform preservation option sometimes missing from FBX import UI

  • Fixed LOD settings for Billboard Component and Material Billboard Component being hidden.

  • Fixed lots of crashes/issues with reimporting mesh with LODs (many were material index related)

  • Fixed object scaling when the pivot has been moved from the actor origin.

  • Fixed orthographic viewport box selection for Brush Components, so they are no longer all selected when not passing over any edges or vertices.

  • Fixed performance spikes when opening package summary in cooked builds.

  • Fixed problem where a component couldn't be added to an empty actor with attached children.

  • Fixed progress window update issue during Building in editor.

  • Fixed scene capture actors updating with data from the wrong scene in a multi-scene environment. Scene capture actors are now only updated when the scene they are associated with is updated

  • Fixed scene capture components not updating correctly in the editor or when they are part of a blueprint

  • Fixed several build errors when utilizing standalone Unreal Frontend to build game projects.

  • Fixed several crashes when undoing operations on BSP brushes.

  • Fixed several race conditions which caused crashes in the loading screen movie player

  • Fixed 'show volumes' and 'show collision' console commands so that volumes and BSPs are correctly shown.

  • Fixed streaming code not handling package summary load failures properly resulting in infinite load times.

  • Fixed subobject instancing when creating new objects from a template other than Class Default Object.

  • Fixed text export of Model objects, so that Brush objects are forward declared before being defined. This was previously causing "Ambiguous search" messages clogging the output log.

  • Fixed the "Align Brush Vertices" operation on rotated or scaled brushes.

  • Fixed the curve editor so that the Alpha graph can be edited just like the other color channels.

  • Fixed the delta translate feature not being undoable

  • Fixed the display of the "referencing property" when saving a package with "graph linked to external private objects"

  • Fixed the editor sometimes hanging when a graphics tablet was connected

  • Fixed the GPU profiler window having several missing textures when it was opened in a standalone game

  • Fixed the level editor always becoming focused when ending PIE even when it was not the active tab

  • Fixed the measure tool in orthographic viewports not working when Matinee is open

  • Fixed unloaded Blueprint components sometimes having the wrong icon

  • Fixed UV coordinates on Material Billboard Component

    • Also allow material to be read and changed at runtime.

  • Fixed warning display when a stereo sound plays with spatialization activated

  • Fixing a bug in garbage collector where purging would not call destructors on objects residing in permanent objects pool while performing exit purge

  • Gated editor flight controls to only take effect while modifier keys (ctrl, alt, shift, cmd) are not held down, to allow things like [modifier]+PageUp can be bound to other actions

  • If a transform property is marked as "Use 3D Widget", the widget rotation is now correctly represented when in local space mode.

  • Improved the error message when adding a new class fails due to a compile error

    • The fact that the error message said "failed to add class" despite the class itself being added was causing confusion.

    • In the case where adding a new class fails to hot reload (probably due a compiler error) we now state that the class itself has been added, but that you'll need to recompile the module before it will appear in the editor, and offer an easy way to open the output log to see more detailed compiler output.

    • We also automatically close the class wizard so that you're not left looking at an error message saying that "the class name is already in use".

  • Instead of marking all objects created during initial load as root set, only loaded objects will be marked as such. This fixes some issues with loading and creating blueprints.

  • Made sure there's no outstanding streaming request when Play In Editor starts.

  • Map-travel failures in PIE will now simply shut down PIE rather than try to load the default map. Avoids potential fatal error if default map subsequently fails to load.

  • Material flattening should now produce better results on materials that are using scene properties

  • Materials for the high res screenshot functionality are now only loaded when in editor builds

  • Mouse cursor no longer pops back to start point when you finish painting in a TileMap.

  • Moved buffer visualization setup code around so it can uses showflags AFTER overrides have been applied, allowing them to work correctly in non-editor modes when debug view modes are allowed.

  • Prevent toolbox being summon with keyboard shortcut when the module is unavailable.

  • Project settings which require an editor restart will now provide a toast notification when changed, asking the user if they would like to restart.

  • Removed the invalid right-click context menu from the Reference Viewer when clicking on the background.

  • Reset to default on properties in the details panel now properly propagates changes to any child instances of a Blueprint

  • Some less common editor viewport settings have been moved to the advanced section of the editor settings

  • Some minor revisions to Game Menu Builder to make it a little more usable

  • Added functions to set Menu owner, Menu Style and various click delegates

  • Added a template function for adding a custom menu item

  • Sped up editor start time by avoiding re-parsing ini files multiple times.

  • Stopped group actor bounding brackets from being rendered on viewports which are in Game View.

  • The "Merge Actors" tool now correctly processes static meshes with disabled 'Recalcuate Normals' option

  • The "Merge Actors" tool now uses the source Actor name's for the merged mesh instead of source mesh asset's name

  • The class picker now opens faster

  • The connection error popup message in the Git source control plugin has been restored

  • The current feature level mode will now persist when creating new maps or loading existing ones

  • The Git source control plugin now searches more paths for the for the required Git executable

  • The Group Actor pivot location now correctly updates when adding or removing actors to/from the group.

  • The measuring tool in orthographic viewports now works correctly when Matinee is open

  • The post process settings on Camera actors and Post Process volumes have been cleaned up and now show their own categories inside the Post Process Settings field in the details panel.

  • The reference viewer no longer loads assets that you right click on to make navigation faster.

  • The Simplygon Mesh Proxy tool will no longer crash when one of the source meshes has an empty material.

  • The Simplygon Mesh Proxy tool will no longer try to merge meshes with non-opaque materials.

  • The UMG palette view now opens the common category by default

  • To avoid autosave popups that disrupt using the editor, autosave is now prevented for a small amount of time when there is any interaction in the editor.

  • Fixed another issue where only the device profiles for the running platform are loaded on game builds.

  • Using the "Create Camera Here" command now copies the FOV of the current camera as well as the location and orientation

  • VSync is no longer forced on in the editor even when the project's system settings enable it for non-editor runtime.

  • We now rerun construction scripts after changing properties/attachments on instanced components in the level editor, in case the Construction Script is dependent on those values.

  • When you changed name of row, and selected new row without hitting enter, name is changed on the newly selected row, instead of the old one, which works counter intuitive.

  • Widgets displayed for Make EditW idget transform properties now correctly rotate to match their orientation

  • Writing a default config file with no hierarchy no longer causes a crash.

Content Browser

  • New: Added a prototype configurable asset tag filter

    • You can configure the tag, value, and comparison operation in the context menu for the filter bar button

    • Note: Due to current assumptions about front-end filters, you can only have one tag filter active at a time

      image alt text

  • New: Added the ability to derive a Blueprint from a C++ class via the Content Browser

  • New: Created a new thumbnail renderer for Destructible Mesh assets so that they no longer use the Skeletal Mesh renderer. This was causing a lot of unneeded output log spam

  • New: Increased the time that the quick jump text in the Content Browser remains active before being reset.

  • New: Reinstated Resource Size tag so that it appears in the tooltips for assets in the Content Browser.

  • New: We now sync the Content Browser view after adding a new class, and also open the Blueprint editor when adding a new Blueprint class.

  • "Show Collections" in the Content Browser now remembers its state across editor sessions.

  • "Show in Folder" and "Show in Explorer" Content Browser context menu options have been moved out of a sub-menu because they are frequently used

  • Changed the texture thumbnail renderer to treat TEXTUREGROUP_Pixels2D like it does TEXTUREGROUP_UI, showing the texture as translucent

  • Fixed an issue with feature pack importing where corrupt data could crash or hang the editor.

  • Fixed a bug where the Content Browser could be left looking at Engine or Plugin classes after that view had been disabled via the view options.

  • Fixed a regression in which the Content Browser thumbnail icon didn't get cleared when all visualizable component nodes were deleted in the Blueprint editor.

  • Fixed an issue where renamed assets were incorrectly absent from the "In Use By Level" filter in the Content Browser until toggling the filter off and on again.

  • Fixed Checked Out filter in Content Browser.

  • Fixed crash when opening a Pak file with no files in it

  • Improved logic for creating unique asset names.

  • Reduced log spam when the path in the content browser changes

  • Renamed "Property Matrix..." to "Bulk Edit via Property Matrix..." to use a more familiar grounding term

  • Renaming an asset no longer disables the miscellaneous filters in the content browser.

  • Restored the ability to duplicate the current Level in the Content Browser.

  • When discovering assets, we are now prioritizing background search results in addition to background search files after selecting a path in an asset view.

Landscape

  • New: Landscape splines can now split their meshes between landscape streaming levels

  • New: Landscape spline segments and control points now have a new option, bPlaceSplineMeshesInStreamingLevels.

    • This option is enabled by default for new splines but is disabled for existing content in order to preserve existing behavior.

    • With this option enabled, a landscape spline that has with meshes will automatically place its mesh components into the streaming levels corresponding to the underlying landscape.

    • If a landscape the spline crosses is divided into two levels, the meshes will automatically be divided to match the landscape components' levels

  • New: Added ability to deform a landscape using a given spline from blueprint in the editor (blutility)

    • This allows for procedural landscape modification, but be warned: changes are permanent!

  • New: Added world-space settings to the Landscape "pattern" brush

  • New: Creating and specifying a "Landscape Hole Material" is no longer required!

    • To create a landscape material that can support holes on landscape, you now simply need to connect a "Landscape Visibility Mask" material node to the (greyed out) "Opacity Mask" material output of your main landscape material - no need to create a separate material or material instance!

    • If the material is set to opaque (the default and recommended) landscape components with holes will automatically change it to use the "Masked" blend mode and holes will "just work"

    • You can still specify a "Landscape Hole Material", which will be used instead. This is no longer necessary, and provided mainly to allow old projects to upgrade cleanly

  • New: Exposed "Translucency Sort Priority" for landscape spline meshes

  • New: Landscape Spline sprites are now hidden when not in landscape spline edit mode

  • Changes made to a Landscape actor's LOD settings are now propagated to sub-level landscape proxies when the sub-levels are loaded in the editor.

  • Changing the Texture Quality settings will no longer affect landscape geometry!

  • Fixed a bug where landscape collision stopped working for components that had been painted with the Retopogolize tool, after changing the Collision Mip Level property.

  • Fixed a bug where physical materials on landscape were incorrect after changing the Collision Mip Level property or running the "RecreateLandscapeCollision" console command.

  • Fixed a crash or incorrect landscape rendering when using the editor viewport's Landscape Override LOD menu item to select an LOD greater than the landscape's maximum LOD.

  • Fixed a crash when assigning a PN-tessellated material to a landscape and then performing an undo

  • Fixed a crash when starting Play in Editor when a sublevel that contains a landscape is loaded but currently hidden in the Levels window.

  • Fixed a landscape rendering crash when streaming textures for landscapes with a small component size, or with components with ForcedLOD or LODBias set.

  • Fixed a material compiler error that occurred if a Landscape Visibility Mask node was connected to anything other than the material's Opacity Mask output.

  • Fixed a memory leak with landscape editing

  • Fixed a potential crash in the landscape brush code reported by a user

  • Fixed an issue where landscape collision was absent after the use of the 'Retopologize' tool

  • Fixed an issue where the landscape Delete Component tool would fail to remove all attached foliage instances.

  • Fixed an issue where the landscape Move Component to Current Level tool would fail to move any attached foliage instances to the current level.

  • Fixed an issue where the New Landscape tool could crash when the user attempted to create a new layer

  • Fixed importing data to a single landscape layer averaging it with the existing data in other layers rather than overwriting it

  • Fixed landscape copy/paste gizmo moving and rescaling when trying to copy from one landscape to another

  • Fixed landscape geometry errors when texture pool is full

    • Streaming for Landscape heightmaps is now prioritized above other textures - they define the geometry of the landscape, so if they are unable to stream in the required mip, they can cause serious visual issues

  • Fixed landscape physical materials being incorrect after using the landscape copy/paste tool

  • Fixed landscape static lighting errors

    • Landscape holes were not letting light through

    • Landscape could reflect the wrong colour into the static lighting

  • Fixed null landscape layers not being deleted correctly. This was causing a crash later when trying to use the paint/visibility tools

  • Fixed rendering issues for landscapes with very large component sizes caused by a numeric overflow problem.

  • Fixed rendering issues on landscapes when deploying to Android, iOS, HTML5 or the Mobile Previewer in the editor. The problem was caused by the mobile rendering data overwriting PC data during cooking.

  • Fixed the strength of the landscape weightmap painting tools

  • Fixed visual cracks and seams between real landscape components and landscape proxy meshes when using whole sub-level LOD

  • Landscape sculpting and painting tools now work correctly on mirrored landscapes (ie landscapes with a negative scale on one axis)

  • Landscape should now correctly update the physics collision data when a layer's physical material is changed

  • Landscapes created in world composition mode no longer have their section coordinates adjusted by the tool.This was causing issues with landscape UV coordinates.

  • Stopped the flashing effect on the landscape editing brushes

  • The editor now requests landscape collision data from the Derived Data Cache asynchronously. This fixes hitches when streaming landscape levels in Play in Editor mode.

  • The landscape tools no longer crash when toggling a sublevel's visibility in the Levels window while Landscape mode is active

Material Editor

  • New: A new material function 'TransformToZVector' is useful for transforming vectors from worldspace into an a space defined by a Z vector. The X and Y basis vectors will be generated as orthogonal to the input Z vector.

  • New: Added a new material function called MatLayerBlend_BlendAngleCorrectedNormals that is useful for adding an additional normal map to a Material Layer using BlendAngleCorrectedNormals without having to break the "Material Attributes" apart. Also has a mask option.

  • New: Added three new material functions: MatLayerBlend_SeparateNormalandColorClamps: This is useful for blending two layers but clamping the alpha blend using different values for color maps and normals. MatLayerBlend_StandardWithDisplacement: This works just like _Standard but also blends the displacement layer. Very useful for landscape materials. MatLayerBlend_StandardWithMaskEdgeTint: This darkens the edge of the Top blended layer by a fraction.

  • New: Default parameter values on parameters defined inside material functions are now obtained correctly.

  • New: Fixed issue with menu listings for Material Expressions whose name doesn't begin with 'MaterialExpression'

  • New: Made certain material node properties multiline in the details panel, for clarity and readability.

  • New: New Material Function 'TransformNormals_Tangent_to_Vertex' for easily transforming normal maps for world aligned textures using the vertex normals while disregarding all tangent vectors.

  • New: New Material Function 'WorldPosition-XY' for quickly mapping XY coordinates. Useful for quick setup of landscape or ground materials.

  • New: New Material Layer Blend function called 'MatLayerBlend_MultiplyBaseColor' is useful for modulating the base color of a Material Layer. Has a V3 color input as well as a Scalar mask input.

  • New: Switched the material editor to use to use the standard in-viewport toolbar

  • Moved the 'preview shape' toolbar to the bottom right and removed 'real time' and 'show grid' options, which are now in the standard menu locations

  • Fixed an issue where a material asset thumbnail and the preview material in the Material Editor would get corrupted when reimporting a normal map texture used by that material.

  • Fixed crash that could occur when loading old Material Functions

  • Fixed issue with Material flattening that produced bad normal maps on some materials

  • Fixed parameter grouping for parameters defined in functions.

  • Improved SphereGradient-3D material function. It now uses real world depths when calculating for camera intersection which looks like convincing 3d fog.

  • Made the "Set Preview Mesh" in the Material Editor Viewport highlight when selected.

  • Moved parameters to the top of the material instance editor.

  • When compiling materials, the engine now no longer completely re-registers any components using the material, and instead just recreates the components' render state. This reduces the time taken when pressing the Apply button in the material editor.

Matinee

  • New: Added ability to use a custom Anim Blueprint for Skeletal Meshes driven by Matinee

    • This doesn't support blending yet, but you can use 'Look At' or other procedural bone controllers with Matinee animated meshes.

  • New: Added Fade Color and Fade Audio options to Matinee camera fade tracks.

  • New: Added 'Keep Hierarchy' option when exporting a matinee

  • New: Matinee Export has an option to export with attachment hierarchy.

    • The option is Keep Hierarchy you can find in Matinee. It only exports enabled tracks. Includes Anim Tracks.

  • New: When editing a Camera Anim, we now display the Camera Anim object's properties in the details panel by default.

  • Fixed bug where quick glimpse of station occurred before start of Matinee Fight Scene.

  • Fixed existing duplicate matinee groups not being overridden when importing new tracks over the top

  • Fixed matinee color fade

  • Fixed Matinee toggle tracks not working if bActivateSystemEachUpdate was enabled (legacy feature)

  • Fixed PNG frame export from Matinee writing out bogus alpha values

  • Fixed potential crash while scrubbing in Matinee with a sound key that has no sound assigned.

  • Fixed preview of material parameter changes driven by curves of the animation that is played while scrubbing.

  • Matinee movie recording now captures UMG/Slate huds of Hide HUD is disabled in the Matinee recording window

  • Undoing a rename of a camera group now correctly undoes the same name shown in the director group

Cascade

  • Emitters with disabled LODs to remain alive so that when re-entering LOD range, the effect became visible again.

    • This caused issues with various other effects and so has been moved behind a bool in the Emitter properties called Disabled LODs Keep Emitter Alive. This is false by default.

  • Fixed a bug in which collision channel settings were not being used properly after reloading a particle system. This caused all collisions to revert back to WorldStatic.

  • Fixed a bug in which Skel/Vert/Surf module particles would spawn at the emitter origin

  • Fixed a problem that could cause severe editor performance problems with many Cascade tabs open at a time.

  • Fixed the Spawn Using Surface Normal feature in the Skel/Vert/Surf module.

Persona

  • New: Added a scroll bar to the notify panel to scroll through the track when zoomed

  • New: Added context menu options to directly set trigger frame or trigger time for anim notifies

  • New: Added option to the animation viewport to disable visualization of morph targets.

  • New: Added resize cursor to resize handles for anim notify states

  • New: Added search field in the Animation Detail tab

  • New: Added support for Montage to Montage synchronization.

  • New: Turn Table feature for Persona's Viewport.

  • Disabled creating animation BP in Persona until we support multi asset opening.

  • Fixed anim notify name generation not updating on property change

  • Fixed APEX clothing asset files with non-ANSI filenames failing to import when selected in Persona

  • Fixed crash in customization for rig asset when opening bone lists

  • Fixed delete operation for anim notifies deleting the first notify with a matching name.

  • Fixed delete option in animation notify context menu not working correctly on some platforms

  • Fixed flickering light in Persona when used with shadow casting materials due to light movability

  • Fixed incorrect notify list parsing on Mac

  • Fixed morph targets not displaying in Persona after component re-registration

  • Fixed preserve settings flag when reimporting clothing APB files in Persona not allowing settings to be overwritten

  • Fixed private properties being shown in the details panel for anim notifies

  • Fixed step forwards and backwards on Persona scrub panel snapping to frames

  • Fixed the add notify menu not traversing long inheritance chains to find valid classes

  • Fixed undo for changes in anim notify state duration not undoing the change

PhAT

  • New: Added PhAT support for scaled bones.

  • Fixed orientation motor not working correctly in Phat

  • When building collision for a bone, correctly apply component space matrix to propagate scale.

Project Browser

  • New: Made the Project Browser window a little taller so that it's clear that there's description text below the template image.

  • New projects now have a random project ID set by default.

World Outliner

  • Deleting folders in the World Outliner now promotes all children to the level above instead of directly to the root.

  • Prevented AI controllers (and other transient actors) from being hidden in PIE Scene Outliner

  • Removed the Level Blueprint from the World Outliner view.

    • This was just an alternate route to opening the Level Blueprint, but since we can't display details for this item, we decided that it doesn't really belong in the Outliner view.

    • As before, the Level Blueprint can still be opened from the Blueprints drop-down in the toolbar.

Static Mesh Editor

  • New: Added socket snap-to-vertex, and socket metadata.

  • New: Improving the Socket Manager's look and feel and enabling it by default.

  • New: Switched the static mesh editor to use to use the full standard in-viewport toolbar

  • The Transform toolbar is now only shown when something is selected that can be modified via the gizmo (collision, socket, etc...)

  • Fixed issue where LODs were deleted when changing the LOD group in the static mesh editor, and LODs no longer lose custom set materials / metadata when reimported.

  • Fixed socket preview mesh in the Static Mesh Editor so that it transforms as its parent socket is transformed.

  • Improved the performance of scaling collision volumes in the static mesh editor.

Source Control

  • New: Added the ability to commit file deletions from the editor.

  • New: Asset list now updates in "Check Out Assets" dialog when "Connect to Source Control" is pressed.

  • Added implementation of Annotate File that takes a changelist

  • Checking for assets to check in is now faster with SVN

  • Fixed errors communicating an SVN servers when usernames or passwords contain spaces

  • Fixed issue where cancelling from the "Check Out" dialog during saving assets would not cancel the whole operation.

  • Fixed SVN status updates taking a long time

  • Fixed URL properties in config files being truncated

  • Renaming an asset with no source control now prompts the user to connect to source control or make the file writable before performing the operation.

  • Source Control dialogs are no longer popped up once a file which cannot be checked out is made writable.

  • Updated revision display to display strings rather than revision indices

  • Allows Git provider to display revisions as hashes.

World Browser

  • New: Sub-levels now have a property to hide them from world composition tile view. "Hide in Tile View" in sub-level details panel.

  • New: The Streaming Preview in world composition view now highlights LOD sub-levels in a different color to distinguish them from regular levels

  • New: The whole sub-level LOD generation tool is now always accessible when the sub-level has a landscape actor, as generation of whole sub-level LODs for landscape does not require Simplygon.

  • New: 'Tiled Landscape Import' now creates an empty Landscape actor in the persistent level and a Landscape Proxy actor in this sublevel for each imported tile. This allows editing common landscape properties without loading landscape tiles.

  • New: World Composition has a new option to stream all distance dependent sub-levels needed by Matinee cinematic before starting it. It can be enabled in the project config file: [/Script/Engine.WorldComposition] bLoadAllTilesDuringCinematic=True

  • New: World Composition maps now work with the 'Enable Automatic Level Streaming' option (can be enabled in Settings->Previewing). Note: it only simulates visibility of the sub-levels without loading/unloading them.

  • Level Bounds actor used for sub-level bounding box calculations now ignores foliage actors

  • It is now possible to enable "World Composition" option even when the "Levels" window is closed.

  • Layer buttons in world composition now have tooltips

  • LevelBounds actor should now correctly recalculate sub-level bounding box when "Realtime Viewports" option is off

  • Play in Editor (PIE) session will no longer crash when the player initiates travel from a single map to a world composition map.

Foliage

  • New: Added right-click menu items to the Foliage Type list allowing you to Select or Deselect all foliage instances of the foliage type

  • New: Foliage 'Select' tool now has a command to find and select all invalid instances. Instances are considered invalid when they're not attached to any base object, or the distance to their base is further than expected.

  • New: Foliage supports now cross-level references to their base components, so foliage can be in a different streaming level than the object it's painted on.

    • There is a new command in Levels browser that allows you to move selected foliage instances to another level. Foliage will continue to maintain a link to the object it was painted on.

  • New: The "Foliage Settings" asset has changed its name to "Foliage Type"

    • You can now create Foliage Type assets directly in the content browser (under Miscellaneous) and filter them as well

  • New: The foliage tool now supports seamless foliage painting across multiple levels.

    • You need to be using shared Foliage Type assets for this to work.

    • You can right-click an existing item in the foliage tool and save it as a shared Foliage Type asset, or drag a Foliage Type asset from the content browser.

  • New: The Levels window now has a command to move selected foliage instances to another sub-level.

  • New: The size of the brush in Foliage mode can now be adjusted in the following ways:

    • Ctrl+Scroll Mouse Wheel

    • Ctrl + Middle Mouse Button + Drag

    • Left bracket ([) to shrink and right bracket (]) to grow

  • Changing foliage settings such as collision or lighting is much faster as the changes are now applied directly to the existing components instead of re-generating them. Static lighting is now only invalidated when a lighting property changes.

  • Copy/pasting or duplicating actors should now correctly duplicate all attached foliage instances

  • Entering foliage mode now correctly notifies other parts of the editor before clearing any actor selection

  • Fixed a crash caused by foliage instances with an invalid component, seen when resizing a landscape

  • Fixed a crash when opening a level that contained instanced foliage with built static lighting

  • Fixed a crash when using the foliage mode Reapply tool to adjust both the density and another property simultaneously.

  • Fixed a problem where undoing the deletion of the Instanced Foliage Actor didn't correctly restore foliage components.

  • Fixed an issue where landscape sculpting with foliage attached left the foliage floating in mid air after an undo operation

  • In the editor you may notice that maps with large amounts of foliage load faster

  • It is longer possible to copy/paste or duplicate the Instanced Foliage Actor in the editor, which resulted in undefined behavior.

  • Modifying shared foliage types while editing a level no longer causes foliage rendering components for other levels using the same shared foliage type to be regenerated

  • Properties on non-asset Foliage Types in the foliage palette (created by drag-dropping static meshes into the palette) work with undo/redo

  • After undo/redo, selection in the foliage palette is retained

  • The foliage tool now detects if a shared Foliage Type's properties (eg collision or lighting) were changed while a level using the shared foliage type was not loaded. Any changes are now propagated when the level is next loaded in the editor.

Cooker

  • New: Added ability to specify a subset of maps to cook when packaging. This is used to make File/Package not cook your entire content. See Packaging section of Project Settings.

  • New: Added error for when engine content is accessed while cooking Downloadable Content.

  • New: Cook on the fly now supports multiple client connections at the same time, from different platforms.

  • New: Cooker startup time and caching in cook in editor is now faster.

  • Improved caching routine for cook in editor modes

  • Improves startup performance for cooker

  • Improved performance for generating dependencies

  • New: Exposed compression settings in the packaging settings in the editor

  • New: Exposed unversioned cooking variable so you can select when you want to run with unversioned cooked content.

  • New: Improved cook determinism.

  • New: Iterative cooking clears out cooked content when custom versions are upgraded or when UE4 version / licensee is incrimented

  • New: Unreal frontend now has support for creating release versions of content, creating patches, and dlc

  • Cook in editor now detects important cvar changes when using iterative cooking.

  • Fixed a bug where cooking would sometimes write out shaders improperly. This would result in the game showing the Default Material.

  • Fixed cooked projects showing default materials when shaders have compile correctly.

  • Fixed issue where cook on the side could take longer then expected to cook packages (only affects in editor cooking).

  • Fixed iterative cooking asset registry getting out of date.

  • Fixed iterative cooking not finding packages from previous cook.

  • Fixed sorting issue when saving shader types which resulted in some shaders being recompiled unnecessarily

  • also the cooked order may have been semi random resulting in different cooked content from same source content, this fixed that issue.

  • Improved detection of previous cooked files when using iterative cooking.

  • Made some adjustments to make cooking faster for projects with a high object count.

Gameplay Framework

  • New: Game Mode Customization in Blueprints

    • You can now do all sorts of things with Game Modes right in Blueprints, and various APIs in C++ have been cleaned up

    • Please reference preview engine features writeup already done here: Engine Feature Preview

  • New: Added a Blueprint API for Camera Shakes. Refactored Camera Shake code for extensibility, clarity, simplicity. Shake instance struct was removed, and instance data is now part of the Camera Shake object.

  • New: Added Blueprint API for Camera Modifiers. Refactored Camera Modifiers for extensibility, clarity, and simplicity.

  • New: Added Relative To Initial Transform option to Camera Anims. This provides the option to author camera animations with an initial offset, if desired (e.g. for the looping portion of a Begin->Loop->End setup).

  • New: Added 'Character' stats category for seeing detailed stats related to Character movement code

  • New: Exposed near and far clip plane controls for orthographic cameras

  • New: Improved support for camera fades. Improved C++ API, added Blueprint API.

  • Added support for visualizing the frustum of an orthographic camera

  • Camera shakes now ignore calls to Play Camera Shake with zero or negative scales, and will allow shakes that reach zero scale to still update their oscillator so they will eventually be removed

  • Fix crash opening console after removing all players from the game.

  • Fixed a bug that caused some blueprints to be improperly filtered out of object libraries

  • Fixed a crash in streaming pause rendering when loading streaming levels.

  • Fixed an issue where the view location was incorrectly affecting the calculated projection matrix for orthographic cameras

  • Fixed arrow component on Note actor

  • Fixed editor crash when Set Game Paused function was called by Event Destroyed

  • Fixed issue removing an active gameplay effect inside of a gameplay tag event delegate.

  • Fixed issue where camera PostProcess settings could persist beyond their intended lifetime. CameraCache was only being partially cleared each frame, so old PP settings could hang around in some cases.

  • Fixed potential timer leak in TimerManager when using looping timers, which could cause performance degradation over time.

  • Game User Settings are now saved correctly

  • Gameplay Tag custom details panel works in User Defined Structure editor.

  • Scaling an actor with ChildActorComponents will now scale the child actors as well.

  • Sub-levels marked as "AlwaysLoaded" will now be fully loaded before gameplay code attempts to find spawn point for players.

Learning Resources

  • New: Added a brief tutorial on using feature packs

  • New: Added provision to provide a sort key to a feature pack manifest to allow finer control of ordering in menu

  • Removed some unneeded entries in the DefaultEngine.ini for FirstPerson blueprint template

  • Templates: Fixed an issue with animation state in the first person BP template

In-Editor Help

  • Fixed docked tutorial browser never showing tutorials

  • Fixed stalls in tutorials

Content Examples

  • Added missing space in text at section Audio 1.8 of Content Examples

  • Fixed a texture issue in Content Examples where adjusted normals created an undesired flickering effect

  • Fixed an LOD bias issue causing performance issues with First person template.

  • Fixed an overlap that was causing z-fighting in Advanced Vehicle template.

  • Fixed an resolution issue causing performance issues with Sun Temple

  • Fixed shadows in player blueprint.

  • Fixed visual gaps in walls when viewed at a distance on SunTemple.

  • Repaired visible gaps at ground asset bounds of Effects Cave.

  • Updated and repaired normals on CobbleStone material in StarterContent.

Sample Content

  • New: 2D and 3D side scroller templates now enable snapping layers by default, with three pre-defined layers at the correct depth for the sample content

  • Repaired z-fighting occurring on directional arrows in StrategyGame.

Localization

  • New: All localization configuration scripts now treat path settings consistently as being relative to the root directory of the project.

  • New: Commandlets for generating localization manifests and archives now have improved logging output useful in diagnosing failures to write to files.

  • New: For Japanese keyboards on Windows platforms, use @ key as the default in-game console key when Windows input language is set to Japanese on editor start-up.

  • New: Improved initialization of internationalization resources to minimize unnecessary initialization overhead.

  • New: Localizable text gathered from metadata values using the "{FieldPath}" value to generate a localization key now produce a simpler, less verbose localization key.

  • New: Localization configuration script settings have been renamed to be more intuitive and now offer superior control over what is processed for gathering localizable text.

  • New: Localization conflict reports and word counts now report a warning rather than a fatal error when the destination file(s) can not be checked out by source control.

  • New: The commandlet for generating word count and conflict reports for localization data now attempts to use the source control/versioning system if it is configured.

  • New: The GatherTextFromSource commandlet now uses the same setting for excluding paths from being searched as other commandlets: ExcludePathFilters.

  • New: The PO files generated by exporting from localization manifests and archives now include the keys for each text as a reference-comment for the PO message. This should provide more context for localization teams to use when localizing text.

  • Corrected some unusual date & time text formatting behavior by using a more appropriate default time zone.

  • Corrected text automation tests that falsely reported errors in date time formatting as text.

  • Disabled the automatic revert of added/checked out files when exiting localization commandlets, allowing the user to manually submit the changes to source control.

  • Fix for issue where the requested culture was being compared against the prioritized parent cultures of the current culture, instead of the requested culture, which hadn't yet become the current culture.

  • Fixed some Sequencer code so that UMG animations don't have their names/bindings gathered as localizable text.

  • Generating word count and localization conflict reports no longer fails if the only culture specified is the native culture.

  • Localization commandlets now properly handle source control operations on files when conditions do not allowed them to be marked for adding.

  • Localized text properties now preserve their key & namespace when edited

  • Packages loaded as a consequence of loading an other package during a gather of localizable text can now also be properly processed for gathering of localizable text.

  • Removed redundant operations in gathering localizable text from assets that were causing lengthier processing times.

  • Removing Window Menu level menu for Translation Editor.

  • Resolved an issue where missing keys and conflicting identities in text within assets were resolved but not gathered properly after resolution

  • The commandlet for parsing text files for localizable text now properly handles newlines in text files regardless of the platform the commandlet is running on.

  • The localization importing/exporting commandlet now executes importing before exporting if both are specified. The data to be imported is no longer clobbered by the export before the data can be imported.

  • Translation Editor: When saving, if source control is disabled, try write the file anyway.

Networking

  • New: Ability to disable replays on command line. Use -noreplays.

  • New: Added an internal network protocol version number to the default check which determines if a client and server are compatible.

  • New: Added checkpoints to replays to speed up scrubbing

  • New: GameMode can now auto start/stop replay recording for dedicated servers. Set Handle Dedicated Server Replays in the ini to use this feature.

  • New: Multicast Remote Procedure Calls (RPCs) will now be played back in network replays correctly.

  • New: Reduced the bandwidth usage of replication by packing network IDs into fewer bytes when possible.

  • New: The "DemoRec" console command can now be invoked without a parameter. If it is, the name of the current map will be used as the name of the replay.

  • New: The network profiler tool now tracks more accurate and detailed bandwidth information, and there is new chart view mode.

    • Bandwidth used for remote procedure calls and actor properties is now broken down by header, payload, and footer. Bandwidth used internally by the engine protocol is also broken down in more detail.

    • Acknowledgements ("acks") are now reported individually.

    • Bandwidth from arrays that use Fast Array Serializer is now reported.

    • The chart has a new "stacked bunch size" view. Clicking on this radio button will show a stacked area graph, so that it's easier to see where bandwidth usage is coming from each frame.

      image alt text

  • Added tracking of unreliable, multicast Remote Procedure Calls (RPCs) in the Network Profiler tool. New network profiles taken will now track this information.

  • Don't send netspeed until after we're fully connected. This fixes spam when our connection attempt gets rejected

  • Fixed a bug that could cause actor components to replicate to clients incorrectly during Play-in-Editor sessions.

  • Fixed an issue that could cause some clients to receive incorrect parameter values when a multicast function that was implemented in C++ was called from Blueprints.

  • Fixed an issue where clients would get stuck sometimes when receiving a disconnection event while joining a server. Clients will now go back to the default world in this case.

  • Fixed an issue with partial packet sequences, and the possibility of them rolling over incorrectly

  • Fixed an issue with the last packet not being read sometimes when playing back a network replay.

  • Fixed capturing network profiles in the editor. These files will now display the chart correctly in the Network Profiler tool.

  • Fixed rare cases where the game would stop rendering during network transition due to a host disconnect while the local player had a PlayerController with no Player object attached.

  • Fixed recording of network profiles during replay recording, the captured profile will now display more accurate information in the Network Profiler tool.

  • Lots of actor channel/closing sanity checking to try and improve stability

  • Make sure that voice chat audio is marked as non-spatialized so it remains audible as long as a player is talking, assuming they aren't muted.

  • PIE net connection timeout is now properly disabled even in the first few ticks of the connection. This prevents long load times from causing a timeout before the net connection has been given a world.

  • Prevent possible crash during server travel related to beacons who have a timer enabled and try to disable it through a nonexistent world.

  • When shutting down actor channels, all registered sub-objects will now get destroyed as well.

Online

  • New: Added a "Relevant For Network Replays" property on Actor which, if set to false, will prevent the actor from saving out to the network replay.

  • New: BuildPatchServices now supports a stage only installation. This allows for your own handling of placing new install files into an installation.

  • New: BuildPatchTool now supports a file attributes meta date list which are stored in the manifest output. These attributes will be applied by the installer. Still early development.

  • New: Steamworks has been upgraded to version 1.32.

  • BuildPatchTool is decommissioning UObject based manifest files. They are still usable, but cannot be future proof.

  • Network replays now only load streaming levels with the "Should Be Loaded" option selected.

Other

  • New: Added a Flurry analytics plugin for IOS

  • New: Added an editor setting to allow HMD control of view rotation in editor viewports

  • New: Added colors to log items in Visual Logger, to show errors in red and warnings in yellow. It's easier no notice log entry with possible important information\ that way.

  • New: Added debug camera to Gameplay Debugger, to have a way to fly around (Tab key switch between cameras by default).

  • New: Added feature to highlight filters/categories from selected item to Visual Logger tool - minor bu useful feature in everyday use.

  • New: Added option to filter logs by class to Visual Logger tool and to keep filters persistent between editor sessions.

  • New: Added option to reset and remove all old data from Visual Logger tool for each new PIE/SIE session (or for each new data loaded from file).

  • New: Added option to stay always with cursor on the last frame in Visualizer Logger tool.

  • New: Added option to Visual Logger tool, to select between regular pause or PlayersOnly pause - to pause gameplay on level if needed.

  • New: Added oriented box shape to Visual Logger, to log more accurate shapes.

  • New: Added support for both sitting and standing modes for SteamVR

  • New: Added support for extension-less streaming media URI schemes

  • New: Added support for lambdas and function objects in message endpoint handlers

  • New: Added support for re-triggering instanced abilities.

  • New: Allowing message handlers to decide for themselves whether they want to handle a message; documentation updates.

  • New: Correcting wrong spelling of community developer's name.

  • New: Downloaded binary dependencies for GitHub are now cached in the .git/ue4-gitdeps folder, so switching branches or cleaning the repository will no longer cause dependencies to be redownloaded.

  • New: Exposed Notify Apex to blueprints, can also bind custom events to that notification.

  • New: Extended status information in Visual Logger so it's possible to log multiple levels of collapsible status information.

  • New: Functional Testing framework minor improvements

    • A test can now point to relevant actors placed on the level and debug drawing will draw an arrow pointing at it so that user can see which actors on the map are relevant to given test. Some tests automatically add some actors to that list, like debug camera or AI spawn points.

  • New: GitHub dependencies download tool detects proxy server settings in the http_proxy environment variable.

  • New: Improved path corridor drawing in Gameplay Debugger, to render nav areas with colors.

  • New: Integrated updated documentation and code comments for Leap Motion plugin

  • New: Linux files are no longer downloaded for Git on Windows unless the LINUX_ROOT environment variable is set.

  • New: Messaging: Recipient threads are now traced

  • New: Oculus SDK Updated to 0.6

  • New: Support for Oculus Audio SDK for 3D Headphone Spatialization on the PC platform.

  • Added support for the new "compositor" system

    • Users should see significantly better GPU utilization in their scenes

  • New: Proxy server settings for downloading Git dependencies can now be specified with a single --proxy=http://:@ argument.

  • New: Refactored IMessageHandler.h so that it doesn't have header dependencies

  • New: Refactored message tracer to use lambdas instead of delegates

  • New: Removed AutoPlay feature in MediaPlayer assets.

  • New: Rendering ClearColor while media is not playing/not paused

  • New: Updating Community Developer credits.

  • All chat timestamps now use local machine time for consistency.

  • Changed target selection for Gameplay Debugger tool. Target is selected on clients in client-server environment now.

  • Eliminated the fatal "No Oculus detected" warning when the Oculus runtimes were installed, but no HMD was attached

  • Fix for crash on start up when the Oculus Rift headset is plugged in, but not turned on

  • Fix issues with propagating property changes from CDO to instances.

  • Fixed a bug in HMD function library where Set Base Position and Offset would fail check incorrectly

  • Fixed a bug where the resolution drop down wouldn't show up in the tutorial.

  • Fixed a forced disconnect in rare cases when you were previously disconnected and rejoined the previous session fast enough to catch your old login information

  • Fixed an issue where a black screen was presented to the player with no indications in rare circumstances where a connection to the host was lost and the game was loading back to the main menu

  • Fixed an issue where characters appeared blurry when using certain video settings.

  • Fixed BasedMovement potentially out of sync after leaving root motion. (SimulatedProxy)

  • Fixed being able to take screenshots in VR

  • Fixed crash related to running PIE session without any viewport in editor.

  • Fixed debug camera ('ToggleDebugCamera' cheat) in StrategyGame project. Debug camera should work in any situation now, even during Matinee.

  • Fixed EQS rendering in Visual Logger tool, in editor.

  • Fixed incorrect name area flag usage in FBX import menu

  • Fixed issue which could give us inaccessible vlogs in Visual Logger tool with persistent filters.

  • Fixed issue with timeline's cursor outside time range in Visual Logger tool.

  • Fixed logging with Visual Logger on dedicated servers using EnableAILogging commandline argument.

  • Fixed media reloading when changing a MediaPlayer property in the Editor

  • Fixed message tracer not processing traces unless MessagingDebugger is open

  • Fixed NavMesh rendering in Gameplay Debugger tool, for standalone and client-server games.

  • Fixed non-file based URLs (http://, rtsp:// etc.) getting mangled in MediaPlayer editor

  • Fixed object naming in SimpleConstructionScript

  • Fixed play button unavailable after non-looped movie finishes

  • Fixed play button unavailable after non-looped movie finishes

  • Fixed playback rate label in MediaPlayerEditor

  • Fixed SlotNode being registered multiple times when inside of a State. (Triggered by ?FAnimNode_StateMachine::SetState)

  • Fixed some cases where friend presence information was wrong, leading to the appearance/disappearance of the "join game" button at inappropriate times.

  • Fixed the log message when an application fails to connect to a file server to correctly state that it will retry.

  • Fixed the way PawnAction aborting is handles - now it's treated just like any other pawn action event

  • Fixed video playback choppy due to new Slate sleep mechanism

  • Fixed Visual Logger's toolbar for small icons editor setting.

  • Fixed WmfMedia drawing ClearColor in between looped video playback

  • Gameplay Debugger should be able to use from all connected clients.

  • Git dependencies tool now works correctly for non-HFS drives on Mac.

  • HMDs are now prevented from trying to initialize when running commandlets

  • In general debug camera is fixed and should work correctly even with matinee or in homebase, during any map with spectator.

  • Media: Fixed MediaPlayer not handling web URLs and non-relative paths properly

  • Media: Properly handling empty URLs

  • Tweaked layout of a few commonly-used data structures to reduce memory footprint and increase efficiency.

Paper2D

  • New: Sprite Editor: Added a corner text display to the viewport indicating the current mode when not in View mode

  • New: Added a combined 2D Rotation / Translation widget to the level editor, which can be enabled in Project Settings .. 2D

  • New: Added a context menu option to create a tile map from a tile set asset

  • New: Added a detail customization for sprite and flipbook components to push the sprite category above the material category, matching their relative importance

  • New: Added a minor optimization to socket searching to prevent an unnecessary search when another component is attached but not to a socket

  • New: Optimized steady-state rendering of large tile maps, they are now baked into a per-instance vertex buffer

  • New: Added a named normal map slot to the default lit sprite materials in the Paper2D plugin content directory

  • New: Added a Paper2D category to the asset filter list in the content browser

    image alt text

  • New: Added an extension point to make it easy to define new front-end filters and have them available in the Content Browser

    • Create a subclass of UContentBrowserFrontEndFilterExtension and override AddFrontEndFilterExtensions

  • New: Added editor settings (in Editor Preferences..Content Editors) for the sprite, flipbook, tile map, and tile set editors

  • New: Added stats to the Paper2D render scene proxies

  • New: Added summaries to the headers of the Rendering and Collision categories in the Sprite Editor details panel

    • Rendering shows what kind of material is being used (Masked/Opaque/Translucent)

    • Collision shows the collision domain (None, 2d, 3d)

  • New: Added support for specifying a scaling factor between pixels and unreal units (PixelsPerUnrealUnit) to UPaperTileMap

  • New: Flipbook Editor usability improvements

    • Added the standard in-viewport transform toolbar to the Flipbook Editor

    • Added display of the sprite name in keyframe strips and when drag-dropping a key frame

    • Improved the styling and behavior of the flipbook editor timeline

    • Added a scroll bar so timelines longer than the width of the window can still be edited

    • Added a shortcut to to change the time scale when over the timeline (Ctrl+MouseWheel)

    • Added an alternating background per-frame

    • Changed style of keyframe strips so that they stretch across the full duration of frames, with the grab-handle overlaid on top

    • Added key frame menu options to act on the associated sprite (Find in Content Browser, Edit Sprite, Replace with another)

  • New: Improved socket editing

    • Added a selection highlight to sockets

    • Added a drop shadow to socket names

    • Allowed deletion of selected sockets

    • Sockets from key frames can now be viewed (but not edited) in the Flipbook Editor

    • Allow deselecting sprite sockets in 'View mode'

    • Prevent showing sprite sockets in 'Source Region Edit Mode' (they were not useful there and were being shown in the wrong coordinate space)

  • New: Improved source region edit mode

    • The name of each sprite is displayed in the center of the source region (can be toggled off and on via the tool bar)

    • The display of other sprites sharing the same texture can be toggled off and on via the tool bar

    • Added an "Extract Sprites" button to the toolbar

    • Source region edits are limited to the left mouse button now, so right-click-drag to pan always works as expected

  • New: Improved zooming in the tile selector panel

    • Press F to zoom to fit

    • Maximum/minimum zoom range has been increased (adding 16x, 32x, 1:16, and 1:32)

  • New: Improvements to 2D terrain splines

    • Improved terrain spline collision generation

    • Added support for overlapping terrain sections and material draw order

    • Filled versus closed can now be controlled independently, allowing creation of a ring with no inner region

    • Reduced overlap artifacts in tight corners by unwrapping sprites that would have been twisted (> 90 degrees)

    • Terrain spline points are now constrained to the XZ plane

    • Note: Terrain splines are still considered Experimental

  • New: Paper2D asset import and conditioning settings

    • The default scale factor between pixels and unreal units is now 1.0 (1 pixel/cm)

    • Both lit and unlit default materials can now be defined in Project Settings - Paper2D Import

    • Texture group and compression settings that are applied to imported sprite sheets can now be configured

      • The defaults remain the same as before (uncompressed, nearest filtering) but can be changed to match the style of the game

      • These settings can also applied to textures by using the "Apply Paper2D Texture Settings" context menu option in the Content Browser

    • Exposed an option for the automatic resizing that occurs if the source texture changes size (Resize Sprite Data To Match Textures in Paper Runtime Settings)

      image alt text

    • Creating a new tile map from a tile set now analyzes the texture to pick the best material

  • New: Promoted Paper Flipbook Component from Early Access Preview to fully supported

  • New: Significantly improved the compatibility of the JSON importer exported from Tiled

    • It now parses all defined data as of Tiled 0.11.0, although many aspects are still lost during conversion to internal types (most notably image and object layers)

  • New: Sprite and tile collision geometry can now contain circle/sphere shapes

    image alt text

  • New: Sprite assets can now be used as the preview 'mesh' in the Material Editor (along with any other kind of asset with an associated Mesh Component subclass)

  • New: Sprite atlasing improvements

    • Exposed atlas texture options (texture compression, mip count, filtering, etc...)

    • Affected atlases are automatically rebuilt when the AtlasGroup is changed on a sprite asset

    • Mipmap generation now uses a Basic constrained rect approach to reduce bleeding between sprites

    • Atlas rebuilds are incremental updates where possible, preserving sprite positions until wastage is significant

    • Atlas texture reuse to avoid sprite updates where it can be helped

    • Note: Sprite atlas groups are still considered Experimental

  • New: Sprite creation and sprite sheet importing automatically look for an associated normal map

    • Either action will look for an adjacent texture/atlas named N or Normal (configurable in the settings)

    • When a normal map is detected, it automatically uses one of the default lit materials instead of the default unlit materials. Both are defined in the 'Paper2D - Import' settings page.

    • When exporting from Texture Packer, use the "Pack with same layout" option, as each additional texture must contain the sprite in the same region of the image

  • New: Sprite Editor: Added a notification message when switching which sprite is being edited in Source Region edit mode

  • New: Sprite Editor: Added display of 'lit/unlit' to the rendering section header of the sprite details customization

  • New: Tile Map Editor: Add a warning prompt visible when no tile set is selected; clicking on it opens the tile set picker

  • New: Tile Maps: Added the ability to drag-drop tile set assets onto the tile selector panel of a tile map editor

  • New: Tile Maps: Changed tile maps to always display the wireframe bounds of layer 0 when unselected in the editor, to help show where an empty tile map is

  • New: Tile Sets can now be 'conditioned' to prepare the tile sheet texture for use when the tile set is zoomed in or out

    • This prevents artifacts where pixels in neighboring tiles would bleed into the rendering of the tile map

    • The option can be invoked on a tile set asset using the "Condition Tile Sheet Texture" in the Content Browser right-click context menu, which will create a copy of the tile sheet texture with dialated borders around each tile and update the tile set per-tile spacing and margin accordingly

    • Settings for this option can be found in Editor Preferences .. Tile Map Editor

  • New: Workflow and usability improvements for sprite and tile geometry editing

    • Added support for rotating the collision/rendering shapes

    • Added more specific statistics about baked collision geometry (splitting it out by primitive type, etc...)

    • Added automatic identification of custom geometry that forms a rectangle, generating more efficient collision shapes than treating them as convex would

    • Changed collision rendering color to be blue instead of yellow to avoid confusion with the selection color

    • Shapes now have a filled background which can be clicked on to select the entire shape

    • Prevented hit testing on the pivot display widget, avoiding a 'missed click' feeling if you tried to select a shape or edge that overlapped with it

    • The Add Polygon tool has been overhauled to be more intuitive

      • Polygons can be closed by double-clicking anywhere or by single-clicking on the first vertex when there are at least 3 verts

      • Shows a preview of the polygon in progress and what would happen if you clicked where the cursor currently is

      • Ensured winding is always facing outward when the 3rd vertex is first added

      • Prevent adding vertices that are nearly equal to the existing ones

  • Selects the shape when the polygon is closed out

  • Sprite Editor: Moved the Alternate Material property to the Rendering category and hid it unless the geometry mode is Diced

  • Added a map check warning to sprite components with non-uniform scale of simple collision geometry indicating that they won't collide with anything, matching the warning that static mesh components emit

  • Added validation of socket names when editing sprites to make sure names are unique and not-empty

  • Changed centroid for polygon shapes when editing sprite or tile geometry to be a bounding box center rather than a weighted average

  • Changed layer batch submission order for tile maps to go back to front to help translucent rendering (only works when viewing from the front though since components are still sorted as a single unit)

  • Changed tile maps imported from Tiled to always use positive separation between layers, reversing the layer order from Tiled since it orders back to front in the .JSON

  • Clamped the maximum framerate on flipbook assets to 1000 fps

  • Excluded the per-tile spacing from the bottom right of the tile selection rectangle in the tile set viewport

  • Note: The spacing is still currently included in the interior when multiple tiles are selected

  • Fixed a bug where tile map layers would lose data and be stuck at a phantom smaller size after undoing a property edit of the map width / height

  • Existing affected tile maps are fixed up on load as well

  • Fixed a crash when clearing the texture reference or choosing a texture that is smaller than the tile size in the tile set editor

  • Fixed a crash when undoing creation of tile map layers via the details panel

  • Fixed an issue that prevented using negative values for the Drawing Offset of a tile set asset

  • Fixed an issue when merging non-square tile map layers

  • Fixed an issue where reimporting a JSON sprite sheet wouldn't reimport any existing texture pages

  • Fixed an issue where switching to Perspective view in a Paper2D editor would be looking along the thin edge of a sprite/flipbook/etc... instead of looking at it

  • Fixed an issue where the first row/column of a tile could not be clicked on to select the tile in the tile set editor or tile selector dialog

  • Fixed an issue where the selection outline didn't show up in the stand-alone tile map editor

  • Fixed an issue where the tile set drawing offset would ignore the Pixels Per Unreal Unit setting of the tile map

  • Fixed an issue with how the transform gizmo worked in Edit Source Region mode on rotated sprites

  • Fixed problems with tangent generation in sprites and tile maps

  • Fixed the direction of the tile set specified DrawingOffset to match the rest of the tile map coordinate system and Tiled

  • Positive DrawingOffset.Y values will now push a tile down relative to the tile map grid, rather than up

  • Fixed the tile selection rectangle not being updated in the tile set editor when the tile set properties were modified

  • Fixed various issues in cooked/packaged builds by removing all uses of platform-specific texture data for sprite/tile map/etc.. building, it now always works off of the imported size, since that was the authoring size in the editor

  • Improved editor performance when several Paper2D editors are open but not all visible at once by avoiding processing for the invisible editor viewports

  • Improved the responsiveness of the sprite editor when dragging property spinners in the details panel (collision and render data rebuilds are deferred until the spinner is released)

  • Limited maximum tile map size to 1024x1024 (still far larger than would be recommended in a single component)

  • Prevented an unnecessary texture analysis pass from being done each frame when editing sprites

  • Redefined behavior when a tile set has a different tile height than the map. It now puts the bottom left corner of the tile in the bottom left corner of the map cell, rather than the top left in the top left corner.

  • This matches the behavior of Tiled, and makes working with variable-height isometric tiles feel better.

  • Significantly improved the quality and performance of the 'Shrink Wrapped' geometry type for sprite assets

  • The algorithm is now conservative, so it will never cut into the edges of the sprite pixels

  • There is a new detail amount property, which controls the resolution that the analysis runs at, providing a better workflow when using large textures

  • Snapped some canvas text drawing to integer offsets to reduce the percieved change in font 'weight' as the length of a string changes

  • Sockets can now be rotated and scaled in addition to translated via the widget in the sprite editor viewport

  • Sprite Editor: Allowed editing an edge of the source region by clicking anywhere on the edge, rather than only at the midpoint

  • Sprite Editor: Hid collision geometry properties in the details panel when in Edit RenderGeom mode and vice versa to reduce confusion

  • Sprite Editor: Switched default focus key to F from Home, matching the rest of the editor

  • Sprite Editor: Synchronized the selection in the sprite list when the sprite being edited changes

  • Tile map and sprite components that have no material set will now render using the default material instead of being invisible

  • Tile Map Editing: Move 'Tile Map' and 'Setup' categories above Materials category

  • Tile Map Editing: Painting with a brush that contains empty tiles now works like a brush with holes, rather than erasing the existing cells

  • Tile Map Editor: Fixed an issue where the cursor preview would not be rendered if SeparationPerLayer was negative

  • Tile Map Editor: The selection indicator for tile sets now respects the border margin and per-tile spacing options

  • Tile Maps: Fixed an issue with the flood fill tool and tile map initialization where it would not consider an erased area the same as a never-before painted area

  • Tile Maps: Fixed the pivot show flag not working in the stand-alone tile map editor

Physics

  • New: Added ability to enable and disable constraint projection at runtime

  • New: Added deferred path for physics body initialisation to speed up creation of large amounts of physics bodies

  • New: Added faster static initialization path for instanced static mesh components

  • New: Added methods to foliage statistics function library

  • New: Added the ability to ignore mass for all force/torque type functions. Just set AccelChange = true when calling AddForce, AddTorque, etc...

  • New: Added vehicle physx substepping

  • New: Cleaned up and organized Character Movement Component settings to break things down into more subcategories.

  • New: Expose PCM contact manifold option. Helps in cases where contact point accuracy is important.

  • New: Exposed fixed time step as a general project setting

  • New: Exposed full control over which degrees of freedoms are locked for a rigid body.

  • New: Exposed restitution combine mode and BounceThresholdVelocity

  • New: Exposed several PhysicsHandleComponent properties to Blueprints

  • New: Exposed the moment of inertia of a rigid body via GetMomentOfInertia

  • New: PhysX 3.3.3 upgrade. See PhysX release notes for more info

  • Fixes various issues caused by having degenerate triangles in PhysX collision data.

  • Added interp speed option to nav movement projection, and don't let agents pop so high above NavMesh.

  • Added scale support for instance physics bodies inside instanced mesh components

  • Character crouch/uncrouch now changes crouch state regardless of whether at the target capsule height. Can Crouch function no longer checks the height condition.

  • Character's On Walking Off Ledge event now takes multiple parameters to make it easier to compute a custom velocity.

    • Engine code no longer forces a zero Z velocity in Start Falling, so new velocities in On Walking Off Ledge will be fully respected.

    • BPs will automatically update. C++ has deprecated the old empty functions (they will not be called) in favor of the new ones.

  • Character Movement Component runs normal Check Still In World code when Updated Component is simulating physics.

    • Fixes ragdolls not respecting KillZ or world bounds.

  • We now consume movement input in Pawn when Unpossessed or Restart is called.

  • Fix BSP polygon normals becoming incorrect when non-uniform scale is applied.

  • Fix bug that could cause On Overlap to be called multiple times for Actors as different components began to overlap.

  • Fix Capsule Component with Capsule Half Height = Capsule Radius creating collision geometry with slightly taller half height. This should simply create a sphere.

  • Fix Characters using orient-to-movement or controller desired rotation not rotating along with a moving base.

  • Fix comment on Enable Camera Rotation Lag.

  • Fix improperly tagged redirects for Characters and movement components.

  • Fix Projectile orientation when Rotation Follows Velocity is set but there is no velocity.

  • Fix skeletal mesh Add Radial Force and Add Radial Impulse to average out the strength based on body mass.

  • Fixed a crash accessing physics material data during initialisation.

  • Fixed a crash creating physics data for Instanced Static Mesh Components where the Static Mesh property had not yet been set

  • Fixed a crash in the destructible mesh editor

  • Fixed an issue where convex collision elements for a scaled component would be drawn at the wrong size (they were being scaled twice)

  • Fixed Based Movement potentially out of sync after leaving root motion. (Simulated Proxy)

  • Fixed crash in physics initialisation for instanced static mesh components that had a missing or invalid mesh

  • Fixed crash when applying an override material to a destructible mesh instance in the editor.

  • Fixed crash when deferring physics additions

  • Fixed crash when using a cloth asset that uses a lower resolution simulation mesh than the graphical mesh.

  • Fixed dis-ambiguity between shader format and sleep family enums - SF_Max.

  • Fixed incorrect body instance usage when initialising ragdolls causing issues when client and server use different scene configurations

  • Fixed Nav Walking behavior not getting restored if a Character is set to falling and then lands again.

  • Fixed radial forces not working correctly with physics sub-stepping.

  • Fixed setting materials on destructible meshes not updating chunk materials and physical materials

  • Fixed the bounding box of spline mesh convex collision elements

  • This may have been causing some physx weirdness with spline meshes

  • Fixed warnings when particles were trying to apply impulses to static objects.

  • Flip the collision normal of an object that is not moving. This is needed so that the collision normal is always pushing the object away from the impact point

  • Improve comment on "Phys Mat" pin on Hit Result to indicate that "Return Physical Material" must be set.

  • Made it clear that Controller possession of Pawns is supposed to only happen on the authority.

    • Blueprint methods have been marked as Blueprint Authority Only. Attempts to use them on a network client will generate a message in the warning log and do nothing else.

  • Make sure Pawn unregisters itself upon End Play, not just during Destroyed.

    • Fixes Pawns remaining in pawn lists when being streamed out.

  • Remove component from Overlapping Components array before firing On Component End Overlap events.

    • Prevents other components from thinking the overlap is still active if they check the Overlapping Components array.

  • Reordered some parts of Hit Result to be in a more logical layout.

  • Reverse normals in component overlap event when object is not moving and something else hits this component.

    • This is needed so that normal is always pushing the object away from the impact point.

  • Spectator Pawn now replicates by default, however those spawned by PlayerController will continue not to replicate since they are client-only.

    • Added network sync of spectator rotation in addition to currently synced location.

    • Added ServerSetSpectatorWaiting / ClientSetSpectatorWaiting RPCs to make it easier to allow spectators to be able to join/respawn.

  • Vector and Rotator equality checks now properly handle a zero tolerance.

  • Warn when trying to move a component with static mobility from a Movement Component.

  • We now compute ImpactNormal for collisions with Box shapes. Previously it equaled the contact normal when impacted by shapes.

    • Fixes Characters being unable to step up simple box geometry, among other issues.

Platforms

  • New: Added EXPERIMENTAL "Desktop (Win + Mac + Linux)" Target Platform which will allow you to cook content that can run on all 3 platforms.

    • Currently, we can't compile D3D shaders on Mac/Linux, so if you cook on Mac or Linux, you will have to run Windows with -opengl.

    • Packaging all three together into a single directory structure has some issues still, so it has been removed from the File | Package menu in the editor.

    • It is possible to run the cooker on the command line with "desktop" as the platform to cook for.

  • New: Added support for convertible laptops (see EConvertibleLaptopMode)

  • New: Added the ability to specify whether the game should be built during Play On Device.

    • There is a new setting in the Editor Preferences 'Play' section which allows users to specify whether all games are built when selecting Play On Device, games are never built, or to perform the default behavior (build code-based games, do not build content-only games).

  • New: Iterative deploy implemented for PS4. Launching PS4 from the editor after the first launch should be 'much' faster now.

  • New: Multiple improvements to the HTTP Chunk Installer (Code projects only)

    • Added -chunkinstalldirectory and -chunkinstallversion to UAT command-line options.

    • Added Chunk Dependency Graph to better control duplication of assets between chunks.

    • HTTP Chunk Installer correctly re-uses old builds to reduce download sizes

    • Windows uses HTTP Chunk Installer by default if enabled in project Build.cs

    • Added HTTP Chunk Install options to Editor Packaging menu.

    • Added HTTP Chunk Installer sync mode and offline mode.

    • Added HTTP Chunk Installer Options to Editor Project Launcher/UnrealFrontend

    • Initial HTTP Chunk Installer patch support.

  • Fixed issue with pak files being kept around from File|Package during a Play on Device launch. This would cause strange behavior during Play on Device as it would prefer the older pak data over the new cooked data.

  • Fixed JunkManifest processing to allow for backslashes on Mac and Linux

  • Fixed multiple redundant loads of target platform DLLs

  • Fixed rare issue where async discovered devices (PS4, XBoxOne) might fail to detect.

  • Minor fix for tooltip position being offset by one pixel on non-Windows platforms.

  • Selecting Windows XP as a minimum OS version now has an effect during that instance of the editor

  • The Virtual Joystick no longer takes takes keyboard focus. This prevents the problem of it sealing focus from the game viewport and resetting the touch state of fingers that have been pressed outside of the joystick.

Android

  • New: Added application display name (app_name) setting for Android to Project Settings

  • New: Added detection for Adreno 2xx GPUs and PowerVR 540 to default Android profile selector

  • New: Added r.MobileReduceLoadedMips for platforms (like Android) without texture streaming. The parameter is the number of miplevels not to skip loading to lower memory usage at runtime based on device detection.

  • New: Added support for ASTC texture format on Android ES 2

  • New: Allow adding additional tags to AndroidManifest.xml <manifest>, <application>, and <activity> nodes

  • New: Allow better control of AndroidManifest.xml generation

    • Extra Activity Settings are also read from [project]/Build/Android/ManifestActivityAdditions.txt

    • Extra Application Settings are also read from [project]/Build/Android/ManifestApplicationAdditions.txt

    • Extra Requirements are also read from [project]/Build/Android/ManifestRequirementsAdditions.txt and are not restricted to only permissions

    • Entire Requirements section may be overridden by contents of [project]/Build/Android/ManifestRequirementsOverride.txt (be sure to include <uses-sdk android:minSdkVersion="9"/> and <uses-feature android:glEsVersion="0x00020000" android:required="true"/> as these are also replaced!)

  • New: Allow package and project name to be different and converts dashes to underscores if necessary to generate a valid package name

  • New: Changed the ES31 w/ Android Extension Pack support from a separate TargetPlatform to being a project setting that can work with any texture format target. It is now driven by the build flag that was compiling in support for ES31 - if that is checked, it will also compile the AEP shaders as well as ES2 shaders.

  • New: Iterative deploy is now supported for Android. Now only changed content will be pushed to the device on launch and reinstalling the APK is skipped if there are no changes.

  • New: Normal maps now behave the same way as most other platforms, increasing the quality and minimizing artifacts by only using two components from the texture and deriving the third component in the shader.

  • New: Added support for Android menu and volume keys

  • Added another variant of ProGuard keep explicitly for MediaPlayer14 class

  • Added GooglePlay login timeout and pass on onActiveResult to GPG by delegate

  • Added workarounds for Adreno 2xx GPU using checks for maximum varying vectors allowed

  • Allow access to local files in Android ExternalFilesDir (available in GExternalFilePath)

  • Allow rendering thread on Tegra devices with ES 3.x support

  • Application lifetime event callbacks now guaranteed to occur on the game thread

  • Cache Android window size only if valid (greater than 8x8)

  • Call adb in AndroidPlatform automation script directly instead of using cmd.exe or sh to fix issues with Run returning empty output from these commands

  • Changed settings to fix problems swinging through platforms on the Galaxy S4 Mini_4591 for Swing Ninja.

  • Changed Slate to use FText (ICU) to determine whitespace and corrected some international character not being rendered with the TextBlock in UMG

  • Changed to point sampling during tonemapping of mobile HDR mosaic pass to correct precision issues

  • Check for Android .so instead of .apk to determine if UE4 project for target configuration was built for earlier failure detection

  • Cleaned up Android install batch file generated during packaging

  • Cleaned up Android shader overrides and no longer cache failed shader compiles so overrides tests are valid

  • Conditionally adding the IAP billing permission to the android manifest, based on configuration to use IAP.

  • Corrected binary release Android libraries (only strip debug symbols from .a files)

  • Corrected issue with placement of #extension directive in shaders

  • Detect GL_OES_standard_derivatives extension for ES2 and work around missing dFdx, dFdy, fwidth functions by patching shader for Android

  • Disabled setting thread affinity mask on Android due to issues with thread assignment to slow cores on big.LITTLE ARM processors

  • Disabled the viewport frame sync on Android to prevent issues with tile based GPU rendering

  • Files in .pak files outside of an OBB without a manifest entry now return a valid timestamp

  • Fix for possible crash using force feedback with some versions of Android

  • Fix for to ProGuard settings for MessageBox class

  • Fixed 3D UMG widgets on Android rendering upside down

  • Fixed android deployment crash in FindNamedNetDriver

  • Fixed conversion of shaders to #version 300 es when they have blank lines or extra EOL whitespace

  • Fixed crash on opening console on Android due to JNI call variant issue

  • Fixed issue with java template path on OSX (only use forward slashes)

  • Fixed movie playback having garbage displayed before the movie starts.

  • Fixed normalmaps for ASTC textures in Android OpenGL ES 2.

  • Fixed potential threading crashes when calling Java from C++

  • Fixed some Android project to not be grayed out when the Android support files haven't been created yet (since they weren't related)

  • Fixed some depreciated calls

  • Fixed typos in reverseLandscape and sensorLandscape orientations in generated AndroidManifest.xml

  • Fixes for Android media player

  • Fixes to Android window resolution caching (handles native window handle changes properly)

  • GetTimeStamp and SetTimeStamp check the proper AssetPath for local files

  • Logs are properly flushed on crash

  • Improved adb device parsing to accept either tab or space separators

  • Fixed issue with PX_COMPILE_TIME_ASSERT reintroduced with PhysX 3.3.3 update

  • Properly deal with detecting ARMv8a and adding default fallback to ARMv7a for unknown cases

  • Protection added against in-app purchase disabled to onActivityResult

iOS

  • New: Added Delta-copy install location as a configurable property in the IOS project settings.

  • New: First pass of turn-based matches have been implemented for iOS. This feature is still experimental and will be more fully supported in the next release.

  • New: Integrate pull-request #651 to add input plugin support for iOS.

  • New: Launch options are now stored on the App Delegate for use later during game initialization.

  • New: Lifetime events are now properly called on the game thread so users can utilize any module code without causing a crash.

  • New: Upgraded the IOS Facebook SDK version to 4.01

  • Added messages to the output log when launch on fails due to an instruments error.

  • Fixed a crash during start up on iOS with a debug executable.

  • Fixed a crash in iPhonePackager when copying mobile provisions to the provision directory and the destination file was read-only.

  • Fixed a crash related to pinging iOS devices over the network on Mac.

  • Fixed a project settings typo: "OSVersion" is now "OS Version"

  • Fixed a remote compile failure when the remote server name is overridden by an empty name.

  • Fixed an issue with deployment to some iOS devices where the connection could be lost during the deployment of files.

  • Fixed crash when utilizing the deployment server on windows to deploy files to an iOS device.

  • Fixed deprecation warnings when compiling UE4 for iOS 7 and iOS 8. This now allows users to specify a minimum iOS version and the engine will be properly built to match that version when uploading to the App Store.

  • Fixed iAd display when starting up without WiFi and then enabling WiFi at some point during the game session.

  • Fiching to a black screen when the Mobile Content Scale factor is something other than 1, 1.5, or 2.

  • Fixed issue with iPhonePackager not being able to detect devices in standalone mode after an update to iTunes.

  • Fixed the executable name being mismatched with the plist when the project name has an underscore in it. Previously, the plist key would have removed the underscore and the IPA would be invalid. Now, the underscore is kept in both places.

  • Mac/Build.sh can now take "iphoneos" or "IOS" on the commandline to compile the engine (so users and Xcode can both use it)

  • Properly prefer iTunes 12 Mobile Device dll over the iTunes 11 dll. This fixed some crashes related to picking the wrong version of the dll when both are present.

Linux

  • New: Available GPU memory size (when an appropriate extension is provided by the driver) will now be used for better control over texture streaming.

  • New: Code projects can be created on Linux without requiring any IDE to be present.

  • New: Compiler errors will be output in gcc-like format when compiling on Linux for better integration with platform tools; MSVC format is retained for cross-compilation.

  • New: Double clicking the titlebar will now minimize/maximize windows.

  • New: Linux audio system now supports multiple OpenAL devices and contexts.

  • New: LinuxNativeDialogs will attempt to detect the desktop environment (using $XDG_CURRENT_DESKTOP) and use the appropriate widget toolkit (GTK or Qt) for file open/save/etc.

  • New: LND (dialogs for file open/save/etc) are now supplied in prebuilt form that should work with Ubuntu 14.04 and up; no need to build third party libs locally anymore (on those OSes).

  • New: Makefile generator will now generate targets for projects outside of the engine directory.

  • New: Minor: a lot of performance warnings issued by NVIDIA drivers have been fixed.

  • New: Minor: Steam shared objects are now being loaded dynamically.

  • New: Minor: switched to global symbol resolution (RTLD_GLOBAL) when loading shared objects (watch out for possible symbol collisions).

  • New: SDL2 has been updated from icculus (Ryan Gordon) branch; most of the changes needed for UE4 have been taken upstream.

  • New: SpeedTree is now usable on Linux.

  • New: Standalone programs and tools (e.g. UnrealFrontend) will now use OpenGL 2.1 (instead of 3.2), which is more widely supported.

  • New: UBT will now generate KDevelop project directly; some manual setup is still needed for includes and defines.

  • New: V-HACD (convex decomposition library) has been enabled for Linux.

  • New: You can now drag-n-drop assets and text from other programs to the Unreal Editor.

  • Background shader compiling will now use less CPU resources.

  • Fixed "launch on" not working in the Linux editor.

  • Fixed "weird" file names when packaging the project into a directory that contains a space.

  • Fixed crash in Linux file system layer when Windows-style paths (e.g. embedded in assets) were attempted to be loaded on Linux.

  • Fixed crash in the case-insensitive file mapper when trying to load an empty filename.

  • Fixed crash in UnrealFrontend when adding more than on Linux device with the same IP.

  • Fixed dragging objects in the viewport.

  • Fixed file open/save dialogs ignoring all wildcards except the first.

  • Fixed focus not being properly transferred after destruction of a popup window.

  • Fixed game window being always resizeable (it will not be now by default).

  • Fixed inability to import starter content if the project (or the engine) was located outside of user home directory.

  • Fixed inability to set/get environment variables using platform abstraction layer.

  • Fixed input events from gamepads/controllers being ignored on Linux.

  • Fixed Linux windows not having layout borders.

  • Fixed MessageBox not displaying long strings properly.

  • Fixed notification windows obscuring dialogs and still stealing focus sometimes.

  • Fixed packaging under Linux failing because mono apparently can confuse UAT commandline switches with its own.

  • Fixed red-blue swap when displaying a splash screen.

  • Fixed regression in 4.7 when standalone game would default to a desktop-sized window no matter the settings.

  • Fixed reporting the machine id (relies on systemd's /etc/machine-id, will not work on OSes without it) for analytics.

  • Fixed tab dragging.

  • Fixed text rendering problems in standalone programs due to font atlas textures being updated without a valid GL context set.

  • Fixed UAT placing log files in ~/Library (it will now use ~/Documents/Unreal Engine)

  • Fixed UBT disabling certain compiler optimizations for Development and higher builds when debug info was enabled.

  • LinuxNativeDialogs (LND) has been moved to a different location; you may need to delete stale libLND*.so files in your Engine/Binaries/Linux.

  • Minor performance optimizations in the UI (the editor and tools should now be less "chatty" when communicating with X server).

  • Minor: inability to resolve the hostname when choosing an IP to bind to will result in binding to INADDR_ANY (0.0.0.0)

  • Minor: more robust setup of binary dependencies in github builds.

  • Numerous fixes for focus issues in Linux windowing layer.

  • Source control integration (git, svn, p4) in the editor has been enabled for Linux.

  • The editor and other tools will now track changes in Content directory (inotify-based "directory watcher" has been fixed and re-enabled).

  • Unreal Engine (and the sample projects) can be compiled with clang 3.6.0 on Linux.

  • -Wreorder warnings will no longer cause the build to fail (these warnings aren't suppressed, just exempted from -Werror).

Mac

  • New: Added compatibility with Mono 3.12

  • New: Added 'DisableMacDrawEvents' as a command-line option to disable OpenGL event markers on OS X as they can crash Apple's OpenGL Profiler.

  • New: Added Mac TADP installer to Engine/Extras/Android

  • New: Added support for OpenEXR

  • New: Added support for using CEF framework in packaged games

  • New: Bundled Mono for Mac updated to 3.10

  • New: Changed Mac windows to use CoreAnimation-layered views

  • New: Enabled MacServer cooking/packaging in UFE

  • New: Enabled TexturePlatformAndroid module on Mac and added Mac version of QualcommTextureConverer lib

  • New: Exit the editor running a cook on the fly server when user closes the log window

  • New: Fixed GPU profiling on Mac OS X and enabled it by default for non-shipping builds.

  • This allows 'stat unit' and 'profile gpu' to display GPU time in addition to CPU time for rendering.

  • The Mac implementation has a performance impact so is disabled when not required or when the 'DisableMacGPUTimestamp' command-line option is supplied.

  • New: Implemented support for OpenGL's separate shader objects to reduce in-game hitching.

  • Enabled by default on Mac OS X where the GL_ARB_separate_shader_objects extension is always present.

  • Separate shader objects can be toggled on/off using the 'OpenGL.UseSeparateShaderObjects' console variable.

  • New: Implemented VoiceModule for Mac using CoreAudio.

  • Fixed the sample rate conversion path for CoreAudio input.

  • New: New debug symbol handling for OS X to allow creation of dSYM bundles & symbol stripping of executables.

  • On OS X .dSYMs are emitted as flat files by enabling the UBT build configuration option 'bGeneratedSYMFile' as on iOS.

  • Added an initial platform-agnostic API for querying debug symbol info, including a generic database format that can be queried on otherwise incompatible platforms.

  • Added DSymExporter which will export Apple debug symbol data from Mach-O binaries, including the payload within a .dSYM bundle, to the generic format.

  • Added a new support program UnrealAtoS which can be used to resolve debug symbols using the new generic debug symbol format or CoreSymbolication.

  • Removed the direct dependency on the CoreSymbolication private framework, this is loaded dynamically in the UnrealAtoS program but not the game or editor where it isn't required.

  • Initial SymbolDebugger & MinidumpDiagnostics support on OS X.

  • New: Prevent OS X from putting UE4 apps that don't use UI (for example the editor running a commandlet) into App Nap mode.

  • New: Regular windows no longer use floating window level, which means that some windows (like details panel, if removed from the main window) will no longer display always on top of their parent window

  • New: Seeking added for mac and ios media player

  • New: Switched from the HACD to vHACD library for convex mesh decomposition on Mac OS X, using OpenCL where possible.

  • New: Use PLCrashReporter revision #5ae3b0a to capture crash reports on OS X rather than using our own signal handlers at is more extensive & robust.

  • Disabled automatic copying of crash report to clipboard from within the crashed application to avoid hanging the application so that it cannot be removed from the Dock.

  • Fixed various symbolisation bugs so that PLCrashReporter crash reports symbolise correctly for display in CrashReportClient.

  • Minidumps are now stored in PLCrashReporter's binary format.

  • New: XBoxOne and more varieties of XBox360-style controllers now supported on Mac builds.

  • Added ASTC encoder for Mac to UE4 Binary

  • Added handling of window reordering on Mac when the editor is in the background

  • Change the way CoreAnimation and OpenGL interact to avoid problems that result in visible corruption on OS X.

  • Make the CoreAnimation layer share the viewport's context by ensuring that access to the context is restricted to one thread at a time using the NSOpenGLContext lock/unlock operations, this ensures that only one thread can have this context current & be calling OpenGL using it at any given time.

  • Use an intermediate render buffer to transfer the back-buffer data from the UE4 render thread to the CoreAnimation thread to avoid trying to read from an incomplete viewport back-buffer.

  • When resizing an OS X OpenGL context clear the new back-buffer resource to black & only blit the viewport back-buffer to the window when its contents can be guaranteed to be valid, otherwise clear to black.

  • Only try and read from render buffers that have actually been rendered too.

  • Make sure to flush the CoreAnimation layer's OpenGL context, otherwise OpenGL won't ever be told to flip the front & back buffers.

  • Changed the way of handling dylibs in Mac bundle subfolders to work around the Mavericks dlopen() bug

  • Collect the correct values for maximum available physical memory & currently used virtual memory on OS X.

  • Correctly convert usage of SV_Position to gl_FragCoord in hlslcc so that our shaders render correctly in OpenGL.

  • Disable OS X's sudden termination feature as that can cause data corruption if the user tries to reboot/shutdown their Mac without exiting UE4 cleanly as it prevents completion of outstanding operations.

  • Also make sure that we correctly reset the game-thread ID on shutdown otherwise C++ destructors that rely on being destroyed on the game thread may assert or crash.

  • Disabled output from pushd and popd tools called from FixDylibDependencies script

  • Fix a use-after-free bug in the Slate font-cache on OS X that could crash or cause memory corruption.

  • Fix the Mac cursor not warping to the correct position when exiting high-precision mouse mode.

  • Fix transition in/out of fullscreen mode on OS X sometimes causing faulty mouse coordinates to be reported

  • Fixed a crash on expanding folders in native save/open dialogs on Mavericks

  • Fixed a problem with jerky movement when dragging autosized windows

  • Fixed a problem with missing audio in some packaged games

  • Fixed a problem with tabs not rendering when moving after returning to editor

  • Fixed cooking of Mac shaders on Windows

  • Fixed mouse dragging in the editor viewport on a secondary monitor that's not verically aligned to the primary one

  • Fixed slow texture compression times on OS X by rebuilding the OS X nvTextureTools libraries.

  • Fixed the problem in Mac editor with toolbar icons highlighting while dragging a window.

  • Fixed the random crashes in Mac editor caused by improper use of window shared pointer on multiple threads

  • Fixed the rendering of spline-deformed geometry on Macs with Intel GPUs.

  • Fixed updating of Mac menu bar when a new tab is added

  • Impose consistent Slate<->Cocoa coordinate conversions so that we don't accidently use the wrong coordinate space, which fixes the Editor's drop down menus when moving windows across displays.

  • Improve GPU vendor ID resolution on OS X to avoid a stop crash on startup on some new Macs.

  • Made tooltips and context menus visible on Mac when the app is in the background

  • Make the Intel HD 3000 report itself as OpenGL ES2 on OS X so that it uses the simpler forward renderer.

  • Fixed the sample rate conversion path for CoreAudio in VoiceModuleMac.

  • Moved UE4EditorServices.app service installing code to run after it is built.

  • On losing & gaining application focus on OS X validate that the window numbers we are storing actually correspond to valid NSWindows, otherwise subsequent use of the window number might crash inside AppKit.

  • On OS X use the green window titlebar button as maximise/restore rather than toggle fullscreen so that it behaves consistently in the Editor & doesn't confuse Slate.

  • Only register the CoreAudio Radio component once on OS X, we can reuse the registration if we need to access it again.

  • Reset the OpenGL unpack alignment after using Apple's Client Storage extension to resolve a crash caused by using incorrect values in subsequent operations.

  • Reworked Mac OS X high-precision mouse handling so that we better emulate Windows behaviour.

  • To reduce apparent lag mouse event coalescing is disabled by default when in high-precision mouse mode, this can be controlled with the console variable r.Mac.HighPrecisionDisablesMouseCoalescing.

  • Additionally the off-by-default console variable r.Mac.HighPrecisionDisablesMouseAcceleration can be used to disable OS X's mouse acceleration curve in high precision mode.

  • Scale all resolutions in ?FMacOpenGL::PlatformGetAvailableResolutions by the current primary screen's backing scale factor to prevent reporting resolutions to Slate that are larger than the enclosing window.

  • Simplified the calculation of window size & location on Mac, excluding the system titlebar if there is one, to ensure the window returns to the correct position on leaving fullscreen mode.

  • Solved a problem with mouse clicks ignoring editor windows while a system modal window is displayed.

  • Steam lib is now included in packaged games that use it

  • Use 'which mono' to discover local Mono installations on Mac OS X rather than assuming a fixed path.

Playstation 4

  • New: Debug builds now link in the debug versions of Gnm and Gnmx.

  • New: Loose stencil clears now use a Gfx Shader instead of a Compute shader for improved GPU performance and reduced stalls. Stencil controls are also cached to avoid context rolls.

  • New: Added initial support for official Morpheus SDK 2.0.

  • New: Added PS4 Platform Editor Module for editing PS4 settings

  • Moved PS4 packaging settings to the Editor instead of using PackagingDataPS4.txt

  • Added ability to build an ISO image when packaging

  • New: Added runtime detection of system software version and application SDK version mismatch

  • New: Added support for Matching2 search attributes on PS4.

  • New: Added support for SDK 2.5.

  • New: Added support for Unreal Media Framework on PS4. File format limited by Sony's video decoder. Currently only .mp4 and AAC audio supported. See Sony video player docs for more info.

  • New: Added support for virtual keyboard on PS4.

  • New: Enabled IME Keyboard support for PS4. Keyboard can now be used on Test kits and in Shipping builds.

  • New: ExcludeRect is now taken into account when clearing a render target to avoid redudant clears - saves approx 0.5ms of GPU

  • New: Fully hoisted the entire LCUE code into the engine. Projects can now modify LCUE defines and constants easily.

  • New: Improved device discovery and monitoring using the PS4DevKitTool

  • New: Increased the maximum possible shader resources (textures and samplers) in a single shader to 32.

  • New: Member initialization order errors are now a warning rather than error

  • New: Morpheus .ini settings are now standard Project Settings in the editor under Edit->Project Settings->Plugins->Morpheus.

  • New: PS4 debug visualizers for Visual Studio are now automatically installed when running GenerateProjectFiles.bat

  • New: PS4 now submits commands to the GPU periodically over the frame, rather than once at the end of a frame. Added console variable r.PS4ContinuousSubmits to toggle the behavior.

  • New: PS4 support detection is now only reliant on SDK detection. Artists with no source code will now properly see PS4 as a target in the Editor.

  • New: Shipping packages are now only built for submission when "For Distribution" is enabled in the editor in Project Settings | Project | Packaging

  • New: The source hash is now used when generating the shader sdb file name to avoid name collisions

  • Added a compute shader to properly update all sizes of volume textures.

  • Added support for the new Morpheus HMD Server. Morpheus PC preview now works again.

  • Fixed a bug causing the Render thread to be locked to a single CPU core. This fixes a number of potential stalls when garbage collecting.

  • Fixed a bug in texture streaming budget accounting. Texture pool size is properly counted now.

  • Fixed a bug where directory creation would not properly create the entire directory chain. This would cause cookonthefly to load old data in some cases.

  • Fixed a crash in Morpheus ApplyDistortion.

  • Fixed a parallel rendering crash in render target management.

  • Fixed a potential crash when rendering with Morpheus.

  • Fixed a startup crash when using 3d audio.

  • Fixed an artifact where the edges of objects would be black the first time the camera pans across them.

  • Fixed automatically disconnecting a devkit when shutting down the editor or UFE.

  • Fixed 'black dot' artifacting from new Burley diffuse model on PS4.

  • Fixed 'black plane' / clipping artifacts in Morpheus rendering.

  • Fixed bug where certain volume texture formats would not update properly.

  • Fixed Canvas rendering on Morpheus. Console and debug text should now converge properly.

  • Fixed CMASK and HTILE to work with full parallel rendering on PS4.

  • Fixed crash in PS4DevKitUtil when there is no default device

  • Fixed errors caused by .pak files under /saved directory.

  • Fixed flickering graphical corruption from bad uniform buffers on PS4.

  • Fixed flickering on PS4 from incorrect vertex buffers on occlusion queries.

  • Fixed initial heap size printout on PS4 to print in megabytes correctly.

  • Fixed Morpheus distortion rendering occasionally having incorrect blending state.

  • Fixed Morpheus distortion shader to only run a single time.

  • Fixed Morpheus tearing artifact under vysnc.

  • Fixed NULL keyboard characters being sent that was causing problems with the debug console history and autocomplete

  • Fixed number of instances for draw calls which bypass the LCUE to always be 1

  • Fixed potential crashes from memory overwrite in PS4 OnlineId resolution.

  • Fixed potential crashes related to unnecessary calls to submitdone.

  • Fixed PS4 builds crashing on testkits.

  • Fixed reflection captures potentially running out of memory.

  • Fixed screen offset alignment causing Gnm debug assertion

  • Fixed srgb textures being too dark after being updated

  • Fixed the touchpad reporting incorrect OnTouchMoved events when the number of touches changes on DualShock4s.

  • Fixed Windualshock module errors when users only have SDK 2.0

  • Fixed wrong shader type being used when clearing multiple slices

  • Fully enabled Morpheus project settings in editor.

  • Optimized path normalization code for PS4 file system. Autocomplete list for the console now populates faster, non-packaged loading times reduced slightly.

  • Optimized PS4 to only set stream sources when necessary.

  • PS4 no longer defaults to FXAA in the engine level PS4Engine.ini

  • Removed clamp of viewport to render target as some shared code relies on this not happening (fixes issues with scene captures)

  • Shadow Quality console variable is now defaulted correctly.

Xbox One

  • New: Added catching of unhandled exceptions on Xbox One.

    • Added minidump support that will be invoked by default on unhandled exceptions.

    • Added translation for symbols to the stack produced on unhandled exceptions.

    • Added flushing of log files for unhandled exceptions.

  • New: Added compiling of shaders to GPU bytecode, with no intermediate format stored, to save memory and slightly improve shader loading speed.

  • New: Added ICU libraries and support for Xbox One.

  • New: Added just in time generation of package and deployment resources based on project settings.

    • Removed the need to manually merge engine and project AppxManifest templates.

    • Added common packaging and deployment settings under the Xbox One Platform Settings in the Editor.

    • Changed the package name and application name/entrypoint to be named based on the Product Id and Project Name from the project settings. This removed the need for projects created for Xbox One to avoid spaces and symbols in their uproject file names.

  • New: Added localization support for text resources in packaging and deployment.

    • Added generation of localized string resources such as display name and description fields.

    • Added support for localized image resources such as logos and splash screens.

  • New: Added support for packaging and deploying to multiple cultures on Xbox One.

  • New: Added support for titles to reclaim the 4.5% Kinect GPU allocation when Kinect is not in use.

  • New: Added support for using directly generated AUMIDs to launch projects on Xbox One. Removed the reliance on project file or folder name to launch Xbox One projects.

  • New: Changed the memory bus priority to favor the GPU, to improve the performance of GPU bound projects.

  • New: Changed Xbox One XDK detection to use the XDK_EDITION number rather than XDK_VER, as it is a more human readable YYMMQQ format.

  • New: Enabled CPU core thread affinity system.

  • Added better core mapping to improve performance.

  • New: Enabled multi-threaded garbage collection on Xbox One.

  • New: Enabled the use of the 7th CPU core by default.

    • Adjusted XboxOneMisc::NumberOfCores() to return the correct number of cores, taking this change into account.

  • New: Optimized 3D texture clearing for translucent lighting.

  • New: Optimized occlusion query system to issue queries in batches.

  • New: Optimized to the constant ring buffer by using 4MB pages.

  • New: Reduced duplication of generated files in Xbox One packaging, which also improved packaging performance.

  • New: The Xbox Live online subsystem's leaderboard interface is now able to read leaderboard rankings.

  • Note that to write scores to an Xbox Live leaderboard with the online subsystem, you currently have to use the Events interface.

  • New: Updated the default XDK to the April 2015 version.

  • Fixed a crash that could occur when suspending or resuming a title.

  • Fixed a memory leak in the Render Hardware Interface (RHI).

  • Fixed a parsing issue that could cause crashes when building the XboxOnePDBFileUtil with certain Visual Studio setups.

  • Fixed a texture popping issue that occurred when streaming out mip levels of textures that are still in use by the GPU.

  • Fixed an issue that could cause the XboxOnePackageNameUtil to produce errors when the working directory was not set as expected.

  • Fixed an issue that could cause Xbox One development kits to display corrupted aliases in tools.

  • Fixed flickering and a crash in the occlusion query system.

  • Fixed memory accounting in texture streaming pool. This problem caused titles to be unable to stream textures after a long time.

  • Fixed memory corruption that could occur on shutdown of the Xbox One target platform module.

  • Removed a hardcoded limit on the number of pages for the constant ring buffer. This fixes a crash in large games.

  • Removed an unnecessary and slow memory barrier function.

VR

  • New: GearVR performance settings can now be set in Engine.ini. Under [GearVR.Settings] values can be set for CpuLevel and GpuLevel. Defaults are 2,2. See the Oculus Mobile SDK documentation for valid values.

  • New: GearVR projects can lock framerate to 30 by editing the engine config.ini:

    • [GearVR.Settings]

    • MinimumVsyncs=2

  • New: GearVR projects no longer require code builds in order to package for GearVR. Selecting the 'package for GearVR' automatically enables the plugin at runtime. All that is needed to make GearVR builds is to set the Minimum SDK to 19, Package for GearVR, and placing osig files in the Engine\Build\Android\Java\assets directory.

  • New: The Leap Motion plugin is now usable from content-only projects.

  • New: Updated the Oculus mobile SDK to 0.5 for GearVR.

  • Calling the 'OVRGLOBALMENU' exec command on GearVR will now correctly bring up the global menu.

  • Fixed running start for SteamVR.

HTML5

  • New: Experimental: Allow HTML5 games to download maps on the fly. For smaller startup packages and time to boot [ Can be enabled from Project Settings -> HTML5 ]

  • New: Experimental: Alternate HTML5 game template with more accurate progress bars and better styling. [ Can be enabled from Project Settings -> HTML5 ]

  • New: Experimental: HTML5 platform Multiplayer support using websockets. [ see Readme.md file in the same directory on howto enable]

  • New: HTML5 defaults to use Pak files when packaging. Pak files are compressed for HTML5.

  • New: HTML5 devices and browsers can be added and removed from in the Editor UI.

  • The default web server port for launching HTML5 from within the editor is now configurable.

  • Assert in HTML5 now display the location in the code that caused the assert.

  • New: HTML5 SDK settings are now configurable for within the Editor.

  • Browser Fullscreen transition fixes.

  • Better control over hide pointer when mouse lock is requested

  • Fix crash when accessing saved game in local storage.

  • Fix custom fonts not showing up properly on HTML5.

  • Fix for HTML5 failing to give useful error messages before JS is completely parsed

  • Fix for incorrect character input for HTML5 UMG widgets and incorrect keyboard mappings in HTML5.

  • fix lightmap's B/R channels swapped for HTML5

  • minify development builds and generate a symbols files for both development and shipping builds. readable callstacks are now generated for shipping builds.

  • Mutilpe fixes for HTML5's implementation of HttpModules.

Windows

  • New: 32-bit and 64-bit Windows are now both fully supported as target platforms in the binary release (Win32 support was previously limited to shipping configurations, and Win64 support was previously limited to development configurations)

  • New: Updated win32 packaging to fix an issue with Windows XP binaries not being found when selected as the target operating system.

  • Disabled Windows XP for Rocket builds. We dont provide generated source or binarys for WinXP as part of the binary release.

  • Fixed an issue where CrashReporter was wrongly added as a dependency, when packaging windows XP.

  • Fixed packaging crash when some icons were missing.

  • Fixed Windows XP compile errors when using VS2013 compiler.

  • Integrated fix for portmidi crash on Windows 8.1

Rendering

  • New: Added ability to have some object (landscape or FarShadow marked objects) casing shadows in extra shadow cascades

  • New: Added decals to shader complexity view mode (for GPU profiling)

  • New: Added 'grass.densityScale' console variable to adjust grass density at runtime.

  • New: Added occlusion queries on subtrees for hierarchical instanced static meshes

  • New: Added Parallel for to allow simple parallel processing with ease

  • New: Added r.Bloom.Cross console variable to shape the bloom look (experimental), see help.

  • New: Added r.DiffuseColor.Min and r.DiffuseColor.Max for tweak experiments, will be changed to r.BaseColor. and r.Metallic..

  • New: Added r.DumpShaderDebugShortNames to workaround paths too long when dumping shader debug info

  • New: Added runtime iOS rotation support

  • Selecting both portrait and landscape orientations within your iOS project settings page will enable dynamic switching as the device is rotated.

  • New: Added support for DistanceFieldReplacementMesh under BuildSettings

  • New: Added value display under center pixel to VisualizeHDR (useful for bloom/HDR tweak)

  • New: Additional options for formatting textures in the editor

    • Textures can be automatically padded out to a power-of-2 or square power-of-2 size

    • Textures can have a solid colored background color removed in order to create a masked alpha channel (e.g., a cyan or magenta background can be chroma-keyed out in a sprite sheet)

      image alt text

  • New: Disabled HZB by default as it tends be slower than occlusion queries in many scenes

  • New: Disabled the editor gizmo when rendering high res screenshots

  • New: Distance field AO and Ray traced shadows supported on PS4

  • Added r.AOHistoryDistanceThreshold with default to 20, can be tweaked to avoid ghosting behind characters while not causing too much flickering

  • New: Enabled support for android devices that report less than 16 vertex attributes.

  • New: Experimental support for Mobile Preview for Feature Level ES3.1/Metal

  • New: Exposed gusting parameters for SpeedTree wind.

  • New: Exposed SetForcedLodModel on static mesh blueprint nodes (StaticMesh->Rendering->LOD property)

  • New: GPU Profiler: Display a warning if GPU profile is captured with v-sync enabled.

  • New: High quality bloom in epic scalability setting.

  • New: Implemented GPU profiler interface for PS4

  • Now we get proper formatting and other gpu profiler functionality that already works for other RHI's (r.profilegpu.root)

  • New: Improved Editor startup time by reducing string comparison parsing shaders

  • New: Improved tessellation performance. Raised max tessellation factor to 15.

  • New: Integrated functionality from Github that allows you to render tiles with a material rather than a texture.

  • New: MaterialFunction Virtual coordinates for a raytraced plane, in world units

  • New: Materials can opt-out of outputting to the velocity G-buffer when running with accurate velocities.

  • New: Metallic channel is now supported for non lit materials e.g. SubsurfaceProfile

  • New: MinLOD setting for static mesh assets and an override on components

  • New: Moved Roughness in GBuffer to a better spot for better performance.

  • New: Optimized Skeletal mesh update on CPU

  • New: Reduced number of uniforms uploaded for mobile OpenGL when using skeletal meshes

  • New: Removed DYMANIC_CAST_XXX_RESOURCE macros

  • New: Removed RHI resource macros for greater clarity

  • New: Removed several ifdefs related to parallel rendering making it available for DX12 and any PC RHI

  • New: SetRenderTarget now requires you to specify what DepthAndStencil access you want

  • New: SpeedTree importer improvements

    • two sided lighting fix included even when there is no normal map

    • added lod option for painted foliage

    • reimport maintains changed materials (as long as the material setup hasn't changed drastically)

    • reimport touches textures to make sure they reimport, too

    • (Related to "MS_VertexAnimationTools_MorphTargets") Changed the way that the transform takes from local to world takes place in the shader so that it may work with mesh particles. (Local>World in the vertex shader then world to tangent in the pixel shader.)

  • Add a new argument to instanced static mesh UpdateTransform method to prevent a render thread update

  • Added missing console commands and exec commands to 'help' command

  • Added workaround for shader compiler failure on some androids using SGX540 gpus

  • Allow BC6H and BC7 texture formats if and only if D3D11 SM5 is the only target.

  • Allow Ctrl+B and Ctrl+E to find/edit the associated decal material for decal actors

  • 'Build lighting only' triggers a BSP build first, fixes crash in RenderTestMap where Lightmass got sent a request for a 0 size mapping due to out of date BSP

  • Cleaned up editor grid rendering when using mobile preview rendering.

  • Disabled editor only features in shaders for consoles. Small improvement in shader performance.

  • Fixed a bogus bounds for instanced static mesh components with no instances

  • Fixed a bug which could cause corrupt UVs when importing skeletal meshes.

  • Fixed a material leak in stereo rendering.

  • Fixed a memory overwrite issue in OpenGL causing random crashes.

  • Fixed a number of shadow map rendering bugs with the forward renderer (mobile) that can occur when large shadow maps are in use.

  • Added small optimization to avoid computation of shadow maps that will not be used.

  • Fixed an occasional large stall when using rendering using an RHI thread on consoles

  • Fixed an initialization issue in one of the FCanvasTile item constructors

  • Fixed an issue when using skeletal meshes with 75 bones or more on Metal

  • Fixed BMP screenshots outputting in unsupported format

  • Fixed bug in which shader sampler parameters could be discarded in with simple shaders. Affected ES2 shaders only.

  • Fixed crash caused by static mesh registration with no render data

  • Fixed crash in auto lightmap UVs

  • Fixed crashes when instanced static meshes attempted to use a lightmap or shadow map that was too large. Lightmap size for instanced static meshes is automatically reduced to fit.

  • Fixed DBuffer decals in stereo rendering.

  • Fixed Decal mask value exposed to the material

  • Fixed DepthOfField material expression returning the right values again

  • Fixed editing blueprint CDO of a hierarchical static mesh component never building the tree.

  • Fixed energy conservation for 2 sided foliage

  • Fixed experimental feature ForEachLight (Translucency per pixel lighting)

  • Fixed first decal not being rendered

  • Fixed HZB occlusion bug where large vertical meshes would be incorrectly culled.

  • Fixed incorrect culling with orthographic cameras

  • Fixed issue when using non-UTextures for MIC textures in blueprints

  • Fixed Mobile renderer ignoring translucent material with depth test disabled

  • Fixed motion blur issues with cloth

  • Fixed pooled resources getting merged back into the main pool on the same frame they were released. This fixes some random rendering issues related to the DynamicMeshBuilder

  • Fixed PostprocessMaterial StaticSwitch functionality while avoiding warning that appeared in some rare cases

  • Fixed r.DumpingMovie console variable not triggering the code any more

  • Fixed r.Shadow.MaxResolution not updating at runtime

  • Fixed rare visual artifact with bloom

  • Fixed rendering a few static mesh lists missing on the mobile renderer

  • Fixed crash where adding a Scene Capture 2D to Render Target overrides the motion blur settings in level

  • Fixed shader manager crashing on shutdown when bAllowAsynchronousShaderCompiling is false

  • Fixed situation that could result in some editor icons being drawn at twice the size.

  • Fixed some minor problems with AllowAsyncRenderThreadUpdates

  • Fixed Speedtree shaders not getting correct wind velocity when outputting accurate velocities

  • Fixed splitscreen post-effect bleeding issues on some platforms.

  • Fixed SubsurfaceScatteringProfile quality issues, the recent full resolution mix caused discoloration.

  • Fixed swizzled UV1 for displacement mapping

  • Fixed temporal aa with off axis matrix projection matrices

  • Fixed Text Render component not showing up in packaged builds.

  • Fixed using the SubsurfaceProfile shader model with LPV.

  • Fixed ViewProjectionMatrix not getting set for certain rendering paths causing issues with UMG rendering

  • Improved screen shot performance.

  • Materials are not longer available for editing when using property matrix to avoid a race condition.

  • Reduced processing time when importing cubemaps bigger than 1024 width/height

  • Removed r.GBuffer project setting

  • Skylights only capture on being enabled if they have never captured before

  • Added fast path for changing skylight color or intensity that doesn't recreate rendering state (full static draw list recreation)

  • Sort AutoComplete entries for in game console like in editor

  • Stationary lights with many unbuilt objects now fall back to CSM on a frame by frame basis

    • This fixes the bug where many unbuilt interactions during registration would get corrected by blueprint construction scripts but the stationary light would continue to think it was built

  • UBillboardComponents now render bounds properly

  • Worked around a shader bug that occurs on some mobile GPUs in which an incorrect normalize result can be produced by large view vectors.

FX

  • New: Added support for Ctrl+B and Ctrl+E shortcuts to find/edit the associated asset for selected Niagara actors

  • New: First pass of function calls in Niagara.

  • New: Particle Systems using the Bone Socket module now work correctly when spawned from an anim notify.

  • Fixed a bug that could cause a crash in Cascade with specific curve setups.

  • Fixed issue in Mesh Emitters when Initial Mesh Rotation would sometimes be applied twice.

  • Fixed performance issue when multiple cascade tabs were open at once.

  • Particle Systems spawned from Blueprints and directly in code via SpawnEmitterAtLocation now work correctly with collision.

Lighting

  • New: Added color temperature property for lights

  • New: Added new unfinished/experimental translucency lighting mode: TLM_SurfacePerPixelLighting Higher quality than Surface but more expensive (loops through point lights with some basic culling, only inverse square, expensive, no shadow support yet) Requires 'r.ForwardLighting' to be 1

  • New: Bloom will no longer lose quality at the epic setting.

  • New: DFAO optimizations for PS4

    • Overall empty scene cost on PS4 3.77ms -> 2.83ms

  • New: Distance Field AO history filtering improvements

    • Rejecting history based on world position differences, not camera Z. This fixes a lot of noise under camera movement.

    • The last texel of the history is never reused to avoid artifacts from bilinear filtering of a viewport in a larger render target

    • Fixed error in the reprojected depth from storing something else in the sign of the depth

    • There's now a 2d spatial filter of stable results applied to any pixels whose history was discarded (unstable)

  • New: Enabling a skylight from a blueprint SetVisibility call will now cause it to capture and generate its processed texture

    • The scene tracks enabled skylights in a stack and the most recently enabled one wins

  • New: Heightfield dynamic Global Illumination

    • Enable with 'r.DistanceFieldGI 1' on console, when landscape is present

    • A GBuffer atlas is created for Landscape from components that can affect indirect lighting based on the current view

    • Shadowing from a directional light is computed by reusing shadowmaps and ray tracing distance fields

    • Lighting is computed for the atlas using GBuffer properties

    • First bounce GI light transfer is computed for a receiver by iterating over all the nearby lit texels of the heightfield and treating them as Virtual Point Lights. Two gather regions are used, the larger one skips through the heightfield to achieve a larger bounce distance. Distance field AO is used to provide local shadowing.

    • Regions outside of the view don't have valid shadowing yet

  • New: New cinematic shadowing controls - these are useful when setting up extra shadow casting spotlights while minimizing the shadowing cost

    • ?bCastShadowsFromCinematicObjectsOnly on the light

    • bCastCinematicShadow on components

    • These do not affect static shadowing or Ray Traced Distance Field shadows

  • New: Ray traced distance field shadows can be done at full or half res with bilateral upsample. Half res has some unresolved flickering artifacts from TemporalAA.

    • Meshes whose distance fields are generated as two sided are expanded during ray traced shadow casting, helps trees match up with CSM much better

  • New: Ray traced distance field shadows now implement the cascade fade

  • New: Rendering light shape into reflection captures for static lights.

    • This allows higher quality specular for static lights, especially useful in high perf cases such as VR.

  • New: RTDF shadows don't force backfaces to be shadowed, improves materials with subsurfaces scattering

    • Added a distance based ray start offset which reduces incorrect self shadowing artifacts

  • New: Skylight MinOcclusion works on sky specular occlusion as well

  • New: SubSurfaceScattering support for ray traced distance field shadows

  • New: Surfel Global Illumination prototype with Distance Field shadowing

    • Disabled by default, need a movable skylight with r.DistanceFieldGI enabled at load time (ConsoleVariables.ini) as well as 'Generate Mesh Distance Fields' in the Renderer project settings

    • Surfels (oriented disks) are placed on mesh surfaces and capture diffuse color by evaluating the material with actual UVs and world position

    • Surfels are lit and shadowed by ray tracing through mesh distance fields (directional light only so far)

    • Irradiance cache records are lit with nearby Virtual Point Lights created from lit surfels. Only using camera based LOD of the surfel representation and object based surfel culling, no hierarchy yet.

    • Shadowing of the VPLs is provided by distance field cone tracing. A depth visibility function is constructed along each of the 9 cone trace directions, and used to shadow the incoming VPL lighting.

    • Component reregistration and transform updating causes surfels to be generated again which can be slow. In the future only the material needs to be re-evaluated.

    • SkyLight MaxOcclusionDistance increased to 10m, which is the minimum useful amount for GI

  • New: Switched diffuse shading model from Lambert to energy conserving Burley.

  • Async distance field builds are now forced to be complete before cooking distance field data - fixes distance field lighting missing in cooked builds

  • Components with self-shadow only enabled are now correctly shadowed by the environment, and no longer incorrectly cast shadows on the environment in some cases

  • Distance field scene updates are no longer tracked when the project setting r.GenerateMeshDistanceFields is disabled

  • Fix for crash importing lighting with static meshes with LODs that have been vertex painted

  • Fixed a situation in which level lighting could be lost after a rendering preview feature level switch had occurred.

  • Fixed eye adaptation with VisualizeHDR enabled.

  • Fixed IrrelevantLights getting cleared per-LOD when it is stored per component, caused lighting to not be fully built with static meshes with LODs that are fully shadowed from a stationary light

  • Fixed Lightmass limitation on number of multiple CPU cores in-use that was bound by number of cores used by the starting agent.

  • Fixed material AO for dynamic lighting path.

  • Fixed primitives with bLightAsIfStatic enabled causing lighting to be unbuilt if they move into a light's influence radius that they weren't built against

  • Fixed small objects not consistently affecting DFAO - noticeable in test maps

  • Fixed some shadows disappearing with large terrain

Materials

  • New: Added a "mutli-lerp" function that blends up to 4 float 3 values.

  • New: Added a high-level shader cache that can record the shaders & RHI states used by a project and reconstruct them during loading to reduce in-game hitching.

    • At present the shader cache is only available for OpenGL, but can be added to any RHI.

    • Shader caching can be toggled on or off by setting the console variable r.UseShaderCaching in the project/engine INI files.

    • The console variable r.UseShaderDrawLog toggles whether the cache also stores the used RHI states so that shaders may also be 'warmed' during load (toggled by r.UseShaderPredraw).

    • Shaders & states can be tagged by a 'streaming key' so that they are only reconstructed when the same key is active on subsequent runs to reduce overloading the RHI in streaming games.

  • New: Added a new material function to compliment a maxscript that was added to store a second set of normals in a models vertex colors.

  • New: Added a new material function to compliment a maxscript that was added to store a second set of normals in a models vertex colors.

  • New: Added a script that's capable of animating static mesh morph targets via textures.

  • New: Added a Transform to Clip Space material function.

  • New: Pixel Depth Offset material input

    • Allows writing to the depth buffer per-pixel, making use of D3D11's conservative depth writes to maintain ZCull

    • This is useful for billboard LODs with distance field lighting, as the distance field representation of the mesh used for shadowing is still accurate but the billboard depths used for primary rays is not.

  • New: Submitted a node with several outputs for screen and buffer resolution .

  • New: The flipbook material function now gives the user access to the mip settings.

  • New: There is a new abstract MaterialExpressionCustomOutput material node that can be subclassed in a module. This can be used to generate custom functions based on the user's material that can be called from your pixel shader for a custom rendering pass or other effect. UMaterialExpressionLandscapeGrassOutput is an example of this.

  • New: View.ViewToTranslatedWorld is now correct for shadow passes, allows billboards to face the light.

    • This affects ViewToWorld transforms in the material editor used for billboarding

  • Fix a potential crash during garbage collection with material instances

  • Fixed crash bug in Material Instance Editor caused by resetting the parent material.

  • Fixed directional lights for translucent materials using TLM_SurfacePerPixelLighting

  • Fixed performance issue in materials which caused all components to be re-registered frequently.

  • Fixed shader complexity viewmode in certain earlyZpass modes

  • Fixed situation in which ES2 material instances may incorrectly render metalic materials as non metalic.

  • Fixed spot lights for translucent materials using TLM_SurfacePerPixelLighting

  • Fixed Subsurface_Profile causing wrong colors when using extreme inputs values

  • Fixed visual corruption or crash when rendering landscapes with more than one subsection and with tessellation applied.

  • Fixed wrong behavior when using MaterialInstanceDynamic (MID) with SubsurfaceProfiles

  • Made high quality world aligned normals the standard approach in the world aligned texture nodes and removed the old approach.

  • The world aligned complex material function now uses the "Shared: Wrap" option for all of its texture samples.

  • Unlit materials can now use the Normal input when also using refraction.

Postprocessing

  • New: Added another bloom stage (gaussian) for larger bloom

  • New: Added Rec.709 output display device

  • Use r.tonemapper709 to enable

  • New: Improved large scale SSAO, changed algorithm to be more efficient

  • New: New tile based motion blur with smooth gradients. WIP

  • Enable using r.motionblurnew 1. Still WIP

  • Changed chromatic aberation to be the correct direction and with wavelength based color separation amounts.

  • Changed Screen Percentage post process setting to also work with scalability console variable

  • Fixed an issue where changing any Atmospheric Fog Component properties under PrecomputeParams had no effect or caused rendering issues because the precomputed data was not being regenerated

  • Fixed PostProcessMaterial SwitchParameter behavior

Optimizations

  • New: Added a new 'BestPlus' configuration for SpeedTree shaders. 'Best' is now faster.

  • New: Added console variable r.OcclusionQueryLocation to optionally move Occlusion Query rendering before the basepass. This can reduce CPU stalls in some cases.

  • New: Large improvement to high poly mesh importing speed.

  • New: Remove LeafRipple from 'Best' SpeedTree configuration. Still available in 'BestPlus'

  • Distance field data is no longer included in server cooked content.

  • Fixed a performance regression in shadow rendering. Rendering with lots of shadow casters should be significantly faster on CPU. 4.7.4 also included this fix.

  • HZB is no longer built if it will not be used.

  • Removed ClearCoat material handling from shaders if there are no ClearCoat materials in the given view.

UI

  • New: Added a new ListItemAlignment option to the SListPanel that allows for STileView items to stretch horizontally instead of increasing the padding between the items.

  • New: Added a notification to show when a player receives an invite outside of the friends panel. A bang on the friends dropdown icon now appears.

  • New: Exposed an option to SlateApplication to close all existing windows.

  • New: Switched SNewClassDialog to use colorized buttons to match the style of other creation buttons in the editor

  • Added funcs to insert slots (and fetch the number of slots)

  • Modifications to search box to improve customization

  • Fix unnecessary garbage collection of Slate resources.

  • Fixed a crash that could occur when destroying a widget

  • Fixed an issue where the join confirmation button would disappear if a player received a notification from any other player.

  • Fixed displaying of aspect ratios in Common Screen Resolution tooltips in Play settings

  • Greatly improved performance of drawing wrapped text using the canvas.

Slate

  • New: Added constructor to FSlateTextureData that takes a pointer to texture data

  • New: Added DemoMode visualization of slate mouse events - draw a fuchsia ring around event location.

  • New: Added support for hint text on multi-line editable text

  • New: Added the ability to double-click on the asset name in a SContentReference widget to open that asset

  • New: Analog Cursor has been upgraded with some additional functionality and some bug fixes.

  • New: Implemented Page Up/Down support for multi-line editable text

  • New: Improved the error handling message in FUICommandList::MapAction to include the name of the conflicted command

  • New: Line filtering no longer relies on texture resource.

  • New: Minor: Slate will do less work if the cursor is outside of Unreal Engine windows.

  • New: TabManager : Hitting ESC will interrupt the current drag drop. NOTE: It will not restore the dragged widget to its original location.

  • New: The IToolTip interface is now told when tooltips are closed so that it can lazily create and destroy the contents of a tooltip widget in custom implementations.

  • Allow tabs to be entered into text edit boxes

  • Changed SEditorViewport to bind the default IsVisible implemenetation if a subclass did not provide one

  • Fix for Editor crashes when dragging a docked window

  • Fixed a bug in navigation which would cause issues in particular multiple monitor layouts.

  • Fixed a bug that would have the viewport report the incorrect size / positioning information if queried before any input was processed.

  • Fixed a frame-latent resize issue in SMultiLineEditableText when the scale changes

  • Fixed a potential crash in Slate tooltips.

  • Fixed gamma correction not being accurate in Slate. We now use the same gamma correction scheme as the tone mapper which uses the more accurate srgb standard

  • Fixed incorrect commit reason being broadcast when an editable text box was being cleared.

  • Fixed issue where controller input would not be routed to the view port until after the user clicked. (in standalone)

  • Fixed list views not being scrollable when they contained a single item that was larger than the available view area

  • Fixed right-mouse-button scroll being double-applied in SScrollBox.

  • Fixed SListView scrolling too far if you requested an item be scrolled into view before it had been ticked

  • If you created a SListView and then immediately requested that it scroll item X into view, it would actually scroll item X+1 into view.

  • This change will defer such a request until the next Tick, at which point the SListView will be capable of handling the scroll correctly.

  • Fixed variable and function shadowing in SComboButton that broke opening the menu programmatically via SetIsOpen

  • No longer ensuring that the widget path must be valid when showing a menu anchor. If no valid path is found, no popup occurs. Too often this state can occur when delaying with animations and delays.

  • Slate : DragDetection now does more robust check and returns invalid path instead of operating on a truncated path.

  • Tooltips will no longer "punch through" non-Unreal Engine windows.

  • We no longer clear focus on child widgets of the game viewport when the window loses focus by default. This means controllers will still be able to interact with the game when you give focus to another app, like visual studio.

Unreal Motion Graphics (UMG UI Editor)

  • New: Split-Screen UI with Unreal Motion Graphics

    • We now support for split-screen UIs in UMG. Here is an example of a four-way split with a different menu for each player.

    image alt text

  • You can add Widgets directly to a specific player's screen instead of the viewport directly. This will automatically position and size the UI for each player. Player-specific screen UI will appear underneath anything that was added directly to the viewport.

    image alt text

  • New: Add a blueprint event for when an animation starts in UMG and add new playback options for playing in reverse and for ping-pong playback where the animation plays once forward and then immediately plays once backwards.

  • New: Canvas quality improvements when using a scaled font.

    • We now use bilinear sampling rather than point sampling.

  • New: Add animation playback support to the widget editor.

  • New: Add support for animating enumation properties in UMG animations. This enables animating things like visibility.

  • New: Adding a new async node that can download images from the web. Jpeg/Png/Bmp are the only supported types for now. You can now download an image from the web and place it into a image widget or on a border...etc.

  • New: Adding a way to make a custom user widget intractable for use with virtual cursors with a virtual IsInteractive function. Also adding a PauseAnimation function, which returns the current time of the animation to use when resuming it with Play later.

  • New: Adding a way to set the brush on image and border.

  • New: Adding handlers to the design surface for touch gestures so that it moves more like what's expected on Mac.

  • New: Adding HasChild to all UMG Panel widgets

  • New: Adding more + Zoom levels into the designer.

  • New: Adding support for split screen to UMG and Slate. There is now a framework at the game viewport client level that allows content to be placed into a canvas slot that is kept in the sub-rect for the player. The new framework also provides a tooltip provider so that new windows are not created for games if a tool tip pops up.

  • AddToViewport will continue to function as it always has.

  • If you'd like to take advantage of putting widgets on a particular users screen you should use AddToPlayerScreen, which uses the OwningPlayer you provided when you created the widget to determine which screen to place it on.

  • New: Adding the ability for bindings to also work on TWeakObjectPtr.

  • New: Adding windowless rendering for drag and drop, there's a new drag & drop operation you should inherit from for games. FGameDragDropOperation, can be used for any single window game drag/drop operation you'd like to implement. UMG users don't have to do anything special, their drag drop operations will now just work in fullscreen games.

  • New: Allowing access to the widget animations start and end time from blueprints.

  • New: Allowing user focus (by user index) to be set on a widget.

  • New: Buttons now have support for Pressed/Released events.

  • New: Change the way names are displayed for items in the animation tree so that they stay in sync with the widgets being animated, and for container slots, display the name of the parent container and the name of the contained widget.

  • New: Deprecating PlaySound on UserWidget. In blueprints there's a new PlaySound2D available everywhere, it no longer needs to be associated with a specific widget.

  • New: Exposing a lot more functions for the FKey structure to blueprints. You can now check what kind of key it is, you can also now get the DisplayText for it.

  • New: Hovering over a widget in the UMG designer will highlight the corresponding entry in the Hierarchy tab

  • New: Improved the performance when UMG had a null font set on a widget

  • New: Introducing UDPICustomScalingRule, useful when you need to completely programatically define what DPI scale should be used. Possibly based on different screen sizes, of physical screen sizes if you can detect them, or even per platform logic.

  • New: Make animation selection more consistent

  • Update the state of the preview widgets whenever the selected animation changes.

  • When opening the widget editor don't select the first animation by default. This will show the widgets in their default state.

  • Clear the animation timeline when there is no animation selected.

  • New: Menu Anchor - Several new functions on menu anchor, along with a delegate to be notified when the opened state of the menu anchor changes.

  • New: Names of widgets in your UMG widgets now have friendlier names.

  • Existing and new widgets in Hierarchy have friendly display names.

  • New widgets exposed as variables in My Blueprint have friendly object names.

  • New: Added GetAllWidgetsWithInterface function

  • New: ProjectWorldLocationToWidgetPosition - Allowing easier projection from world space to widget space.

  • New: Reworking Custom and Desired sizes in the designer. You can now preview any custom or desired size in the context of the screen as well. So there's now a separate dropdown for choosing screen size, vs. how the widget preview should fill that screen.

  • New: The designer now allows you to set a background image on the root widget to be visualized on the mock screen to get a better idea of scale.

  • Improvements to Drag/Drop.

    • Now allows you to choose a pivot, and offset. The drag pivot defaults to Center,Center.

    • The drag data can no longer be GCed while drag is being performed.

    • In order to reduce drag/drop popping on begin drag there is now a small interpolation that occurs to move the object to the chosen pivot/offset.

    • The DefaultDragVisual property is now correctly marked as ReadOnly, it was previously set to read/write, that was inaccurate.

  • New: UUserWidgets now have a Destruct event that is called when the slate widget is destroyed.

  • New: When adding widgets to the viewport, you can now as an advanced parameter choose the ZOrder. Additionally ZOrder has been added as an option to the WidgetComponent. Widget Components now correctly take resolution quality/scale into account when positioning the widget on the screen.

  • New: Widget navigation customization on widgets now allows for basic control of navigation options of widgets with the controller or keyboard.

  • New: Widgets now support Widget ToolTips, so if you want to make a tooltip that has a bunch of custom content, now you can!

  • New: You can now rearrange widgets in the hierarchy.

  • New: You can now set the mouse wheel behavior when it hits a boundary on Scroll Boxes. This is also available in Slate.

  • Adding GInitRunaway at the start of each widget tick to give users more leway in runaway detection.

  • WidgetComponent DK2 Crash Fix. Initializing the DynamicMeshBuilder for each view.

  • Adding a check to see if a widget is unreachable before trying to forward a slate event to it.

  • Fix an issue where an animation would become unusable if you used undo to remove the first keyframe which was added.

  • Fix an issue where double clicking on a key in an animation with a single keyframe would hang the editor.

  • Fix an issue where the animation editor could get into a state where the user could add keyframes even though there was no active animation selected.

  • Fix an issue with widget animation in auto-key mode where modifying a widget in the preview wouldn't add keys to the currently selected animation.

  • Fix an issue with widget animation where selecting a key and then a track from the tree, or vice-versa, and then using delete would delete both the track and the keys, instead of deleting just the last item which was selected.

  • Fix an issue with widget animations where deleting an animation track and then using undo would bring the animation track back, but it would not longer animate the associated widget.

  • Fix an issue with widget animations where moving or deleting keys in the active animation wouldn't cause the preview widgets to update.

  • Fix and issue where deleting an animation would prevent the user from using that animation name until the widget editor was reopened.

  • Fixed a crash that would occur when exiting a game with cooked content

  • Fixed crash when right-clicking a 3D widget with a context menu.

  • Fixed issue where the mouse position wasn't properly translated into a Widget Component in the world

  • Fixed translucent materials not rendering correctly on 3D UMG widgets.

  • Fixing a bug with Render Transforms's IsIdentity calculation, the wrong identity comparison was being performed. This was causing all UMG widgets to add a render transform to their stack, needlessly adding more CPU side layout calculations to all Slate layouts. This also means you can use a scale of 0 now in your render transform when doing animations.

  • Fixing a designer resizing issue with changing the upper left/top corner of a canvas item with stretched anchors.

  • Fixing a flaw in the order Construct is called for a widget, it was being called too early, before the SObjectWidget was created, which can cause lots of strange problems like setting visibility on the inner widget instead of a wrapper if done in the Construct event.

  • Fixing Above Menu anchor spawn point to correctly offset directly above the menu anchor. Additionally adding Above Centered as a spawn location.

  • Fixing an assert when binding to checkbox's checked state.

  • Fixing lots of small usability problems in the designer. Copy / Paste of widgets now attempts to recreate slot information of the root items into their new container. AKA, things copy and pasted in the canvas panel don't show up the same size; now they do. Lots of weird bugs when resizing, moving, re-anchoring widgets have been fixed.

  • Improving the slate widget host to allow content to be set at any time. Also the marching ants no longer appears unless it's design time.

  • In the designer, fixing a bug that was preventing GoTo Function on function bindings from working for the newer style binding system.

  • Introducing a workaround to issues loading UMG widgets on dedicated servers. In uncooked builds the UMG module needs to always be loaded so that widgets can be cooked, even if they wont be loaded in the cooked build.

  • Making a large pass and fixing all the places properties were incorrectly set to EditDefaultsOnly, they should have been set to EditAnywhere.

  • Copying a widget with named slots and pasting it now correctly recreates items that were contained in named slots.

  • NamedSlots, ScaleBox, and SizeBox are now SelfHitTestInvisible by default.

  • No longer allowing the construction of abstract classes for widgets. If the class has the abstract flag then we just return null.

  • No longer counting collapsed visibility widgets towards the desired size of a canvas panel.

  • No longer exposing Disabled slate brush on the FButtonStyle. This was adding a lot of confusion. We want to support custom look and feel disabled buttons, but this particular property wasn't actually being used by any of the core slate widgets and so users were becoming confused why it didn't work as expected. Hiding from view until we have time to refactor disabled styling for buttons and more.

  • No longer routing paint and tick requests while GIsRoutingPostLoad is true, this can occur in editor builds when uncooked data needs to be streamed in. When this is occurring if slate ticks blueprint code it can cause a crash due to checking for this flag, so we're just going to ignore tick and paint requests when this is happening.

  • Now initializing getter binding temp values on the stack to deal with blueprint functions that do not properly return a value. Previously garbage could be returned in a binding if the users blueprint function didn't properly terminate at a return node.

  • Performance fix on screen space widgets coming from components, we no longer attempt to recreate them every frame, and then remove them from the viewport.

  • Properly handling the F2 button for renaming a widget in the hierarchy view.

  • Reorganizing the properties on the progress bar to make it a bit cleaner.

  • SetKeyboardFocus is now correctly marked as non-const so it should now appear as an executable node in blueprints.

  • The Category for a widget is now recorded in tag data parsable without loading the widget into memory. So now they can be categoried in the palette correctly even when unloaded.

  • The design surface now allows overzooming without control for touch input just like it does for the scrollwheel on mouse.

  • Fixing a paste crash that occurs if you attempt to paste widgets into a container that has no more room for them, you now get a notification of the failure.

  • Properly ignore any widget that is not of the class provided when finding all widget instances.

  • The SWrapBox now correctly ignores collapsed visibility widgets when performing layout calculations.

  • Slate Application now bubbles motion detection events. This prevents the commonly reported bug if focusing UMG widget (Or any slate widget) except for the game viewport suddenly causes all motion input to stop being received by the game.

  • Fixed an editor crash and memory corruption issue that occurs when UMG 3D Components have been placed in the level and the widget they spawn is recompiled with certain changes. Restructuring the way external blueprint compilers are registered so that they can properly wait until all compiling has finished to do re-registering of components...etc.

  • It's now safe to call IsPressed on a button before it has been added to the viewport.

  • No longer duplicating the combobox entries on show/hide. It now only loads the data once on load, the fields are also now private, as they are only useful at design time.

  • Fixing many problems with the String Combobox. Updating/Refreshing issues, crash bugs when clearing the list.

  • Now releasing the slate resources of a slot after removing the slot from a panel. This fixes long standing weird bugs users were experiencing as a crash on exit after adding and removing multiple items a panel, either through drag/drop or other means.

  • UserWidgets now follow their outer chain looking for an outer that know what world they are in. This is necessary if you want to know what world a widget is in for player controller queries...etc from a nested UUserWidget that's defined statically.

  • When the text changes or the checkbox checked state changes, we now mirror the change in the UObject's copy of the data so that if the slate object goes away and is then recreated, we can recall the state for the slate object if the user is not persisting the data themselves.

  • Clearing the selected objects when the widget selection is about to change. This will ensure all last minute changes like those coming from the color picker while the eye dropper are finished get a chance to finish, before the migration set of widgets changes out from under it.

  • Fixing a crash that occurs when compiling a UMG widget without any animations, and without the timeline/animations visible. Causes an object to be garbage collected. We now report the object reference to prevent GC.

  • Throbbers are now capped at 25 Pieces.

  • The widget component now removes the widget from the parent when it's hidden.

  • Fixing the pivot point not allowing the widget to be hit tested correctly on the component.

  • UserWidgets that have been added to the viewport or players screen are now automatically removed and marked for pending kill when a full level transition occurs. This avoids lots of problems with old worlds being referenced causing lots of Garbage Collection crashes and headaches for users.

  • Using "Wrap With" in the designer now properly wraps multiple selected widgets if they are siblings, otherwise groups all possible groups of selected siblings.

  • New: Canvas quality improvements when using a scaled font.

  • We now use bilinear sampling rather than point sampling.

Programming Release Notes

AI

  • New: Added versions of UEnvQueryTest::GetItem[Actor/Location/Rotation] parametric with FEnvQueryInstance::ItemIterator to avoid conversion-related issues when accessing query's items with item iterator

  • New: Modified Blackboard-key-change notifications to allow observers specify if they need to continue observing given blackboard key.

  • New: SightTargetInterface got a new parameter allowing implementing code to indicate "how visible" (if at all) an actor is.

  • New: Team affiliation handling to has been added to Sight and Hearing AI senses.

  • A bunch of Pawn.BaseEyeHeight uses were replaced with appropriate Pawn and Actor function calls to improve AI code consistency.

  • Comments on FEnvQueryResult have been improved to be more enlightening

  • EQS named params structs are now deprecated and should be replaced with AI Data Providers.

  • Fixed Blackboard's "synced keys" issues related to BlackboardComponent's registering/unregistering bug.

  • Fixed disappearing AI messages sent while processing message queue.

  • Fixed Envigornment Querying System's manager to not store invalid query templates, meaning the ones without any options defined

  • Fixed PawnActions not being aborted on PawnActionComponent's unregistering

  • Improved compatibility of Blackboard "enum" and "native enum" keys, a good step towards unifying both

  • Made Environment Querying System generated Points host and handle navigation-related data in a nicer way

  • Replaced operator * from EQS item iterators with new function: GetIndex()

  • New: Two new functions has been introduced to Navigation System, GetRandomReachablePointInRadius ?and GetRandomPointInNavigableRadius, to replace a mis-named GetRandomPointInRadius

    • As a side note, GetRandomPointInNavigableRadius produces items distributed uniformly.

  • A bug making PrimitiveComponents always navigation-relevant, even those with "Can Ever Affect Navigation" set to false, has been fixed

    • A serialization issue of NavigationDataClass in Navigation System's properties has been solved so that game-specific classes can now be used for these properties.

Behavior Tree

  • New: Added instancing for blackboard key types to support custom memory allocations.

  • New: Parametrized focus priority used by BTService_DefaultFocus, but kept it unexposed. The goal here is to allow easy expanding the logic by deriving the class.

  • Added a safety check to not crash if BTTaskNode, that's no longer part of active BT, gets a notification via UBTTaskNode::ReceivedMessage call

  • Removed failsafe Tick call from TimeLimit decorator, since it's no longer needed.

Debugging Tools

  • New: Added a function to VisualLog allowing users to add arbitrary FVisualLogShapeElement instances to given log entry which results in even more flexibility in logging spatial data.

  • New: Made AIController automatically redirect all visual logs of its components to controller's log

  • New: Added a generic support for navigation relevant actors being able to supply NavMesh generation process with subsections of their collision geometry

  • LandscapeHeightfieldCollisionComponent is a working example here

  • Done by expanding INavigationRelevantInterface

  • New: Added a way to query navigation data if a specified world location is inside a given navigation node (like a NavMesh polygon).

  • New: Added support for based navigation paths.

  • New: Made navigation path types derivable so that game-specific navigation data can create game-specific path types and have them still treated properly on the engine level

  • Optimized use of NavMesh boundary data in crowd simulation, fixed multiple samples created in the same location.

  • Added sanity checks for collision components' existence in APawn::UpdateNavigationRelevance overrides, since it's not guaranteed and it could lead to crashes

  • Cleand up NavigationSystem's closing process a bit to reduce redundant calls to NavigaitonDatas and their sub-parts.

  • Fixed NavMesh-drawing related bug that would crash the engine if user requested drawing of navigation-collectible geometry while there was navigation octree instance.

  • Fixed variable shadowing instances in Recast code

  • Getter and setter for UPathFollowingComponent::bStopMovementOnFinish has been added to avoid untraceable changes to the property

  • Made navigation paths' update requests store a weak pointer to paths rather than a shared reference which could lead to "path leakage"

  • Made NavigationData generators thread-safe shared pointers as a step towards full multi-threaded navigation generation

  • Modified FRecastTileGenerator::DoWork to gracefully handle being called with parent generator being already destroyed

  • UNavigationSystem::NavDataClasses array has been removed due to no longer being used

  • Fixed a bug in NavigationSystem that would result in deleted NavigationData instances not being removed from NavigationSystem which could lead to a crash.

  • Fixed a bug in NavLinkProxy that made it not notify navigation system about changes to hosted links' direction.

  • Fixed a bug stopping NavRelevantComponents from updating with changes to owning actor.

  • Fixed HierarchicalInstancedStaticMeshComponent not being able to affect NavMesh generation regardless of its settings

  • Fixed NavModifierVolume not reacting to runtime changes to its AreaClass

  • GetRandomPointInRadius used to return true even if query actually failed. Fixed it to return appropriate value.

  • Moved navigation-related undo/redo handling from LandscapeProxy to Actor. Now all actors should handle navigation-related undo/redo consistently.

Animation

  • Performance: USkinnedMeshComponent::AnimUpdateRateTick() optimized to reduce potential dynamic allocations. 0.40ms -> 0.26ms in test scene with many characters.

  • New: Added a new stat that represents all game thread time taken by the animation system (STAT_AnimGameThreadTime, "AnimGameThreadTime")

  • New: Added a stat to track time spent triggering notifies (STAT_AnimTriggerAnimNotifies, "Trigger Notifies")

  • New: Added SkeletalMeshComponent version of GetDistanceToCollision(), taking into account PhysicsAsset rigid bodies. Fixed ?FBodyInstance::GetDistanceToBody not handling PhysicsAsset rigidbodies properly.

  • New: Added stats for UAnimInstance construction and init time

  • New: Added status for animation importing to identify where it's taking a long time.

  • New: Added UninitializeAnimation, so that we can clear all data that it was being held

    • It will trigger all end notification

    • It stops montages

  • New: Changed DoesSocketExist to support bone names as well. This now is consistent with any other socket APIs.

  • New: Exposed GetCurveValue to outsider, so you can query.

    • This still depends on tick order. If you tick before animation, you'll get last frame data, not up-to-date data.

  • Renamed UpdateKinematicBonesToPhysics to UpdateKinematicBonesToAnim to correctly describe what it does.

  • New: PreClothTick is now dynamically registered based on the need of the SkeletalMeshComponent

  • New: We now flip bone transform buffers in RefreshBoneTransforms if we are not part of actor ticking. Should resolve issues when RefreshBoneTransforms is called manually from other systems (e.g Matinee)

  • Added logic to RefreshBoneTransforms so that if we already have an evaluation task in flight we don't crash.

  • Changed InitAnim so that it will block on any currently active parallel evaluation tasks, solving some crashes.

  • Changed logic for state machines first update tick so that we do not get partial notify triggers for transitions we are skipping

  • Changed SlotEvaluatePose so that it loops over its own MontageEvaluationData instead of MontageInstances which can be modified by other threads

  • Fixed crash in USkeletalMeshComponent::ValidateAnimation if mesh has no skeleton

  • Fixed 'Draw Uncompressed' animation showing compressed animation.

    • Fixed 'Draw non retargeted' animation crashing Personna.

    • Fixed various 'Draw ' animation not working with SaveCachePose nodes.

    • Renamed UAnimInstance::ContextCounter to ::GraphTraversalCounter so it's more explicit, since we have many 'Context' things everywhere.

    • Made GraphTraversalCounter non static, so it works w/ multithreading evaluation.

  • Fixed GetSocketTransform returning the wrong transform from a StaticMeshComponent when a nonexistent socket is specified.

  • Fixed nullptr crash in USkeletalMeshComponent::ValidateAnimation

  • Minimize accumulation of errors after many composed transforms when updating SceneComponent::ComponentToWorld

  • Montage replication fixes.

    • MontageStop function now has optional parameter OverrideBlendOutTime (by default it will use the BlendOutTime on the AnimMontage).

    • BlendTime on the AnimMontage instance is now replicated so abilities that override the blend time of montages will behave correctly.

  • Moved rotation normalization during root motion calculations to fix incorrect rotation result on partial blending

  • Queue Montage events during ticking, so they're triggered after AnimNotifies.

  • Removed Blueprintable tag from AnimPreviewInstance and AnimSingleNodeInstance.

  • USkeletalMeshComponent::RecalcRequiredBones's check for Sockets could add the same bone indices multiple times, triggering an assert in FillSpaceBases() later. Made sure all bones added to ForceAnimatedSocketBones and NeededBonesForFillSpaceBases are unique.

Audio

  • New: Export AudioVolume class to allow subclassing.

  • Cleanup audio module linking

    • Don't add Audio modules if building a server on Win32, Win64, or Mac

    • Don't add D3D11RHI module if building a server on Win32 or Win64

    • Make ALAudio a Dynamically Loaded Module instead of a Private Module Dependency on Linux

  • Removed the unused sound preview dialog and sound preview thread

Blueprints

  • New: Added a fast calling mechanism for no-argument thunks into the event graph

    • No-argument thunks into the event graph (for notification events and animation EvaluateGraphExposedInputs type calls) now call directly into the event graph, skipping one function frame and the associated invocation time

  • New: The Spawn Actor From Class nodes can now be extended by C++ projects.

  • New: Moved blueprint replicated property handling to UBlueprintGeneratedClass instead of an inaccessible static (mod/plugin support)

  • New: Support for localized metadata retrieval through the use of UField::GetMetaDataText

  • New: This change brings SMultiLineEditableText functionality closer to parity with the SEditableText.

  • Implemented SelectAllTextWhenFocused

  • Implemented RevertTextOnEscape

  • Implemented ClearKeyboardFocusOnCommit

  • Added helpful errors to catch DefaultToSelf parameters on Blueprint functions that are not compatible with the Blueprint's type.

  • Added support for Actor components stored in array properties. Blueprint users can now drag references to the array into Blueprint graphs (from the component tree).

  • Added support for Actor's with native scene components. Auto selecting a RootComponent when it is left unset.

  • Fixed a bug where data-only Blueprints would load with components that have since been removed from their native parent classes.

  • Only a simple pointer to an UObjects can be a parameter of BlueprintCallable function. No WeakObjPtr or AssetSubclassOf is accepted. Strict check in Unreal Header Tool.

  • Optimized return value processing for void functions in UObject::ProcessInternal (skipping a fptr call)

  • Removed "FriendlyName" metadata tag and updated comments and usage of "DisplayName" metadata tag.

  • Any Blueprint items that would fallback on using one or the other have had that functionality removed.

  • Removed requirement that native properties (exposed to Blueprints), had to specify EditAnywhere/EditInstanceOnly to have the property accessible from other Blueprints.

  • Split out SGraphPinInteger from SGraphPinNum to push schema checking into the NodeFactory where it belongs and fixed SGraphPinNum::Construct skipping the direct parent

  • New: Making a base async node based on the LatentOnlineCall node. From now on to create any async action just create a UObject that extends from UBllueprintAsyncActionBase and a new node entry will be added that spawns that class and activates it.

  • Fixed UScriptFactory not returning created script blueprint object

Core

  • Initial support for TMap properties!

    • Currently includes reflection, garbage collection, delta serialization and text import/export.

    • This is an early release of this feature. Editor support is minimal and there is no Blueprint availability yet, but support will continue to improve in future releases.

      image alt text

  • You can now have more than one Unreal class (UCLASS) in a single C++ header file! No additional work required, just define additional UCLASS and it should work!

    image alt text

    • You can declare special Unreal types (such as dynamic delegates) in a header file, even without a UCLASS in that file!

      image alt text

    • You no longer are required to name your source file the same as your class name! That means that in a file Header.h, you can define this:

      image alt text

    • You can now use any name you want for properties! Previously, certain names like "Color" were reserved by Unreal's internal UObject system and impossible to use.

      image alt text

  • New: AActor::GetComponents() can now support TArrays with different allocator types.

    • It's now recommended to use TArrays with a TInlineAllocator to potentially avoid memory allocation costs.

    • TInlineComponentArray is defined to make this easier, for example: TInlineComponentArray PrimComponents(Actor);

  • New: Add Begin/EndPlay virtual functions to UActorComponent

  • BeginPlay called if bWantsBeginPlay is true, EndPlay called if BeginPlay called.

  • New: Add conditional and no stats versions of FPlatformProcess::Sleep

  • New: Added "Stat Math" to Core stats.

  • Added stat counters for Rotator->Quat and Quat->Rotator conversion.

  • New: Added an overload for GetTypeHash that allows the TMap template type to use a key type that is a C++11 enum class.

  • New: Added EMIT_CUSTOM_WARNING_AT_LINE macro to emit warnings at given line rather than on macro's location.

  • New: Added ensureOnce and ensurceOnceMsgf macros which works like the standard ensure macros but will only fires on the first false result.

  • New: Added FCString::Strrstr, which finds the last occurrence of a substring in a zero-terminated string.

  • New: Added FString::Reset() which allows emptying a string without reallocating memory

  • New: Added heterogeneous comparison support to TArray::Contains, so that you can now find elements by any type which is comparable to the array element type, even if it's not convertible, e.g. searching a TArray> for a UObject.

  • New: Added IsValid and Reset functions added to FDelegateHandle to make it easier to use.

  • New: Added method for converting binary data into encoded hex string and vice-versa

  • New: Added new C++ utility function to draw oriented wire boxes with a matrix transform (DrawWireBox)

  • New: Added ON_SCOPE_EXIT - a generalized scope guard macro which allows arbitrary code to be run automatically when a scope is left.

  • New: Added RandBool() function (in UnrealMathUtility.h)

  • New: Added support for FEvent pooling to GenericPlatform

  • New: Added support for shared shapes between sync and async scene of static actors. Reduces memory usage and makes streaming faster.

  • New: Added support for specifying default values for FColor types in reflected methods to UnrealHeaderTool

  • New: Added support for suspending async loading.

  • Async loading can be suspended and resumed by calling SuspendAsyncLoading and ResumeAsyncLoading respectively

  • Async loading is automatically suspended when the rendering thread is suspended.

  • New: Added TArray::AddDefaulted to allow default constructed new elements to be added to the end of an array.

  • New: Added TUniquePtr::IsValid function to make it match other UE smart pointers, and made its operators work as expected with nullptr.

  • New: Added variadic template support to TGraphTask::ConstructAndDispatchWhenReady and TGraphTask::ConstructAndHold.

  • New: Any build targets may now choose whether to use the shared build environment (which can share engine intermediates between projects) or a custom build environment (which can have custom compiler settings), by overriding the TargetRules.ShouldUseSharedBuildEnvironment() function. Previous setting was to use a shared build environment for the editor, and custom environment for monolithic games.

  • New: Changed FMath::DegreesToRadians and FMath::RadiansToDegrees to use auto-deduced return types, which prevents accidental integer coercion and allows them to be called with any type which supports arithmetic operators, like FVector.

  • New: Changed the Exchange function to use Memswap in all cases, as this was an assumption used by a lot of code.

  • New: Core - Added dynamic stats for packages loading, disabled by default

  • New: Core - Log should have the time markers from the beginning

  • New: Default arguments to the Git dependencies download tool may now be specified through the UE4_GITDEPS_ARGS environment variable.

  • New: Exposed FFilePath and FDirectoryPath as Blueprint types

  • New: Exposed FPS (frames per second) chart global variables as Engine's module's API.

  • New: Git binary dependencies are now cached after being downloaded, allowing faster switching between branches and use of the git clean command.

  • New: Greatly improved support for compiling UE4 using Clang/LLVM on Windows platform (ongoing work in progress!)

  • New: Greatly improved the quality of IntelliSense results with UE4 in Visual C++ and Xcode

  • New: Hot-reload will now always call ShutdownModule, even when abondoning DLLs

  • New: Implemented user feedback on automatic generation of Remote Procedure Calls (RPC) and C++ functions usable in Blueprints.

  • Fixed missing directory crash in Unreal Build Tool when creating project timestamp file

  • New: Improve error message when using TSharedPtr with UObjects.

  • New: Make asserts trigger debug break in current stack frame.

  • New: Modules can now specify additional support files that need to be staged, allowing plugins that depend on third party DLLs to have them automatically included in packaged builds.

  • Add entries to the RuntimeDependencies array from your module's .build.cs file to have them included in staged builds. See /Engine/Source/ThirdParty/Ogg/UEOgg.build.cs for an example.

  • The list of files required for a target is stored in an XML receipt file under /Build/Receipts.

  • New: Now UnrealHeaderTool will accept GENERATED_BODY macro in every place you had to insert a type specific GENERATED*BODY macros (e.g. GENERATED_UINTERFACE_BODY)! It will figure out the context without your help.

  • New: Now you can specify your own function names for Implementation and Validate methods using keywords! E.g. UFUNCTION(Server="MyServerImplementationMethodName", WithValidation="MyServerValidateMethodName").

  • Note that when you decide to specify your own function name, you also have to declare it manually in the class header.

  • New: Optimized UObject::IsA - it is now faster than testing cast flags and runs in constant time in all cases!

  • New: Script Plugin was updated to support Lua 5.3.0

  • New: Simplified UObject creation. Only NewObject should be used to create UObjects.

  • New: Stats - Added generalized method for dynamic stats

  • Check the example here FModuleManager::LoadModuleWithFailureReason or UObjectBase::CreateStatID

  • New: TAssetPtr now correctly handles derived to base conversions. Conversion to bool is now explicit.

  • New: Threading - Thread singleton implementation is now cleaner, faster, thread-safe by default and no longer leaks memory

  • New: TLazyObjectPtr has been overhauled

  • Implicit upcasting has been added. A TLazyObjectPtr can now be passed to a function expecting a TLazyObjectPtr without problem.

  • This even works if the object referenced by the lazy pointer isn't currently loaded!

  • "Ptr == LazyPtr" (with the lazy ptr on the right) will now compile

  • The constructor from TWeakObjectPtr has been removed (it didn't even compile)

  • New: Treat type truncation warnings as errors.

  • New: UnrealHeaderTool: Added time logging for various phases and clarified code/comments surrounding the phases

  • New: Updated commonly-subclassed actor's and component's classes, and auto-generated constructors to take a default FObjectInitializer constructor argument. Now subclasses of almost every engine class doesn't have to provide FObjectInitializer paramter for parent class!

  • New: Updated UnrealHeaderTool to allow it to skip inline function definitions inside UCLASSes and USTRUCTs.

  • Added functionality to uobject and fconfigfile to support writing only one property when updating a project setting.

  • Used in the Config Hierarchy Editor.

  • Added FWeakObjectPtr::GetEvenIfUnreachable to match TWeakObjectPtr::GetEvenIfUnreachable.

  • Added the filename to the error log message you get when importing an object whose outermost parent is not a package.

  • Async - Fixed a deadlock when deleting a thread from the same thread

  • Cast and dynamic_cast with a const class type (eg Cast or dynamic_cast) now use the optimized class cast flags if possible.

  • Changed a few GetComponent() calls in critical paths to use the direct access instead of the array copy. This is only possible where it's knowns that the components will not change ownership or be destroyed.

  • Changed FColor, FVector, FTimespan etc. from 'class' to 'struct', as they were defined as C++ classes but also as USTRUCTs, which caused UnrealHeaderTool to generate bad forward declarations.

  • Changed UnrealHeaderTool to delete old .generated.cpp files when generating code for a module which has gotten smaller.

  • Changed UStruct::SuperStruct to be a private field to prevent accidental modification, as these would invalidate the new and improved UObject::IsA code.

  • Added proper shutdown for the screen saver inhibitor

  • Changed movie player to not force kill a running thread

  • Cleared all error messages after ensure, fixes crashes with messages from previous ensure causing an issue with understanding the crash

  • Fixed buffer overflow in method used to create a directory tree

  • Deprecated CanConvertPointerFromTo as it did not honor const qualifiers nor follow the naming conventions of other template metafunctions.

  • Deprecated TArray::Init(int32 Number), as its name did not suggest that the array elements would be uninitialized.

  • FComponentReference now correctly allows referencing of USceneComponent

  • Fix typo in FMatrix::InverseFast warning message

  • Fixed "Unable to bind delegate" errors during multicast delegate lookup and removal.

  • Fixed a compilation error if the CopyFromWeakArray template was used

  • Fixed a crash in platform file when using the log wrapper

  • Fixed a crash in UnrealHeaderTool when trying to parse malformed UINTERFACE definitions.

  • Fixed a crash that was occuring if you tried to hot reload a class that was used as a default subobject for object of other class in the same module.

  • Fixed a crash when reimporting Script Plugin component assets

  • Fixed an error in Unreal Build Tool that could occur if RTTI was enabled for a C++ module

  • Fixed an UnrealHeaderTool code generation bug when there is an enum at the top of a header.

  • Fixed assertions leaving the code pointer inside a Windows DebugBreak() function, requiring you to step out first

  • We now use the __debugbreak() intrinsic on Windows instead of calling DebugBreak()

  • Fixed binding extra params to a lambda/functor style delegate binding

  • This isn't strictly necessary (can use lambda capture instead) but it makes the interface consistent with the other types of delegate binding

  • Fixed build failure when you were trying to create a custom code class in the Editor derived from UArrowComponent.

  • Fixed crash during hot reload of the module that contained a class, which constructor was calling StaticClass function of other class from the same module.

  • Fixed dozens of missing 'override' specifiers on C++ virtual functions throughout the engine

  • Fixed enum duplication warnings.

  • Fixed error message when user tried to create unsupported constant properties.

  • Fixed hot reload not actually reloading game modules in games that had multiple gameplay modules

  • Fixed hot reload not updating derived classes if the base class layout changed resulting in the derived class layout changes without changing the overall class size.

  • Fixed hot reload not updating values on default subobjects' properties.

  • Fixed incorrect CastChecked behavior when doing interface casts in shipping builds.

  • Fixed IncrediBuild never distributing Link actions to remote machines for UE4

  • Fixed inheriting show and hide categories in property editor.

  • Fixed issues with finding directories using FFileManagerGeneric::FindFiles().

  • Fixed mistaken name conflict during "Add Code To Project..." wizard in the Editor if you had two or more modules with same suffix.

  • Fixed occasional crash during hot reload, that was caused by re-runing construction scripts for class default objects, which is forbidden.

  • Fixed ranged-based iteration over FString so that it no longer returns the null terminator.

  • Fixed recompilation of a lot of Engine modules during normal build after prior hot reload compilation, even if there were no changes in the Engine code.

  • Fixed sandbox file wrapper not using the correct paths in game projects not directly under UE4 root folder.

  • Fixed splitting of UnrealHeaderTool's generated C++ files.

  • Fixed temporary being saved into map packages at runtime because they were not marked transient

  • Fixed TFunction so that another compatible TFunction can be bound to it.

  • Fixed the constness of the std::nothrow_t parameters in our operator new/delete overloads.

  • Fixed the scalar version of FTransform::Inverse so that it works the same as the vectorized version.

  • Fixed the visualizers for FWeakObjectPtr and added support for Visual Studio's expanded view for TOptional members.

  • Fixed two problems with the Editor's "Add Code To Project..." functionality:

  • missing dependency, linker or include errors after creating subclasses of some type,

  • missing "Selected Class Source" link to source class of Slate Widget and Slate Widget Style classes.

  • Fixed UBT makefile regeneration issues.

  • Fixed UnrealBuildTool failing to harvest environment variables when SET command produced empty lines

  • Fixed UnrealHeaderTool generating bad code when a UClass pointer is used as a return type or as a parameter to a replicated function.

  • Improved much of TMap's implementation, by removing redundancy, adding extra compile time error checks and improving encapsulation.

  • Improved the error message given by UnrealHeaderTool when trying to use a TArray property with a custom allocator.

  • Logging fatal messages with FMsg::Logf crashes engine.

  • Make FScopedSlowTask work properly across threads.

  • Metadata for enumeration types are now gathered for localization properly.

  • Nested components will now be correctly updated in the Actor's OwnedComponents arrays after their Outer component is renamed or modified via undo/redo.

  • Optimization: Converted all engine uses of GetComponents() to use TInlineComponentArray or direct array access.

  • Optimized the logic for determining whether or not to save a tagged property during serialization.

  • Removed generation of deprecated .generated.inl headers from UnrealHeaderTool.

  • Removed MaxReadBytes from UProperty::SerializeItem, UStruct::SerializeBin and FPropertyTag::SerializeTaggedProperty, as it was unused.

  • Removed PLATFORM_COMPILER_HAS_RANGED_FOR_LOOP, as all UE4 supported compilers have it.

  • Removed PLATFORM_COMPILER_HAS_RVALUE_REFERENCES, as all UE4 supported compilers have it.

  • Removed the EXTERNAL_OBJECT_NAMES macro and related code, as the feature is now obsolete.

  • Renamed UnrealSwarm's CommonUtils library to SwarmCommonUtils to avoid naming conflicts.

  • Restored the missing LogUnion log category, which caused link errors when TUnion was used.

  • Stats - Fixed a stats warning, asynchronous thread has an unique name now

  • Stats - Fixed an issue with encoding/decoding group category

  • Stats - Fixed issue with decoding group category from stats metadata

  • Updated config file hierarchy with enums that can be used to determine priority.

  • New: Standardised naming convention for class used to managed memory operations, the same names for template and pointer based functions

  • New: A dummy World is now created when the Game Instance is created when running standalone (not PIE).

    • This World is not fully set up and many operations will not be useful, however, it does allow certain behaviors to work when being called from objects initialized before entering the initial map (e.g. UMG Widgets, Game Instance)

  • New: Add FJsonObjectWrapper struct to JsonUtilities, this allows inserting unconverted Json nodes into your structures that pass through JsonObjectConverter

  • New: Added a new method for setting the content of the XML node

  • New: Added AActor::bActorHasBegunPlay to track that an Actor has had BeginPlay called for it and has not subsequently had EndPlay called. Use HasActorBegunPlay to query.

  • New: Added ability to set the thread priority of a monitored process

  • New: Added append operator to the chunked array class

  • New: Added check for negative size of deserialized string.

  • New: Added more detailed message when uncompression fails, which includes the exact cause of failure.

    • Added the ability to skip unccompression errors during serialization via FailOnUncompressErrors under [Core.Settings] section in engine ini.

  • New: Added safety path to ignore and recreate ActionHistory.bin if that happens instead of a crash. We were reported that UnrealBuildTool's ActionHistory.bin file for some users was corrupted and it looked like it had been caused by interruption during saving process. This situation shouldn't occur anymore.

  • New: Added better Unreal Objects hash stats

  • New: Added stats for module manager

  • New: Function for creating synchronization events in no longer publicly available (see FPlatformProcess::CreateSyncEvent)

  • New: Exporting Decal Component class from the DLL to give access from outside the module.

  • New: FInterval is now templatized and can be used as a UPROPERTY. A Details panel customization for Interval properties was also added.

  • New: Implemented faster unhashing of UObject FNames in case of conflicts (with subobjects which have hardcoded names).

  • New: Added memory stats to 'obj hash' and 'obj hashouter'

  • New: Modules can now disable optimization in all configurations except shipping, by setting OptimizeCode to CodeOptimization.InShippingBuildsOnly in their module rules.

  • New: Moved actor components into Components folder

  • New: Package files now include a CompatibleWithEngineVersion field, declaring the engine version that the package is compatible with separately to the engine version that it was saved by. Hotfix releases will set this field to the last major release version.

  • New: Properties of class type in User Defined Struct can have a default value defined.

  • New: QMake project generator will add info about include paths to aid indexing.

  • New: Renamed ITlsAutoCleanup to FTlsAutoCleanup (it's not a [non-virtual] interface)

  • New: Script generator plugin is now using the engine's modular features system instead of plugin category for registering itself with UnrealHeaderTool.

  • New: Specifying -Timestamp on the commandline to AutomationTool will add timestamps to output logs.

  • New: StaticArray now has a Num() function. Useful when you just want to provide the length in the template arg, and just want to indirectly refer to it later.

  • New: The default engine resource file on Windows, PCLaunch.rc, has been split into two. PCLaunch.rc now opens correctly using the Visual Studio resource editor, while PCLaunch.rc2 contains any manual and preprocessor sensitive resource definitions.

  • New: Automatically compile C++ modules on editor startup. The loading/saving section of the editor preferences now includes an option to always compile game modules on editor startup.

  • New: The multicast analytics providers was only accessible to C++ projects that manually added a dependency upon the module. I moved this to a be a plugin instead to remove the C++ project requirements

  • New: UnrealBuildTool now supports creating precompiled distributions for any targets, similar to the releases which can be downloaded from the launcher. Teams which do not expect to modify the engine source often may wish to take advantage of this workflow for faster iteration times.

    • To create precompiled modules, override the GetModulesToPrecompile() in your target.cs file and add a list of modules to build, then build the target using UnrealBuildTool passing the -precompile argument.

    • To use precompiled modules, modify the UnrealBuildTool command line to include the "-useprecompiled" argument (or pass -useprecompiled on the command line to GenerateProjectFiles.bat)

  • FastArraySerializer now calls PreReplicatedRemove callbacks before PostReplicatedAdd callbacks, to better support "renaming" things in the array.

  • Fixed a rare crash when generating uobject token streams

  • Fixed custom warning emitter, which was outputting additional parenthesis. This was preventing red highlight in Visual Studio output window.

  • Fixed default subobject instancing when creating an instance from a non class default object Blueprint archetype.

  • Fixed hot reload issues with plugins.

  • Fixed hot reload not always detecting default subobject changes in the constructor of hot reload class.

  • Fixed infinite loop when a parent component fails to register.

  • Fixed project generation where multiple projects have the same prefix, e.g. TP_Vehicle and TP_VehicleAdv.

  • Fixed UAT crash when trying to load .NET assemblies with missing prerequisites.

  • Fixed UnrealBuildTool's environment variable harvesting method to cope with non-ASCII values, which caused problems when building projects in non-English versions of Windows.

  • FPlatformMisc::LaunchURL now supports arbitrary URI schemas using the default operating system handler.

  • Made UnrealBuildTool not to show verbose logs during its startup.

  • Optimized UnrealHeaderTool, reducing the duration of an invocation on FortniteGame by approximately 20%

  • Optimized various uses of TArray::Pop to prevent incremental reallocation for short-lived or frequently used TArray instances

  • Profiler

    • Fixed profiler not working with live preview for standalone instances

    • Optimized bandwidth required to send the stats data, data is using better encoding and is compressed

    • Data encoding has been moved to the task graph to minimize the performance impact

  • The parameterized constructor for FTimerHandles has been removed.

  • UnrealHeaderTool: Added limited support for parsing character literals to avoid incorrectly erroring on things like '\"'

Editor and Tools

  • New: Improved the performance of FText::AsNumber

    • Blueprints now try and use the default formatting options where possible, as they were previously always using custom formatters which was very expensive

    • We now have a cache of the most recently used formatting options to help the cases where you are frequently re-using a custom set of formatting options

    • FNumberFormattingOptions now provides a convenient way to create a default number formatters:

      • Format a number without grouping separators - FNumberFormattingOptions::DefaultNoGrouping()

      • Format a number with grouping separators - FNumberFormattingOptions::DefaultWithGrouping()

  • New: Improved the performance of FText::Format

  • New: LogFile wrapper improvements

    • Reduced verbosity to make it more usable for file open/close debugging

    • Added open file handle tracking to be able to dump all open file handles via 'filelogdump' console command

  • New: ScriptGeneratorPlugin will now be disabled by default. Projects can opt-in by enabling it in their uproject file.

  • New: The Git source control plugin now has the option to intiialize a new local repository for the current project

  • New: The Git source control plugin now supports merging

  • New: We now offer to show the Output Log when adding a new C++ class fails in the editor.

  • New: When compiling C++ from the editor, any errors are now output to the Message log as hyperlinks. Clicking on them will take you to the appropriate line of the source code in your IDE.

  • Deprecated GEditor->SetActorLabelUnique and GEditor->SplitActorLabel. Please replace calls with the static methods FActorLabelUtilities::SetActorLabelUnique and FActorLabelUtilities::SplitActorLabel

  • Disabled some timing log spam in normal map identification code (seen for every imported texture)

  • Fixed not being able to toggle between Public and Private class when using Add Code to Project

  • Removed unnecessary file existence check

  • Harmonize Compilation Result return codes between Editor platforms

  • Fixed a typo in UE4Games.uprojectdirs

  • FBase64::Decode: fix signed/unsigned comparison bug

  • Removed a dead declaration for FActorDetails::AddMaterialCategory which had no definition

  • Removed FKey mappings for unimplemented gestures (SwipeLeftRight, SwipeUpDown, TwoFingerSwipeLeftRight, TwoFingerSwipeUpDown)

  • Removed some unused background textures from the engine content directory

  • ScriptPlugin will no longer attempt to import txt files resulting in creating invalid blueprints.

  • New: Added support for multithreaded bulk data loading.

    • Any bulk data bigger than a specified threshold will be loaded on a separate thread

    • Size threshold can be set via MinBulkDataSizeForAsyncLoading value under [Core.System] section in engine ini

  • New: Added VerifyAsyncLoadAssumptions console command to check if flags on UObjects get properly reset after streaming has finished.

  • New: Added a ConfigRestartRequired meta-data property to allow you to tag config properties as requring an application restart before they take effect

  • New: Added a utility function to the UnrealEd module in CommandletHelpers.h for generating the commandline arguments necessary to execute a commandlet.

  • New: Added an assert if someone attempts to queue an async IO request without a valid destination buffer to prevent random crashes later in async loading code.

  • New: Added functionality to change the current URL of a web browser window

  • New: Added some additional methods to IAssetEditorInstance to support reasoning about their owning tab manager and last activation time

  • New: Changed UEditorEngine::SnapToSocket to use USceneComponent::SnapTo so that it works generically with any component which handles sockets.

  • New: FArchive objects have now access to Engine Version (FEngineVersion) which they can use for upgrade path logic in serialization code.

  • New: Fully DLL exposed UCurveFloat so you can derive from it

  • New: FWorldGetAssetTags delegate available for games to query world asset registry tags

  • New: GraphEditor: Refactored connection drawing policy API to be more flexible

  • It now passes a parameter structure around instead of loose values (FConnectionParams)

  • Remove duplicated implementations of DrawConnection in subclasses that draw non-curved splines, overriding ComputeSplineTangent instead

  • New: Improved intellisense data for engine source in launcher projects

  • New: JSON API improvements for numbers

  • Added int32/int64 overrides for the WriteValue functions that didn't take a key so that they matched the variations of the functions which did take a key.

  • Added an int64 override for TryGetNumber to match the int32/uint32 versions.

  • New: K2Node_CallFunction will now automatically fix up relevant execution pins when a Blueprint function changes from impure to pure.

  • Several AActor functions changed to be pure functions (GetDistanceTo, et al).

  • New: Made a few UObject-related helper classes thread safe

    • FUnresolvedStructTracker

    • FUniqueObjectGuid

    • FStringAssetReference

    • FUObjectAnnotationDense

  • New: Made it possible to force auto-expansion on an IDetailPropertyRow in a property editor details customization

  • New: Made UGameViewportClient::NotifyPlayerRemoved() virtual

  • New: Mesh painting mode can now be overridden to work on other kinds of UMeshComponent subclasses besides UStaticMeshComponent

  • Create an IMeshPaintGeometryAdapter implementation for your component

  • Create a IMeshPaintGeometryAdapterFactory implementation and register it with the mesh paint module using RegisterGeometryAdapterFactory

  • Note: Currently only texture painting is supported via the adapter, vertex painting may be added at a later time

  • New: Pak files are loaded in deterministic order based on directory

  • New: Pak files can be unmounted now

  • New: Plugins can now define their own input sub-categories rather than having to choose Keyboard, Mouse, or Gamepad

  • EKeys::AddMenuCategoryDisplayInfo is used to define the name and icon for the category.

  • When creating the FKeyDetails for a new key added via EKeys::AddKey you can now specify the menu category to arrange within.

  • New: Temporary UObjects created for hot reload to get their virtual table pointers will now be marked as RF_TagGarbageTemp to be able to skip any hot reload incompatible logic inside their constructor.

  • New: The settings system now creates a category if one did not exist when you attempt to add a new section to a category that did not previously exist, instead of ignoring your request.

  • New: UDeveloperSettings is now available to create settings objects that can be auto-discovered by the editor without building a plugin or some other system to register the settings with the settings viewer.

  • New: UnrealVS v1.34 (+v1.35 for VS2015)

  • New: Duplicated actors maintain relative references

    • When duplicating multiple actors which reference one another, the relative references will be preserved in the duplicated actors, instead of referencing the original source actors.

  • Improved identification of 'Game' projects by checking for uproject files matching the VS projects.

  • Game projects are now always show at the top of the project list.

  • Fixed a command line editor issue.

  • Improved detection of Unreal Engine solution files by looking for a comment in the sln file added by Unreal Build Tool.

  • Quick switching of the IDE's build config and startup project at the same time via the build list in the Batch Builder window.

  • New: Various fixes to the in-game / in-editor screenshot facility:

  • All captured screenshots are now saved as png files.

  • The editor now no longer relies on the delegate registered by the AutomationWorkerModule to save the image as a .png.

  • AutomationWorkerModule now registers a HandlePreTestingEvent and HandlePostTestingEvent with the AutomationTestFramework in order to provide custom screenshot capture behavior while running tests.

  • Made SEditorViewport toolbar handling more flexible

  • Introduced a new method PopulateViewportOverlays that allows arbitrary toolbar creation (bottom, sides, etc...)

  • MakeViewportToolbar (for the top toolbar only) is now optional to implement in subclasses and may be deprecated in the future

  • Added sanitization to the asset name in addition to the package name in FAssetTools::CreateUniqueAssetName

  • Allowed editor mode toolkits a chance at processing command bindings

  • Changed FDragTool to take in a reference to FEditorModeTools* instead of referencing the global one

  • Changed global Undo/Redo routing to automatically invalidate all editor viewport clients

  • Added UEditorEngine::InvalidateAllViewportsAndHitProxies

  • Removed manual Invalidate calls in the Blueprint and Font editors during Undo/Redo handling

  • Removed a redundant InvalidateDisplay after an Invalidate call in the Font editor

  • Changed implementation of TTypeToString and TTypeFromString to use global namespaced functions instead of explicit template instantiations.

  • Clean up pass on UEditorEngine

  • Split all UEditorEngine methods from Editor.cpp into EditorEngine.cpp (though more are still scattered around in other files like EditorServer.cpp)

  • Removed GetClassFromPairMap, ClassMapPair, and associated keyboard shortcuts to place nav pylons, since they don't exist anymore

  • Removed dead variable StreamingBoundsTexture and associated method SetStreamingBoundsTexture

  • Split out the implementations of SplitActorLabel and SetActorLabelUnique into statics on FActorLabelUtilities,

  • Removed various GWorld references

  • Removed empty method HandleCreateMeshFromBSPCommand and associated exec command

  • Ensured that FScalableFloat::FinalCurve is updated when the curve table it's referencing is re-imported

  • Fixed bug which allowed the "-immersive" command-line option even when no project file was specified

  • Fixed slate application focus not being applied correctly when activating windows

  • Fixed UAssetObjectProperty not being able to import asset references in the form "Texture2D'/Game/Thing'"

  • This broke data table importing when using a TAssetPtr property.

  • This wasn't an issue when using User Defined Structs as they use a UObjectPropertyBase when referring to other objects.

  • Fixed Unicode log messages going missing during packaging.

  • Fixed UnrealHeaderTool not respecting class flags on unparsed classes used as property types in other classes resulting in not propagating those flags to properties.

  • Fixing hot reload crash when FStringAssetReference changes during hot reload.

  • Garbage Collector will now respect references from FGCObjects even in cooked builds which have a permanent object pool set to non 0 value.

  • Removed unnecessary loop from FStringOutputDeviceCountLines::Serialize code

  • Promoted FAssetEditorModeManager into UnrealEd and made it the default for FEditorViewportClient::ModeTools when the derived class doesn't specify anything, which prevents some types of selection highlighting issues where editors would use the global selection state incorrectly

  • Removed the Recompile Level Editor feature (was not supported and not working properly)

  • Stopped Visual Studio showing a "Save" message when closing after adding new classes via the editor

  • The rich curve evaluation function was optimised to use a binary search to locate the interpolation nodes. In the particular test case used it resulted in a 10x speed up.

  • UnrealHeaderTool will no longer try to automatically declare a constructor with FObjectInitializer if the base class does not declare one too.

Content Browser

  • New: Added support for saving unique per-filter state in a frontend filter by implementing SaveSettings and LoadSettings

  • New: Added the ability to register new advanced asset categories without editing engine or editor source

    • This is done using new methods on IAssetTools (RegisterAdvancedAssetCategory, FindAdvancedAssetCategory, and GetAllAdvancedAssetCategories); an example can be found in the Paper2D module

  • Added F prefix to FAssetFilterType and FAssetFilterCollectionType, and removed a redundant declaration.

  • New: Opening a C++ class via the Content Browser now opens the source file as well as the header file

Landscape

  • Removed "#pragma clang diagnostic ignored "-Wreorder"" in landscape editor data caches

    • It's always better to fix the code so it doesn't generate diagnostics in the first place

  • Fixed crash in ULandscapeInfo::UpdateAddCollision

  • Fixed incorrect spelling of the ULandscapeHeightfieldCollisionComponent::CookCollisionData function name in C++ code

Project Browser

  • New: Added some verbose logging to help diagonse issues when creating new project templates

Static Mesh Editor

  • Deleted some dead lightmap mesh import/export code in StaticMeshEditor and UnrealEd

Foliage

  • New: Moved Foliage into its own module

  • Removed the InstanceInverseTransform element from the FInstancingUserData struct used by InstancedStaticMeshComponent. This data was incorrectly calculated, wasted memory and was not used by the engine.

Gameplay Framework

  • New Component 'Editable When Inherited' flag

    • A new feature has been added to Components that allows you to specify whether a component may be edited by subclasses or on instances in the world.

    image alt text

    • Be warned that checking this box will overwrite any existing customizations made to the component in any subclasses or actor instances.

    • When the component is locked you will get a warning with a link to open the blueprint or parent class as appropriate.

    • While this boolean can also be set in C++ to prevent a component from being edited, it is generally more appropriate to use a UPROPERTY that is not marked as visible.

  • New: Made DefaultPawn more extensible by allowing subclasses to use any type of PawnMovementComponent

  • New: Added AActor::bActorHasBegunPlay to track that an Actor has had BeginPlay called for it and has not subsequently had EndPlay called. Use HasActorBegunPlay to query.

  • New: Added FTimerData::Clear to make it easier to reset a timer.

  • New: Removed "virtual" keyword from several engine-level BlueprintImplementableEvents to conform to the new "BlueprintImplementableEvents should not be virtual" standard.

  • New: SpawnActor will now log a warning and fail if the input location or rotation contains NaNs.

  • New: The OnTeleported event is now defined in UMovementComponent (rather than UCharacterMovementComponent), meaning any type of movement component can now handle that event.

  • Added missing call to Super function in APawn::TeleportSucceeded().

  • Centralized several duplicate implementations of projection matrix calculations for user cameras into FMinimalViewInfo::CalculateProjectionMatrixGivenView

    • Note: Editor cameras that are not previewing a camera actor still go down a separate code path for now

  • Corrected comment for MakeEditWidget metadata to replace FRotator with FTransform reference and add that it works on TArrays of supported types too

  • Fixed DrawDebugBox using DepthPriority incorrectly.

  • Fixed FTimerManager::FindTimer so that it can find the currently-executing timer.

  • Fixed PlayerController's GetHitResultAtScreenPosition() not returning the index of the face that was hit

  • Fixed USceneComponent::GetRelativeTransform to be const.

  • Prevented the canvas being passed into ViewportClient->Draw from having an invalid/uninitialized ViewRect member

  • Removed UPROPERTY tags from several PlayerCameraManager members that didn't need it.

  • New: Added Auto Destroy Delay property to GameplayCueNotify_Actor so if Auto Destroy On Remove is true it will set the lifespan of the gameplay cue instead of destroying it immediately.

  • New: Added GameplayStatics::GrassOverlappingSphereCount(), which returns the the number of instances of a specific grass mesh within a sphere (in C++ or Blueprints)

  • New: Added GetActorTickableWhenPaused function to Actor

  • New: Added some simple versioning to the engine-provided savegame serialization (via UGameplayStatics::SaveGameToSlot and LoadGameToSlot). This will enable us to handle future updates more robustly.

  • New: Fixed comment on GetActorsInSelectionRectangle function

  • New: PlayerController ClientStopCameraShake and ClientStopForceFeedback are now reliable.

  • Added nullptr check to SpawnDecalAttached

  • Changed UMovementComponent::OnTeleported() to be called for all Pawns that teleport, rather than just for Characters.

  • Fix category for OnDestroyed and OnEndPlay Actor delegates

  • Added clearer display name for EAttachLocation::SnapToTarget ("Snap to Target, Keep World Scale" in the editor).

  • Added new attachment location option called EAttachLocation::SnapToTargetIncludingScale ("Snap to Target, Including Scale" in the editor).

Documentation

  • Added warning to documentation for AActor::GetComponents() about the possibility of the array changing while iterating its contents.

Localization

  • New: The text from UI_COMMAND macros will be nested under the namespace specified by LOCTEXT_NAMESPACE, nested under the "UICommands" namespace. IE: "UICommands.MyNamespace"

  • New: Vastly improved in-code documentation, type and function names, and intelligibility of much of the text localization system.

  • Tidied up some old localization code by removing the following: PPF_LocalizedOnly, CPF_Localized, CLASS_Localized, UProperty::IsLocalized.

Networking

  • Network Replay Compatibility

    • Added ability for older network replays to be backwards compatible with newer engine versions.

    • You can now load old replays with new engine versions.

      • This works by building a network checksum for each actor that is based on the network properties, and detecting if they change.

      • It's built so that actors that are different don't load, and should simply be missing from the scene.

    • This is an experimental feature that should hopefully continue to improve over time.

  • New: Added an interface for network replay streaming, INetworkReplayStreamer, in the new NetworkReplayStreaming module.

    • This interface encapsulates the behavior of saving and retrieving replays from a storage provider.

    • INetworkReplayStreamer::EnumerateStreams can be used to get a list of replays that are available for viewing.

    • The logic for storing replays to your project's Saved/Demos directory in previous versions has been moved into the default concrete implementation of this interface, FNullNetworkReplayStreaming.

      • Each replay is now stored in it own directory, which contains the various data files that make up the replay.

  • New: Added new API functions to make using network replay features easier.

    • UGameInstance::StartRecordingReplay to start recording a replay.

    • UGameInstance::StopRecordingReplay to stop recording a replay.

    • UGameInstance::PlayReplay to start playing a replay.

  • New: IsLocalPlayerController should now be accurate at all times, removing any undefined behavior if called early or late in a PlayerController lifetime

  • New: Removed some obsolete protocol version variables from the UNetConnection class.

  • New: ServerReplicateActors no longer does hard casts to PlayerController or Pawn to resolve owner issues. There is now a GetNetOwner function to return the actor that "owns" the connection. Typically APlayerController, but AOnlineBeacon overrides this as well. Allows replication of any UPROPERTY values on AActors as if regular game replication was taking place.

  • New: The server now closes channels for torn-off Actors (actors whose bTearOff flag is true) the next time they would be considered for replication.

  • Added some missing error codes in FSocketSubsystemBSDCommon::TranslateGAIErrorCode, which handles errors returned from getaddrinfo()

  • Beacons actors are now cleaned up properly in NotifyActorDestroyed. Previously any server initiated cleanup attempt would not destroy the actor on clients because the net driver wasn't properly notified.

  • DebugCameraController always returns true in IsLocalPlayerController

  • Move code in UDemoNetDriver::TickFlush to UDemoNetDriver::TickDispatch. This makes DemoNetDriver behave like IpNetDriver and fixes some issues in network replays with actors stuttering, among other issues.

  • Packets from Steam socket connections that have been previously closed are now discarded before processing.

  • Removed the obsolete USTRUCT version of FNetworkGUID, as it is no longer used.

  • When using the NullNetworkReplayStreaming module, enumerated replays will now correctly report the friendly name that was assigned when the replay was recorded. By default this is the name of the map on which the replay was recorded.

  • New: Added GetMaxAvailableTeamSize to reservation beacon API for returning the max available space on any one team for an incoming group.

  • New: Made it possible to inherit from UControlChannel

  • New: Marked the UVoiceChannel class for export

  • New: We now replicate the component in FHitResult

  • Fast TArray now tracks unmapped properties on the client side, freeing up the server, and simplifying things there.

  • UpdatePing and RecalculateAvgPing are now virtual

Online

  • New: Added a new function to the online sessions API to find a session by id. Not implemented by most platforms yet.

  • New: Added a new macro ONLINE_JSON_SERIALIZE_OBJECT_SERIALIZABLE which allows serialization of nested JSON objects.

  • New: The OnSessionInviteAccepted delegate in the OnlineSessionInterface has been removed, and has been fully replaced with the OnSessionUserInviteAccepted delegate.

  • Added support for the FOnlineSessionSettings class to properly serialize boolean values.

  • Fixed a bug that would cause precision loss when reading or writing 32-bit integers with very large values in FOnlineJsonSerializerReader and FOnlineJsonSerializerWriter.

    • Note that since the FOnlineJsonSerializable class is based on this code, it has also been fixed.

  • Crash fix for BuildPatchTool following FRunnableThread::InitializeTls requirement

Other

  • New: Added navigation filter support in EQS pathfinding tests.

  • New: Added new EQS generator for creating rings of points.

  • New: Now UnrealBuildTool warns if you are trying to build the project with SQLiteSupport module using Rocket build, which is not supported.

  • New: Removed deprecated file Media.h

  • New: Simplify creating subobjects in Engine module.

  • Removed private precompiled header inclusion in public header of SQLiteSupport module, which caused building breaks.

  • New: Added GetTextSafeRegionBounds() function to the stereo rendering interface, to make it easier to place debug text in the readable area of VR headsets

  • New: Added new console command ?'ShowDebugForReticleTargetToggle ' Toggles 'ShowDebug' from showing debug info between reticle target actor (of subclass ) and camera view target.

Paper2D

  • New: Added/improved comments for various Paper2D types

  • Added getters for CollisionThickness and SpriteCollisionDomain to UPaperSprite

  • Added necessary includes so that Paper2D and Paper2DEditor modules can be compiled without including the corresponding *Classes.h files, improving single file iteration time

  • Changed FSpriteAssetInitParams.Offset and Dimension to be FIntPoint instead of FVector2D, along with various other sprite texture region code

  • Implemented USceneComponent::GetAllSocketNames() in terms of USceneComponent::QuerySupportedSockets() and removed unnecessary virtual and existing overrides

  • Made most variables in UPaperTileLayer private

  • Prevented the sprite scene proxy from directly accessing the body setup (used for collision geometry visualization) via the owning component, instead caching it at creation and updating it as necessary

  • Refactored the code from UPaperSprite that takes a FSpriteGeometryCollection and converts it into collision geometry in a UBodySetup into a new helper class FSpriteGeometryCollisionBuilderBase for reuse with tile maps, etc...

  • Renamed PaperJsonImporter module and associated classes to PaperSpriteSheetImporter

  • New: Added SetPlaybackPositionInFrames and GetPlaybackPositionInFrames to UPaperFlipbookComponent

  • New: Exposed UPaperSpriteComponent::GetSpriteColor, allowing you to query the current color of a sprite instance

  • New: Implemented a stable vertex buffer as an opt-in fast path for FPaperRenderSceneProxy subclasses

  • Made members of UPaperTileSet private and added accessors

  • Removed BlueprintReadWrite from FPaperTileInfo members, opting instead for friendlier make/break functions (since the index contains packed flags)

  • Removed editor-only gating on registering the Paper2D custom version and performed as much back-compat loading code as is possible in cooked builds

    • Note: UPaperSprite assets still cannot rebuild collision or render data in a cooked build and will warn on load if they are stale in a cooked build due to incremental cooking

    • Removed support for the old binary collision layers in Tile Maps

Physics

  • PhysX 3.3.3 source code is available for everyone. Check out https://wiki.unrealengine.com/PhysX_Source_Guide for more info

  • Turned on sync scene lock warning. This is needed to ensure accessing PhysX from multiple threads is safe. Introduced a new lock semantic to make this more explicit.

  • New: "p.ShowInitialOverlaps" now also draws the triangles of a trianglemesh or heightfield which the query overlaps.

  • New: Added an optional memory validation for the physx allocator

  • New: Added stat counter for USceneComponent::EndScopedMovementUpdate, under "Stat Game"

  • New: Added support for querying the number of instances in an area for an HISMC

  • New: Added tunable control of FloatingPawnMovement's turning responsiveness.

    • Simplified compact statement that was computing the turning vector in order to make it easier to read.

  • New: Added virtual hook in CharacterMovementComponent to determine if a client's state is too different from the server's (ServerCheckClientError).

    • This is used by ServerMoveHandleClientError() to determine whether to send a client error correction.

    • Added FNetworkPredictionData_Server_Character::bForceClientUpdate to allow users to force a client correction.

  • New: Deprecated OverlapSingle and introduced OverlapBlockingTest, OverlapAnyTest

  • New: Introduce contact modify flag for body instance. This is needed for destruction impact resistance.

  • New: Performance: FQuat, FRotator, FRotationMatrix optimizations across multiple platforms.

    • Optimized FQuat<->FRotator conversions.

    • Optimized FRotator::Vector, FQuat::RotateVector, AActor::GetActorVector

  • New: Refactor overlap/sweep/raycast so that they explicitly use channel object type or profile

  • New: Various Actor and SceneComponent methods that use FRotator now have overloads taking rotation as an FQuat (Quaternion).

    • Current calling code should still function normally (old APIs are maintained).

    • FQuat versions are faster if you start with a Quat, since FRotator versions typically will convert to Quat first. For example use GetActorQuat() rather than GetActorRotation() (which itself does a Quat->Rotator conversion).

  • Added FQuatRotationMatrix, for the common case where FQuatRotationTranslationMatrix is overkill.

  • Added missing Super::TickComponent() to RotatingMovementComponent.

  • Added more DiagnosticCheckNaN_All() checks in common FTransform methods.

  • Added stat tracking to all PhysX lock/unlock calls, not just the scoped locks.

  • Always clear output FHitResult in RaycastSingle and SweepSingle regardless of whether there is a hit.

  • Apply ScaleInputAcceleration() to acceleration in UCharacterMovementComponent::MoveAutonomous().

  • BlueprintImplementableEvent ACharacter::K2_UpdateCustomMovement() is no longer virtual.

    • It was never intended to be overridden in C++. That is the purpose of UCharacterMovementComponent::PhysCustom().

  • Change FBodyInstance.UseAsyncScene to take in the owning PhysScene. This is important in cases where garbage collection may have marked the OwnerComponent as unreachable.

  • Character NavMesh movement avoids ProjectLocationFromNavMesh() line trace when location has not changed since last valid check and bAlwaysCheckFloor is not true.

  • Characters using NavWalking movement mode now stagger their line check updates to avoid running on the same frame if possible.

    • Time updates account for rollover to make delta times accurate. Adds protection so a frame rate / delta time spike doesn't realign them all to the same frame.

  • Don't crash on invalid normal in ConvertQueryImpactHit() (changed to ensure).

    • Added better handling of initial overlaps for raycasts.

    • Don't allow invalid normal to be returned out of ConvertQueryImpactHit() in any case.

  • Fix destructible not turning on hit events if an impact depth override is used

  • Fix for "penetration" causing character movement to hitch. Rather than stopping all movement that update, deflect off the depenetration vector and continue movement.

    • Add "p.PenetrationOverlapCheckInflation" to replace previously hardcoded value, for easier tuning of inflation used in overlap check when resolving overlap.

    • Fix jumping when pressing up against corners causing a very quick landing, caused by using invalid penetrating sweep result.

  • Fix for destruction crashes when userData becomes stale. This has been seen in a few places: addForce, recreation of state, etc...

  • Fix PhysicsVolumes not being unregistered from the global list when they are streamed out.

  • Fixed CharacterMovement using an invalid floor as the Character's base component when initially entering Walking mode.

    • Added UCharacterMovementComponent::SetBaseFromFloor() helper to validate that the floor is indeed walkable before calling SetBase() with the hit component.

  • Fixed ComponentSweepMulti() using incorrect transform when shape is not at the local origin.

  • Fixed crash when extracting instance transforms from an instanced static mesh component when the tree wasn't fully built

  • Fixed PhysX crash caused by calling PxScene::addActors after simulation started.

  • Fixed recursive UCharacterMovementComponent::StartNewPhysics() calls allowing UpdatedComponent to change in nested scopes.

  • Improved PhysX locking for scene queries to prevent potentially accessing scene data when processing results after the scene has been unlocked.

  • MovementComponent refactored to add overloads using FQuat in addition to FRotator.

  • Optimization: Remove check for DestructibleActor in CharacterMovementComponent floor check, it is handled by component mobility check.

  • Optimization: Removed the "lock-per-shape" and redundant lock/unlocks in ComponentSweepMulti.

  • Performance: Avoid some GestureRecognizer logic when nothing has changed.

  • Performance: Avoid unnecessary work in APawn::FaceRotation() when none of bUseControllerRotation[Pitch|Yaw|Roll] are enabled.

  • Performance: Change all uses of "GetActorRotation().Vector()" to "GetActorForwardVector()" which is ~10x faster.

  • Performance: Change use of FTransform::TransformFVector4() to FTransform::TransformPosition() where possible. This is faster when starting with a 3 component FVector.

  • Performance: Convert more uses of individual Sin/Cos calls to use new faster SinCos(). Cleaned up some hardcoded degree to radian conversion to use the function template instead.

  • Performance: Convert uses of FRotationMatrix(GetActorRotation()).TransformVector(...) to GetActorQuat().RotateVector(...) which is equivalent but faster.

    • The latter method is nearly 5x as fast as the first.

  • Performance: Converted some uses of GetActorRotation() to GetActorQuat() where possible. Use FQuatRotationMatrix rather than FRotationMatrix where possible.

    • FQuatRotationMatrix(GetActorQuat()) is ~4x faster than FRotationMatrix(GetActorRotation())

  • Performance: fix perf regression in UPrimitiveComponent::MoveComponent() caused by continual FText creation.

  • Performance: inline UActorComponent::GetOwner()

  • Performance: Optimize FTransform::TransformVector() and FTransform::TransformVectorNoScale() to remove unnecessary work. Vectorized versions are 25% faster than before.

  • Performance: Optimized CharacterMovementComponent::ApplyRepulsionForce().

  • Performance: Optimized collision queries to reduce dynamic allocations in ignored component list.

  • Performance: Optimized FTransform::TransformPosition() and FTransform::TransformPositionNoScale().

  • Vectorized versions are now 25% faster than previous implementation.

  • Performance: Optimized MovementComponents to reduce Quat<->Rotator conversions. Reduced Actor calls for rotation/location and use Component instead (saves branch).

  • Performance: UPrimitiveComponent::AreAllCollideableDescendantsRelative() optimized to reduce potential dynamic allocations.

  • Performance: use PhysX single-query functionality (with eANY_HIT flag) where possible. 25% speedup for RayCastTest(), GeomSweepTest(), GeomOverlapBlockingTest().

    • Renamed FPxQueryFilterCallback::bSingleQuery to bIgnoreTouches for clarity.

  • Remove null entries from NonDefaultPhysicsVolumeList in UWorld::RemovePhysicsVolume() in case any are accumulated.

  • Renamed UProjectileMovementComponent::HandleHitWall() to new virtual HandleBlockingHit() which has a new enum return value. Refactored Deflection/Sliding determination to new HandleDeflection() virtual.

    • UProjectileMovementComponent::HandleBlockingHit() returns an enum indicating how simulation should continue: Deflect, AdvanceNextSubstep, Abort.

    • UProjectileMovementComponent::StopSimulating() is now virtual.

  • Save movement mode in CharacterMovement saved move when recording it after movement. Fixes some character network correction issues if derived classes depend on the saved movement mode.

  • The FBoxSphereBounds transform functions were optimised resulting in a 32x speed up. FBox transforms were also sped up by a factor of 2.

  • TryToLeaveNavWalking() is now called when DefaultLandMovementMode was NavWalking and we are trying to enter normal Walking mode.

  • Turn auto weld on for shape components

  • Use new OverlapBlockingTest() in MovementComponent code.

  • UWorld::DestroyActor() and AActor::Destroy() prevent recursion by checking IsPendingKillPending() instead of IsPendingKill().

    • Prevents possible infinite recursion during destruction with cycles that try to destroy something marked for destruction earlier in the stack.

    • Prevents calling destruction events multiple times for the same objects when there are cycles.

    • Return value of both methods has been changed to the value of IsPendingKillPending().

  • New: Added a helper function (ScaleByMomentOfInertia) for scaling torque by moment of inertia. This effectively does the world to local space conversion for you and scales by the inertia tensor.

  • New: Added a 'ToString' helper function to the FHitResult struct to aid debugging collisions

  • Allow querying for counts using an FBox

  • Allow collection of instance transforms in provided FBox

  • New: Added serialization support to TQuadTree

  • New: Remove triangles with very small area when cooking collision trimesh data (area is controlled by physics settings "TriangleMeshTriangleMinAreaThreshold").

  • Added 'bInitialOverlap' to BreakHitResult. Improved comments/documentation for initial overlap case.

  • Delete Pawn methods IsWalking(), IsFalling(), IsCrouched(). Properly mark LaunchPawn() as deprecated in C++.

    • The deleted methods have been private and BP-deprecated since 4.0 release, and did nothing. This allows subclasses to implement functions with these names and expose them to blueprints if they wish.

    • LaunchPawn() BP function was already tagged with deprecation metadata.

  • Exposed AActor::IsOverlappingActor(), UPrimitiveComponent::IsOverlappingActor(), UPrimitiveComponent::IsOverlappingComponent() to blueprints and improved comments

Platforms

  • Fixed default directory iterator assignment in FFileIterator.

  • Process management has been reworked, deprecating redundant methods of FProcHandle in favor of FPlatformProcess API.

Android

  • New: Added GExternalFilePath to allow access to Android getExternalFilesDir path

  • Allow volume buttons to be handled by game or system with FPlatformMisc::SetVolumeButtonsHandledBySystem and FPlatformMisc::GetVolumeButtonsHandledBySystem

  • Added two Blueprint nodes SetVolumeButtonsHandledBySystem and ?GetVolumeButtonsHandledBySystem in Utilities/Platform

iOS

  • Fixed orientation determination when targeting iOS 7 or earlier

Mac

  • New: A Manifest_DebugFiles.txt is now generated on Mac similar to other platforms. This contains file paths to debug and test apps built in addition to the primary (typically shipping) app.

  • New: Added ?FApplePlatformFile::CopyFile() that differs from the generic implementation in that it also copies the file permission bits

  • New: Added support for HasSizingFrame in window definition

  • New: Don't report mouse move to Slate on Mac if the cursor is not over a Slate window.

  • New: iOS SDK info is no longer printed when generating Xcode project. Generating data for project indexing uses different description as "Binding IntellliSense data" was misleading

  • New: Mac event handling code was heavily refactored for improved stability

  • New: Removed mouse capture code from Mac version as we no longer need it

  • New: Simplified dylibs setting in Mac toolchain, so we use rpaths for almost everything.

  • New: Swapped the way we treat main and key windows in Slate on Mac to be consistent with native window buttons behavior

  • Add write permission to files copied with FApplePlatformFile::CopyFile() as this is what engine expects in some places

  • Defer closing and releasing of FCocoaWindow objects till the next PumpMessages, so that it's done when MacApplication and Slate no longer know about them.

  • Disabled server configs in Xcode projects created with binary version of the engine, as it doesn't include libs needed to build servers

  • Disabled the message box in xcodeunlock script as it's not working correctly in Xcode 6.3

  • Fixed file corruption caused by calling FFileManagerGeneric::Copy with dest and src paths that are the same

  • Fixed FMacPlatformProcess::ExecProcess() to correctly parse double-quoted arguments like CreateProc() does. Fixed linking and running with bDebugBuildsActuallyUseDebugCRT = true

  • Fixed use of custom icons and Info.plist files for Mac apps built remotely from PC

  • MacApplication now enumerates and ticks IInputDeviceModule implementatations

  • Use relative paths in the response file used for linking on Mac to fix the posix_spawn_failed error in non-unity builds

  • New: Added sorting of display modes to ?FOpenGLDynamicRHI::RHIGetAvailableResolutions()

  • Call TConsoleVariableData::GetValueOnAnyThread in UConsole::Serialize to fix crash reporting on OS X when the crashed thread is not the game thread.

  • Exempt -Wreorder from -Werror on Mac so that it doesn't break builds.

  • Fixed a crash at exit in FOutputDeviceConsoleMac

  • Optimized Mac ?FTextInputMethodChangeNotifier so it doesn't call expensive GetWindow() until it's really needed

  • Remove an unnecessary workaround from the Mac OpenGL implementation of MapBuffer that reduced performance and was masking a bug in the ResourcePool code.

Playstation 4

  • New: Added console variable 'r.PS4StallsOnMarkers' which will cause thread traces to line up with markers on RazorGPU thread trace timeline. Adds GPU overhead.

  • New: Added extra assembly info for PS4 shaders when using r.DumpShaderDebugInfo

  • New: Added new RHI command 'RHISubmitCommandsHint'. Hints to the driver to submit the currently accumulated GPU commands, regardless of how many commands there are.

  • New: GNM debug libs are now linked when bEnableGnmLCUEDebug is set. Also we define LCUE validation in debug builds, and for bEnableGnmLCUEDebug.

  • Added a define for ALLOW_UAV_CONDITION for multi-platform support.

  • Added thread safety checks for pooled render target usage.

  • Fixed a crash on PS4 when setting null texture references.

  • Fixed a crash when resolving a non-rendertarget texture. Emits a warning now instead.

  • Fixed a null pixel shader gnm validation error.

  • Fixed SDK 2.5 to support the increased max shader resource count (32).

  • Fixed sdk include_common path.

  • Fixed various GNM debug assertions.

  • Removed printout for benign warning in Morpheus head tracking.

Xbox One

  • New: Added support for RQT_Undefined in Xbox query code. Like on Windows, this waits for the GPU to catch up.

  • New: Enabled the linking of PIX libraries and addition of PIX labels by default in all configurations except Shipping.

  • New: Many bug fixes and improvements to session handling in OnlineSubsystemLive, including:

  • Canceling a matchmaking session is now more reliable.

  • Added support for JSON objects and arrays in session settings.

  • New: OnlineSubsystemLive now uses the new Xbox Live 2015 multiplayer APIs.

  • New: Removed Windows only functions from the Xbox One Render Hardware Interface (RHI).

  • Fixed a D3D11 reference count leak in the DECLARE_ISBOUNDSHADER macro.

VR

  • New: The SteamVR plugin is now in the Runtime plugins folder rather than Experimental.

Windows

  • New: Allowing for checking major AND minor version of Windows

Programming

  • New: Added API for getting handle of top-level window on Windows

  • New: Added API for intercepting Windows messages

  • New: Added FPaths method named EngineSourceDir for getting the path to the Engine's source code directory.

  • New: Added new debug helper to draw planes with differently sized extents

  • New: Added support for TSharedPtr

  • New: Allow locating of SCSNodes by both template and component instance name.

  • New: Async: Added support for scheduling tasks on the queued thread pool

  • New: Async: Added support for TAsync

  • New: Deprecated 'operator new' for UObjects. It's not safe to construct new objects using C++ operator new.

  • New: Deprecating UProperties does not cause deprecation warnings in generated code.

  • New: EditorUtilities::CopyActorProperties can now be used for target actors that are a subclass of the source actor.

  • New: Exposed generic Get/SetAxisProperties accessors to UPlayerInput.

    • Deprecated UPlayer::SetMouseSensitivityToDefault and InvertMouse

    • Moved SetMouseSensitivityToDefault and InvertMouse exec functions to UCheatManager instead of UPlayerInput

  • New: Fixed shadow variable warnings when a class has a member named Result

  • New: FMemberReference moved out of K2Node.h and in to Engine module in MemberReference.h

  • New: Implemented Future/Promise/Async concepts

  • New: Inheritable component records can now be looked up via template name as well as component name.

  • New: Optimized processing of UWorld::ComponentsThatNeedEndOfFrameUpdate by eliminating TSet hash comparison overhead

  • New: Renamed FQueuedWork to IQueuedWork

  • New: SessionServices: Made public headers compilable individually

  • New: Slate's FInputGesture and Engine's FInputChord unified as FInputChord defined in Slate

  • New: TInlineComponentArray can now have an Actor supplied to the constructor to void the need to call GetComponents on the subsequent line.

  • New: UActorComponent now caches Owner as an optimization on GetOwner() calls.

  • New: UBT: Enabled PrivateIncludePaths in arbitrary project sub-directories

  • AActor::GetActorClass deprecated, use GetClass instead.

  • AActor::UnitializeComponents is now called after AActor::EndPlay during AActor::RouteEndPlay to maintain consistent pairing of Initialize/UnitializeComponents Begin/EndPlay

  • Backwards compatibility code for 4.7 component changes now gated by Object Version check

  • Fix typo where unweld was iterating over asyncActor shapes but calling function on syncActor

  • Fixed hundreds of warnings generated by PVS-Studio static C++ analyzer

  • FStringAssetReference::TryLoad now correctly follows redirectors

  • FTimerManager::FindTimer will no longer incorrectly return an invalid timer when invalid handle is passed in.

  • Made some of the compiler command lines significantly shorter which should prevent strange compiler errors, especially when compiling UELinkerFixups cpp files.

  • Skipped saved property warning will now only be emitted when loading from disk in cooked content.

  • Specifying an instigator for a Pawn via FActorSpawnParameters will now properly be applied.

  • UBT: Fixed public library path settings being ignored in build rules

  • virtual BlueprintImplementableEvents do not work correctly in all cases. BlueprintNativeEvent should be used for cases where both C++ and Blueprints are expected to override the functionality.

    • In a future release this will be made a Unreal Header Tool error.

  • New: Default AGameMode::ChoosePlayerStart implementation now uses GetDefaultPawnClassForController instead of DefaultPawnClass directly.

  • Fixed occasional shutdown crash in source code navigation database (due to static destruction order)

  • Fixed TComPtr internal pointers being released in wrong order

  • Slight optimization to FName less than operator

Rendering

  • New: Added a Thickness option to DrawFlatArrow, DrawDirectionalArrow, and DrawCoordinateSystem

  • New: Moved some shaders used by RHIs directly into the new UtilityShaders module

  • New: Reworked shader stream out support, now works properly with FShaderResource sharing

    • GetStreamOutElements is a callback function on the shadertype, just like ModifyCompilationEnvironment

    • If GetStreamOutElements is specified, the FShaderResource includes that shader type in its ID as it can't be shared with any other shader type.

  • New: Stationary lights with CastDynamicShadows disabled no longer do dynamic shadow setup, minor optimization

  • New: The D3D RHI now uses a DXGI1.1 factory rather than 1.0. It still uses 1.0 interfaces.

  • New: XGE Distributed Shader Compilation from Luke Thatcher of Lionhead Studios

  • Enabled with either r.XGEShaderCompile=1 in ConsoleVariables.ini, or -xgeshadercompile command line argument

  • Added an ensure to guard against setting a non-rendertarget texture as a render target.

  • Fix cooking crash with atmosphere rendering.

  • Fixed an issue that prevented the BlendMode from being changed on FCanvasNGonItem

  • Removed dead class FFontMaterialRenderProxy

UI

  • New: Converted UTextRenderComponent to use FText so it can respond to live-culture updates

  • New: Input bindings for Motion, Gesture, Android, Steam, and XBox One keys now appear in their own sub categories under Input.

  • Added a fallback font when calling AHUD::GetTextSize to mirror the behavior of AHUD::DrawText

  • Added support for passing in a command list when creating a details view that can be queried by customizations, allowing key-bound commands

  • Updated uses of SSingleObjectDetailsPanel and SActorDetails

  • Correct initialization of bMenuHiding and bMenuHidden in SGameMenuPageWidget::Construct(). Fixes issues with clicking on player name input widget in PlatformerGame.

Slate

  • The FString passthrough functionality of SLATE_TEXT_ATTRIBUTE is deprecated as of 4.8, which means that you're now going to get a deprecation warning when passing text to Slate as FString rather than FText.

  • SLATE_TEXT_ATTRIBUTE was originally added as a stop-gap solution to allow all the code that was already passing text to Slate as an FString to continue to build without having to make any code changes.

  • SLATE_TEXT_ATTRIBUTE provided a way for the transition between FString and FText to happen slowly, however that transition period has ended, and soon the FString support will be removed (likely by 4.10).

  • New: Added a way for STableViewBase (and its derived types) to notify you when they are scrolled

  • New: Added an option to create Slate window without a close button and used it for Source Control Login window, replacing a custom title bar it was using that didn't look well on Mac

  • New: Added another column sizing mode to STableRow which allows Excel like sizing

    • EColumnSizeMode::Manual

  • New: Added custom slate stats. See SlateStats.h for details on the new system, which allows for full hierarchical profiling with limited overhead.

  • New: Added FTabManager::GetOwnerTab() to return the tab that owns the specified tab manager

  • New: Added SContentPicker::OpenAssetPickerMenu to programmatically trigger the asset picker

  • New: Added the ability to specify a minimum desired width for SViewportToolBarComboMenu

  • New: Added tracking of the last activation time to SDockTab instances

  • New: Added warnings for when FSlateFontInfo is created with a null font, or a font that can't provide a valid composite font

    • This also stops offline (bitmap) cached fonts from reporting that they're able to provide a composite font (they can't).

    • This makes it clearer when Slate will be forced to use the fallback font path, which may not always be as fast as the standard font path.

  • New: Exposed a variant of SWidget::FindChildUnderMouse that takes the position to check directly instead of a pointer event

  • New: Slate is now able to "sleep" when there is no user input and no widgets need to update. While sleeping, the entire Tick/Paint pass is skipped. This can be useful for those running the editor on battery power.

    • This is currently only relevant to Slate widgets used in the editor (in-game Slate should still be ticked every frame as before)

    • Any widget can prevent Slate from sleeping by registering an "Active Timer." Whenever an active timer needs to execute, Slate will tick/paint that frame (even in the absence of user input)

    • The active timer portion of the system is active at all times, but sleeping can currently be disabled prevented by typing "Slate.AllowSlateToSleep 0" in the console

  • New: WebBrowser: Converted OnTitleChanged delegate to an event

  • Changed SFxWidget's HAlign and VAlign attributes to arguments to match how they were actually used.

  • Fixed an issue where STableRow::GetContent would always return SNullWidget when the content was set via SetWidget

  • Fixed memory leaks caused by Slate holding onto UTexture references for too long.

  • Fixing STableRow to properly return the handled result on the new OnAcceptDrop handlers.

  • Hittest grid no longer discards the entire event path when a single widget in that path is broken. Instead, it returns a truncated path from root.

  • If the widget asking for mouse capture is completely gone (including the entire path to that widget) do not crash; ensure instead.

  • mproved SWizard styling compatibility (now obeys text style on Next/Back buttons, and uses the success style on Next)

  • InsertsSlots funcs default to AddSlot if no index is specified

  • List view should not attempt to scroll if that would lead outside scroll range. This check is performed only if overscroll is not allowed.

UMG

  • New: Adding a reference implementation of a web browser wrapper around the SWebBrowser Slate widget to the WebBrowserAsPlugin module.

  • New: Adding an experimental wrapper for SRichTextBlock. A lot of work remains for supporting links and images but this will serve as a nice starting point.

  • New: Adding ExpandableArea as an experimental widget, demonstraits how you can use the named slot interface on a non-user widget to provide multiple slots, but not N slots like a normal panel.

  • New: It's now easier to provide settings to the Editor. If you derive from UDeveloperSettings, but otherwise have all the typical config related metadata for the class your settings will automatically be registered with the editor. This avoids needing to make a plugin or editor module just to register your settings class for your game.

  • Exporting 3 blueprint function libraries UMG exposes to be linkable from C++ DLL

  • Now using IsBindableEvent="True" for widgets that expose bindable single cast delegates. Using the old trick of scanning for ones ending with "Event", will eventually stop working.

Upgrade Notes

Programming

  • Shadow variable warnings enabled. Almost all shadowed variables have been eliminated from the UE4 source and shadow variable warning has been enabled.

    • Currently enabled when building for Mac, Linux, iOS, HTML5, and Windows using clang. Android and PS4 should be enabled in 4.9. Windows with visual studio should come with Visual Studio 2015 support.

    • While enabled by default, each module can disable the warnings by adding bEnableShadowVariableWarnings = false; to the .Build.cs file for the module.

    • If you need to disable the warning for just a specific section of code or the includes from a third-party library you cannot modify you can wrap the code with PRAGMA_DISABLE_SHADOW_VARIABLE_WARNINGS and PRAGMA_ENABLE_SHADOW_VARIABLE_WARNINGS

  • Since we had to replace bRebuildAtRuntime boolean property with a new enum, you should update navigation rebuild settings in your project configuration.

Animation

  • If you have any Anim Blueprint derived from either of those classes, it won't work.

Automation

  • Running automation tests through command line for larger projects may take longer before the tests are triggered.

Blueprints

  • Users may be required to select the top most comment node in a nested to set once in order to fix older blueprints that have persistent comment selection issues

Core

  • Standardised naming convention for class used to managed memory operations, the same names for template and pointer based functions

    • MemSet replaced with Memset

    • MemZero replaced with Memzero

    • MemCopy replaced with Memcpy

  • Hot reload uses special empty auto-generated constructors to obtain virtual table pointers from UObjects and to avoid re-constructing subobjects when creating temporary objects after loading the recompiled DLL but before the classes have been regenerated. This implies the requirement that all member variable types are default constructible.

    • The signature of the new constructor is UMyClass::UMyClass(FVTableHelper& Helper) and it can be manually defined in the header file to initialize all member variables that are not default-constructible

    • Auto-generation of the new constructors can be disabled by defining WITH_HOT_RELOAD_CTORS macro to 0 and setting [Core.System] UseVTableConstructors to False in BaseEngine.ini.

    • Note that disabling this feature may result in crashes when performing hot reload.

  • We're planning to enable async loading thread by default in future releases so it's a good time to start looking through gameplay C++ code to make sure that all UObject-derived class constructors, as well as all overrides of UObject::Serialize and UObject::PostInitProperties functions are thread-safe.

    • The most common pitfall is accessing global managers (singletons) from those functions without guaranteeing thread safety of the operations performed on them.

    image alt text

    • Another common issue is accessing static or global variables from constructors and/or changing their value.

    image alt text

    • One should also be careful about accessing any objects not owned by the object currently being constructed/serialized as these operations can be performed simultaneously from multiple threads.

    image alt text

    • It's also dangerous to hold references to objects not owned by the currently constructed/serialized object on the stack (inside of a function) without referencing it through a UProperty or surrounding the scope of the function where they are used with FGCScopeGuard object.

    image alt text

Editor and Tools

  • Any project defaults for EditorUserSettings will no longer apply. Please rename any (Default)EditorUserSettings.ini configs to (Default)EditorPerProjectUserSettings.ini

    • On loading 4.8 for the first time, we will migrate the first loaded project's editor layout and keybindings to the default location. These settings will then be common to all projects.

Content Browser

  • The named FExtender sections in the Content Browser Filters menu have been replaced by the added ability to register new advanced asset categories.

Cooker

  • Games supporting DLC will now receive a warning when engine content is accessed during cooking if they disable Include Engine Content. This setting is enabled/disabled in the Release / DLC / Patching Settings from within Unreal Frontend.

Gameplay Framework

  • Loading savegame files from previous versions may cause crashes in some instances. If you encounter this, the easiest solution is to delete your savegames (located in MyProject/Saved/SaveGames). If you wish to try and recover this data, look for the "Note for 4.8 and beyond" comment in LoadGameFromSlot for instructions on how to temporarily modify your code to enable loading of old data, so you can then resave in the new version.

Localization

  • Various localization configuration script settings have been renamed or no longer attempt to silently interpret ambiguous values.

Networking

  • Double check for any overloaded uses of these functions and make sure the signatures match.

Online

  • The GameInstance class now automatically subscribes to the OnSessionUserInviteAccepted delegate, and GameInstance::OnSessionUserInviteAccepted can be overriden for custom handling of accepted invites.

Paper2D

  • Paper2D importing / sprite creation settings have been moved to a new location in Project Settings .. Paper2D - Import.

    • Old default settings are not carried across, any custom settings for materials or pixels/uu will need to be reapplied but this change will not affect any existing assets

    • The default pixels per unreal unit setting for Paper2D assets has been changed to 1.0, so if you create new sprites and they are at an unexpected scale to existing ones in your project, this should be the first thing to check (the previous default was 2.56 in the engine or 1.28 in 2D templates). It can be configured in the project settings as well.

Physics

  • The new 6 degrees of freedom encompasses the old LockedAxis behavior. The properties have been renamed accordingly.

Platforms

Android

  • If using a custom AndroidDeviceProfileSelectorModule, the new Android profiles in this version should be added to handle proper compatibility fallbacks

Playstation 4

  • The .ini heading and setting names for Morpheus have changed, so existing settings will not work. Please use the new settings in PS4 ProjectSettings to set them up.

Xbox One

  • Any custom modification of AppxManifest templates will need to be migrated to configuration settings.

  • Existing AppxManifest templates will be ignored in favor of manifests generated from configuration settings.

    • Any custom modification of AppxManifest templates will need to be migrated to configuration settings.

    • Several common settings can be modified in the Project Settings within the Editor.

    • Settings that are not yet available in the Editor must be applied by editing INI files.

    • Look in Engine\Config\XboxOne\XboxOneEngine.ini and Samples\Games\ShooterGame\Config\XboxOne\XboxOneEngine.ini for examples of how to configure these settings.

VR

  • Older projects may still need to manually enable the GearVR plugin.

Programming

  • See FWindowsApplication::AddMessageHandler()

Rendering

  • if your project was previously configured in this way then you may wish to uncheck an orientation in order to avoid unwanted orientation changes.

  • Previous behavior would mean that a single orientation was used even if multiple orientations were checked.

    • if your project was previously configured in this way then you may wish to uncheck an orientation in order to avoid unwanted orientation changes.

Lighting

  • Lighting done in the bass pass does not properly use the new shading model yet. All dynamic lighting does: deferred direct lights, ambient cubemap, and dynamic skylight.

Postprocessing

  • Best to use SSAO defaults settings as older settings might not look as good. New method isn't as good with small SSAO radius but we intend to improve that again

Optimizations

  • Check to see if your SpeedTrees need to change to use the new 'BestPlus' configuration.

Slate

  • Any existing custom editor widgets that rely on Tick() to be called should be updated to use active timers instead that register only when the tick is required.

  • Note that if any realtime viewport is visible, Slate cannot go to sleep. To take advantage of the system, make sure that viewports are not realtime.

    • Any existing custom editor widgets that rely on Tick() to be called should be updated to use active timers instead that register only when the tick is required.

UMG

  • If you have been using UMG for a static image load screen between full level transitions those will no longer work. Using UMG for loading screens when using level streaming will continue to work.

C++ API Changes

  • New: Various fixes to the in-game / in-editor screenshot facility:

    • The OnPNGScreenshotCaptured delegate was removed as all screenshots are now saved as pngs.

  • New: Removed deprecated file Media.h

    • Instead of Media.h, include the individual header files in the Media module that you actually use

  • New: Allowing message handlers to decide for themselves whether they want to handle a message; documentation updates.

    • If one of your classes implements IMessageHandler, you must remove GetHandledMessageType() and instead verify the type of message in HandleMessage(). See TMessageHandler<> for details.

  • New: Refactored IMessageHandler.h so that it doesn't have header dependencies

    • Default message handler implementations have been moved into MessageHandlers.h

  • New: Allowing for checking major AND minor version of Windows

    • You must rename your usages of VerifyWindowsMajorVersion() to VerifyWindowsVersion() and pass a second parameter for the minor version number (pass '0' to check for Windows Vista, as before).

  • New: Removed AutoPlay feature in MediaPlayer assets.

    • The AutoPlay feature turned out to be quite dangerous, because it causes media playback to start as soon as a MediaPlayer is loaded, thus consuming resources even if it is not used anywhere. Media should be played and stopped on demand using Blueprints (MediaPlayer.Play) or C++ instead.

  • New: Slate is now able to "sleep" when there is no user input and no widgets need to update. While sleeping, the entire Tick/Paint pass is skipped. This can be useful for those running the editor on battery power.

    • FCurveSequence now requires that a Slate widget be provided to it and all Active Timer registrations are handled automatically on behalf of that widget. While the curve sequence is playing, Slate will not sleep.

  • New: Various Actor and SceneComponent methods that use FRotator now have overloads taking rotation as an FQuat (Quaternion).

    • In rare cases where virtual methods using FRotator could be overridden, there are now non-virtual overloads that forward to a single virtual implementation.

      • This ensures derived versions override the version that will be used by engine code.

      • Make sure to call the correct Super function in overrides if currently using it, since the overridden function may have been renamed.

  • MovementComponent refactored to add overloads using FQuat in addition to FRotator.

    • Some virtual methods have been changed and overrides will need to be updated.

      • Make sure to call the correct Super function in overrides if currently using it.

  • Making a large pass and fixing all the places properties were incorrectly set to EditDefaultsOnly, they should have been set to EditAnywhere.

    • Removing some old functions from UWidget for gathering children widgets that didn't perform all the correct logic. You should use the WidgetTree's functions for traversing the tree.

  • Made most variables in UPaperTileLayer private

    • C++ code that directly accessed member variables of UPaperTileLayer will need to be updated to use the accessor methods

  • Made members of UPaperTileSet private and added accessors

    • Any existing code that directly accessed the members of UPaperTileSet will need to be updated to use the accessors instead

  • Removed BlueprintReadWrite from FPaperTileInfo members, opting instead for friendlier make/break functions (since the index contains packed flags)

    • Blueprints that directly acessed PackedTileIndex or TileSet from a FPaperTileInfo struct will need to be updated to use a break or make node instead

  • Deprecated GEditor->SetActorLabelUnique and GEditor->SplitActorLabel. Please replace calls with the static methods FActorLabelUtilities::SetActorLabelUnique and FActorLabelUtilities::SplitActorLabel

  • GameplayCueActor and GameplayCueView have been deprecated and removed in favor of GameplayCueNotify_Actor

  • New: Added support for extension-less streaming media URI schemes

    • IMediaModule::GetSupportedFormats() has been renamed to IMediaModule::GetSupportedFileTypes(); FMediaFormats has been renamed to FMediaFileTypes; IMediaPlayerFactory::GetSupportedFormats() has been renamed to IMediaPlayerFactory::GetSupportedFileTypes(); IMediaPlayerFactory::SupportsFile() has been replaced with IMediaPlayerFactory::SupportsUrl(), which must now be implemented by media plug-ins

  • Updated revision display to display strings rather than revision indices

    • Added new pure virtuals ISourceControlProvider::UsesChangelists(), ISourceControlState::FindHistoryRevision(const FString&) and ISourceControlRevision::GetRevision().

  • Game Mode features were exposed to Blueprints

    • The following functions, if overriden in any AGameMode subclass will now require overriding the _Implementation version:

      • ReadyToStartMatch, ReadyToEndMatch, ShouldReset, MustSpectate, GetDefaultPawnClassForController, InitStartSpot, SpawnDefaultPawnFor, CanSpectate, FindPlayerStart, ChoosePlayerStart, PlayerCanRestart

  • New: GraphEditor: Refactored connection drawing policy API to be more flexible

    • Any editor plugins that contain a FConnectionDrawingPolicy subclass will need to update calls to DrawSplineWithArrow, DrawConnection, and DetermineWiringStyle to match the new signature that takes a FConnectionParams structure

  • Tidied up some old localization code by removing the following: PPF_LocalizedOnly, CPF_Localized, CLASS_Localized, UProperty::IsLocalized.

    • Any code which uses PPF_LocalizedOnly, CPF_Localized, CLASS_Localized or UProperty::IsLocalized will no longer compile and should be removed. The Localized specifier should be removed from any UPROPERTYs.

  • Removed MaxReadBytes from UProperty::SerializeItem, UStruct::SerializeBin and FPropertyTag::SerializeTaggedProperty, as it was unused.

    • The signatures of UProperty::SerializeItem, UStruct::SerializeBin or FPropertyTag::SerializeTaggedProperty have changed.

  • Deprecated CanConvertPointerFromTo as it did not honor const qualifiers nor follow the naming conventions of other template metafunctions.

    • Any use of CanConvertPointerFromTo will throw deprecation warnings.

  • Changed FColor, FVector, FTimespan etc. from 'class' to 'struct', as they were defined as C++ classes but also as USTRUCTs, which caused UnrealHeaderTool to generate bad forward declarations.

    • Forward declarations of FColor, FVector, FTimespan etc. as classes will generate Visual C++ warnings like "type name first seen using 'struct' now seen using 'class'".

  • New: Changed the Exchange function to use Memswap in all cases, as this was an assumption used by a lot of code.

    • This may break types which are not trivially-swappable, but have well-defined move constructors. These should be rare, if any exist at all.

  • Fixed ranged-based iteration over FString so that it no longer returns the null terminator.

    • Code which relies on there being a zero TCHAR character during doing a ranged-based for loop may fail.

  • Removed PLATFORM_COMPILER_HAS_RANGED_FOR_LOOP, as all UE4 supported compilers have it.

    • Any code which tests for PLATFORM_COMPILER_HAS_RANGED_FOR_LOOP may get skipped.

  • New: Added heterogeneous comparison support to TArray::Contains, so that you can now find elements by any type which is comparable to the array element type, even if it's not convertible, e.g. searching a TArray> for a UObject.

    • Existing calls to TArray::Contains may fail if your comparison type is implicitly convertible to the array element type, but does not have an operator== which compares those two types.

  • Deprecated TArray::Init(int32 Number), as its name did not suggest that the array elements would be uninitialized.

    • Calling TArray::Init(int32 Number) will now cause deprecation warnings.

  • Removed PLATFORM_COMPILER_HAS_RVALUE_REFERENCES, as all UE4 supported compilers have it.

    • Any code which tests for PLATFORM_COMPILER_HAS_RVALUE_REFERENCES may get skipped.

  • Improved much of TMap's implementation, by removing redundancy, adding extra compile time error checks and improving encapsulation.

    • One of the template parameters of TMap has been removed. TMapBase is no longer instantiable on its own.

  • Changed UStruct::SuperStruct to be a private field to prevent accidental modification, as these would invalidate the new and improved UObject::IsA code.

    • Any derived classes which accesses SuperStruct will no longer compile.

  • Cooked builds will use a dedicated thread for package streaming instead of using time-slicing approach. This way streaming code can utilize full frame time for constructing and pre-loading asset objects resulting in up to 3 times faster streaming times.

    • Linkers are no longer UObjects. Renamed ULinker, ULinkerLoad and ULinkerSave to FLinker, FLinkerLoad, FLinke]rSave respectively.

  • New: Exposed generic Get/SetAxisProperties accessors to UPlayerInput.

    • Deprecated UPlayer::SetMouseSensitivityToDefault and InvertMouse

  • New: Fixed shadow variable warnings when a class has a member named Result

    • Custom thunk blueprint function implementations that return a result need to use RESULT_PARAM instead of Result.

  • New: Deprecated 'operator new' for UObjects. It's not safe to construct new objects using C++ operator new.

    • UObjects can't be created using C++ operator new

  • virtual BlueprintImplementableEvents do not work correctly in all cases. BlueprintNativeEvent should be used for cases where both C++ and Blueprints are expected to override the functionality.

    • A number of previously virtual BlueprintImplementableEvent functions have had virtual removed in favor of existing virtual functions intended for overriding C++ behavior:

      • UActorComponent::ReceiveBeginPlay -> BeginPlay

      • UActorComponent::EndBeginPlayer -> EndPlay

      • APlayerCameraManager::BlueprintUpdateCamera -> UpdateViewTargetInternal

      • UGameInstance::ReceiveInit -> Init

      • UGameInstance::ReceiveShutdown -> Shutdown

      • AActor::ReceiveBeginPlay -> BeginPlay

      • AActor::ReceiveAnyDamage/ReceiveRadialDamage/ReceivePointDamage -> TakeDamage

      • AActor::ReceiveTick -> Tick

  • AActor::GetActorClass deprecated, use GetClass instead.

  • New: Slate's FInputGesture and Engine's FInputChord unified as FInputChord defined in Slate

    • Slate's FInputGesture and Engine's FInputChord unified as FInputChord defined in Slate

      • FInputGesture deprecated, use FInputChord instead.

      • Where previously including "InputGesture.h", include "InputChord.h" instead

      • Where previously including "InputComponent.h" to access FInputChord, include "InputChord.h" instead.

  • New: Renamed FQueuedWork to IQueuedWork

    • Existing usages of FQueuedWork must be renamed to IQueuedWork

  • New: Renamed ITlsAutoCleanup to FTlsAutoCleanup (it's not a [non-virtual] interface)

    • Existing usages of ITlsAutoCleanup must be renamed to FTlsAutoCleanup

  • You can now have more than one Unreal class (UCLASS) in a single C++ header file! No additional work required, just define additional UCLASS and it should work!

    • Please keep in mind that this feature also changes reflected types path, so they are no longer subobjects of UCLASS declared in the same file. Now all reflected types are children of the package they are contained in. In other words when old path was /Script/PkgName.UClassName:UStructName, now it will be /Script/PkgName.UStructName. We have left the code that should compensate this change, but please be warned as we might have missed something.

    • Fixed cooked projects showing default materials when shaders have compile correctly.

    • Caused by race condition in saving cooked packages before they have finished compiling.