Unreal Engine 4.18 Released!


What’s New
From desktop to mobile in virtual reality or augmented reality, Unreal Engine 4.18 gives you the tools to deliver the types of content users demand. With expanded and improved platform support, you can deliver content wherever users consume it. In our relentless pursuit of a more efficient and streamlined development process, we continue to make updates and improvements to all of our tools so that you can deliver content faster than ever before.

With new lighting features like Volumetric Lightmaps and multi-bounce indirect lighting from Skylights, your worlds can achieve a greater sense of realism and believability. You can even bring the real world into yours with the new Media Framework features that enable real-time compositing. Or, build your world on top of the real world for the ultimate in immersion using Apple’s ARKit and Google’s ARCore.

Your potential audience is constantly evolving and getting content from new and different platforms. Unreal Engine 4.18 puts your content on every major platform with greater fidelity and higher performance than ever before. We made the desktop forward renderer available on recent iOS devices to enable high quality mobile and AR content that runs blazing fast. WebAssembly is now the default for HTML 5 projects so you can create complex games for the web that load quickly and run smoothly.

Unreal Engine 4.18 enables you to focus your time on the things that matter most. With the new global Find in Blueprints search functionality, you’ll never waste time looking for something in multiple Blueprints ever again. We have also added improved Clothing tools, a new Physics Asset Editor, and advanced Material Editor preview support along with a host of other quality of life improvements that significantly speed up the development process.

In addition to hundreds of updates from Epic, this release includes 98 improvements submitted by the incredible community of Unreal Engine developers on GitHub! Thanks to each of these contributors to Unreal Engine 4.18:

kayama-shift, alanedwardes, ayamashev, umerov1999, kamrann, cneumann, yaakuro, Koderz, christopherreed, DaveC79, DavidNSilva, getnamo, monsieurgustav, shuaiharry, IanMatthewHuff, IHappyDayI, jasoncalvert, jesseyeh, jimbomcb, jorgenpt, Josef-CL, kallehamalainen, karanseqwb, gildor2, jubanka, lwdingNT, user37337, LordNed, mlaveaux, TheCodez, mhutch, minichris, nverenik, projectgheist, EverNewJoy, RChehowski, samhocevar, gsfreema, SRombauts, SertacOgan, steelixb, stfx, Triplelexx, ArCorvus, DarkSlot, Zeblote

Epic has made recent account changes to provide an age-appropriate experience for players, developers, and creators of all ages. If you don’t see your name credited here for code that you have contributed, please log into your Epic account and ensure that you have updated your account information so that we can include you for future releases. If you need additional assistance, please reach out to Support.

Major Features

New: Volumetric Lightmaps
The new Volumetric Lightmaps enable high quality lighting on movable objects from low cost precomputed lighting! Characters, particle systems, instanced foliage, and other dynamic objects appear more grounded to the environment than ever before.


Volumetric Lightmaps store precomputed lighting at all points in space by covering the entire Lightmass Importance Volume with 4x4x4 bricks of lighting samples. Bricks are placed with higher density near static geometry, where indirect lighting is changing the most. This data structure allows efficient interpolation of indirect lighting to any point in space on the GPU. The Volumetric Lightmap is interpolated to each pixel instead of once for the whole component and has more reliable detail than our previous Indirect Lighting Cache method, resulting in fewer cases of light leaking.

For more information and details on using Volumetric Lightmaps in your project, see the Volumetric Lightmaps documentation.

Precomputed lighting on Volumetric Fog

Volumetric Fog now interpolates precomputed lighting to its position in space using Volumetric Lightmaps enabling Stationary lights - which have their indirect lighting stored in lightmaps - to affect fog. Static and Emissive lights affect fog without costing anything, since they’re all merged into the Volumetric Lightmap.


Skylights are also now shadowed properly, preventing indoor areas from becoming over-fogged.


1 - Skylight on fog is shadowed properly, 2 - Uniform skylight on fog has leaking


  • Volumetric Lightmaps on a third person character cost .02ms of GPU time on PlayStation 4. All Indirect Lighting Cache Rendering thread cost is removed.

  • Memory usage in Paragon’s Monolith map went from 5Mb with the Indirect Lighting Cache up to 30Mb with Volumetric Lightmaps at default DetailCellSize settings. Memory usage can be seen under ‘stat memory’.

Detailed Comparison

Volumetric Lightmap
Precomputed Light Volumes / Indirect Lighting Cache

Efficient interpolation on GPU
Costly interpolation on CPU

Per-pixel interpolation
Per-object interpolation, even on instanced components

Applied to Volumetric Fog
Cannot affect Volumetric Fog

Placed with high density around all static surfaces
Placed with high density only on top of static surfaces, frequent leaking from low density samples

Border voxels are stretched to cover area outside Importance Volume
Black indirect outside Importance Volume

Does not currently support level streaming
Supports level streaming

New: Improved Static Skylight Directionality
Skylights used to be represented to Lightmass with a third order Spherical Harmonic, which didn’t capture the detail present in a sunrise or sunset. We are now using a filtered cubemap with much higher resolution by default. Lightmass chooses the appropriate mip of the cubemap based on the size of the Final Gather rays to avoid aliasing. You can see the most difference in heavily occluded scenes, with a skylight cubemap that has a lot of brightness and color variation.


1 - New filtered cubemap Static Skylight, 2 - Original Static Skylight

The smaller the opening, the more directional sky lighting will become. It is even possible to recreate a pinhole camera effect with a small enough opening.



Skylight source cubemap
Resulting sky lighting

New: Multi-bounce Indirect Lighting from Skylights
We now have support for multiple indirect lighting bounces from static and stationary Skylights through a new ‘Num Sky Lighting Bounces’ setting in World Settings -> Lightmass. Thanks to forum user Luoshuang for the first implementation of this feature.


1 - Multiple skylight bounces, 2 - Single skylight bounce

Your materials need to have a high diffuse value for multiple skylight bounces to be noticeable in most cases. For example, with a diffuse value of .18 (18% grey), the second skylight bounce will only contribute .18^3 = .006 of the light’s emitted energy which is very subtle. With a diffuse value of .5, the second skylight bounce will contribute .125 of the light’s emitted energy and be noticeable.

As a bonus we also get multiple bounces from Emissive meshes:


Lightmass uses a Radiosity Solver to compute multiple bounces for Skylights and Emissive meshes. Each bounce increases non-distributable build times, so use with care.

New: Apple ARKit iOS 11 Support
Unreal Engine 4.18 includes production-ready support for Apple’s ARKit in iOS 11 based on our collaborations with partners for Apple’s keynote announcing the iPhone 8 and iPhone X.



We’ve streamlined workflows making use of existing framework components, added robust handling of the passthrough camera, and increased fidelity by improving performance and prediction.

**Note: **There have been significant changes since the experimental support for ARKit in Unreal Engine 4.17. ARKit projects created using 4.17 will require updating to work in 4.18.Download the updated ARSample project to see what’s changed for 4.18.

Getting started

Getting started in now super easy. All you need to do is:

  • Enable the appropriate ARKit plugin for your project.

  • Check the bStartInAR property in Project Settings.

  • Make sure you have a Pawn with a CameraComponent.

Known ARKit Issues

  • Device rotation is not fully supported yet. At the moment you should select Landscape Right as the only supported orientation for your project.

  • The only exposed function for hit-testing is HitTestAtScreenPosition_TrackingSpace. This returns the results in the CameraComponent’s parent’s space. In the default setup, that is the Pawn’s space. To translate to world space we currently need to multiply the result by the parent’s (e.g. Pawn’s) world transform.

  • The function HitTestAtScreenPosition_TrackingSpace ignores the Types parameter; it will always hit-test against all the available surfaces and return results that can be manually filtered by checking the Types field of the FAppleARKitHitTestResult struct.

  • FAppleARKitHitTestResult does not populate the Anchor property; it is always nullptr.

  • World Scale is currently assumed to be default, and cannot be changed.

New: Google ARCore Developer Preview Support
Unreal Engine 4.18 contains official support for Google’s ARCore developer preview which takes advantage of common augmented reality functionality in the engine and features improved handling of the passthrough camera.

We’ve also updated our ARSample project to support ARCore as well as ARKit. Download the project to see what’s changed for 4.18 and start developing for ARCore today.

SteamVR Support on Mac

We’re happy to announce that as of 4.18, UE4 officially supports VR on Mac through SteamVR! All the same interfaces that you’re used to on the PC are available on the Mac, so it’s easy to transfer your project to Mac to give it a spin. The update comes alongside support for Metal 2 and many other runtime optimizations. Update to the latest release of SteamVR and give it a try!


New: Clothing Tools
We have added a completely revamped toolset for creating and configuring clothing in the Skeletal Mesh Editor!

There is now a Clothing pane for editing an expanded set of clothing-specific properties that provide more control over clothing constraints, self collision vertex culling, inertia scaling. Enhanced paint tools enable painting per-vertex clothing parameters directly on the mesh. The new paint tools include: Brush, Gradient, Smooth, Fill. Painted parameters can be switched out instead of overwriting to aid iteration.

The clothing tools have been Integrated with Physics Assets for collision authoring. A new LOD pipeline for creating and replacing simulation meshes in a Clothing Data object that includes a parameter mapping system for mapping your painted parameters onto new LODs or replacement geometry which estimates lower detail LOD parameters from higher detail LOD parameters! It is also much easier to create clothing data in the Skeletal Mesh Editor by right clicking the mesh section to convert.

This is in addition to all of the smaller bugfixes and improvements highlighted while the tool was experimental / early access.

Note: APEX file import still available for those preferring a DCC pipeline

New: Media Framework Improvements
Media Framework in 4.18 has been significantly updated and extended to support upcoming advanced use cases, such as real-time video compositing, time synchronization, simplified workflows, capture hardware & video-over-IP support, online media streaming, integration with Unreal Editor, and improved stability and performance!

The Media Framework API has been streamlined to improve compile times and updated to make use of modern features in C++11. In addition, high-level media player logic has been refactored from a push-based paradigm to a pull-based methodology and moved into reusable Engine-agnostic classes that enables better separation of concerns in media player interfaces.

Latency and Performance is improved due to a timecode-based sample processing pipeline with high-frequency ticking for time-sensitive samples - such as audio, camera tracking, and face tracking - and multi-stage ticking that can be used by any object for better frame utilization and predictable timing.

Audio playback is now integrated with new Audio Mixer API and makes use of new Media Sound Components (replaces Media Sound Waves) that are built on top of Synth Components which can be attached to level actors and used in UMG widgets. Media sample rate converter (previously supported only 16-bit @ 44.1kHz) now supports int8, int16, int32, float, double input samples and any sample rate (including variable rates) with up to 8 audio input channels and 1 and 2 output channels (surround sound is scheduled for 4.19). Spatial audio is also supported via Media Sound Components on Actors

On the video side, Media Framework now uses an external texture sampler API which enables video frame rendering without memory copies. This is currently only implemented for Android, but we plan to expand it to other platforms. We replaced problematic triple-buffering mechanism with sample queues and added better support for exotic video and pixel formats, and faulty encoders.

The Media Player Editor has been updated with a new Track format selector menu, audio/video capture device selector, cache state visualization (for player plug-ins that support it), Playlist controls, and the ability to save playlists. In addition, scrubbing is now more responsive and information overlays have been improved. There is also experimental support for text overlay visualization and 360 video viewport controls. Per-platform media player overrides for Media Source assets are also now functional.

Blueprint functionality has been added for querying media player tracks and track formats, enumerating audio, video and webcam capture devices, and adding files and URLs to media playlists.

All media player plugins have been updated to enable support for all of the dramatic new features available in the Media Framework in Unreal Engine 4.18.

Note: Some of this work, such as Sequencer integration, stereoscopic & 360 video support, and hardware accelerated 4K playback is still under active development.

New: Sequencer Improvements
We made several ‘quality of life’ improvements to Sequencer including:

  • Improved FBX import by adding the ability to import static/default transforms, add cinematic cameras if a corresponding camera doesn’t exist in the map, and the option to force front x axis

  • More efficient track, keyframe and path trajectory drawing. Overlapping keys now draw with a red border.

  • Editing tools including slip editing for audio, skeletal animation, shot tracks.

  • More drag and drop support - You can now drag onto shot tracks, subscene tracks camera cut tracks and sequence recorder.

  • Warmup on shot boundaries when movie recording from a master sequence.

  • Added the ability to rerun construction scripts in editor while scrubbing.

  • Cine camera look at with roll

  • Sequence recorder improvements such as interpolation and tangent settings for animation recording keys and drag and drop support.

New: Improved Physics Asset Editor
The Physics Asset Editor (formerly known as PhAT) has been completely overhauled to significantly improve usability and expand functionality! The UI has a new look and feel with an upgraded Skeleton Tree view that provides better filtering and display of all scene elements and a new Graph view for setting up constraints between bodies visually using nodes. You can even set up of loops of constraints - something that was not possible before.


UI elements have been sanitized. Many things have moved or changed to more logical locations. For example, the Show menu now allows access to animation-related settings like in the Animation Editors. Animations can now be chosen at any time, paused, scrubbed etc. (previously this was only available once simulation had started). Simulation can also be engaged and disengaged at any time while animating and works in a similar way to the Level Editor, with a single prominent “Simulate” button and options underneath…

Additional Updates and Improvements:

  • Time dilation works with animation and physics together and is quickly set in the viewport menu, like in the Animation Editors.

  • Recording is now controlled from the transport controls like in other Animation Editors.

  • Physical animation and constraint profiles have a revamped UI. This allows easy selection, assignment and management of constraint and physics profiles.

  • Constraint & body mode are no more. We now display constraints and bodies together. Rendering of each can be enabled/disabled and filtered in the tree view & viewport.

  • New body creation has been moved to a new ‘Tools’ tab instead of the modal dialog we had before. This improves iteration times on new assets, removing 3 clicks each time. The same widget is re-used when we create new Physics Assets, as before.

  • Physics Assets can now be created directly from the Content Browser. Previously they could only be created from a hidden context menu option of Skeletal Mesh assets.

  • Operations that can be performed on bodies/constraints are now in all context menus, in addition to the keyboard shortcuts required previously.

New: Multi-Convex Generation for Physics Asset Bodies
You can now auto-generate physics bodies using multiple convex hulls per bone. This allows non-convex geometry to be approximated using multiple convex hulls.

New: Animation Montage Time Stretch Curve You can now add a Time Stretch Curve track to an Animation Montage to control the play rate! This enables you to maintain the normal playback speed of your Montage while selectively slowing other parts of the Montage. For example with the Time Stretch Curve, you can author just a single attack animation and control and optimize its looks for a great range of playback times.

To use the Time Stretch Curve, create a Float Curve named MontageTimeStretchCurve in your Montage and add keys to define your curve. If you need a bit more control, you can use the Time Stretch Curve properties inside the Asset Details panel to determine how the curve is sampled as well as for debugging purposes, inspect the number of markers created under the hood.

New: RigidBody Anim Node Improvements
The RigidBody node now supports a root bone simulation space option. This is useful for the case where an attached Skeletal Mesh is counter rotated from a player capsule. We’ve also exposed inertia scaling and constraint dominance in the Physics Asset Editor which greatly improves stability and jitter.

New: Blendspace Editor Usability Improvements
You can now drag the Previewing Pin (green) across the grid instead of having the pin follow the cursor while holding down the Shift key. State-sensitive tips on the actual Blend Space Grid have been added to provide in-context explanations of features and functionality.

New: Global Find in Blueprints
It is now possible to perform a “Find in All Blueprints” search without also requiring a Blueprint Editor window to be open. Up to 4 global “Find in Blueprints” tabs can now remain open and/or docked in a different window at any time. These are now available in the main “Window” menu.

In the Blueprint Editor menu, choosing Edit->Find in Blueprints (or pressing CTRL-SHIFT-F with the Blueprint Editor window in focus) will also now open a new global Find in Blueprints tab (or switch to the first global tab that’s open and unlocked). This tab will remain open even after the Blueprint Editor’s window is closed if the tab is open or docked somewhere outside of the Blueprint Editor’s window.

The global Find in Blueprints tab also includes a Lock button so that the current set of results can be locked to the current tab. Invoking Edit->Find in Blueprints from the Blueprint Editor will open up a new global Find in Blueprints tab if any of the currently-open tab(s) are locked.

Choosing Edit->Find (or pressing CTRL-F) in the Blueprint Editor menu will still open a local Find Results tab for performing a search within the current Blueprint only. Clicking the “Find in all Blueprints” button will allow you to perform the same search over all Blueprint assets in a global Find in Blueprints tab.

The new behavior can be switched off if necessary by unchecking the option titled “Host Find in Blueprints in Global Tab” in Editor Preferences->Blueprint Editor->Workflow.

New: Improved Cross-level Actor References
Cross-level Actor references are now better supported using Soft Object References, which were previously called Asset IDs/AssetPtrs. If you create a Soft Object Reference property pointing to an Actor, they now have an improved UI that will show rather they are unloaded or broken, as well as the full Actor ID they point to:


Cross level references like this will now correctly be fixed up if the referenced Actor is renamed or moved using the “Move to current level” option. It will attempt to check out and resave any other levels/sequences that point to that specific Actor. It will also warn you before deleting Actors that are referenced in this way. They also now work correctly in Play In Editor with level streaming. Newly created Sequencer Actor references are now Soft Object References, but older Sequences will have to be fixed up with “Rebind Possessable References” and resaved first.

Note: As part of this update, the native types FStringAssetReference and TAssetPtr were renamed to FSoftObjectPath and TSoftObjectPtr.

New: In-Editor Localization Preview
We have added the ability to preview your game’s localization when Play in Editor (PIE) is running and in the UMG editor to preview widgets in different languages!

  • This is configured by the “Preview Game Culture” setting (“Editor Preferences” -> “Region & Language”), and will automatically be active when Play in Editor (PIE) is running. The preview language is also passed to any standalone games that are launched via the editor.

  • While a preview is running, all editable text fields are locked-down (read-only) to prevent accidentally overwriting source data with translation data. You can also use this new lock-down feature to prevent any localization changes in your project by setting “LockLocalization” to “True” under the “Internationalization” section of either your DefaultGame.ini or DefaultEngine.ini configuration files.

New: Array Reordering
You can now drag and drop elements to reorder them within an array! All arrays set up through Blueprints and C++ are reorderable by default. To opt out of the default behavior and create a fixed order array in C++, use the EditFixedOrder metadata.

New: Advanced Material Preview Viewport
The Material Editor and Material Instance Editor now have Advanced Preview Scenes for previewing your material in the viewport. This enables you to change view settings such as the scene lighting and environment cube map, as well as to rotate the environment around your preview mesh in the scene.

You can change the settings for the preview under Window > Preview Scene Settings.


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

  • IDE Version the Build farm compiles against

    • Visual Studio: Visual Studio 2015 Update 3

    • Xcode: XCode 9.0

  • Android:

    • NDK 12b

    • Installer 1r6u1

  • HTML5: emscripten toolchain to 1.37.19

  • Linux: v10_clang-5.0.0-centos7

  • Steam: 1.39

  • Oculus Runtime: 1.17

  • SteamVR: 1.39

  • Switch: 1.7.0, 3.5.1 + NEX 4.2.0; Firmware Version 3.0.1-1.0

  • PS4:

    • 4.508.111

    • Firmware Version 4.730.001

    • Supported IDE: Visual Studio 2015, Visual Studio 2013

  • Xbox One:

    • XDK: June 2017 QFE3 for all all Xbox consoles (XB, XB1-S, XB1-X)

    • Firmware Version: October 2017 Preview 3 (versuib 16291.1000.170913-1900)

    • Supported IDE: Visual Studio 2015

  • macOS: Support for macOS 10.13 High Sierra has been added as a fully supported platform!

  • iOS: SDK 11

  • tvOS: SDK 11

New: Visual Studio Code Supported on Windows, Mac and Linux
You can now use Visual Studio Code to write code on all UE4 host platforms. To use it, select “Visual Studio Code” as your preferred IDE from the editor preferences dialog, or add the -vscode argument when generating project files on the command line. All platforms are also required to have the .NET Core 2.0 runtimes installed, which can be obtained from the Microsoft .NET Core website.

To use Visual Studio Code to build and debug all project types, some additional extensions are required. On all platforms, make sure the Microsoft C/C++ extension, and the C# extension are installed. On Linux and Mac, the “Mono Debug” extension is required to debug C# projects, and the “LLDB Debugger” extension is required to debug C++ projects. Also, in order to debug C# projects, the mono runtime must be installed:

  • On OS X: brew install mono

  • On Linux: sudo apt-get install mono-complete


New: Simplified iOS certificates and signing
When using the remote toolchain to build iOS on a remote Mac from your PC, the certificate and provisioning setup in from the Project Settings on your PC. This means it’s no longer necessary to install your private key or certificates using Keychain Access on the remote Mac.

New: Desktop-Class Forward Renderer on iOS(Experimental)
Unreal Engine 4.18 contains the Desktop-class Forward Renderer used in the Wingnut AR demo at WWDC 2017! It is supported on iOS devices with an A9 or later processor running iOS 10.3 or newer, with an A10X or better running iOS 11 strongly recommended.


This rendering technology brings the same support physically based shading, reflections, lighting, and shadowing to the latest iOS devices. These features are more demanding than the existing mobile renderer on the hardware and are experimental so some features may not function correctly on all devices & OS revisions. The following features are known not to work: GPU skin-cache, GPU morph-targets, Atmospheric Fog and Multi-Sample Anti-Aliasing.

New: Gradle Enabled by Default for Android
Gradle is now the default for packaging Android APKs. Ant is still available if necessary by disabling the “Enable Gradle” Android project setting, but it is recommended to transition to Gradle since Ant is considered depreciated.

Note: If you previously did not accept the Android SDK license agreement by checking “Enable Gradle”, you will need to do so by clicking on the “Accept SDK License” button in the Android Project Settings. An error will be shown if you try to package or launch on without accepting the license.

New: Android Camera Plugin
Unreal Engine now has an optional plugin to expose access to the front and back cameras on Android devices. Enabling the plugin adds a new Android Camera plugin Project Settings panel to select Android Manifest requirements.


New: HTML5 Optimized Browser WebAssembly is now set to default
WebAssembly is now enabled by default for HTML5 projects. With support for the WebAssembly standard from many of the major browser makers, you can realize massive improvements on asset sizes, browser load time, and runtime performance when publishing to the web. The previous optimized HTML5 output ASM.js has been decommissioned and removed from the code base.

Note: Multi-threading is not yet available on WebAssembly. While ASM.js did support this, WebAssembly (for now) can only run in single threaded mode. However, multi-threading is a major feature push for all browser makers in the next coming months.

New: LLM Low Level Memory Tracker
The new LLM Low Level Memory Tracker enables you to track all memory once and only once,* with nothing missed and nothing counted twice!


Every allocation made by the engine or game is assigned a tag value identifying the category to which it belongs. The total of all of the categories will add up to the total amount of memory used for the game. The tags are applied using tag scope macros. Any allocation made within that scope will be given the specified tag.

LLM stats can be viewed in game using ‘stat LLM’ or ‘stat LLMFULL’. The current total for each tag will be shown in MB. LLM also writes out the stat values to a csv allowing the values to be graphed over time.

Due to its nature, LLM requires support to be added for each platform. Currently LLM supports PS4 and XboxOne. Windows is supported as an experimental release.

New: Improved XGE (Incredibuild) Shader Compiler Support
We’ve made improvements to the XGE (Incredibuild) shader compiler, which have greatly reduced the stalling and latency seen in the old system and allow us to stream new shader jobs asynchronously into XGE.

The new system performs much more efficiently, and can greatly accelerate shader compilation in all situations, including cook on the fly, cook by the book, and iterating on shaders within the editor.

These improvements are enabled by default, but require at least Incredibuild version 8.01 or higher. The engine does a version check on startup and falls back to the legacy XGE shader compiler if a supported installation is not found. As with the old system, the XGE shader compiler itself must be enabled on the command line via “-xgeshadercompile”, or by setting “r.XGEShaderCompile” to 1 in ConsoleVariables.ini.

Unreal Audio Engine (Early Access Preview)
Development continues on the new Unreal Audio Engine. This release brings support to more platforms, an updated plugin architecture, and some exciting new features. These new Unreal Audio features should still be considered early access. We will be focusing on performance and stability in coming releases.

Along with Windows, Mac, iOS, Android, XboxOne, and PS4; we have added support for the new Unreal Audio Engine on Nintendo Switch, Linux and HTML5. The new Unreal Audio Engine has been enabled by default for Linux. Significant fixes and improvements were also made to all the other backends first released in 4.17 and 4.16.

Audio Plugin Architecture Improvements (New Unreal Audio Engine Only)
Audio plugins are useful for audio effects that need to override or extend core features of the audio engine. Object-based binaural source spatialization, source occlusion, and master reverb are best achieved through a much deeper integration into the core mixing engine. These effects require special audio plugin support.

  • Enhanced Audio Plugin architecture enabling a smoother integration for 3rd party developers wishing to override core mixing features

  • Empowering projects to mix and match plugins overriding: Source Spatialization, Source Occlusion, and Reverb

  • Can now swap out different plugins without restarting the Editor!

New: Source Bus (New Unreal Audio Engine Only)
Source Buses are a powerful new feature which demonstrates the flexible routing capabilities of the New Unreal Audio Engine and allows multiple Sound Sources to send and sum into a single real-time Source. Source Buses are derived from Sound Base which allows them to be played and utilized in the same way Sound Waves or Sound Cues are employed—whether spatialized as a 3D mix bus or as a means to maintain Source Effect persistence, Source Buses will become a invaluable tool for Audio Designers and will set the stage for exciting features in the future.

  • Source Buses allow any audio source to route their audio to a 3D audio source, including other source buses (including themselves, creating a runtime Audio feedback system).

  • Source Buses are a new USoundBase type, so they can be played as if they are another sound in our normal sound BP and C++ APIs, audio components, and ambient actors and can have their duration specified to become either a one-shot bus or, if specified as 0.0, will be treated as a looping source with indefinite duration.

  • Source Effects and Submix Sends can be used with Source Buses like normal sound sources

  • Other Sources send their audio to buses in an analogous way to Submix Sends and can opt to only send their audio to Source Buses vs. also sending their audio to Submixes.

New Submix Effects (New Unreal Audio Engine Only)
We have updated our Synthesis Plugin with brand new time-based Submix Effects ranging from a simple Delay to a flexible computationally efficient reverb allowing you to create complex and interesting interactive spatial effects:

  • Delay: Simple multichannel delay line that can be modulated at runtime from Blueprints. This effect simulates a simple broadcast delay on audio sent to the given submix which is running with this effect applied and can be used for sub-millisecond synchronization with animation or other gameplay systems.

  • Tap Delay: Complex multichannel delay effect that allows for an arbitrary amount of taps (“echoes”) that can be independently added, modified, and removed through a powerful Blueprint API during runtime. Each tap is parameterized by tap attenuation, tap azimuth, and tap delay. This is useful for simulating the doppler effect, emulating early reflections, and many other delay-based mix effects.

  • **Flexiverb: **Computationally inexpensive single-channel reverb algorithm optimized for maximizing echo density with as few multiplies as possible. This effect is best suited for emulating small room reverberation on platforms where CPU resources are limited.

Improved Attenuation Settings
We have improved Attenuation Settings with much needed attention given to clarity and organization. Improvements include displaying Attenuation Settings according to Categories with special Edit Conditions to clarify which Attenuation Settings features are currently utilized.


New: Refactored VR / AR Camera System
Unreal Engine 4.18 now contains a default camera implementation for both Camera Components and raw view that includes late-update automatically handled by the engine. This default camera implementation displaces itself (relative transform) equal to the real-world displacement of the device from its calibrated origin when there is a CameraComponent in the view target. As a result, the API that hardware developers have to implement has a much smaller footprint, resulting in a huge efficiency boost.

Note: All existing platforms have their camera implementations stripped out and replaced by the default camera implementation.


  • Added a Blueprint callable function AIPerceptionComponent.SetSenseEnabled that can be used to toggle specific AI senses.

  • Bug Fix: Prevent crashes if UMockTask_Log is created manually rather than via the CreateTask factory method

  • Bug Fix: Fixed a bug in AISense_Sight processing that resulted in inconsistent frequency of “line of sight lost” reporting. Now this even should be reported only once, when sight of target is lost.

Behavior Tree

  • Bug Fix: Prevent an ensure in UBlackboardComponent::ClearValue when called on a component with a null BlackboardAsset


  • Bug Fix: Fixed UAIPerceptionSystem::GetCurrent causing a BP error when its WorldContextObject parameter is null


  • Bug Fix: Fixed UCrowdFollowingComponent::UpdateCachedDirections crashing when CharacterMovement is null

  • Bug Fix: Fixed: bNavigationAutoUpdateEnabled was not always working when reopeinig the map Fixed: Navigation Build was not clearing some mesh tiles when bNavigationAutoUpdateEnabled is enabled Fixed: Streaming out a level in editor was not always updating NavMesh debug draw


  • New: TimeStretchCurve system for AnimMontages. Allows adjusting playback time of montages in a non constant way. This optional curve allows the user to determine how animation frames are influenced by play back time scaling, instead of using a constant play rate scaling. For example, with an attack animation, the strike could have zero influence (no play rate), and the recovery time could have 100% influence (most play rated). This system is entirely optional and compatible with current Montage API. You still determine desired play back time via the Play Rate parameter. Based on desired playback time, if there is a curve named ‘MontageTimeStretchCurve’ then, it will use the curve to determine animation frames to play based on playback time and TimeStretchCurve. Otherwise, if no curve exists, it is done using the constant supplied PlayRate.

  • Added FAnimationRuntime::LerpPosesPerBone

  • Added FAnimationRuntime::LerpPoses. Blends two poses together, but first pose is also storing results. To save on copying poses when not necessary. Removed individual use of ZERO_ANIMWEIGHT_THRESH, instead use FAnimWeight functions. FAnimationRuntime weight functions use FAnimWeight for consistency. (IsFullWeight was different).

  • Added outline to skeletal mesh section selection.

  • Changed behaviour when reimporting an Alembic Cache to ensure at least one track is ticked

  • Animation Optimization: Added EMeshComponentUpdateFlag::OnlyTickMontagesWhenNotRendered to only update montages when not rendered, instead of doing a whole pose update. This means on dedicated servers we’ll only update montages when needed, and not the AnimGraph, which we have no need for. This is also affects non rendered meshes on clients.

  • Added short dummy bones to end effectors to prevent their rotations from being too aggressively compressed.

  • Fixed broken ‘ComputeCompressionError’ with additive animations. Optimized ‘ComputeCompressionError’ by caching bone indices, so they don’t have to be looked up every frame. Added CompressCommandletVersion INDEX_NONE to bypass DDC and test locally recompression.

  • RemoveLinearKey optimizations from licensee submission: https://udn.unrealengine.com/questio…cale-well.html

  • More Anim Compression Fixes: - Fixed frame->error bug in FAnimationUtils::ComputeCompressionError resulting in incorrect compression error measurement, and in some rare animations not being able to find a suitable compressor. - Make sure automatic compression actually go through all the compressors. - Removed unused reduction based on retargeting settings.

  • Automatic Compression fixes. - Error reporting: normalize rotations and added ensures to make sure NaNs do not sneak in there. - switched size reporting from 32 to 64 bits, so we have enough space for large recompression jobs. - fixed compression ratio to be accurate. Measures actual compressed animation data instead of whole asset size. - prevented infinite loop when trying to recompressed a failed automatic compression. - Fixed reporting when no suitable compressors were found. - Compression ratio is now against uncompressed raw size, and not (trivially) compressed raw size. - Force recompression if data we got back from DDC is invalid.

  • Bug Fix: SkelMeshComponent LOD update only refreshes transforms when rendered. If AnimGraph eval is done, make sure Graph has been updated at least once.

  • Bug Fix: SkeletalMeshComponent::InitAnim - Do not call RefreshBoneTransforms without calling TickAnim first. AnimGraph could get in a bad state. - Do not call RefreshBoneTransforms if AnimInstance has not been initialized. - Do not call RefreshBoneTransforms if bUseRefPoseOnInitAnim is set. Which it could if bForceReinit was false.

  • Bug Fix: Fixed animation curves not correctly being updated to post process instances.

  • Bug Fix: Removed deprecated FTAlphaBlend class and AlphaBlendType.h header

  • Bug Fix: Marked UAnimInstance as Within=SkeletalMeshComponent since it assumes the outer in various places

  • Bug Fix: Fix FPoseDataContainer::Shrink bug while LocalSpacePoseMask already contains Tracks.Num() data before SetNumZeroed.

  • Bug Fix: Fixed issue with Animation Sequence bounds imported from an Alembic Cache including the origin

Animation Assets

  • This allows you to link curve to MaxLOD, where the lowest LOD (as 0 is highest) is [0, MaxLOD]. If your MaxLOD is 1, it will be only evaluate from [0, 1]. You can’t disable LOD 0 this way, but if you want to disable curve, use USkeletalMeshComponent.bAllowAnimCurveEvaluation

  • Cleaned up animation compression logging (change to compression category and downgraded from warning)

  • -Added option to state machine to allow it to skip reinitialization when it becomes relevant -Added option to slot nodes to keep source pose relevant while montage slot is playing.

  • Bug Fix: Fix for the bug: when montage is interrupted after it starts to BlendOut neither Completed pin no Interrupted pin is executed.

  • Bug Fix: Fix playrate not being calculated correctly when 2 samples use the same animation

  • Bug Fix: Add curve evaluation to aim offset blendspaces

  • Bug Fix: Correct root motion extraction on anim composites and montages with more than one segment

  • Bug Fix: Fixed crash in compression code when cropping animations in editor.

Animation Blueprint

  • New:

    • Two Bone IK and FABRIK uses FBoneSocketTarget that supports bone and socket

    • Created new detail customizaton for FBoneSocketTarget that can display bone and socket together.

  • Multiple APIs are exposed in SkeletalMeshComponent to control Animation Curves handling either to enable/disable/reset.

    • void SetAllowAnimCurveEvaluation(bool bInAllow);

    • bool GetAllowedAnimCurveEvaluate() const { return bAllowAnimCurveEvaluation; }

    • void AllowAnimCurveEvaluation(FName NameOfCurve, bool bAllow);

    • void ResetAllowedAnimCurveEvaluation();

    • void SetAllowedAnimCurvesEvaluation(const TArray<FName>& List, bool bAllow);

  • Re-organized AnimBlueprint menu, so that it prioritize showing up anim node Two Bone IK.

  • Added more descriptive pin name and node text for constraint node

  • Improved root motion extraction performance by storing it on the anim instance during post update to avoid waiting on the parallel eval task later on.

  • Bug Fix: Fixed inconsistent animation entries in Blueprint context menu (displaying differently depending on whether the asset is loaded) and cached correct tooltip when asset isn’t loaded

  • Bug Fix: Fixed compilation errors when nativizing animation Blueprints that use subinstances

Animation Blueprints

  • Bug Fix: Fixed debug link for animation Blueprints not persisting when changing preview mesh

  • Bug Fix: Fixed incorrect reporting of animation Blueprint fast path caused by compilation manager

Animation Tools

  • Bug Fix: Prevented actors & components of anim preview scenes (and the preview scenes themselves) from persisting after editors are shut down

  • Bug Fix: Assets with no preview mesh now no longer allow access to other skeleton’s physics assets in their shortcut bars

  • Bug Fix: Undo/redo now correctly affects animation preview scene settings

  • Bug Fix: Fix crash with Retargeting Manager: Auto Mapping.

  • Bug Fix: Fixed crash when deleting notifies while the mouse was moving on top of the notify.orion


  • Bug Fix: Changed SmartNames FindUID API to return UID rather than pointer to UID.

  • Bug Fix: Fixed multiple calls to FinalizeBoneTransforms when calling RefreshBoneTransforms outside of tick

  • Bug Fix: Fixed root motion when using ForceAnimRate’s of more than 1

Skeletal Mesh

  • Bug Fix: Fixed insert/delete/duplicate button not appearing for bones within the “Bones to Remove” setting of the Skeletal Mesh editor.

  • Bug Fix: Fixed crash when reloading mesh asset that are used by animation editor.

  • Bug Fix: Fix for USkinnedMeshComponent::GetCPUSkinnedVertices() failing in shipping config on platforms that supported GPU skinning (Contributed by Koderz)


  • New: Improved discover-ability for Blend Space Editor features

  • Break up Live Link plugin so that the client can run in cooked builds too

  • Smart name refactor - Remove guids entirely - Remove automatic fix up - Simplify smart name mapping container - Make animations deterministic for cooking

  • Add bulk rename support (matching bulk remove support)

  • Bug Fix: Fixed crash when Undo-ing transactions after placing Blendspace Samples on the Grid

  • Bug Fix: AnimNotify Macro is not visible anymore in the notify selection list.

  • Bug Fix: Fix crash when interacting with multiple notify management windows for the same skeleton

  • Bug Fix: Fix newline being added to single selection bone name copies

  • Bug Fix: Fix crash when pasting invalid bone name into ‘Bones to Remove’ array.

  • Bug Fix: Fixed BlendSpace editor preview (holding Control) when it doesn’t have focus.

  • Bug Fix: Fixed issue with BlendSpace editor where new samples list would not regenerate BlendSpace sampling.

  • Bug Fix: Fixed crash when performing drag operations in the notify track window

  • Bug Fix: Notify windows now stay up to data across multiple editors when adding notifies to an animation.

  • Bug Fix: Fixed Bake Pose functionality not working correctly if the Root Bone of the Skeleton contained any transformations


  • New: Spatialization, Reverb, and Occlusion plugin support has been significantly improved. It now supports per platform mix and match of plugins. Audio plugins can now also be swapped out without closing the editor.

  • New:

    • Cleaning up Attenuation Settings UI.

    • Breaking up attenuation settings into categories.

    • Added edit condition so only editable if attenuation settings are overridden in audio components or sound cues.

    • Adding ability for audio plugins to indicate if they have custom settings. Allows hiding settings in attenuation settings.

    • Cleaning up reverb send code and updated attenuation settings.

    • Added custom reverb send curve support.

    • Added default stereo spread of 200 for attenuation settings.

    • Added ability to do a normalization for stereo spatialized sound sources (to avoid clipping when spread is

    • Added ability to apply a HPF to a sound source based on distance for audio mixer and added that option to attenuation settings if audio mixer is enabled.

  • New:

    • Source buses allow any audio source to route their audio to a 3d audio sources.

    • Source buses can be routed to other source buses (including themselves).

    • Source buses are a new USoundBase type, so can be played as if it was another sound in our normal sound BP and C++ APIs, audio components, and ambient actors.

    • Buses can have their duration specified to become a 1-shot bus or, if specified as 0.0, will be treated as a looping source (i.e. indefinite duration).

    • Source effects and submix sends can be used with buses like normal sound sources.

    • Other sources send their audio to buses in an analogous way to submix sends and can opt to only send their audio to buses vs also sending their audio to submixes.

    • Fundamental architectural feature allows sources to be mixed into 3d buses which allow persistence of source effect state between instances of other sources and opens up the possibility for a number of other exciting features.

  • New: The new Unreal Audio Engine now supports HTML5.

  • New Submix Effect added: Tap Delay. The Tap Delay submix effect allows you to add any general number of taps (“echoes”) and control them independently, both ahead of time and at runtime using Blueprint functions. This can be used to emulate the doppler effect, simulate early reflections, and more.

  • Added ability to pass in an owner to PlaySound2D and PlaySoundAtLocation BP functions so they can be used with concurrency limits that are limited to owners.

  • Allowing launching audio to HMD audio device with -VR in non-editor builds.

  • Moved setting a default reverb send level for audio mixer master reverb to audio settings.

  • Moving the synth component initialize to before audio component attachment is setup.

  • Adding code to not update filter parameters unless the parameters have changed.

  • Adding utility function to get a log-frequency value from a linear value.

  • Update to IAudioPlugin to allow audio plugins to query if they have custom settings.

  • Removing default master reverb send amount on audio components. Breaking out an initialize function so that synth components can be initialized outside of OnRegister().

  • SDL backend implementation for windows, linux, and HTML

  • Don’t send or mix built-in reverb submix if there’s a plugin reverb enabled.

  • Added Blueprint functions to the Sound Utilities plugin: GetBeatTempo. GetFrequencyFromMIDIPitch, GetMIDIPitchFromFrequency, and GetPitchScaleFromMIDINote.

  • Added a new submix effect to the Synthesis library: Flexiverb.

  • Flexiverb is a computationally inexpensive single-channel reverb algorithm optimized for maximizing echo density with as few multiplies as possible. This effect is best suited for emulating small room reverberation on platforms where CPU resources are limited.
  • Fix for allowing audio plugins to work in non-editor builds who don’t support multiple audio devices for PIE.

  • The new Unreal Audio engine has been refactored so that audio buffers are allocated with platform specific memory alignments.

  • Adding attack and decay interpolation times for focus feature to avoid fast sweeps of focus.

  • Optimization in converting procedural audio buffers to 16 bit PCM.

  • New submix effect in the Synthesis library: Delay. This effect is a simple multichannel delay line that can be adjust at runtime.

  • SoundMix Fade and Duration Times now operate as expected.

  • Bug Fix: Fix for Editor crash when baking indirect sound for a Phonon Source that has no audio component attached.

  • Bug Fix: Fixing assets showing up under miscellaneous when audio mixer isn’t enabled.

  • Bug Fix: Fixed issue in the new Audio Engine’s FDelay class wherein Delay lines would not work when set to the maximum time they were initialized for.

  • Bug Fix: Fixed issue where the new Unreal Audio engine would sometimes crash on shutdown while playing a streaming sound wave.

  • Bug Fix: Adding thread safe mode for plugin interface shared pointers.

  • Bug Fix: Resetting available byte count when resetting the procedural sound wave

  • Bug Fix: Moving opus lib to subfolder Windows instead of win32 to fix UGS game sync issues.

  • Bug Fix: Allowing audio devices to have a fade in when creating a new PIE window.

  • Bug Fix: Crash fix for loading multiple sound waves with multiple granulators.

  • Bug Fix: Using audio thread platform affinity mask for audio render thread in audio mixer.

  • Bug Fix: Fixing a crash in Ngs2 when initializing a source from the Ngs2 rack that is still being stopped from its previous lifetime.

  • Bug Fix: Fix for incorrect spatialization of audio sources on iOS using legacy audio engine.

  • Bug Fix: Implemented basic handling for audio device hotswap. This will solve the issue of the UE4 editor hanging when an audio device is unplugged from the system. However, please note that any audio sources played via source or Blueprint will be stopped when this happens.

  • Bug Fix: Audio: Fix case where audio is already set to be a preview sound. Sequencer sets the sound to be a preview sound when scrubbing in editor.

  • Bug Fix: Streaming audio on MacOS and iOS in the audio mixer is now fixed.

  • Bug Fix: Fixed Platform Headroom levels for Android.

  • Bug Fix: Fixing parameter interpolation in the audio mixer.

  • Bug Fix: Fix for ajm decoder running out of memory for large source instances.

  • Bug Fix: Fixing audio mixer shutdown to ensure final commands are pumped.

  • Bug Fix: Fixing seaking in ADPCM sound files.

  • Bug Fix: Fixed issue where OnReleaseSource would not be called on every active source for audio plugins.

  • Bug Fix: Fixing thumbnail generation on sound file reimport.

  • Bug Fix: Fix for sound submix graph recursion.


  • Add individual FTest enumeration to perf tests Moved methods to run FTests to helper for reuse. Effects perf tests now show individual test cases for more granular runs. All perf tests now do map check and draft logic as setup.

  • Bug Fix: Fix Perforce automation routine to return files whose last action was a rename.


  • New: Find-in-Blueprints is now hosted in a global tab by default. This tab can remain open even if the Blueprint Editor window is closed.

  • New: Added MakeMap Blueprint node.

  • New: Added MakeSet Blueprint node

  • Added Blueprint functions for getting vectors from cones using random streams, to complement the existing non-stream variants. For consistency, this entire family of functions have been modified and renamed to provide versions that take arguments in both degrees and in radians. See the Programmer notes for specific details.

  • Blueprint input nodes for key, action, and axis can now be subclassed from other modules.

  • Made the compact node title for cross and dot product the words cross and dot rather than hard to see . and x symbols

  • Improved the visual styling of user disabled nodes and development-only nodes (still an experimental feature, but this is a step towards removing that label)

  • Made it easier to pick a specific actor in the level as the Blueprint instance to debug by adding “(selected)” after the label in the ‘debug filter’ dropdown in the Blueprint editor

  • Allow adjusting the font size for each individual comment box node in Blueprint graphs (also works in Material graphs)

  • Allow specifying a description for user defined enum assets (shown in the content browser)

  • Allow drag-dropping component Blueprint assets into the graph to create Add Component nodes and improved the error message when dragging something that cannot be dropped into an actor Blueprint

  • Added a tooltip field for each value in a user defined enum

  • Added a key binding for Find References (Shift+Alt+F)

  • Improved the implementation of Goto Definition, allowing any node to implement it by overriding CanJumpToDefinition or JumpToDefinition - Collapsed ‘Goto Code Definition’ for variables and functions into the same path, so there aren’t separate menu items and commands - The default behavior for UK2Node subclasses is to call GetJumpTargetForDoubleClick and call into FKismetEditorUtilities::BringKismetToFocusAttentionOnObject - Going to a native function now goes thru a better code path that will actually put the source code editor on the function definition, rather than just opening the file containing the definition

  • Added a key binding for Goto Definition (Alt+G)

  • Allow ‘Goto Definition’ and ‘Find References’ to be used while stopped at a breakpoint

  • Added an option to disable the comment bubble on comment boxes that appears when zoomed out

  • Added the full name of the type, container type, and value type (for maps) to the tooltips for the type picker on Blueprint variables, so long names can be read in full

  • No longer need to explicitly register nodes implementing UK2Node_AddPinInterface to use SGraphNodeK2Sequence

  • Remove deprecated CustomMapParamValue code

  • Add InRange (int) to Blueprint math library

  • Added Blueprint node for swapping entries in arrays.

  • KismetRenderingLibrary: Added EditorOnly Blueprint function for creating static textures from Render Targets. Has options for Mip and Compression Settings

  • The VirtualReality Blueprint template is now available on Mac.

  • Blueprint compilation manager now skips compilation of dependent Blueprints when no function signatures are changed. This can greatly speed up compilation of Blueprints with large numbers of dependent Blueprints

  • Fixed various issues with both UAT-driven and manually-configured code/data build workflows with respect to enabling Blueprint nativization.

  • Added new Editor Only Plugin called Blueprint Material Texture Nodes. This plugin adds Blueprint nodes for reading texture and render target data as well as the ability to create and modify MIC assets.

  • Bug Fix: Marked a number of container functions as BlueprintThreadSafe From UDN: https://udn.unrealengine.com/questio…hreadsafe.html

  • Bug Fix: Fixed an issue diffing text properties/pins in Blueprints

  • Bug Fix: Blueprint nodes can no longer be renamed on read-only graphs.

  • Bug Fix: Fixed undo not removing pins added to make container nodes via Add Pin from the context context menu.

  • Bug Fix: Compiling a Blueprint containing a child actor component will no longer mark the Blueprint of child actor’s class dirty.

  • Bug Fix: Fixed a runtime crash in nativized child Blueprints that include a parent function call node in a replicated function implementation.

  • Bug Fix: Array shuffle node no longer uses biased shuffle algorithm.

  • Bug Fix: Fixed various issues with split pins not being correctly connected when expanding macros and functions.

  • Bug Fix: Fixed ensure when connecting the output pin of a create delegate node to a wildcard input.

  • Bug Fix: Correctly reconnect split pins when changing class on create widget, construct object, and spawn actor nodes

  • Bug Fix: Fix two compilation manager issues: Make sure CDOs are not renamed under a UClass, because they will be considered as possible subobjects, which has bad side effects and make sure that we update references even on empty functions, so that empty UFunctions are not left with references to REINST data

  • Bug Fix: Prevent crashes when a loading blueprint that implement an interface that was deleted

  • Bug Fix: Fixed Construct Object not working correctly with split expose on spawn pins.

  • Bug Fix: Fixed an EDL assert on load in a nativized build caused by a native reference to a nativized BP class that also references a nativized UDS asset.

  • Bug Fix: Prevent wildcard pins from being connected to exec pins

  • Bug Fix: Made drag-dropping assets into a graph to create a component undoable

  • Bug Fix: Made wires into/out of a user-disabled node draw very dimly (other than the passthrough execution wire if it exists)

  • Bug Fix: Fixed the tooltip when dragging a variable onto an inherited category so it shows the ‘move to category’ hint

  • Bug Fix: Changed UK2Node::GetPassThroughPin so that only the execution wire on nodes with exactly one input and one output exec wire will have a corresponding pass-through pin (when there is ambiguity in which exec would be used, e.g., with a branch or sequence or timeline node, the subsequent nodes are now effectively disabled as well)

  • Bug Fix: Changed the behavior of various things that were hard-coded to operate on the first event graph to instead operate on the most recently used event graph page

  • Bug Fix: Fixed the tooltip of a user defined structure not updating immediately in the content browser after being edited

  • Bug Fix: Fixed discrepancy between the Structure tab name and the menu option for the tab in the user defined structure editor (now both say Structure Editor)

  • Bug Fix: Improved editor performance when working with Blueprints that contain many components or variables

  • Bug Fix: Prevent converting a variable get node to impure/back while debugging

  • Bug Fix: Add support for ‘goto definition’ on Create Event nodes when the Object pin is not hooked up

  • Bug Fix: Fixed swapped undo/redo messages when converting a cast node between pure and impure

  • Bug Fix: Actor bound event related warnings now show up in Blueprint status when opening level Blueprint for first time, improved warning message

  • Bug Fix: Adjust search query when doing ‘Find References’ on variables from My Blueprints so that bound event nodes show up for components and widgets

  • Bug Fix: Allow the autowiring logic to better break and replace existing connections when made (e.g., when dragging a variable onto a compatible pin with an existing connection, break the old connection to allow the new connection to be made)

  • Bug Fix: UField::Serialize no longer serializes its next ptr, UStruct::Serialize serializes all Children properties instead. This resolves a hard circular dependency between function libraries that EDL detected. It was resolved in an ad hoc way by the old linker

  • Bug Fix: User-Defined Struct assets now support their own external dependencies when nativized.

  • Bug Fix: Blueprints will no longer remain dirty when compiling when a Get Class Defaults node with a split struct pin is in the graph.

  • Bug Fix: Changing the pin type of a function input from struct to something else now correctly works when the struct input pin had been split.

  • Bug Fix: Undoing ‘Collapse to Macro’ now works as expected

  • Bug Fix: Prevent CDOs from getting weird names if they are loaded while we are reinstancing

  • Bug Fix: Clear out null entries in the LastEditedDocuments list during PostLoad() and remove entries when a graph is being deleted to prevent new nulls from being added

  • Bug Fix: Fixed crash on launch of a nativized build that includes an instanced default subobject that’s referenced by another instanced default subobject.

  • Bug Fix: Fixed a bug where a bogus value could be read from a Map Find node if a find failed after a previous success

  • Bug Fix: Can no longer select remove pin on split pins on a MakeSet node.

  • Bug Fix: Cast nodes can no longer be switched from pure to impure while debugging.

  • Bug Fix: Fixed a packaging code build failure that would occur with a nativized Blueprint class that contained a UInterfaceProperty.

  • Bug Fix: Fixed a crash on load when an external variable member reference’s owning type could not be loaded.

  • Bug Fix: It is no longer possible to create a set or map with duplicate entries from the Blueprint virtual machine.

  • Bug Fix: Remove Tooltip, Category, and HideCategories tooltip from the Blueprint generated class if source data is cleared, this allows these fields to be cleared after they have been set

  • Bug Fix: Subobjects in Sets and Maps are now properly patched into the linker table. Required add of missing implementation for sets/maps to FInstancedPropertyPath, correct uproperty logic in FFindInstancedReferenceSubobjectHelper::GetInstancedSubObjects_Inner

  • Bug Fix: Added support for creating appropriate outers for objects that must be nested within another class during fuzzing (ones that specify Within=, other relationships aren’t knowable yet)

  • Bug Fix: We now prevent ConstructGenericObject nodes from compiling in a Blueprint if the selected class type does not include ‘BlueprintType’ in its inheritance hierarchy.

  • Bug Fix: Fix for crash when attempting to access a value in an array by ref, when the array being accessed was trying to be found on a null object ref

  • Bug Fix: Placing a get to an input parameter with same name as a member variable no longer creates an incorrect property reference.

  • Bug Fix: Fix rare crash when running ConformImplementedEvents when loading .uassets asynchronously

  • Bug Fix: Fixed a potential crash when changing the ChildActorComponent class default value on a Blueprint that also sets the class in the Construction Script.

  • Bug Fix: Fix ActorBoundEvent and ComponentBoundEvent to always refresh their event signature from the delegate property they are bound to, which will fix broken Blueprints when those signatures are moved or renamed

  • Bug Fix: CollectGarbage Blueprint node now correctly works in shipping builds.

  • Bug Fix: Fixed non-native script interface property value initialization for nativized Blueprint class default objects.

  • Bug Fix: Fix issue where GUID variables on Blueprints would not correctly update after being cleared or initialized

  • Bug Fix: Fixed a compile error in UHT-generated boilerplate code after choosing to package with Blueprint nativization enabled if the project includes a converted User-Defined Structure asset.

  • Bug Fix: Fix issue where pasting or moving actors between levels would break delegates bound within that actor/component hierarchy

  • Bug Fix: Fixed bug in Blueprint Compilation Manager that could result in a crash when compiling Blueprints that both inherited from another Blueprint and called functions in that Blueprint

  • Bug Fix: Fixed issues where a class reference to a Blueprint class in a set or map could fail to load correctly.

  • Bug Fix: Fixed NegateInt/Float in StandardMacros returning an unchanged value even though the passed in reference had been changed.

  • Bug Fix: Fixed generated code failing to compile when nativizing a Blueprint which has a property of a less derived type referencing a sub object with modified default properties declared in a more derived class.

  • Bug Fix: Fixed crash when adding component to child actor class after a component of the same name was removed from the parent.

  • Bug Fix: Fix grammar and improve clarity of comment for DestroyComponent node

  • Bug Fix: Fix crash renaming a composite graph with no bound graph.

  • Bug Fix: Fix native code generation for MakeMap node.

  • Bug Fix: Fixed crash that could occur when compiling Blueprints that had function calls to Blueprints that used Construct Object nodes (e.g. SpawnActorFromClass or ConstructObjectFromClass)

  • Bug Fix: Fixed bug copy pasting collapsed graphs resulting in a crash or invalid graph.

  • Bug Fix: Functions that have parameter type changes (rather than name changes) now properly orphan their pins

  • Bug Fix: Fix crash when diffing a Blueprint whose older version’s parent Blueprint has been deleted.

  • Bug Fix: Fixed rare assertion failure when undoing Blueprint graph node deletion operations

  • Bug Fix: We no longer emit a BOM to generated nativized Blueprint asset source files encoded as UTF-8. Fixes an issue with C++ compilation on some platforms.

  • Bug Fix: Fixed a crash on load in a nativized build caused by a reference to a BP class containing a nativized enum

  • Bug Fix: Fix construct object from class nodes not clearing orphan pins when connection broken. Improved warning messages about orphaned pins to include the name of the node it is occurring on. Fixed some bad content causing an orphan pin.


  • New: Support for Visual Studio Code

    • Pass “-vscode” to GenerateProjectFiles in order to create a set of task/launch/cppconfig files that can be used by Visual Studio Code to build and debug Unreal Engine projects

    • A new source code access plugin that will allow the opening of projects and source files in Visual Studio Code

  • New: Chromium Embedded Framework (CEF) upgraded to branch 3071 Win32/Win64/Mac. Added web browser support for foreign language character input via IME.

  • Core: Various improvements to FTimespan

  • Core: Added scalar division to FTimespan

  • Core: Added TLruCache template for least-recently used caches

  • Core: Added FTimespan::Ratio

  • Changed the default sorting algorithm to intro sort. - Algo::Sort and ::Sort will call Algo::IntroSort - The sort version that was in Algo::Sort is now in Algo::LegacySort

  • Added the ability to verify the DDC content is not stale. Systems have to opt in (-VerifyDDC).

  • Fixed documentation comments for FName inequality operator.

  • Fixed incorrect definition of DECLARE_DELEGATE_NineParams, DECLARE_MULTICAST_DELEGATE_NineParams macros.

  • Added FString::ToUpper() and FString::ToLower() rvalue overloads for improved efficiency.

  • Improved UnrealHeaderTool to support multiple interface definitions in a single header.

  • Improved UnrealHeaderTool’s error message when unsupported template parameters are provided in a TSet property.

  • Improved Intellisense when generated headers are missing or out of date (eg. line numbers changed, etc…). These errors seem to be masked by VAX, but are present when using the default Visual Studio Intellisense. * UCLASS macro is defined to empty when INTELLISENSE is defined. Previous macro was preventing any following class declaration being parsed correctly if generated code was out of date, causing squiggles over all class methods/variables. * Insert a semicolon after each expanded GENERATED_BODY macro, so that if it parses incorrectly, the compiler can still continue parsing the next declaration.

  • Added container modification checks to ranged-for loops which are iterating over TMap, TSet and TSparseArray.

  • Added code to verify compression flags in package file summary to avoid cases where corrupt packages are crashing the editor

  • Added a batch file to Engine/Build/BatchFiles for detecting and running MSBuild

  • Added VisitTupleElements, which calls the given functor with each element in the tuple.

  • Improved UnrealHeaderTool’s error message when multiple types with the same name are found.

  • Changed the logic so that engine UObjects boot before anything else. The engine classes are known to be cycle-free, so we will get them done before moving onto game modules.

  • UENUM enumerator initializers can now be arbitrary C++ constants, including values which are not parsed by UnrealHeaderTool (e.g. values from third party headers). However, script generator plugins will not have access to these values at script-generation time. Added support for editor-only data UENUMs. Fixed multiple MAX values being generated for UENUMs which already define a MAX.

  • Logging improvements for pak signature check failures

  • Split RunExternalExecutable into RunExternaNativelExecutable and RunExternalDotNETExecutable

  • Added editor support for packages cooked with the Event Driven Loader enabled.

  • Added validation that arguments passed to the checkf macro are valid sprintf types, and fix up a few places which are currently incorrect.

  • When creating GC clusters and asserting due to objects still being pending load, the object name and cluster name will now be logged with the assert.

  • Added FBase64::GetDecodedDataSize() to determine the size of bytes of a decoded base64 string

  • PR #3847: Add GC callbacks for script integrations (Contributed by mhutch)

  • Added support for displaying log timestamps in local time. Set LogTimes=Local in *Engine.ini, or pass -LocalLogTimes on the command line.

  • Various changes to Unreal Build Tool and DotNETUtilities assemblies to help support building and executing on the .NET Core 2.0 platform

  • Added ENABLE_GC_OBJECT_CHECKS macro to be able to quickly toggle UObject pointer checks in shipping builds when the garbage collector is running.

  • Fixed a race condition with the async loading thread enabled caused by missing linker object.

  • PR #3839: Make non-encoding specific Base64 functions accessible (Contributed by stfx)

  • Moved some common C# classes into the DotNETCommon assembly

  • FString::Trim() and FString::TrimTrailing() have been replaced with separate versions to mutate (TrimStartInline(), TrimEndInline()) or return by copy (TrimStart(), TrimEnd()).

  • Allow the network version to be set via Build.version if it’s not overriden from Version.h.

  • UBT - Add a ToString to ProjectFile.Source file to help with debugger watch presentation

  • Plugins may now specify a list of supported target platforms, which are propagated to any .uproject file that enables it. This has several advantages over the per-module platform whitelist/blacklist: * Platform-specific .uplugin files can now be excluded when staging other platforms. Previously, it was only possible to determine which platforms a plugin supports by reading the plugin descriptor itself. Now that information is copied into the .uproject file, so the runtime knows which plugins to ignore. * References to dependent plugins from platform-specific plugins can now be eliminated. * Plugins containing content can now be unambiguously disabled on a per-platform basis (having no modules for a platform does not confer that a plugin doesn’t support that platform; now it is possible to specify supported platforms explicitly). * The editor can load any plugins without having to whitelist supported editor host platforms. UE4 targets which support loading plugins for target platforms can set TargetRules.bIncludePluginsForTargetPlatforms (true for the editor by default, false for any other target types). This defines the LOAD_PLUGINS_FOR_TARGET_PLATFORMS macro at runtime, which allows the plugin system to filter which plugins to look for at runtime. Any .uproject file will be updated at startup to contain the list of supported platforms for each referenced plugin if necessary.

  • Fixed lazy object pointers not being updated for streaming sub-levels in PIE. Fixed lazy pointers returning object that is still being loaded which could lead to undefined behavior when client code started modifying the returned object.

  • PR #3760: Fix typo (Contributed by jesseyeh)

  • Made MoveTemp static assert when called on a const reference or rvalue, to allow inefficiencies to be tracked more easily. Added MoveTempIfPossible which follows the earlier behavior, which is still useful for templates and macros where it’s unclear if the argument is valid.

  • Removed the extraneous subfolder when writing out .mprof files.

  • Fix non-thread safe construction of FPluginManager singleton. Length of time spent in the constructor resulted in multiple instances being constructed at startup, making the time to enumerate plugins on slow media significantly worse.

  • Optimizations to SignedArchiveReader

  • Improved assert message when the initial package read request was too small.

  • Made max package summary size to be configurable with ini setting

  • Add support for a “Mods” folder distinct from the project’s “Plugins” folder, instead of using the bIsMod flag on the plugin descriptor. * Mods are enumerated similarly to regular plugins, but IPlugin::GetType() will return EPluginType::Mod. * The DLCName parameter to BuildCookRun and the cooker now correctly finds any plugin in the Plugins or Mods directory (or any subfolders).

  • Added a new TArray constructor that takes a raw pointer and a count. Improved checks inside TArray::Append() to allow nullptr in empty ranges.

  • UDataTable::AddReferencedObjects will no longer try to iterate over the RowMap if there’s no UObject references in it.

  • Custom Version Container will no longer be always constructed in FArchive constructor. This reduces the number of the Custom Version Container allocations considerably.

  • Removed obsolete code for UHT makefiles.

  • Moved FSimpleObjectReferenceCollectorArchive and FSimpleObjectReferenceCollectorArchive to be internal archives used only by FReferenceCollector so that they are constructed only once per GC task instead of potentially multiple times per GC (as was the case with UDataTables and BlueprintGeneratedClasses).

  • Added new AllOf, AnyOf and NoneOf algorithms.

  • Shrunk size of code generated by UnrealHeaderTool, around 10% of Win64 executable size.

  • Deprecate /-prefixed commandline switches as they cannot be distinguished from absolute file paths on Linux/Mac.

  • Bitfield properties can now be exposed on spawn.

  • FName now works correctly with Lex::To/FromString.

  • Added FQuat::InitFromString.

  • Add ability to pass option flags to ActorIterator to enable searching non-active levels

  • Moved the Hamming-weight function from StaticMeshDrawList.inl to FGenericPlatformMath Added SSE versions using _mm_popcnt_u64 for platforms that support it Added a SSE check to gracefully exit when missing the instruction and it was expected to be there

  • Fixed stale modules being enumerated when running UE4Editor-Cmd.exe.

  • Fix DECLARE_LOG_CATEGORY_EXTERN requiring a trailing semicolon if NO_LOGGING is defined.

  • Added a packaging setting that allows the user to choose whether or not to build the game executable. Includes a setting to build the executable only if not using a promoted build (“Only if locally built editor”). The same option has to the “Play” settings in the editor. This allows developers that want to submit game binaries to Perforce to configure the engine to use it without building anything.

  • Bug Fix: Core: Fixed FTimespan import/export/copypaste (UE-43990)

  • Bug Fix: Fixed custom mesh component bounds being computed incorrectly.

  • Bug Fix: Fixed the deserialization of integer properties, which would cause a guaranteed property mismatch each time and an inefficient tag lookup. Added support for converting double and float properties to int properties. Fixed conversion of enum class properties to int properties when their value is greater than 255.

  • Bug Fix: UBT - Minor refactor of BackgroundProcess shutdown in SourceFileWorkingSet. Check whether the process has already exited before trying to kill it during Dispose.

  • Bug Fix: Move pre/post garbage collection delegates into accessor functions so they can be used by globally constructed objects

  • Bug Fix: Build fixes for when malloc profiler is enabled

  • Bug Fix: Fixed parsing error in UnrealHeaderTool when a class name is fully capitalized.

  • Bug Fix: Fixed bad code generation in UnrealHeaderTool when passing a TMap to a BlueprintCallable function.

  • Bug Fix: Fixed FPaths::GetProjectFilePath() to return a value instead of a reference, for thread safety reasons.

  • Bug Fix: Fixed TTuple visualization in the Visual Studio debugger.

  • Bug Fix: Fixed a race condition with async read completion in the prescence of cancels.

  • Bug Fix: Fixed some incorrect EObjectFlags use due to implicit conversions.

  • Bug Fix: Follow up to fixing several edge cases in the low level async loading code.

  • Bug Fix: Fixed several edge cases in the low level async loading code, especially around cancellation. Also PakFileTest is a console command which can be used to stress test pak file loading.

  • Bug Fix: Marking UObject as intrinsic clas to fix a potential crash on Unreal Frontend startup.

  • Bug Fix: UBT - Correct direction of slash in global named mutex creation

  • Bug Fix: Fixed Visual Studio debugger visualizers for containers whose elements are pointers which aren’t syntactically like Type*.

  • Bug Fix: Fixed UFunctions disappearing from Blueprints after a hot reload.

  • Bug Fix: Fixed a buffer overrun in TChunkedArray ranged-for iteration.

  • Bug Fix: After loading packages the engine will flush linker cache on uncooked platforms to free precache memory

  • Bug Fix: Include ‘ExeBinariesSubFolder’ in nmake target path for vcproj files if it exists

  • Bug Fix: Material resources will now be discarded in PostLoad (Game Thread) instead of in Serialize (potentially Async Loading Thread) so that shader deregistration doesn’t assert when done from a different thread than the game thread.

  • Bug Fix: Fixed nested preprocessor block parsing in UnrealHeaderTool.

  • Bug Fix: MaterialInstanceCollections will no longer be added to GC clusters to prevent materials staying around in memory for too long

  • Bug Fix: Fixed a race condition in async package reference counting when the async loading thread is enabled.

  • Bug Fix: Fixed Japanese errors not displaying correctly in the cook output log.

  • Bug Fix: Fixed a critical race in the pak precacher.

  • Bug Fix: Fixed critical race which potentially could cause a crash in the pak precacher.

  • Bug Fix: Fixed a critical race condition in the new async loader. This was only reproducible on IOS, but may affect other platforms.

  • Bug Fix: Fixed a critical crash bug relating to a race condition in async package summary reading.

  • Bug Fix: Fixed a crash on UnrealFrontend startup caused by re-assembling GC token stream for one of the classes.

  • Bug Fix: Fixed a critical crash bug with non-EDL loading from pak files.

  • Bug Fix: Fixed the error message in FAsyncPackage::AddObjectReference to refer to the correct scope guard class.

  • Bug Fix: Added missing PF_ATC_RGBA_I into FOREACH_ENUM_EPIXELFORMAT.

  • Bug Fix: Fixed a crash in the taskgraph when running single threaded

  • Bug Fix: Fixed FScopedMallocProfilerLock to be properly non-copyable.

  • Bug Fix: Forced a garbage collection after a hot reload to clean up reinstanced objects which may still be registered to tick.

  • Bug Fix: Fixed bad codegen when TAssetPtrs are passed into BlueprintImplementableEvent functions.

  • Bug Fix: Disabled MallocBinned2 stat collection in shipping builds.

  • Bug Fix: System error dialogs when loading DLLs are now suppressed if -unnattended is on the command line.

  • Bug Fix: Added MemoryProfiler2 to the generated project files.

  • Bug Fix: Fix rare assert involving cancelled precache requests and non-pak-file loading.

  • Bug Fix: Fixed compile errors caused by incorrect line numbers when parsing multiline macros in UnrealHeaderTool.

  • Bug Fix: Fixed a compile error when attempting to serialize a TUnion.

  • Bug Fix: Fixed mismatched stat categories warnings in AudioMixer.

  • Bug Fix: Fixed EObjectFlags’ operators so that they can now be used in constexpr contexts.

  • Bug Fix: Made sure the Super Class token stream is also locked when assembling Class token stream with async loading thread enabled. This to to prevent race conditions when loading BP classes.

  • Bug Fix: Fixed a crash caused by recursion guard being enabled with the old async loading path but it should only be active with the Event Driven Loader.

  • Bug Fix: Fixed generated indices of static arrays when saving config files.

  • Bug Fix: Made servers not to link to CEF3 (even if otherwise enabled).

  • Bug Fix: Fix several crashes while incremental cooking if the source content is heavily changed

  • Bug Fix: Change it so Editor builds work like cooked builds when loading packages that are already in memory, it will now reuse them instead of trying to recreate them in place. This fixes several PIE crashes.

  • Bug Fix: Fix issue where IsEditorOnlyObject would return false for objects with editor only classes or outers. There is now a recursive check option that defaults to true.

  • Bug Fix: Reduced the chance of .RC file compilation errors by reducing the number of defines passed in on the command line (excluding definitions that contain “_API”)

  • Bug Fix: Removed any deprecated code older than 4.10 that didn’t affect content compatibility

  • Bug Fix: Prevent FScopedExternalProfilerBase::StopScopedTimer() from asserting if called an unmatched number of times with StartScopedTimer, as both are exposed to Blueprints

  • Bug Fix: Class Properties are only identical if they are literally the same object. Do not consider the deep compare port flags as object property base does.

  • Bug Fix: Changed ensureAsRuntimeWarning to just evaluate to the expression when USING_CODE_ANALYSIS is true (matching the behavior of ensure() and preventing false positive errors in static analyzers)

  • Bug Fix: Fix issues where using Launch multiple times during one editor session would not pick up all modified files

  • Bug Fix: Fixed error writing files to disk with long package names, due to attempting to create an intermediate file with a GUID appended.

  • Bug Fix: Fixed +Array=… and .Array=… config syntax (unique/non-unique addition) having opposite meaning.

  • Bug Fix: Fix memory corruption crash when using the StreamableManager when the async loading thread is enabled via ini

  • Bug Fix: Fixed console output not working when using -log in a shipping build

  • Bug Fix: Fixed hot reload not considering dependent modules when rebinding a package (e.g. after adding a new class to one). Fixed FMacPlatformProcess::GetDllApiVersion() returning a valid version number for a missing module.

  • Bug Fix: Fix bug where requesting an async load with StreamableManager from a PostLoad could return a partially loaded object, it now queues up to wait for it to properly load

  • Bug Fix: Fixed crashes when accessing console variables with the async loading thread enabled

  • Bug Fix: Fixed a crash when recompiling the Graph Editor module in the editor.

  • Bug Fix: Fixed crash when adding a new native feature pack to a Blueprint project for the first time.


  • New: Array elements can now be re-ordered using a drag and drop handle on the left side.

  • It is now possible to save and reload the result of the ‘profileGPU’ command. The ProfileVizualizer can be found under Windows\Developer Tools\Debug menu.

  • Added the ability to remove vertex colors from static meshes from the content browser

  • Added flag to PrimitiveComponent to disable certain BP components to be excluded from HLOD generation

  • Added support for incremental cooking in File->Cook Content via the new flag in Project Settings, Editor->Cooker->Iterative cooking.

  • Added FSourceCodeNavigation::GetSelectedSourceCodeIDE() which returns the name of the selected source code accessor. Replaced all usages of FSourceCodeNavigation::GetSuggestedSourceCodeIDE() with GetSelectedSourceCodeIDE(), where the message is referring to the opening or editing of code.

  • Added an option to allow overriding the local DDC path from the editor (under Editor Preferences > Global > Local Derived Data Cache).

  • Add fbx exporter option dialog.

  • Create a LOD Custom Mode in the meshes editor UI. This allow user to compare details values between LODs

  • Added dual key bindings support. There is another column In Editor Preferences - General - Keyboard Shortcuts and users can now set two keyboard shortcuts for each operation.

  • Enabled high DPI awareness for the editor. The editor now respects OS level DPI scaling. On high dpi monitors fonts should look crisp and the editor properly scaled.

    • Editor viewport screen percentage is now adjusted automatically to account for DPI scaling. By default the scene will be rendered at a lower resolution based on screen percentage calculated based on 100/DPIScale. Users can override this automatic calcuation in the editor performance options if desired.

  • Focus the details view when actor selection changes if it is not focused

  • Issue warning when we found zero normal, tangent or binormal

  • PR #3852: Add FEditorDelegates::BeginLocalPlay event (Contributed by mhutch)

  • PR #3851: Add argument to pass params to standalone play session (Contributed by mhutch)

  • Merged the “Categories” menu into the Output Log “Filter” menu

  • Added a new type of property editor called a property row generator. This is essentially a details panel that can generate each unique row but adds no visual styling around the property editors and does not generate a master tree widget for the properties. This is useful for creating proper widgets for properties and displaying them in a UI that is not the details panel

  • The output log now applies a search to its editable text when filtering to highlight the term matches on each line

  • Make sure we export normals, tangents and bi-normals information when exporting to FBX.

  • Fbx SDK 2018.1.1 Integration

  • Added automated import support for USD. Automated import now also supports loading a level per import group so that factories may spawn actors and manipulate the level

  • Added ability for users to specifiy usd plugins for the USD importer

  • Added ability to set properties from USD attributes when using scene import to import USD files. See UsdPropTestScene.usda for an example file of how this works

  • New setting for specifying a custom port when launching a multiplayer PIE instance.

  • Moving favorited levels to a standard flyout submenu under File.

  • PR #3933: Git plugin: add “branch source” in history window (Contributed by SRombauts)

  • Added support for ArrayRemove, ArrayClear in property change event type

  • Added the possibility to know if an archetype instance was updated
  • Bug Fix: Matinee: Fix Matinee redirect missing as UClass has been GC’ed (GitHub PR 3382)

  • Bug Fix: Editor: Fixed texture samplers in materials not getting notified when sRGB mode changed

  • Bug Fix: Fixed a crash occurring when Generating Proxy Meshes for an HLOD cluster which was not overlapping with the culling (landscape) mesh

  • Bug Fix: Optimize checks for whether the game project contains source code. Now stops as soon as the first file is found and ignores directories beginning with a ‘.’ character (eg. .git)

  • Bug Fix: Make sure a warning is log when we cannot export an animation sequence.

  • Bug Fix: Fix merge actor do not keep the material slot name

  • Bug Fix: Fix crash accessing potentially invalid parent layout from a detail category

  • Bug Fix: The class viewer now functions properly on mac.

  • Bug Fix: Fix ctrl+w not duplicating on mac

  • Bug Fix: Fix LOD identification in USD files

  • Bug Fix: PR #3897: Git plugin: fix action icon in history window (Contributed by SRombauts)

  • Bug Fix: Fix widget component spawning widgets when cooking

  • Bug Fix: Fix mac menus updating during unsafe times such as modal windows and slow tasks

  • Bug Fix: Fix color picker not properly converting FColor properties back to gamma space

  • Bug Fix: Fix bogus warning message when a property has an editcondition that is not marked edit aynwhere. This has always been supported and is the correct way to make an editcondition

  • Bug Fix: Fix USD importing not respecting DestinationPath set by the automated import commandlet

  • Bug Fix: Editor: Fix toolbar shared ref which was keeping the viewport toolbar around when switching between default and cinematic viewports.

  • Bug Fix: Prevent slow task feedback from performing slow operations (flushing rendering commands, checking if shaders are initialized) when there are no modal dialogs open

  • Bug Fix: Guard against high res screenshot crashing if the requested image size doesnt match the image data size

  • Bug Fix: Guard against crash in the details panel when there is a message in the queue and something scrolls into view when the list has been invalidated

  • Bug Fix: Reduce memory footprint when importing large FBX scene PR #3834

  • Bug Fix: Fix the fbx re-import factory handler to say failed in case there was no geometry to import.

  • Bug Fix: PR #3850: Source code navigation is now extensible

  • Bug Fix: Fix staticmesh merge applying scale twice PR #3807

  • Bug Fix: Fix how the FBX importer find the sample rate to import an animation.

  • Bug Fix: Fix locked actors still being moved by piloting them

  • Bug Fix: Fix import of large FBX scene (over 2 Gb) base on pr #3784

  • Bug Fix: fix FBX reset options code.

  • Bug Fix: Make sure all staticmesh general settings(build, reduce…) are persist when we re-import from a FBX file.

  • Bug Fix: Exporting render targets now chooses PNG if the render target format is an LDR format

  • Bug Fix: Fixed a bug where the transform widget on selected actors occasionally disappeared after exiting PIE mode.

  • Bug Fix: PR #3733: UE-46683: Don’t increment MovieIndex when playing next movie (Contributed by projectgheist)

  • Bug Fix: Dont save non-dirty built data when playing PIE in a standalone process

  • Bug Fix: PR #3715: Turn off the automatic expiration of the restore assets notification (Contributed by IHappyDayI)

  • Bug Fix: Fixed a bug where the Editor Undo History didn’t refresh when after a single undo followed by a single action.

  • Bug Fix: Fixed a bug where World Outliner selection did not update transform widget location during play.

  • Bug Fix: Hide property matrix button from settings editor. For the combined settings objects view this produces nonsensical results and the property matrix is for bulk editing which settings are not designed for.

  • Bug Fix: PR #3682: Details view - matrix button visibility toggle and crash fix (Contributed by kamrann)

  • Bug Fix: Fixed cases where the redo buffer could be removed despite no new transaction being added to the undo buffer.

  • Bug Fix: Fixed a Pixel Inspector crash when using the high-precision normals format.

  • Bug Fix: Fixed foliage not updating to match the new landscape height

  • Bug Fix: PR #3942: Sort Data Table Structures Alphabetically (Contributed by Nick-Pearson)

  • Bug Fix: PR #3932: UE-48693: if instead of while statement (Contributed by projectgheist)

  • Bug Fix: Fixed a profiler crash when selecting the “Maximum” button while aggressively filtering.

  • Bug Fix: Fixed a bug where editor would crash when showing the property matrix and deleting one of the targeted actors.

  • Bug Fix: Fix several issues with the Component Transform UI that is used for actor and component placement. Dragging to spin rotation now works better and in most cases it will correctly maintain the exact rotation entered. It now correctly displays “dirty” status and will propagate values better to inherited or instanced components.

  • Bug Fix: Fix issue where pressing escape while dragging on a numeric field with a spinner could lock input from ever working again

  • Bug Fix: Fixed HLOD selection sphere persisting on undo/redo

  • Bug Fix: Fixed ortho viewports being bright white in sub-editors

  • Bug Fix: Make editor scene viewport backbuffer format consistent with game back buffer format to avoid quantization.

  • Bug Fix: Fixed issue with vertex colors being distorted after using the Merge Actor tool

  • Bug Fix: Fixed texture disappearing in the Texture Editor when zoomed to a zoom level other than “Zoom to Fit”.

  • Bug Fix: fix reduce algorithm to make sure the order of used material is consistent

  • Bug Fix: Fixed an issue where sometimes a client wouldn’t be able to connect to the server if “Use Single Process” was unchecked in the editor Play settings and starting a play session with more than one player.

  • Bug Fix: Fix crash setting edit conditions on inner array props due to potentially stale array indices

  • Bug Fix: Fixed rare import failure in AbcImporter

  • Bug Fix: Fixed a hang at exit after asset reimport.

  • Bug Fix: Fixed FastXML to properly parse attributes with legally unescaped single and double quote characters

Content Browser

  • Add Export To CSV to Content Browser/Asset Audit windows, accessible from the view options while in column mode

  • Bug Fix: Fixed: Entering search expression into Content Browser crashes Editor in some rare cases

  • Bug Fix: Fixed various issues with filename validation for collections (e.g. trying to use system reserved keywords as filenames).

  • Bug Fix: Custom columns with the same name as fixed columns no longer cause infinite duplication in the Content Browser

  • Bug Fix: Fixed a crash when reloading the lighting data for a world while the world was open in the editor

  • Bug Fix: Content browser settings are now global instead of per-project

  • Bug Fix: Solved an issue where Content Browser returned to the previous directory after duplicating a searched asset.

  • Bug Fix: Cleaned up source control log spam when finding out-of-date dependencies when reloading assets

  • Bug Fix: Improved drag-and-drop validation between Content Browsers

  • Bug Fix: Fixed a crash when Force Deleting the MapBuildData package.

  • Bug Fix: Fixed crash when doing editor ‘Force Delete’ on a static mesh whose distance field is still being built.

  • Bug Fix: Fix for asset context menu warning on Mac.

  • Bug Fix: Fixed a crash that could happen if renaming an asset failed


  • Add the possibility to specify if we need CPU access to the instance buffer depending on the usage.

  • Bug Fix: Bug fixing of Static Mesh Instancing

  • Bug Fix: Added a guard to prevent a possible crash when using CVarFoliageDiscardDataOnLoad.

  • Bug Fix: User can no longer hide the actor holding the foliage instances

  • Bug Fix: No longer mark the package dirty while generating the GrassMap

  • Bug Fix: When occlusion query is disabled no longer process sub queries

  • Bug Fix: Fixed a possible graphic corruption if you had unbuilt instances being draw on Vulkan/DX12 device

  • Bug Fix: Handle static mesh instancing removal properly

  • Bug Fix: Properly handle the creation of Instance Static Mesh Component from c++

  • Add handling of all operations on the PerInstanceSMData array when done in PostEditChange


  • Improve performance when having many landscape layer in Paint mode

  • Bug Fix: Prevent moving a Landscape Actor when running in Simulate Mode

  • Bug Fix: Prevent possible crash when building lighting with a non squared heightmap

  • Bug Fix: Fixed: Occasional Landscape related crash while streaming in sub-levels

  • Bug Fix: Prevent copy of landscape in simulate mode/or any other PIE related mode

  • Bug Fix: Properly register to material changes event so we always have an up to date used layer list

  • Bug Fix: Fixed a ensure related to bad handling of copy/paste of spline component

Media Framework

  • General

    • NEW: Moved high-level media player logic into reusable Engine-agnostic classes

      • Low-level interfaces exposed via facade (see FMediaPlayerFacade)

      • Reusable helper objects for creating, caching and consuming samples

    • NEW: Support for multiple output formats per media track (see IMediaTracks)

    • NEW: API for querying player’s caching state (IMediaCache)

    • NEW: API for enumerating A/V capture devices (IMediaCaptureSupport)

    • NEW: Time source API (for internal and external clocks / timecode generators)

    • NEW: Exposed buffering and connecting states

    • NEW: Separation of media overlays into caption, subtitle and custom text tracks

    • NEW: Added extensive verbose logging in most player plug-ins

      • To enable, add the following to your project’s \Config\DefaultEngine.ini file - add the below to the [Core.Log] section:

        • LogMediaAssets=VeryVerbose

        • LogMediaUtils=VeryVerbose

        • LogAndroidMedia=VeryVerbose

        • LogAvfMedia=VeryVerbose

        • LogImgMedia=VeryVerbose

        • LogWmfMedia=VeryVerbose

    • Better separation of concerns in media player interfaces

    • Delegates were replaced with thread-safe interfaces

    • Refactored push-based into pull-based API (see IMediaSamples)

    • Most operations are now asynchronous to eliminate hitches

    • Multiple media assets can now use the same MediaPlayer

    • Modernized all Media related modules (IWYU, C++11, documentation)

    • NEW: multi-stage ticking API

      • Can be used by any object, not just media players (see IMediaClockSink)

      • Better frame utilization and predictable timing

    • NEW: timecode based sample processing pipeline

    • NEW: high-frequency (200 Hz) ticker for time sensitive samples, such as audio, camera tracking, and face tracking

    • (see *IMediaTicker* and *IMediaTickable*)
    • NEW: Sample queues and pooling for better memory usage

    • NEW: Generic C++ template for media object pooling (see TMediaObjectPool)

    • NEW: String conversion functions for media enums (see MediaHelpers.h)

    • Media Framework is now mostly lock-free to eliminate thread stalls

    • Removed all render thread flushes & render thread dependencies

    • Fixed media texture crash when recreating render device, i.e. when changing resolutions

    • Fixed all known multi-threading and concurrency issues

  • Audio

    • NEW: Integrated with new Audio Mixer API

    • NEW: Media Sound Components (replaces Media Sound Waves)

      • Built on top of synth components

      • Can be attached to level actors

      • Can be used in UMG widgets

    • NEW: Media sample rate converter (previously supported only 16-bit @ 44.1kHz)

      • Supports int8, int16, int32, float, double input samples

      • Supports any sample rate, including variable rates

      • Supports up to 8 audio input channels

      • Supports 1 and 2 output channels (surround sound is scheduled for 4.19)

    • NEW: Spatial audio supported via media sound components on Actors

  • Video

    • NEW: External texture sampler API

      • Enables video frame rendering without memory copies

      • Currently only implemented for Android

    • NEW: API for 360 and stereoscopic video players (see IMediaView)

      • Currently not implemented in any player plug-ins

    • Replaced problematic triple-buffering mechanism with sample queues

    • Better support for exotic video and pixel formats, and faulty encoders

  • Media Player Editor

    • NEW: Track format selector menu

    • NEW: Audio/video capture device selector

    • NEW: Cache state visualization (for player plug-ins that support it)

    • NEW: Playlist controls & ability to save playlists (playlist editing is still WIP)

    • EXPERIMENTAL: Text overlay visualization (currently not used)

    • EXPERIMENTAL: 360 video viewport controls (currently not used)

    • Scrubbing is now more responsive

    • Improved information overlays

  • Media source assets

    • NEW: Per-platform media player overrides are now functional

  • Blueprints

    • NEW: BP functions for querying media player tracks and track formats

    • NEW: BP function library for enumerating audio, video and webcam capture devices

    • NEW: BP events for SeekCompleted and TracksChanged

    • NEW: BP functions for adding files and URLs to media play lists

  • Media Player Plug-ins

  • AndroidMedia

    • NEW: External texture sampler support for highest performance (no data copies)

    • NEW: Asynchronous file loading

    • Improved support for streaming video

  • AndroidCamera

    • NEW: Media Framework plug-in for Android webcam support

    • Access front or rear camera using available resolutions / frame rates

    • (see Mobile Major Features for additional details on this feature)
  • AvfMedia (macOS / iOS)

    • NEW: Support for caption tracks

    • NEW: Audio playback via Audio Mixer (will be enabled in 4.18 Preview 2)

    • Fixed track switching issues / lock-ups

    • Fixed rendering artifacts/flicker on some devices

    • Fixed aliasing/pixelation with high-res media

    • Removed render thread flushes to prevent hitches

    • Improved video sample texture handling

  • ImgMedia (macOS, Windows)

    • Replaces the old ExrMedia plug-in

    • NEW: Generic file loader for extensible file format support

    • NEW: BMP, JPG, PNG support (albeit much slower than EXR due to slow legacy loaders)

    • NEW: Proxy directories for alternative (i.e. low-res) image streams

    • NEW: Per-image sequence frame rate & proxy override (i.e. for using a low-res sequence during development)

    • NEW: Supports playback synchronization with Sequencer

    • NEW: Loading and caching system similar to Shotgun RV

    • NEW: Multi-threaded EXR loader

    • NEW: Asynchronous file loading

  • WmfMedia (Windows)

    • State machine has been completely rewritten

    • NEW: Track switching

    • NEW: SAMI subtitle file support

    • NEW: Low-latency pipeline support in Windows 8 and newer

    • EXPERIMENTAL: Support for audio and video capture devices

    • Fixed color space conversion problems with certain encoders

    • Fixed audio track lock-up when no audio device available

    • Fixed playlist related problems

    • NEW: Asynchronous file loading

    • Fixed skipping to next I-frame when pausing

    • NOTE: Hardware acceleration is not finished yet

Material Editor

  • New: Added Advanced Preview Scenes to the Material Editor and the Material Instance Editor. Adjust the settings from the Windows menu.

  • The realtime state of the preview viewport in the Material Editor and Material Instance editor now also changes when the turntable rotation is toggled for the advanced preview scene.

  • Bug Fix: Fix for parameter tooltips not being found in the Material Editor.

  • Bug Fix: PR #3913: Fixed 3D preview issue in the material editor (Contributed by YuchenMei)

  • Bug Fix: Adjust floor height in material editor preview scene based on preview mesh


  • New: External textures are now fully supported and enforced when attempting to sample external texture types in materials.

    • Textures can now dynamically provide an external texture GUID at runtime, which is queried by the uniform expression. Statically defined GUIDs remain supported.

    • Added necessary ExternalTexture(Parameter) methods to the material compiler and HLSL translator

  • New: New ImgMedia media player plug-in for EXR/BMP/PNG/JPG image sequences

  • New: Media: Media Framework 3.0 API updates

  • Media: Added Buffering media event

  • Media: Split media capabilities into features and controls

  • MediaAssets: Filtering out unused UTexture properties in UMediaTexture in the Editor

  • MediaAssets: Notifying materials when media texture properties changed.

  • MediaAssets: Added unit tests for UMediaPlaylist

  • MediaAssets: Added looping for play lists

  • Cine Camera: Add toggle to disable constraining the roll when look at tracking is enabled. This allows the user to animate the roll while tracking an object.

  • Sequencer: Add OnPlayReverse() event for when playback is in reverse

  • Sequencer: Import FBX settings. Added settings to toggle force front x axis and whether to create cameras that don’t already exist in the level.

  • Sequencer: Added option to rerun construction scripts on bound actors in the sequence every frame.

  • Movie Scene Capture: Delay on shot boundaries by setting the sequencer play rate to 0. This allows particles, TAA, and other effects to settle on the shot cuts.

  • Movie Scene Capture: Expose “Open Folder” hyperlink while capturing.

  • Sequence Recorder: Add interpolation and tangent settings for animation recording keys

  • Sequencer: Track drag drop. Implement drag and drop onto a camera track, subscene track, and cinematic shot track.

  • Sequencer: Import static/default transforms and camera focal lengths from fbx.

  • Fbx: Add static transform values to curve data import.

  • Optimization pass on key and trajectory rendering when dealing with large numbers of tracks and/or keys

    • Memory is reserved where possible on hot code paths

    • Reduced amount of sorting and shuffling of arrays where possible

    • Key collections (and thus key groups) are now cacheable so we don’t have to regenerate them every frame

    • Reduced amount of overdraw on keys in sequencer UI

    • Added editor preference to limit the number of keys shown around the current time when rendering trajectories in the editor (default=250)

    • Optimized various algorithms used for key introspection and manipulation

    • Overlapping keys are now highlighted with a red border

  • Sequence Recorder: Add drag and drop functionality to sequence recorder

  • Cine Camera: Added GetFilmbackPresetName(), SetFilmbackPresetByName(), GetLensPresetName(), SetLensPresetByName().

  • Sequencer: Added slip functionality for sections. Hold down shift and drag the section left and right (as if you were moving it).

  • Bug Fix: Sequencer: Fixed skylight and reflection components off by one frame in PIE

  • Bug Fix: GitHub #3183: Conversion to base class is inaccessible.

  • Bug Fix: Sequencer: Fixed sections not being filtered on select in range

  • Bug Fix: Camera Rig: Fix crane and rail not being packaged properly.

  • Bug Fix: Sequencer: Update spawnable name when the spawnable actor name is changed.

  • Bug Fix: Sequencer: Fix a few player state issues. When paused, calling stop now tears down properly (spawnables are removed, etc). When a level sequence is deleted, tears down properly as well.

  • Bug Fix: Sequencer: Fix cinematic mode getting activated on BeginPlay() instead of OnStartedPlaying().

  • Bug Fix: PR #3872: Fix small typo in ImagePlate Plugin (Contributed by TheCodez)

  • Bug Fix: Sequencer: Put level visibility tracks in the SpawnObjects evaluation group to ensure levels are streamed before any possessable bindings are resolved

  • Bug Fix: Sequencer: Fix crash in removing delegate

  • Bug Fix: Sequencer: Array bounds check.

  • Bug Fix: Movie Scene Capture: Override cinematic mode in the movie scene capture.

  • Bug Fix: Sequencer: Capture thumbnail before pre save so that the thumbnail isn’t captured with the evaluation in a reset state.

  • Bug Fix: Movie Scene Capture: Move window to within the desktop bounds when resizing.

  • Bug Fix: Fbx: Fix aperture width, height, focal length and field of view calculations.

  • Bug Fix: Sequencer: If already at the correct play position, don’t jump to it. This fixes a bug where if you play to a position and pause, resuming play will playforward and not keep pausing.

  • Bug Fix: Sequencer: Serialize the custom guid version for sections.

  • Bug Fix: Sequencer: Call SkyLightComponent’s SetLightColor() directly, similar to LightComponent

  • Bug Fix: Actor Sequence: Add runtime as a plugin, remove from dynamically loaded module list.

  • Bug Fix: Sequencer: Add transactions to easing type and setting changes.

  • Bug Fix: Sequencer: Fix ensure when deleting sections. Sections were getting removed from the array during iteration.

  • Bug Fix: Sequencer: Fixed crash caused by erroneous persistent references to FSequencer.

  • Bug Fix: Fix crash when recording to animation in-use

  • Bug Fix: Sequence Recorder: Record to the specified target animation for the target actor only. Newly tracked components will have newly created animations so that they don’t record to the same target animation assets. Sequence Recorder: Close the target animation asset editor if it exists before recording into it.

  • Bug Fix: WmfMedia: Fixed NV12 webcam output not working for non-multiple of 16 horizontal resolutions

  • Bug Fix: WmfMedia: Fixed NV12 webcam output not working for non-multiple of 16 vertical resolution


  • Bug Fix: Allowing (smart) translation snapping if smart snap is on but translation snap is disabled

World Browser

  • Added more zoom levels for World Composition window

  • Better selection behavior in World Composition window

  • Added a new context menu command to lock all tiles location in World Composition window. Once tiles are locked they can’t be accidentally moved/dragged.

  • Bug Fix: Fixed: Toolbar widget clipping issues in World Composition window

Editor and Tools

  • Added feature to allow for calculating final Light Map Resolution for the output Static Mesh from Merging Actors according to the input Static Mesh Light Map resolutions.

  • Adding ability to add custom row and properties to categories for detail customizations.

  • Renamed “Find in CB” toolbar button to “Browse” and renamed “Search” (in Blueprints) to “Find”, so terminology is consistent and keyboard shortcuts make sense (Ctrl+B for Browse, Ctrl+F for Find)

  • Bug Fix: Fixed clothing meshes sometimes not drawing from certain angles when the clothing tools were in paint mode, as the mesh bounds were being computed incorrectly.

  • Bug Fix: Fixed merging negative-scaled actors breaking the mesh normals

  • Bug Fix: Fixed crash when specifying too large texture size for Bake Material tool.

  • Bug Fix: Fixed issue with Bake Out Material not updating data used for texture streaming, causing ensure.

  • Bug Fix: Fixed bug with Merge Actor when using recompute normal and Overlapping UVs causing incorrect normals.

  • Bug Fix: Asset reloading now defers re-opening asset editors until post-GC phase

  • Bug Fix: Fix issues renaming maps that contain legacy map build lighting data

  • Bug Fix: Removed any deprecated code older than 4.10 that didn’t affect content compatibility

  • Bug Fix: Fixed crash that could occur when opening a physics asset and deleting unused bones.

  • Bug Fix: Fixed issue when trying to Vertex Paint on a Skeletal Mesh without a Physics Asset or non overlapping Physics Bodies with the Skeletal Mesh

  • Bug Fix: When visualising constraint axes in the physics asset editor, the axis arrows are now scaled in world space according to the user-specified constraint drawing scale, instead of being a fixed size on-screen.

  • Bug Fix: Fixed issues with HLOD content left unchanged after a Level is renamed

  • Bug Fix: Fixed issue with Texture Sizing Type not having any effect on Merge Actor functionality


  • Bug Fix: Marked ULandscapeComponent and ULandscapeHeightfieldCollisionComponent as Within=LandscapeProxy, since they do CastChecked on their Outer all the time


  • Bug Fix: Fixed issue with Animation re-initializes when using AnimBlueprint for the animation track.

  • Bug Fix: Fixed a potential crash in UMediaPlaylist::Insert and UMediaPlaylist::RemoveAt when passed an invalid index

  • Bug Fix: Prevented crashes in some methods of UMovieSceneSequencePlayer when there is no Sequence set Prevented a crash in FMovieSceneRootEvaluationTemplateInstance::Evaluate when the instance has no template set

  • Bug Fix: You can only select AnimSequence or AnimComposite on the property window of track.

Gameplay Framework

  • New: Cross-level Actor references are now better supported, using SoftObjectPath and SoftObjectPtr (called Soft Object Reference in Blueprints). As part of this, FStringAssetReference and TAssetPtr were renamed to FSoftObjectPath and TSoftObjectPtr.

  • If you create a SoftObjectPtr property pointing to an Actor or subclass, they will have an improved UI that will show rather they are unloaded or broken, as well as the full Actor ID they point to. Cross level references like this will now correctly be fixed up if the pointed to actor is renamed or moved using the "Move to current level" option. It will attempt to check out and resave any other levels/sequences that point to that specific actor. They will also work correctly in PIE when level streaming is used.
  • Draw box around Actor being debugged by ‘ShowDebug’ command, to help identify what we’re viewing.

  • Allow Scale to be set on an AnimNotify as well as the spawn emitter gameplay statics

  • Add ToString Blueprint functions for SoftObjectReference/SoftClassReference/PrimaryAssetId/PrimaryAssetType to assist in debugging

  • USceneComponent::ComponentToWorld has now been made private per the previous deprecation message.

  • Change the way that PIE networking works so the sent paths strip the PIE prefix and restore on load. This allows connecting a PIE client/server to an external non-PIE client/server.

  • Change it so Standalone PIE and multiprocess networked PIE do not save temporary levels starting with UEDPC and instead prompt the user to save. This is how Launch On works by default already, and this fixes several cross level reference and sequencer bugs.

  • Added GetKeysForAxis() to complement GetKeysForAction() in UPlayerInput

  • Add support for downloading Chunks on demand to the Asset Manager, if they are set up for your project. AcquireResourcesForAssetList can be used to predownload chunks, and chunks will be downloaded on demand if bShouldAcquireMissingChunksOnLoad is true in the Asset Manager Settings

  • Add FCollectionReference type and customization that allows selecting a Collection in the editor. Add one to PrimaryAssetLabel so it will label all assets in a Collection

  • Small optimization to CleanupActors

  • Reduced memory footprint of UActorComponent, USceneComponent, UPrimitiveComponent, UMeshComponent, UStaticMeshComponent, and UParticleSystemComponent.

  • UStaticMeshComponent::StaticMesh has completed being made private. Use Get/SetStaticMesh() instead.

  • AHUD::GetOwningPlayerController and GetOwningPawn are now public accessors.

  • Added FTransform::TransformRotation(FQuat) and FTransform::InverseTransformRotation(FQuat). Added matching Blueprint library functions taking FRotator. (Contributed by EverNewJoy).

  • Active force feedback effects and components can now ignore time dilation.

  • Added console command to disable URO interpolation.

  • Exposed GetAzimuthAndElevation to Blueprints.

  • Bug Fix: Removed call to DebugCanvas->Flush_GameThread(); to fix ‘showdebug’ commands not rendering anymore.

  • Bug Fix: Fix several crashes that could happen while attempting to use Play in Editor in less common configurations

  • Bug Fix: Child Actors created by transient child actor components are now correctly created as transient. Note that this will not remove existing Actors that had been saved in to maps inadvertently.

  • Bug Fix: Fix issue where running a game with bUseFixedFrameRate=true could crash because it generated negative delta times.

  • Bug Fix: Copying an actor in the level editor will no longer reset array values if a new element has been added.

  • Bug Fix: Fix issue where Combined streamable handles could be freed before they finished loading

  • Bug Fix: Removed any deprecated code older than 4.10 that didn’t affect content compatibility

  • Bug Fix: Overriden Child Actor Class property will no longer reset to default when a new instance is created through copy/paste.

  • Bug Fix: Garbage Collection timing is no longer managed on a per World basis, but instead at the UEngine level.

  • Bug Fix: Marked ULevelStreaming as Within=World, since various places already assume it

  • Bug Fix: Fix several issues with loading the same asset twice in a row with Asset Manager.

  • Bug Fix: All components will now clear the component need end of frame update mark when unregistered, not just primitive components.

  • Bug Fix: Added GetTargetRotation() to SpringArmComponent, which returns the rotation target based on the combination of various rotation setting flags (bUsePawnControlRotation, bInheritPitch, bInheritYaw, bInheritRoll, absolute rotation flags). Use this instead of querying the SpringArmComponent’s own rotation, which isn’t changed at runtime.

  • Bug Fix: Reduced memory churn/allocations when duplicating an Actor’s components for PIE.

  • Bug Fix: Fixed comment in GetComponents (UActorComponent version), which was referencing wrong component type.

  • Bug Fix: Fixed issues where lighting could be unbuilt when reloading packages.

  • Bug Fix: Renamed USceneComponent::bWorldToComponentUpdated to bComponentToWorldUpdated (since the transform is called ComponentToWorld).

  • Bug Fix: Fixed crash when SpawnObject has a null class passed to it.


  • New: In-Editor Localization Preview

  • Bug Fix: Fixed some crashes where IMEs would try and access a deleted widget

  • Bug Fix: Fixed high memory usage when using certain IMEs

  • Bug Fix: Games now use the native culture of any of the game targets as the fallback (rather than always using English)

  • Bug Fix: Fixed abnormally long PO export times under certain circumstances

  • Bug Fix: Fixed iOS not detecting the locale correctly


  • New: Added experimental network encryption functionality.

    • This is handled by a new packet handler component in the AESHandlerComponent plugin.

    • This component depends on another new plugin, PlatformCrypto, which wraps basic encryption algorithms implemented either by APIs provided by the platform, or by OpenSSL.

    • Net connections and their packet handler objects are now aware of encryption components, and have new functions to allow setting the encryption key.

    • When connecting to a game server, a custom token can be exchanged. This token may be used to obtain the actual encryption key for the connection.

  • UdpMessaging: Not showing warning message if tunnel settings left empty to use defaults

  • Messaging: Waking up message router thread on shutdown

  • Messaging: Moved common helper classes into MessagingCommon module

  • Merged over the change to expose more of dormancy to Blueprints (UE-46240)

  • Enable the TCPMessaging plugin on platforms other than Windows/Mac so it can be used for profiling/automation, and fix several platform-specific bugs. If this is not desired, you should disable the plugin for your project.

  • Add support for -TcpMessagingListen=IP:port and -TcpMessagingConnect=IP:Port command line options to the TCP messaging layer used for automation and profiling, this allows manually connecting to specific devices

  • Added some additional stat instrumentation to the low-level network replication code. This may help track down replication performance issues when viewing ue4stats files in the Profiler.

  • It is now possible to configure the UDP socket buffer sizes that the IpNetDriver requests of the operating system when creating a new connection.

  • Bug Fix: Networking: Fixed nullpointer crash in TcpListener if socket initialization fails

  • Bug Fix: NBOSerializer security fixes to protect against possible overflow in the values

  • Bug Fix: Fixed client assert when trying to send RPCs while connection is pending closure due to queued bunches. ChIndex is -1 during this time, though the channel is not actually closed. Added ensure when calling SendBunch() under this condition to catch future cases like this.

  • Bug Fix: Fix issue where nonblocking BSD sockets on some platforms may return EINPROGRESS on initial connect, which should not be treated as an error

  • Bug Fix: AActor::PreReplication is now called prior to RPCs when they would have triggered initial replication.

  • Bug Fix: Fixed an issue where connecting to a Server that had deleted startup actors and then unloaded their sub level would cause a crash.

  • Bug Fix: Fix to update actor replication stats even when the connection is currently saturated.

  • Bug Fix: APawn::IsNetRelevantFor properly checks AGameNetworkManager::bUseDistanceBasedRelevancy.

  • Bug Fix: Fixed a rare issue where the data stored in network replays could be corrupted, potentially causing a crash when the replay is played back.

  • Bug Fix: Fixed an issue when the server is paused, the clients were not getting the update that it had happened.

  • Bug Fix: Changes were made to FTcpListener and FTcpMessageTransportConnection to prevent them from polling sockets in a thread while waiting for connections or data. This improves performance on Android clients when launched from the editor and should also benefit other systems using FTcpListener.


  • New: Google Sign In SDK for iOS/Android/PC has been integrated into the engine with OnlineSubsystemGoogle

  • IOnlineIdentity::GetPlatformUserIdFromUniqueNetId is now const

  • Voip streaming improvements - use the underflow feature of sound streaming to feed the audio buffer rather than enqueue the data directly - wait a small period of time to buffer period actually playing new voip streams

  • Added intrinsic FNames for NAME_GameSession and NAME_PartySession

  • left #define for GameSessionName and PartySessionName to map to new FNames
  • Voice module improvements / refactors for Windows/Opus codec - added ability to change more parameters at runtime (samplerate, channels, device) - ability to change bitrate at runtime - ability to change complexity at runtime - ability to set VBR on/off - fixed some bugs related to stereo playback / diagnostics - exposed more settings / information in the various classes - added num channels as an input parameter to CreateVoiceAudioComponent helper function - improved test voice class and its capabilities - various exec commands to change audio capture values at runtime - queue audio data differently for the procedural sound wave class - more buffer sanity checks - fixed bug when nothing to encode (super low bitrate) causing the decoder to fail – encode 0 size frame data and make decoder aware of it - added more stats under “stat voice” - added LogVoiceEngine to separate out OSS related voice calls from rest of audio capture code

  • Update cacert.pem from curl’s website curl - Extract CA Certs from Mozilla

  • Google Sign In SDK implemented for iOS, Android, and desktop platforms

  • Hotfix manager will only reload config during “restore ini” for classes that were actually affected by the previous hotfix which prevents calling ReloadConfig on every class in an ini file

  • Handle instances in UParty where World is null

  • Add optional StatePrefix to OnlineSubsystemTwitch

  • Add RevokeAuthToken to IOnlineIdentity. Implemented in OnlineSubsystemTwitch. Remove auto revoke auth token on logout from OnlineSubsystemTwitch.

  • OnlineSubsystemTwitch: Use a specific error when auth token validation fails

  • Add join party failure reason of GameSpecificReason for game defined join party failures

  • Extended IOnlineTitleFile OnEnumerateFilesComplete to include an error string.

  • OnlineSubsystemTwitch: Use the web browser to go through the Twitch login flow on consoles.

  • Bug Fix: Fix potential null pointer access in Oculus session cleanup

  • Bug Fix: VoiceDecoder Opus security fixes that sanity check packet header calculations to prevent buffer overrun

  • Bug Fix: Facebook implementations using the embedded browser will delete cookies on logout

  • Bug Fix: Google implementations using the embedded browser will delete cookies on logout

  • Bug Fix: Update manager will skip initial hotfix check if user isn’t signed into the console at the time.

  • Bug Fix: Remove caching of config values in OnlineSubsystemTwitch. Fixes hotfixes not taking effect

  • Bug Fix: Party Beacon: Prevent player from being leader of multiple party reservations. Prevent party from creating a reservation that contains members that are in other reservations.

  • Bug Fix: Changed message sanitizer SanitizeMessage to SanitizeDisplayNames to better convey its function Added QueryBlockedUser to check user to user permissions Added ResetCache function for clearing permission cache

  • Added Live version of message sanitizer
  • Bug Fix: Fixed hardcoded controller id in RejoinCheck in TravelToSession call

  • Bug Fix: Remove ensure in UPartyBeaconState::UpdatePartyLeader, this function is called while the player is being kicked, revoking their reservation

  • Bug Fix: LoginFlow module now properly included in OnlineFramework uplugin with proper IWYU semantics

  • Bug Fix: Fix crash when logging out in the middle of joining a party

  • Bug Fix: Fix simultaneous party join requests dropping some requests

  • Bug Fix: Added GetFirstSignedInUser function as an improvement/workaround for a bunch of GetPlayerUniqueId(0) calls in the OnlineSubsystem APIs.


  • Added EditorFunctionalTest class that should be used as the base class for editor-only functional tests. The Automation Test Framework now understands the difference between runtime and editor only tests


  • New: Clothing tools moved out of experimental

  • Added per-axis inertia scaling and parent dominance settings to physics bodies/constraints

  • Added “Smooth Mesh” button to the smooth clothing paint tool that applies the smoothing effect to the entire mesh in one action.

  • Added support for physical materials in immediate mode (Rigid Body node)

  • Improved internal automated tests for physical animation.

  • Expose FHitResult::Distance to Blueprint’s Break/Make Nodes (Pull Request Contributed by LordNed)

  • Improved physics asset generation using the multi-convex hull primitive type. Multi-convex hull primitives can now be created from meshes containing vertices that are influenced by more than one bone.

  • Remove Box2D support

  • Exposed an inertia scale for body instances

  • Added ExternalForce to rigid body node for faking inertia while simulating in component space

  • Added RootBone simulation space to RigidBody node. This is useful for cases where we rotate the skeletal mesh component and counter rotate the root bone and do not want to affect simulated bodies’ velocities.

  • The UPrimitiveComponent angular physics functions have been standardised to use consistent units. Functions suffixed with “InDegrees” use degrees, and functions suffixed with “InRadians” use radians. The existing functions have been deprecated in favour of their new versions.

  • Under the hood, the FBodyInstance angular physics functions now work entirely in radians. Any functions that previously used degrees have been deprecated.
  • Clothing optimization pass, mainly removing allocations and precaching some skin information. 10% Overall non-gamethread time reduction, gamethread sync completion task time halved.

  • Added ability to rename clothing assets after creation

  • Clothing LOD improvements - Added full pipeline for adding LODs to clothing assets in editor - Added methods for mapping parameters between masks on meshes with differing topology - Fixed a few UI bugs

  • Added single threaded PhysX tasks stats using “stat PhysXTasks”

  • Bug Fix: Removed the need for calling constructors for PhysX PxRaycastHit in the dynamic hit result buffer for sweeps/raycasts. Saves 30% of the cost of doing small raycasts.

  • Bug Fix: Fixed crashes in physics asset editor and skeletal mesh editor when the preview scene clears out the preview mesh while clothing is running

  • Bug Fix: Restricted painter processing to no longer attempt painting while in simulation previews in cloth paint mode.

  • Bug Fix: Fixed clothing gradient tool renderer not showing selected points when camera was moving

  • Bug Fix: Fixed cloth paint falloff to actually calculate falloff, and take brush strength into account.

  • Bug Fix: Fixed cloth paint gradient allowing invalid values

  • Bug Fix: Fixed crash shutting down editor with active cloth paint tab,.

  • Bug Fix: Fixed mismatch between paint values and view values for clothing tools

  • Bug Fix: Fixed skel surf particles being misplaced when clothing was active. And fixed particles spawning on disabled cloth proxy sections.

  • Bug Fix: Fixed physics substepping causing erratic simulation of simulated bodies that were attached to kinematic ones (eg. simulated ponytails). This was due to incorrect interpolation paths on the kinematic bodies, which caused the attached physical bodies to accumulate too much velocity each frame.

  • Bug Fix: Fixed clothing not resimulating after resetting physics asset to default in a details panel

  • Bug Fix: Fix crash in show collision

  • Bug Fix: Fixed clothing visualizations not drawing at correct orientation (Normals, Max Distances and Backstops)

  • Bug Fix: Internal application stability improvements to physics simulations.

  • Bug Fix: Fixed crash attempting to render clothing collisions extracted from a physics asset incompaticble with the acive mesh skeleton

  • Bug Fix: Fixed crash when deleting a selected clothing section and relaunching the skeletal mesh editor

  • Bug Fix: Fixed changing or reloading the current level causing certain physics debugging bounds not to be shown if collision visualisation is turned on.

  • Bug Fix: Fixed UPhysicsAsset::CalcAABB to properly handle scaled bones.

  • Bug Fix: Fixed “Apply Clothing” menu showing an invalid widget when there were no clothing assets.

  • Bug Fix: Fixed crash attempting to paint on a clothing object created by importing an incompatible APEX asset.

  • Bug Fix: Fixed clothing bounds calculation always including the component root.

  • Bug Fix: Fix bad bounds computation for immediate mode.

  • Bug Fix: Updated FRaycastHit::Distance Documentation (Contributed by LordNed)

  • Bug Fix: Change GetMaterialFromCollisionFaceIndex implementations to return null if face index is negative

  • Bug Fix: Fix incorrect bone mapping for rigid body node. (Only matters when first call to init has a different number of bodies, for example a different skin)

  • Bug Fix: Turn joint pre-processing on for immediate mode. This helps with some stability issues.

  • Bug Fix: Remove unused HACD library. We only use V-HACD now.

  • Bug Fix: Made it so that linear and angular velocity are properly computed for kinematic targets in immediate physics and rigid body node.

  • Bug Fix: Fixed bug with PhysX cooked data not taking into account complexity type of body setup.

  • Bug Fix: Fixed merge error in PhysX immediate mode as reported by NVIDIA

  • Bug Fix: Removed deprecated methods that were replaced by _AssumesLocked variations

  • Bug Fix: Imported new simple collision for Engine/Content/BasicShapes/Cylinder.uasset which is a single convex shape (rather than being 4 shapes as before).

  • Bug Fix: Fixed a few crashes in UVehicleWheel when spawned directly

  • Bug Fix: Improved the comment on UPhysicalMaterial::Friction

  • Bug Fix: Changed FBodyInstance::InstanceBodyIndex to int32, fixes incorrect body index being returned from traces if there are a large number within one component.

  • Bug Fix: Removing unnecessary conditional in WheeledVehicleMovementComponent.

  • Bug Fix: Removed duplicated forward declaration in VehicleAnimInstance.h

  • Bug Fix: Fixed Capsules where axis length (half-height - radius) < 1 were clamped to a new capsule with axis length of 1. Changed the clamp threshold to 1e-4 and changed FPhysXShapeAdaptor to use a Sphere instead when Radius >= HalfHeight.

    • This would cause sweeps using the capsule params to use a capsule of a different size, up to 1 UU different along the axis.

    • Moved hardcoded limits on FCollisionShape extents to a static value and refactored external code to reference that instead.

Collision Detection

  • Bug Fix: Fixed occasional crash while cooking collision in cook-on-the-fly server.

Physics Asset Editor

  • New: New Physics Asset Editor

  • Bug Fix: Fixed crash when regenerating large amounts of bodies

  • Bug Fix: Fixed crash when regenerating multi convex hulls from zero-vert bones

  • Bug Fix: Fixed physics assets not simulating when BlockAll was globally overridden

  • Bug Fix: Make sure the physics asset editor floor has collision, regardless of what BlockAll does

  • Bug Fix: Fixed physics asset shortcut not working correctly in certain circumstances

  • Bug Fix: Exposed LOD menu in PhAT

  • Bug Fix: Fixed tooltip for PhysicsType

  • Bug Fix: Improved UI feedback around bounds/in-game bounds in animation editor viewports

  • Bug Fix: Fixing undo/redo of bone modifications in Physics Asset Editor (and others)

  • Bug Fix: Fix for crash in physics asset editor after garbage collection

  • Bug Fix: Fix crash undo-ing primitive regeneration while simulation is in progress & stopping simulation in PhAT

  • Bug Fix: Prevented undo/redo breaking when moving both a constraint and a body at the same time in PhAT

  • Bug Fix: Re-added “Apply Physical Material To All” to PhAT. Also re-instated quick constraint setting options in the toolbar.

Rigid Bodies

  • Added per-axis inertia and parent dominance settings to physics assets

  • Bug Fix: Fixed crash deleting a destructible mesh while it was open in an editor with a sub-chunk selected

  • Bug Fix: Fixed crash when physics update causes other bodies to be destroyed (e.g falling out of world).


  • Bug Fix: Fixed a bug where the Local Notification Delegate was not released when UPlatformGameInstance is being destroyed

All Mobile

  • Improvements to localization initialization time on application startup, which reduces overall boot time

  • Added GetDiskTotalAndFreeSpace implementation for IOS and Android

  • Added <setBoolFromPropertyContains> to UPL

    • sets bool to true if any entry in array of strings in ini matches the contains attribute

  • Allow addElement and addElements to only insert once with once=“true” attribute in UPL

  • Bug Fix: Prevent UMobileInstalledContent methods from crashing when called on a created instance in an uncooked build (no installed manifest)


  • New: Android camera plugin

  • New: Enabled Gradle by default and added button to accept Android SDK license to project settings

  • New: Updated Android improved virtual keyboard support; now works on more devices / keyboard types

  • New: Updated to Google Play Services 11.0.4 and GPG C++ v2.3

  • Android media player updates for Vulkan support

  • Added detection of Houdini (running on Intel Android CPU) for device profiles (SRC_UsingHoudini=true)

  • More informative Android SDK license requirements description in Android project settings and errors if attempting to launch or package without accepted agreement

  • Added <baseBuildGradleAdditions> to UPL to allow additions to the root-level build.gradle

  • Add ‘sustained performance mode’ support for API 24+ devices.

  • Add Android cpu stats (stat AndroidCPU)

    • Displays core frequency and core utilization.

    • Android cpu stats update rate is governed by the CVar ‘Android.CPUStatsUpdateRate’.

  • Allow variable expansion in addPermission, addFeature, and addLibrary UPL commands

  • Changes to use the VS2017 sandbox Android SDK if enabled (contributed by IanMatthewHuff)

  • Added new “Include AdMob support for ads” checkbox to Android project settings to disable inclusion of the AdMob SDK in the APK if you do not need ad support.

  • Only use external texture shader version override on shaders needing it

  • Bug Fix: Check for runtime permission to use Android camera in plugin

  • Bug Fix: Android camera plugin improvements

    • return correct capture device type (webcamfront/rear)

    • remove seek (not supported)

    • support track formats

    • better framerate selection

  • Bug Fix: Fixed playlist looping (send PlaybackEndReached event) in Android media player

  • Bug Fix: AndroidMedia: Fixed flicker issue

  • Bug Fix: Protect against null window during shutdown

  • Bug Fix: Don’t add the APK as a build product for Android (.so is marked as Executable)

  • Bug Fix: Various improvements have been made to the experimental Virtual Keyboard including:

    • Multiline is now disabled when not needed

    • Suggestions and autocorrect are now hidden

    • The Done and Back button behavior has been adjusted with Enter and Back key events returned to the UMG controls so they can implement appropriate behavior

    • If the keyboard is up and you click on the same control that has focus, it will hide the keyboard

  • Bug Fix: Fixed issue with trying to link ARMv7-only libovrplatformloader.so for non ARMv7 targets

  • Bug Fix: Filter out unneeded architectures from APK for Gradle builds

  • Bug Fix: Don’t use V2 signing for Gear VR APKs

  • Bug Fix: Set online provider back to GooglePlay and remove forcing IAP permission (contributed by umerov1999)

  • Bug Fix: Fixed GoogleVR Gradle packaging

  • Bug Fix: Removed unneeded settings.gradle file since it is generated

  • Bug Fix: Include JAR files from libs in classes.dex with Gradle enabled

  • Bug Fix: Use absolute path for repositories for Gradle

  • Bug Fix: The Android experimental virtual keyboard now has a native edit box above the keyboard to receive the text and pass it to Slate/UMG. This improves support for non-English characters.

  • Bug Fix: Fixed tilt axis to be consistent between Android and iOS devices

  • Bug Fix: Use FMath::log2 instead of log2 to fix Android runtime dlopen failure on some devices

  • Bug Fix: Only recompile android_native_app_glue.c and UELinkerExceptions if necessary

  • Bug Fix: Clean up Gradle intermediates after packaging if on build machine (IsBuildMachine environment variable set to 1)

  • Bug Fix: Android external texture extension updates for compatibility (forcing ES2 or using ESSL3 if available)

  • Bug Fix: Fixed media player to allow disabling audio by setting track to INDEX_NONE (-1) before playing

  • Bug Fix: Fixes for Android media player and camera player

    • buffer samples copy proper bytecount

    • realloc sets new buffer ptr

    • refcount of Java buffers fixed

  • Bug Fix: Moved more of the Android link command arguments to response file to deal with command line limit on Windows. This fixes issues with having a large number of modules enabled.

  • Bug Fix: The Kindle Fire HD7 5th generation (GPU Mali 450) seems to have problems with threaded rendering, crashing when returning to the main thread. We have added a device profile [Android_Mali_4xx_KindleFire] to disable startup movies during initial loading which prevents the crash. This is the best workaround we have for this device at the moment.

  • Bug Fix: Fixed issue with Android password keyboard input

  • Bug Fix: Protect mediaplayer from entering wrong state if async prepare has not completed

  • Bug Fix: Corrected ordering of Android media player suspend and playbackendreached events

  • Bug Fix: Fixed issue with immersive mode enabled if volume buttons used even if disabled

  • Bug Fix: Fixed error returns from rungradle.bat and ant.bat

  • Bug Fix: Fixed issue where enabling the Shared Material Native Libraries caused packaging for Android to fail

  • Bug Fix: Fixed Android startup movies not always playing

  • Bug Fix: Fixed compile error in Android project generator on Linux

  • Bug Fix: Stops packaging if resulting OBB too large to use on device

  • Bug Fix: Added workaround to install scripts for copying distribution builds to Android/obb

  • Bug Fix: Only add Android NDK glue files to Launch module on first call to prevent unnecessary recompiles

  • Bug Fix: Properly pause and resume Android event listeners when app is paused / resumed.

  • Prevents possible excess CPU use when a UE4 app is paused.
  • Bug Fix: Skip unneeded events on changing Android camera resolution or framerate

  • Bug Fix: Added OBB exceeds 2 GiB failure error code

  • Bug Fix: Fixed movie playback on Android devices when packaged for ES 3.1

  • Bug Fix: Fixed orientation change issue on Android Oreo

  • Bug Fix: Fixed text flicker during update of new virtual keyboard contents and fix crash on deleting selections

  • Bug Fix: Fixed shader compile errors that occurred at runtime on Galaxy S6 devices

  • Bug Fix: Fixed virtual keyboard setFilters crash

  • Bug Fix: Added missing TangoSDK to Android binaries needed for ARCore

  • Bug Fix: Don’t show incorrect cursor location with improved Android virtual keyboard

  • Bug Fix: Deal with rapid changing of improved Android virtual keyboard state

  • Bug Fix: Fixed Android camera orientation for front camera on some devices

  • Bug Fix: Don’t set GL_TEXTURE_MAX_LEVEL on external textures Added r.Android.OverrideExternalTextureSupport CVar to override external texture detection

  • Bug Fix: Reduced frequency of adb calls waiting for Android Launch On process to complete

  • Bug Fix: Updatef manifest configChanges for adActivity and only include if AdMob support enabled

  • Bug Fix: Fix Android camera orientation for rear camera on some devices

  • Bug Fix: Only use density configChanges in AndroidManifest if SDK API 24+ and minSDK 17+

  • Bug Fix: Fixed Android UPL plugin detection


  • HTML5 3rd Party Libs - compiled with emscripten 1.37.19

  • HTML5 emscripten 1.37.19 Win64

  • Updated HTML5 to use the Emscripten 1.37.19 toolchain on Windows, OSX and Linux

  • HTML5 emscripten 1.37.19 Linux

  • HTML5 emscripten 1.37.19 OSX

  • WebAssembly is now enabled by default and ASM.js support has been sunsetted

  • Bug Fix: Fix a crash on HTML5 when rendering landscapes

  • Bug Fix: Pak file compression is now disabled by default; instead it’s best to compress the content packages with gzip and use the browser’s internal decompression after configuring your web server to include the header “Content-Encoding: gzip”.

  • Bug Fix: Zen Garden now has its textures limited to 256x256 when packaging for HTML5 to make the content size more practical on HTML5 and fixing memory issues on Chrome.

  • Bug Fix: Fixed refraction on HTML5 that was caused by several issues with the shaders on WebGL2

  • Bug Fix: Removed the HTML5 PreLoadMap “feature”

  • Bug Fix: Fixed issue with HTML5 failing to show the game scene on Chrome on OSX. Even though canvas had been set with alpha:false, the scene was rendering as transparent.

  • Bug Fix: Fixed various issue with vehicle-based projects that failed launch on HTML5


  • Added IsRegisteredForRemoteNotifications to allow detection during program execution.

  • Added an option to enable/disable exceptions when compiling Objective C for iOS.

  • This removes upto 6mb of unwind tables from the iOS executable of UE4.
  • Added an option to disable force inline when compiling for iOS. Use this in combination with build for size to reduce the size of the executable.

  • Improved Xcode project generation to be compatible with Xcode 9.

  • IOS 9 is now the minimum OS level supported from the editor. Older iOS version support can be enabled via a GitHub build by modifying the build and deploy tools.

  • The iOS signing process has been simplified when using the remote toolchain from PC. It is no longer necessary to to have any signing certificates or private keys installed on the remote Mac. It is now sufficient to have the certificates and keys installed on the PC and configured in the IOS section of the Project Settings.

  • Addition of asset catalogs for application icons on IOS 11. When utilizing Xcode 9, the build tools will now create and compile an asset catalog composed of the application icons. This catalog is required when uploading the application to the store. Users can still specify their icons in the IOS Project Settings as normal and the location of the those files has not changed. They are automatically copied in to the asset catalog at build time.

  • The editor now defaults to building 64-bit only executables for iOS. This change has been made to be compatible with iOS 11 and it’s 64-bit only policy. Source users can still build 32-bit executables by updating the 32-bit build variables in their configuration files.

  • Added Info.plist entrees for required capabilities and camera usage messaging when ARKit usage is detected.

  • Added detection of new iOS devices: iPad Pro 10.5, iPad Pro 1.29 (2nd Gen), iPad 5th Gen, AppleTV 4K, iPhone 8, iPhone 8Plus, and iPhone X

  • Bug Fix: Fixed occasional hangs on startup when launching from a received remote notification.

  • Bug Fix: Fixed an issue where the start touch was not being stored for use when determining scroll delta.

  • Bug Fix: Fixed an issue where refraction was not rendering on tvOS

  • Bug Fix: Password protected iOS certificates are now properly installed after prompting the user to enter the password.

  • Bug Fix: Fix an issue where the orientations supported by the game were not being limited by the information in the Info.plist.

  • Bug Fix: Fix for ScreenSpaceReflections not working properly on iOS 11

  • Bug Fix: Fixed an issue where after restoring purchases user could no longer purchase anything (courtesy of nverenik).

  • Fix for InApp purchase raw price not being initialized (courtesy of nverenik).
  • Bug Fix: The bForcePVRTC4 cooker option was previously ignored on iOS. It now correctly uses PVRTC4 for all textures when enabled.

  • Bug Fix: Fixed LAN multiplayer discovery on iOS devices over WiFi

  • Bug Fix: Fixed Xcode location detection in the editor. Non-Standard Xcode installations can now be properly detected and used by the editor and corresponding tools.

  • Bug Fix: Fixed an issue where code signing was failing when the user has specifically selected only a wildcard provision


  • Updated UE4 fork of SDL2 library to the latest trunk.

  • Added logic to SDL2 to select a specific EGL device for offscreen rendering.

  • Reduced size of editor binaries by making FPlatformMisc::DebugBreak() not inlined on Linux.

  • Eliminated SCW logspam on Linux.

  • Updated Linux’s MCPP to include fix for long defines.

  • Switched UBT to the new clang 5.0.0-based toolchain.

  • Added initial high DPI support on Linux.

  • Added files to cross-build glslang on Windows.

  • New SDL-based audio mixer backend is now used on Linux by default.

  • Bug Fix: Rewrote Linux splash screen to avoid threading hazards that caused crashes.

  • Bug Fix: Fixed Linux editor crashing when capturing a movie.

  • Bug Fix: Fixed UnrealLightmass not being included in the installed build on Linux.

  • Bug Fix: Made FAnsiMalloc compatible with malloc()/free() on Linux so it can be used with ASan.

  • Bug Fix: Fixed name collision of GL func pointers between splash screen and RHI.

  • Bug Fix: Fixed save window prompt failing to be modal.

  • Bug Fix: Removed unnecessary symbols for MSVC visualizers on Linux/Mac.

  • Bug Fix: Fixed copy-paste issues due to buffer being associated with an intermittent window.

  • Bug Fix: Made SDL_SetWindowInputFocus() wait until window is viewable (pull request #2608 by Ereski).

  • Bug Fix: Fixed Engine and Project shortcuts not working in Linux dialogs.

  • Bug Fix: Fixed “Anim to Play” being inaccessible after import.

  • Bug Fix: Fixed UBT not doing full rebuild when system (e.g. kernel) headers have been updated.

  • Bug Fix: Fixed performance drop in Blueprint editor on Linux.

  • Bug Fix: Rebuilt CEF with fewer dependencies, fixing inability to start without libgobject installed.

  • Bug Fix: Fixed not using bundled GL headers during a native build on Linux.

  • Bug Fix: Removed FCustomStd* workaround from hlslcc (STL compat problems are gone due to bundled libc++).

  • Bug Fix: Fixed confusing messagebox message during headless run.

  • Bug Fix: Fixed tesselation in packaged Linux projects.

  • Bug Fix: Fixed crashes on AMD Mesa drivers due to name collision in libelf.

  • Bug Fix: Fixed regression in Linux PhysX (sweeps taking too long time).

  • Bug Fix: Fix spurious CMake configuration errors by specifying the compiler in CMakeLists.

  • Bug Fix: Fixed crash on some ARM platforms due to memory pools being too large.

  • Bug Fix: Made handling inability to load libGL user-friendlier (message box instead of hard assertion).

  • Bug Fix: Fixed another case where initialization failure was resulted in assertion failure instead of a clean exit with error message.

  • Bug Fix: Fixed memory corruption causing crash on Linux when editing geometry.

  • Bug Fix: Fixed crash handler crashing if editor’s console output window is open.

  • Bug Fix: Removed IOS module on Linux, to prevent a crash and make compilation faster.


  • Add -enableasan / -enabletsan command line options to UnrealBuildTool, and bEnableAddressSanitizer / bEnableThreadSanitizer settings in BuildConfiguration.xml. Support for enabling these features via environment variables has been removed.

  • Made few small changes to UnrealBuildTool to make it faster when running on Mono

  • Added support for changing monitor’s display mode on Mac in fullscreen mode. This greatly improves performance on Retina screens when playing in resolutions lower than native.

  • Updated minimum macOS requirement to 10.12.6

  • Bug Fix: Fixed a crash in MediaCompositing plugin

  • Bug Fix: Fixed thread safety issues in AVFMediaPlayer

  • Bug Fix: Fixed crash at exit caused by FDDCCleanup trying to use IFileManager.Get() after the file manager was destroyed

  • Bug Fix: Fixed a hang when building lighting using commandlet

  • Bug Fix: Fixed header search paths in Xcode project for paths containing space character

  • Bug Fix: Solved a number of issues related to window activation, for example being unable to rename items using Rename from the right-click menu and the editor not allowing to override already bound shortcuts.

  • Bug Fix: Fixed missing Window menu contents in Mac UnrealFrontend

  • Bug Fix: Fixed a rare crash at exit caused by an attempt to process Cocoa events after required parts of the engine were already shut down.

  • Bug Fix: Fixed issues with windows not activating on mouse up on Mac in some cases when clicking on draggable Slate widgets

  • Bug Fix: Fixed problems with Mac menu bar not updating in some situations, for example when opening an asset in new window or changing active window with Cmd+~

  • Bug Fix: Fixed a crash on startup that would occur if Steam was running in the background.

  • Bug Fix: Slate modal windows now behave correctly (menu disabling, etc.) on Mac

  • Bug Fix: Fixed crashes caused by an attempt to process window show and hide events after window was destroyed.

  • Bug Fix: Added code for detecting case-sensitive file system on Mac. We now inform users that we currently don’t support running from case-sensitive volumes, then quit instead of the app crashing.


  • Fix race for initialization of ThreadID variable on FRunnableThreadWin, and restore a previous check that was working around it.

  • Bug Fix: Fixed case sensitivity issue in FWindowsPlatformProcess::IsApplicationRunning.


  • New IPlatformFile::FindFiles and IPlatformFile::FindFilesRecursively are much more efficient than other methods for finding files in packaged games.

  • Windows CHM file is no longer included within the installed engine release, due to size limits of the format. A cross-platform compressed HTML archive is still available in the Engine/Documentation/Builds subfolder for offline viewing.

  • Added: a new RHI function to invalidate/clear cached state - RHIInvalidateCachedState(). Currently has implementation only for OpenGL. This could be used by plugin developers to inform RHI that current state has been changed outside of RHI.

  • Added t.DumpHitches.AllThreads so all threads are dumped when doing ‘stat dumphitches’

  • Bug Fix: SavePackageHelper now always honors KeepObjectFlags

  • Bug Fix: Make UScriptStruct::ExportText const-correct

  • Bug Fix: Fixed compiling errors with clang 5.0-rc1 (only Linux editor has been tested).

  • Bug Fix: Fixed some places that were iterating over sets/maps using their element indices as if they were the sparse indices

  • Bug Fix: ULevelStreamingKismet::LoadLevelInstance function is now exposed to game code


  • New: Remove rendering support code in MetalRHI for Mac OS X El Capitan (10.11) - MetalRHI now requires macOS Sierra (10.12) to function on Mac.

  • Extended ExternalTexture to support 2x3 transform (scale/rotation + offset)

  • Make all Metal shader platforms compiled with Metal version 1.2 or later compile such that half may be used, unless the material specifies full precision.

  • A sampler can now be shared amongst different textures in Vulkan

  • Added support for ddx_fine, ddy_fine, ddx_coarse, ddy_coarse to hlslcc

  • PR #3714: Fix typo in EOcclusionCombineMode (Contributed by Mumbles4)

  • Where available use Metal’s new CaptureManager to provide additional capture options in Xcode’s GPU frame capture tool to capture more than one frame at a time.

  • Added Render Target Pool Stats. Use “stat rendertargetpool” on the in-game console to view.

  • Updated Vulkan headers to SDK

  • Integrating the MIT-licensed mtlpp C++ Metal wrapper from Nikolay Aleksiev which will eventually replace previous Metal API wrappers in MetalRHI once it has been extended to support all the features required.

  • Support disabling V-Sync in MetalRHI on macOS 10.13+.

  • Added a command-line option “-MetalRuntimeDebugLevel=X” (where X is a number 0-8, defined in MetalContext.cpp) to specify the amount of runtime validation of Metal operations that MetalRHI will perform over and above Xcode’s validation layer. For macOS level 5 and above will attempt to emit GPU instructions such that if a command-buffer fails the error report will indicate the last successfully completed debug-group.

  • HDR logic refactor - simplify enable/disable logic, particularly on console. This add a high level r.AllowHDR cvar to enable/disable HDR on a per-platform or per-title basis. (This is a breaking change, since it defaults to off.). By default, the user setting now default to true on Console. Instead, we rely on the OS to determine HDR capability

  • D3D12: Enable GPU validation if -d3d12gpuvalidation is passed on the commandline

  • Allow disabling of display V-Sync in Metal on macOS 10.13+ when running in true fullscreen mode (not windowed or windowed-fullscreen). This stops synchronizing frame presentation with the display, so can be slightly faster but will tear visibly as it does on all other platforms.

  • Bug Fix: Fix RHITransitionResources crash with more than 16 UAVs.

  • Bug Fix: Fix deterministic cooking issue in particle systems; always use a pseudo-random number stream when compiling a module.

  • Bug Fix: Fixed incorrect usage of OpenGL queries after deletion.

  • Bug Fix: Fixed hlslcc not working properly with newer compilers.

  • Bug Fix: Fixed: Texture streaming issues after world origin was rebased

  • Bug Fix: Avoid an intermittent crash in AVPlayer on macOS & iOS.

  • Bug Fix: Correctly implement ClipDistance for Metal as an array of floats as required by the Metal shading language and move the vertex-shader-layer clip-distance to index 2 to avoid any conflicts.

  • Bug Fix: Fix render when the GPU Skin Cache is enabled on Mac by switching the type of the input buffer from float to uint. This avoids bits being lost due to different handling of denorm floating point values between Metal drivers.

  • Bug Fix: When compiling Metal shaders without access to the native Metal compiler correctly set the debug-flag in the shader header and disallow archiving the shader into a Metal library which requires native bytecode compilation.

  • Bug Fix: Fixed a memory leak when using distance fields

  • Bug Fix: Fix distance field techniques on Vulkan.

  • Bug Fix: D3D12 fix for command list crash: Committed resources can not have aliasing barriers.

  • Bug Fix: Fix for a crash in RenderDoc when running a shipping application.

  • Bug Fix: Fix cascade preview viewport background color not changing

  • Bug Fix: Use less peak memory on Vulkan with staging buffers at boot time.

  • Bug Fix: Enable recompute tangents using skin cache on Vulkan.

  • Bug Fix: Memory optimization and leak fixes for recompute tangents using skin cache.

  • Bug Fix: Added a manually created Xcode project for glslang so that we include all the necessary code and can link properly.

  • Bug Fix: Fix Vulkan scissor causing text to not clip on editor while resizing.

  • Bug Fix: Fix Vulkan texture streaming

  • Bug Fix: Fix decals on Vulkan

  • Bug Fix: Temporarily disable GPU morph targets on Mac because they require implicit Buffer<> format conversion which isn’t available in MetalRHI.

  • Bug Fix: Fix editor outline in Vulkan

  • Bug Fix: Make TonemapperConfBitmaskPC the proper size so we don’t attempt to access uninitialized memory.

  • Bug Fix: PR #3875: Removed Duplicated “RHI” Module Dependency (Contributed by DavidNSilva)

  • Bug Fix: Fix generation of .metallib on local Macs and exclude .metallib files from the pak - they must always be loaded from disk.

  • Bug Fix: Do not store DDC data if a static mesh failed to build.

  • Bug Fix: Fixed divide by 0 crash when GPU timing frequency not available.

  • Bug Fix: Fix a LPV race condtion due to parallel RSM draw-call submission

  • Bug Fix: PR #2992: Fixing aspect ratio issue of SceneCapture2D rendering in “Ortho” camera mode (Contributed by monsieurgustav)

  • Bug Fix: Fixed an intermittent assert on startup where the AVFoundation movie player could initialize a video prior to the rendering thread being back online after resizing the window to go into full-screen.

  • Bug Fix: Fixed cloth rendering on Metal by changing the way FClothVertex is loaded. Some of the data in FClothVertex needs to be treated as uint data and loading it as floats was exposing a difference in behavior between some Metal drivers and Direct3D.

  • Bug Fix: Moved RHISupportsMSAA and add the necessary conditions for when it is available on Metal (AMD & Nvidia for macOS 10.13+, Mobile Renderer for iOS).

  • Bug Fix: Rework handling of various Metal intrinsics and implement a full fused-multiply-add optimization pass within hlslcc to ensure greater consistency of results between different Metal shaders motivated by changes to the behavior of Apple’s Metal compiler.

  • Bug Fix: Fixed iOS builds picking up the Mac’s Metal shader standard setting which caused the wrong shaders to be compiled.

  • Bug Fix: Fixed lighting in VR Forward rendering on Nvidia GPUs under macOS by changing how we load the ForwardLocalLightBuffer data to avoid a difference in behavior between some Metal drivers and Direct3D.

  • Bug Fix: Fixed an intermittent crash launching games into fullscreen on macOS caused by deleting the render targets before they should be and correcting specification of some render-target load-actions.

  • Bug Fix: Fixed Pixel Inspector not working on Mac by implementing the missing CopySubTextureRegion function in MetalRHI.

  • Bug Fix: Improve the handling of features that are restricted to certain Mac/iOS & Metal versions in Editor UI and the way the Editor handles the absence of the native Metal shader-compiler.

    • Disable half floats for Metal v1.0 & Metal v1.1 - too many shaders just don’t compile anymore for no apparent reason - this will only get worse as the compiler stack advances.

    • Change the Editor code to ensure that cooking without access to the native Metal shader compiler does not pollute the DerivedDataCache for other users.

    • The global clip plane implies clip_distance support which on A8 devices requires iOS 10.

    • The Desktop Forward renderer for iOS requires Metal v1.2 and iOS 10.

  • Bug Fix: Rework the error reporting for remote shader compilation so that the correct error message is actually reported when the native Metal compiler is not available.

  • Bug Fix: Fix rendering of shaders that use World-Position-Offset on Metal platforms by extensive use of newer intrinsics.

  • Bug Fix: Change an assert in the Metal shader translator that fires whenever a float literal is NaN or an otherwise unhandled non-finite value to a compiler warning that can be debugged as NaN/INF literals will be incorrect on all platforms.

  • Bug Fix: Fix a crash when switching between normal and Mobile Preview rendering modes in the Editor on Mac.

  • Bug Fix: Fix the incorrect velocity & motion-blur rendering in the Desktop Forward renderer on A8 iOS devices (e.g. iPhone 6/6+), the Desktop Forward renderer is now minimally functional on these older iOS devices but will be slow as it is much more demanding than the Mobile Renderer.

  • Bug Fix: Fixed project thumbnails on Vulkan

  • Bug Fix: Fixed RHILockVertexBuffer on DX12 to work properly with and without RHI commandlist.

  • Bug Fix: Emit only one declaration for system provided shader variables for Metal as sometimes we end up with multiple specifications for some volumetric fog shaders.

  • Bug Fix: Protect against invalid copysubresource bounds. Protects against GPU crashes on some drivers.

  • Bug Fix: Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version but only for Vertex shaders.

  • Bug Fix: Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.

  • Bug Fix: Fix D3D12 validation error when GBV is enabled, courtesy of Sebastian Merry at Microsoft

  • Bug Fix: Avoid a Metal GPU driver bug by only emitting one clip-distance on Metal, when the global clip-plane is enabled this takes priority over all others as it is essential to function correctly, other uses are merely optimizations.

  • Bug Fix: Fixed outline in editor missing on Vulkan

  • Bug Fix: Rebuilt IntelISPCTexComp with Visual Studio 2015 to remove dependency on VS2013 redist.

  • Bug Fix: Precomputed visibility on components added through a Blueprint will now correctly be retained when reloading a level.


  • Bug Fix: Prevent crashes when UNiagaraComponent::GetEffectDataInterface is called on a component with no effect asset set

  • Bug Fix: Fixed life-time fading on deferred decals.


  • Disable r.GenerateLandscapeGIData by default, opt-in for kite demo. Projects that want to use heightfield GI need to opt-in to r.GenerateLandscapeGIData.

  • Added ‘Render Unbuilt Preview Shadows in game’ rendering project setting and r.Shadow.UnbuiltPreviewInGame console variable

  • Swarm hands out the most expensive tasks in roughly a round robin ordering among distribution agents. Lightmass processing of a single task is multithreaded, so ideally the most expensive tasks are evenly distributed among active agents. This has the biggest impact in small scenes with 10’s of high resolution lightmaps, and with a distribution farm. Build time in one scene went from to 113s -> 47s.

  • Allow masked dynamic shadows to be cast by translucent materials, based on a threshold opacity value.

  • Volume materials on every component type except particle sprites now voxelize the mesh’s Object space bounding box, allowing more control over the shape of fog added and better performance when adding ground density.

  • Bug Fix: Enable PCSS on Vulkan & Metal and enable capsule shadows on Vulkan

  • Bug Fix: Only use skylight OcclusionMaxDistance for the global distance field if it casts shadows

  • Bug Fix: Fixed shadow occlusion culling broken by shadowmap caching change.

  • Bug Fix: Fixed spotlight whole scene shadow occlusion queries using a radius 2x too long

  • Bug Fix: Fix for movable skylight shader missing on simple forward (low lighting quality mode)

  • Bug Fix: Fixed ObjectRadius in Volume domain materials

  • Bug Fix: Dynamic Indirect Occlusion from mesh distance fields is disabled when operating on a movable skylight, since Distance Field Ambient Occlusion fills that role

  • Bug Fix: Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes

  • Bug Fix: VolumetricScatteringIntensity is greyed out based on Mobility


  • Moved UTexture material notification code into separate function, so it can be used by derived classes.

  • Improved streaming support for AO textures and lighting scenarios.

  • Improved resolution metrics in the texture editor. Added a new editor command "BuildMaterialTextureStreamingData" to refresh material texture streaming data.
  • Removed the 1945MB VRAM cap in DX11 and DX12 when running 64 bit builds. Non console platforms will now allocate non streaming texture outside the texture pool if there is enough free VRAM available. This improves the behavior and maintainability of low texture settings.

  • Bug Fix: Fixed some cases where material instances would be treated as masked instead of opaque as intended.

  • Bug Fix: Fixed behavior of custom material attribute display names and function names.

  • Bug Fix: Fixed an issue where some materials would overstream some textures.

  • Bug Fix: Fixed an issue where textures would stay at low resolution following a memory usage spike.

  • Bug Fix: Fixed an issue when building the DDC for composite textures where the texture sources would be missing.

  • Bug Fix: Fixed a case where parameters behind a static switch would be invisible in a material instance.

Mobile Rendering

  • Exposed “Use Full Precision” for UI materials, which can be used to improve precision at performance cost in UI pixel shaders on mobile devices.

  • Added support for Vulkan validation layers on Android. Only in Debug and Development configuration (requires r.Vulkan.EnableValidation=1)

  • Vertex Fog is disabled on Mobile by default. This saves a number of instruction in base pass shaders.

  • Bug Fix: Correct tracking of static mesh index memory.

  • Bug Fix: Fixed: Decals on mobile devices should not disappear when there is planar reflection in the view

  • Bug Fix: Fixed: Protostar in Vulkan mode crashes without error on Tegra K1 Nvidia Shield due to OOM - fixed r.MobileReduceLoadedMips has no effect - added r.MobileMaxLoadedMips to set a limit to a number of mips - reduced size of vulkan allocation pages on android

  • Bug Fix: Fixed a problem which could cause the Scene Depth material node to return 0 on some mobile devices.

  • Bug Fix: Fixed: Crash after Splash Screen on Android (ETC2) when Adding r.UseShaderCaching and r.UseShaderPredraw - Added r.SaveShaderCache command to save current cache on demand - Removed support for caching multiple platforms at the same time, each platform now uses separate cache/file - Significantly reduced size of draw log on disk - Mobile platforms support only basic caching, logging shaders and bound shader states without full gfx state

  • Bug Fix: Fixed: Usage of dynamic shadows leads to application crash on Galaxy S7 device (SM-G930V) when project packaged with Vulkan support.

  • Bug Fix: Fixed an issue where streaming in or out levels each with their own stationary directional lights could cause the lighting system to lose track of which lights are loaded and surfaces be lit incorrectly

  • Bug Fix: Fixed upside down triangle rendering with UCanvas::K2_DrawMaterialTriangle on OpenGL ES devices.


  • New: Removed render thread stalls and improved reactivity when streaming mips for 2D textures.

  • New project settings to globally disable/enable creation of depth-only and reversed index buffers.

  • Added: Async loading bytecode from shader library. Along with bytecode de-duplication shader library will now pre-load requested bytecode to ensure there are no disk access related hitches in game when creating shaders.

  • Cloth vertex buffers no longer generate dummy vertices, which reduces runtime memory usage of skeletal meshes with multiple sections of which only one has cloth.

  • Fixed lights calling InvalidateLightingCache on Destroy in game, causing a hitch

  • Fixed UWorld::DestroyActor in PIE calling InvalidateLightingCacheDetailed which can do a FlushRenderingCommands and cause a large hitch

  • Snap volumetric fog light function target resolution to a factor of 32 to avoid constant texture reallocation

  • Added SendAllEndOfFrameUpdates draw event to wrap skin cache events

  • When compiling shaders for Metal explicitly emit the early-fragment-test qualifier unless the fragment shader invokes discard() or explicitly writes a depth-output semantic, this should better match driver behavior on Direct3D.

  • Optimise the constant-propagation pass in hlslcc by using a hash-table to reduce the cost of looking up the existing constant assignment instructions.

  • Vulkan will not use staging memory for dynamic vertex/index buffers on devices with unified memory access

  • Implement support for the SV_DepthLessEqual semantic in Metal.

  • Optimizations to reduce MetalRHI CPU overheads:

    • Avoid reallocating memory by making the TArray of uniform buffers a static C-array instead.

    • Use count-trailing-zero’s intrinsics to eliminate redundant iterations over the set of bound resources.

  • Small optimizations to MetalRHI primarily for iOS: - Only buffers less than a platform-specific threshold are uploaded via Metal’s set*Bytes API to balance CPU overheads (on iOS this is 512 bytes, on Mac it is 4096 bytes). - Increase the minimum pool sizes for MTLBuffer’s to reflect this. - Avoid redundantly rebinding uniform buffers in MetalRHI.

  • Rewrite of the Vulkan pipeline cache: Multiple files can now be read off projectdir/Build/ShaderCaches/Platform folders; cache files are now compressed with rates of up to 70-90% off the original size.

  • Bug Fix: Fixes for profilegpu on Vulkan

  • Bug Fix: Discard now gets called on BulkData on D3D11, D3D12 and Vulkan.


  • Improve performance of bokeh depth of field.


  • New: Improved XGE shader compiler. - Added support for XGE interception interface, which allows asynchronous streaming of shader tasks into XGE, and eliminates the stalling/flushing found in the old system. The old system has been renamed “Xml interface”. - Both systems are available and selectable based on r.XGEShaderCompile.Mode CVar. Overview of the new system: - New system uses an additional XGEControlWorker process to manage communication between the engine and XGE. This is simply a copy of ShaderCompileWorker.exe (the implementation is part of SCW, but XGE requires the two files to be separate, hence the duplicate). - When shader jobs arrive from the engine, the shader compiler thread spawns an instance of XGEControlWorker within an XGE context, and connects to it via named pipes. - Job command lines are fed to the control worker via the pipe, which the worker enqueues within XGE by issuing a CreateProcess call, which is intercepted. Job completion is reported back to the engine via the named pipes. - New system is preferred over the old one, and is enabled with “-xgeshadercompile” command line switch or “r.XGEShaderCompile” cvar. - The new system depends on the “XGEController” engine module. Support for which is based on the WITH_XGE_CONTROLLER #define, or -xgecontroller/-noxgecontroller command line options.

  • Added an option in the Texture browser to allow a texture to override the default compression quality. This has an effect for textures compressed as PVRTC or ASTC.

  • Bug Fix: Fixed a condition where cooking DLC would cook all maps even if specific maps were specified.


  • Added support for pre-build and post-build steps when using MegaXGE.

  • Added validation against shipping files in restricted folders. * Added a new SystemNonUFS type for staged files, which excludes files from being remapped or renamed by the platform layer. * Replaced the DeplyomentContext.StageFiles() function with simpler overloads for particular use cases (options for remapping are replaced with the SystemNonUFS file type) * Config entries in the [Staging] category in DefaultGame.ini file allow remapping one directory to another, so restricted content can be made public in packaged builds (Example syntax: +RemapDirectory=(From=“Foo/NoRedist”, To=“Foo”)) * An error is output if any restricted folder names other than the output platform are in the staged output.

  • The -submit or -nosubmit arguments are only passed to child instances of UAT if they were specified on the original command line. BuildCookRun uses this flag to determine whether to submit, rather than just whether to allow submitting, so we shouldn’t pass an inferred value.

  • Added a -SkipHeader parameter to the UpdateLocalVersion command, to allow updating version files without updating Version.h and improve link times on incremental builds.

  • During staging, we now create a manifest for each PAK file containing all the plugin descriptors in one place. Eliminates need to recurse through directories and read separate multiple files in serial at startup, and allows reading all plugin descriptors with one read. The “Mods” directory is excluded from the manifest, since these are intended to be installed separately by the user.

  • Removed the -ForceLocal command line option. Settings are now always determined automatically if not set via environment variables, independently of the -BuildMachine argument.

  • Simplified logic for detecting Perforce settings, using environment variables if they are set, otherwise falling back to detecting them. Removes special cases for build machines, and makes it simpler to set up UAT commands on builders outside Epic.

  • Packaging a plugin will now force include what you use to be enabled. Since plugins distributed on the marketplace will be moved into the engine folder, they need to be IWYU compatible.

  • Bug Fix: Fixed incorrect username in BuildGraph <Submit> task. Should use the username from the Perforce environment, not assume the logged in user name is the same.

  • Bug Fix: Formatting in JSON output from C# tools now matches formatting used by the engine.

  • Bug Fix: When patching temporary files are now put in the correct directories. Thanks David Yerkess @ Milestone

  • Bug Fix: Fixed executable not being recompiled for a content-only project if a plugin which is enabled by default is disabled.


  • Added an example script to package ShooterGame for any platforms.

  • Improved tracing for error messages. All errors are now propagated as exceptions, and are tagged with additional context information about the task currently being run. For example, throwing new AutomationException(“Unable to write foo.txt”) from SetVersionTask.Execute is now displayed in the log as: ERROR: Unable to write to foo.txt while executing <SetVersion Change=“0” CompatibleChange=“0” Branch=“Unknown” Promoted=“True” /> at Engine\Build\InstalledEngineBuild.xml(91) (see D:\P4 UE4\Engine\Programs\AutomationTool\Saved\Logs\UAT_Log.txt for full exception trace)

  • Added support for nullable parameter types.


  • Added support for adaptive non-unity builds when working from a Git repository. The ISourceFileWorkingSet interface is now used to query files belonging to the working set, and has separate implementations for Perforce (PerforceSourceFileWorkingSet) and Git (GitSourceFileWorkingSet). The Git implementation is used if a .git directory is found in the directory containing the Engine folder, the directory containing the project file, or the parent directory of the project file, and spawns a “git status” process in the background to determine which files are untracked or staged. Several new settings are supported in BuildConfiguration.xml to allow modifying default behavior: <SourceFileWorkingSet> <Provider>Default</Provider> <RepositoryPath></RepositoryPath> <GitPath>git</GitPath> </SourceFileWorkingSet>

  • Simplified how targets are cleaned. Delete all intermediate folders for a platform/configuration, and delete any build products matching the UE4 naming convention for that target, rather than relying on the current build configuration or list of previous build products. This will ensure that build products which are no longer being generated will also be cleaned.

  • A <ExeName>.version file is now created for every target built by UBT in the same JSON format as Engine/Build/Build.version. This allows monolithic targets to read a version number at runtime, unlike when it’s embedded in a .modules file, and allows creating versioned client executables that will work with versioned servers when syncing through UnrealGameSync.

  • Use P/Invoke to determine number of physical processors on Windows rather than using WMI. Starting up WMIC adds 2.5 seconds to build times, and is not compatible with .NET core.

  • Added support for declaring custom pre-build steps and post-build steps from .target.cs files. Similarly to the custom build steps configurable from .uproject and .uplugin files, these specify commands which will be executed by the host platform’s shell before or after a build. The following variables are expanded within the list of commands before execution: $(EngineDir), $(ProjectDir), $(TargetName), $(TargetPlatform), $(TargetConfiguration), $(TargetType), $(ProjectFile). Example usage: public class UnrealPakTarget : TargetRules { public UnrealPakTarget(TargetInfo Target) : base(Target) { Type = TargetType.Program; LinkType = TargetLinkType.Monolithic; LaunchModuleName = “UnrealPak”; if(HostPlatform == UnrealTargetPlatform.Win64) { PreBuildSteps.Add(“echo Before building:”); PreBuildSteps.Add(“echo This is $(TargetName) $(TargetConfiguration) $(TargetPlatform)”); PostBuildSteps.Add(“echo After building!”); PostBuildSteps.Add(“echo This is $(TargetName) $(TargetConfiguration) $(TargetPlatform)”); } } }

  • The user’s preferred source code IDE selected in the editor is now used to generate project files.

  • Bug Fix: UnrealHeaderTool will now be re-run if the .build.cs file for a module has changed.

  • Bug Fix: Fixed incorrect MSBuild version occasionally being used when invoking UnrealBuildTool.

  • Bug Fix: Removed the dependency on the ShaderCompileWorker project when running with generating project files with the -useprecompiled argument.

  • Bug Fix: Fixed hot reload generating import libraries without DLLs. Now that they are produced by separate actions by default, it was removing DLLs from the action graph due to the bSkipLinkingWhenNothingToCompile setting.

  • Bug Fix: Fixed UBT stack size not being propagated through to the toolchain from the target settings.

  • Bug Fix: Files in output directories which match build products in other output directories are now deleted. Prevents slate binaries from being loaded when a module is moved.

  • Bug Fix: Fixed unchanged modules always being relinked with VS2017 15.3


  • Added variables for stream and client name, and the ability to escape any variables for URIs using the syntax $(VariableName:URI).

  • Allow adding custom actions to the context menu for right clicking on a changelist. Actions are specified in the project’s UnrealEngine.ini file, with the following syntax: +ContextMenu=(Label=“This is the menu item”, Execute=“foo.exe”, Arguments=“bar”) The standard set of variables for custom tools is expanded in each parameter (eg. $(ProjectDir), $(EditorConfig), etc…), plus the $(Change) variable.

  • Always sync the Enterprise folder if the selected .uproject file has the “Enterprise” flag set.

  • If working in a virtual stream, use the name of the first non-virtual ancestor for writing version files.

  • Added additional search paths for UGS config files, and fix a few cosmetic issues (inability to display ampersands in tools menu, showing changelist -1 when running a tool without syncing). Config files are now read from: Engine/Programs/UnrealGameSync/UnrealGameSync.ini Engine/Programs/UnrealGameSync/NotForLicensees/UnrealGameSync.ini If a project is selected: <ProjectDir>/Build/UnrealGameSync.ini <ProjectDir>/Build/NotForLicensees/UnrealGameSync.ini If the .uprojectdirs file is selected: Engine/Programs/UnrealGameSync/DefaultProject.ini Engine/Programs/UnrealGameSync/NotForLicensees/DefaultProject.ini

  • Project files are no longer generated when syncing precompiled binaries.

  • The user’s server settings are now read by spawning P4.EXE from the directory containing the project being opened, so people can override the P4PORT setting on a per-workspace basis using a P4CONFIG file.

  • Added support for custom post-sync actions. These cannot be configured per-user, but are set by the project configuration file. Since they are always executed, they should be fast and reliable. Example additions to an UnrealGameSync.ini file: [Sync] +Step=(FileName=“cmd.exe”, Arguments=“/C echo Change=$(Change), CodeChange=$(CodeChange), BranchDir=$(BranchDir)”)

  • Added support for predefined categories of files to exclude from being synced. The “Sync Filter” dialog now shows a list of these categories as well as the custom view that was previously supported. Several built-in categories are defined, for various target platforms, documentation, and so on. Each category is identified by a GUID, and projects may add or modify existing categories through the <ProjectDir>/Build/UnrealGameSync.ini config file. Config file entries are formatted as follows: +SyncCategory=(UniqueId=“{00000000-0000-0000-0000-000000000000}”, Name=“Name of this Category”, Enable=true/false, Clear=true/false, Paths=“/Path1/…;/Path2/…”) All fields other than the UniqueId are optional. Specify Enable=false to prevent the filter from being applied or shown to the user. Specify Clear=true when modifying an existing category to clear the existing paths rather than append new paths. Specify the list of patterns to be filtered out separated by semicolons.

  • Bug Fix: Changed to use the default Perforce server port when opening P4V if there is not one set in the environment.

  • Bug Fix: Fix tab names setting not being correctly read back in from config file.

  • Bug Fix: Fixed build configuration not correctly being updated to reflect changes on other tabs.

  • Bug Fix: Fix directory separators not being normalized before filtering files for sync. If the workspace root directory has non-native separators (eg. D:/P4), they will be propagated to the file list.

  • Bug Fix: Fixed crash when switching streams to a stream that does not contain the current project file.

  • Bug Fix: Reparse points (symlinks) are no longer enumerated when recursively deleting directories. This could cause the contents of the linked directory to be deleted rather than the symlink itself, and can cause crashes if the symlink is to an outer directory.


  • Bug Fix: Fixed setting the command line to empty not affecting the underlying property sheet.

  • Bug Fix: Fix single-file compilation for foreign projects, where the command line contains $(SolutionDir) and $(ProjectName) variables.


  • Disabled the skeletal mesh’s “Use async scene” property if the current project is not set to use an async scene, as this property will have no effect otherwise. A warning is shown on the property if the project does not currently use an async scene.

  • A similar warning will be shown in the physics asset editor in the near future.
  • Disabled viewport post processing when in cloth painting mode on clothing assets, to make the paint colours more easily distinguishable.

  • Bug Fix: Stopped property context menus closing the whole window stack when an item is clicked

  • Bug Fix: Improve PhAT UI to stop showing convex bodies as editable, as they currently contain no editable properties.

  • Bug Fix: Fixed “Use Internal” button for Soundwave curves being too large.

  • Bug Fix: Fixed various dropdown menus in the cloth asset creation popup not hiding themselves when the input focus is lost.

  • Bug Fix: Fix for custom rows having their “is enabled” attribute stomped.

  • Bug Fix: Force low quality mode for background blurs by default on android

  • Bug Fix: Force low quality fallback mode on ES2 devices for slate blur widgets. This feature does not work on es2

  • Bug Fix: Prevent resizing when a context menu is open. This prevents a number of rare crashes when a window is resized when a child menu is open.

  • Bug Fix: Converted remaining uses of EKeyboardFocusCause to EFocusCause and properly deprecated it

  • Bug Fix: Fix issues with marking a widget Blueprint class as abstract

  • Bug Fix: Added a console variable to prevent touch events from sending multiple bogus mouse events. Disabled by default. Enabling this will prevent pen tablets from working but may be necessary for touch events to work in windows 7.


  • Added search to editable texts

    • This can be invoked by selecting some text and using Ctrl+(Shift+)F3 to begin a search, and then using (Shift+)F3 to move through the matches.

    • It can also be done in code by calling BeginSearch and AdvanceSearch on an editable text.

  • Added bApplyWidgetStyleToMenu to SMenuAnchor - if false, the popup is given a default FWidgetStyle when painted. This allows the menu to ignore the inherited tint and opacity, so a faded button can still summon a fully opaque menu.

  • Bug Fix: Added a lock around access to slate active timers to protect it against race conditions when accessed on the slate movie thread and the game thread

  • Bug Fix: Fixed issue where undocked tabs had no way to be made visible again after being hidden


  • Bug Fix: UMG: Apply latent actions like in movie scene sequence player.

  • Bug Fix: Scroll Widget Into View will now work for widgets not directly parented to a scroll box.

  • Reduce memory footprint of somd UMG/Slate classes including UWidget, UBorder, UUserWidget, SWidget, and SButton


  • Debug stereo layer support. This adds an option to render the debug canvas to a stereo layer which greatly improves console and stat readability in an hmd.

  • Updated OpenVR SDK to 1.0.10.

  • Bug Fix: Editor primitives we not being handled correctly with ISR.

  • Bug Fix: Adding ISR and multiview support for custom depth. This fixes z-fighting that can occur between the custom depth pass and pre/base pass when the custom depth pass doesn’t use ISR/multiview.

  • Bug Fix: PR #3997: Fix quad buffer stereo crash in Windows (Contributed by ayamashev)


  • Added support for non-parallel projections for HMDs that have canted display panels

  • Split interface for handling custom render targets from IStereoRendering into its own interface and unified common code between different VR platforms into a single base implementation class.

  • Adding core VR controller re-centering delegate notification. Users can now use this delegate via the VRNotificationsComponent

  • Adding in support for the SteamVR Knuckles controllers

  • Code applying late updates has been unified across different VR platforms, reducing code duplication and unifying behavior.

  • Added in SteamVR visible area mesh support. Can be toggled with vr.SteamVR.UseVisibleAreaMesh

  • Updating SteamVR libraries to 1.10

  • Oculus changes for SI1.16 and SI1.17 Adds Vulkan and D3D12 improvements/fixes for VR, depth target allocation for VR plugins, Android thread naming and a number of new Oculus features.

  • Added Vulcan Extensions for OculusVR

  • UE-47210 VR Mode in-Editor Viewport Camera is misaligned with HMD camera -Added calculation of the point on the render target directly in front of your eyes based on the HMD’s projection matrix. -This is used by cropping spectator screen modes to adjust the cropping used to favor putting the eye center point in the center of the spectator screen. Oculus is most noticable as its center point is about .45 out of 1 from the top, rather than 0.5. -I also found that we were not successfuly detecting the aspect ratio of the spectator screen in windowed mode. We were using the render target aspect ratio, which is constant. Now we pass down the window size to get the correct aspect ratio.

  • Updated library revision for GoogleVR

  • Bug Fix: Fixed SpectatorScreen Flickering Fixed Spectator screen: need frame delay before assigning dynamically created rendertarget to spectator texture Fixed Spectator Screen: crash if you release a render target which is assigned as the spectator texture -Now I pull the Texture2DRHI out of the UTexture every frame and pass it to the render thread via a rendercommand. This has us getting it after it is created, and using it until the end of the current renderframe. -Note: scene capture components crash if you release their render target, so point them away from it first. -Note: this still leaves the possibility of setting a texture who’s resources do not yet exist, or which have not been rendered to yet as the spectator screen texture. The spectator screen will, by default display all black if it doesn’t find a resource at all. For debugging one can switch that to all white or breakpoint it in GetFallbackRHITexture().

  • Bug Fix: Don’t snap motion controllers to the origin when tracking is lost.

  • Bug Fix: Vive spectator flat rect expanded to match other platforms.

  • Bug Fix: PSVR Social Screen needs to go to ‘mirroring’ for hmd setup dialog because system dialogs are not visible in separate mode.

  • Bug Fix: Fixed a regression causing splash screens on Oculus to be forced to a 16:9 aspect ratio regardless of the texture size used.

  • Bug Fix: Fixed an issue with backwards compatibility, where the old XR module names (OculusRift, GearVR, etc.) still work with the command line and XR prioritization.

  • Bug Fix: Fixed a bug that would modify the camera view unwantedly outside of VR, when the camera’s LockToHMD option was enabled.

  • Bug Fix: Fixed a crash that could occur when using a SteamVRChaperoneComponent on a XR platform other than SteamVR.

  • Bug Fix: Fixed a bug where the in-game camera view could become vertically locked after playing in VR preview.

  • Bug Fix: Fixed a bug with the Daydream controller model where the laser was rendering undersized.

  • Bug Fix: Fixed a bug with SteamVR on Mac where controller haptics would not fire.

  • Bug Fix: Fix for Daydream 2D transition on Android Fix for Cardboard on Samsung S8 devices when not set to native resolution

  • Bug Fix: Fixed a bug on Oculus, where the tracking space’s origin was being ignored/reset on initialization.


  • Bug Fix: Fixed: bNavigationAutoUpdateEnabled was not always working when re-opening map in the Editor

  • Fixed: Navigation Build was not always clearing nav-mesh tiles when bNavigationAutoUpdateEnabled is enabled Fixed: Streaming out a sub-level in the Editor was not always updating nav-mesh debug drawing

Animation Blueprint

  • USkeletalMeshComponet.bDisableAnimCurves is deprecated and converted to USkeletalMeshComponet.bAllowAnimCurveEvaluation. Note the meaning is reversed.


  • Moved functional testing automation commands to an exported helper.


  • Blueprint references to “Random Unit Vector in Cone” or “Random Unit Vector in Cone With Yaw and Pitch” will automatically be redirected, but function calls in code will not. See the Programmer Notes for technical instructions.

  • If your project’s .uproject file contains an “AdditionalPluginDirectories” section with an entry listed as “Intermediate/Plugins”, please remove that entry. If it is the only entry, it is safe to remove the entire section.

    • In 4.17 we automatically added this entry to the .uproject file (only if it was writable) when you changed the “BlueprintNativizationMethod” option to something besides “Disabled” in Project settings->Packaging in the Editor UI. In 4.18 we’ve since removed this feature, as we found that it was causing issues with switching between nativized and non-nativized build workflows. Note that if it’s not removed, those issues may persist.

  • Most paths in the UE4 editor UI that cook and/or build the game now look to the “BlueprintNativizationMethod” option in Project settings->Packaging in the Editor UI in order to determine if Blueprint nativization should be enabled.

    • This means that if you’ve set that option to something other than “Disabled” for your project, any time you (or someone else working on the same project who you share the config files with) does something that cooks and/or builds the game, it will now do so with Blueprint nativization enabled.

    • This only applies to workflows that use “Cook by the book” mode. Blueprint nativization is not enabled with “Cook on the fly” mode, regardless of the “BlueprintNativizationMethod” setting.

    • One exception is the “Launch on <Device>” command. This command performs a “Cook by the Book” within the Editor process itself, and Blueprint nativization also cannot be enabled for cooking in that mode either.

    • Other situations that will currently always disable Blueprint nativization include when Cook on the Fly mode is used for launching a profile in the Project Launcher, and when a Blueprint-only project is launched through the Project Launcher using a binary (i.e. not built locally) version of the editor.

    • In the Project Launcher, you can create a custom Launch profile to override the current setting by adding the following into the “Additional Cook Options” field for the “Cook by the Book” settings: “-ini:Game:[/Script/UnrealEd.ProjectPackagingSettings]:BlueprintNativizationMethod=<Disabled|Inclusive|Exclusive>”, replacing the “<Disabled|Inclusive|Exclusive>” substring with one of those 3 available options.

  • Bug Fix: Fix create object nodes failing to remove orphaned pins when connections to the orphaned pin are removed.


  • FTimespan: The %D string formatter (previously total number of days) is now the zero-padded days component of the time span. Time spans are now always exported and stringified with a leading plus or minus sign.

  • Modifying a TMap, TSet or TSparseArray while you are iterating over it with a ranged-for loop will now cause an assertion, matching the same behavior as TArray. If you need this functionality, you should change your loop to a traditional iterator loop:

    	for (auto MyMapIter = MyMap.CreateIterator(); MyMapIter; ++MyMapIter)
    	if (RemoveElement(*MyMapIter))
  • Multiple MAX values will no longer be generated for UENUMs. Assets (including Blueprints) which refer to redundant MAX values will throw a warning about the missing value. These assets should be reexported to be saved with the new MAX value.

  • Any custom C# projects (UAT plugins for example) should add a reference to the DotNETCommon assembly

  • MoveTemp will no longer compile if passed an rvalue or a const lvalue. The code should either be fixed to not use const if possible, or the MoveTemp should be removed as it is redundant. Templates and macros can use MoveTempIfPossible when it’s hard to tell if the argument is const - this follows the old behavior of MoveTemp.

  • Bug Fix: Any references to FCoreUObjectDelegates::PreGarbageCollect/PostGarbageCollect delegates should be replaced with calls to FCoreUObjectDelegates::GetPreGarbageCollectDelegate() and FCoreUObjectDelegates::GetPostGarbageCollectDelegate() respectively

  • Bug Fix: Fixed console output not working when using -log in a shipping build

Gameplay Framework

  • New: As part of the changes for cross-level actor references newly created Sequencer actor references are now SoftObjectPtrs, but older Sequences will have to be fixed up with “Rebind Possessable References” and resaved first.

  • Scale can now be specified on play particle effect anim notify and spawn emitter Blueprint nodes.

  • Remove advanced option CreateTemporaryCopiesOfLevels from the sequencer capture object, it has not worked properly in several versions.

  • Bug Fix: UWorld functions PerformGarbageCollectionAndCleanupActors, DelayGarbageCollection, SetTimeUntilNextGarbageCollection, GetTimeBetweenGarbageCollectionPasses, and ForceGarbageCollection have been deprecated. The equivalent functions on GEngine should be used instead.

Media Framework

  • BREAKING: MediaSoundWave assets were replaced with MediaSoundComponents

    • There is no automatic conversion (components require different workflow & user decisions)

    • Attach new MediaSoundComponents to Actors or UMG widgets

    • Existing MediaSoundWave assets must be deleted from Content directory on disk

  • BREAKING: MediaPlayer output settings were removed. Media assets now reference a MediaPlayer instead

  • NEW: MediaTexture and MediaSoundComponent have a setting for the Media Player to pull data from

  • NEW: MediaAssets module is now always loaded to prevent server-side BP problems

  • NEW: Material texture samplers now require the new Sampler Type “External”

  • NOTE: MediaOverlay assets were removed as a concept

    • We are currently reworking caption and subtitle support in UE4


  • Any classes inheriting or making use of IOnlineTitleFile should be adjusted to take account of the new error string.


  • All UPrimitiveComponent and FBodyInstance deprecated functions will still work as they did before, but it’s recommended that code using these functions is upgraded to call the newer ones. This should be as simple as following the instructions in the respective deprecation compiler warnings. Particular care should be taken when upgrading calls to FBodyInstance to ensure that the inputs are converted to the correct units expected by the new functions.


  • Older project will need to open the editor and resave their IOS project settings .


  • Projects requiring HDR support now need to set r.AllowHDR to 1 in their DefaultEngine.ini (or per-platform equivalents). Projects using HDR on consoles who want the feature to be off by default should modify DefaultGameUserSettings.ini to disable it.


  • Bug Fix: Fixed behavior of custom material attribute display names and function names - The intention was to allow a display name and a separate name for use in the HLSL but one was being lost. Projects relying on the old behavior may need to update local shader modifications.

Mobile Rendering

  • If your maps use Vertex Fog, Mobile preview and device will show on screen message: PROJECT HAS VERTEX FOG ON MOBILE DISABLED. Please open project settings and enable support for Vertex Fog in Mobile section.

  • Bug Fix: Vulkan will pre-allocate less memory on mobile devices

  • Bug Fix: Fixed: Shader cashing on Android. To enable shader caching use r.UseShaderCaching=1. Use r.SaveShaderCache command on device to save current cache to file, which then you can include into your game package.


  • Vulkan pipeline caches will need to be regenerated via the r.Vulkan.SavePipelineCache console command. Previous cache files are no longer compatible.


  • Bug Fix: Fixed a bug in GameplayTasks processing that could result in bloating of the UGameplayTasksComponent::KnownTasks array.


  • Bug Fix: FindUID no longer returns a pointer, any code calling it will need to be changed


  • New: To implement the source bus feature, we needed to split out volume attenuation vs distance attenuation. The bus audio needs to be mixed pre-distance-attenuation to avoid getting double-attenuated as the audio is output from the buses. This added some complexity with volume setting/getting in higher level code so if you were retrieving volume of playing sounds for a custom C++ feature, you may want to look at new volume getters and setters. To help with this, we made all volume setting and getting private to wave instances (FWaveInstance).


  • Functions that returned random unit vectors from within cones (whether this required a stream or not) have now been refactored into degree- and radian-based counterparts. The suffix “With yaw and pitch” has also been replaced with “Elliptical” for brevity.

  • Where a *single* half-angle used to be required to specify the cone, the new **radian-based** function should be substituted; however, where *both* yaw and pitch were provided, the new **degree-based** function should be used instead. For example:
    • Calls to RandomUnitVectorInConeFromStream() should be replaced with RandomUnitVectorInConeInRadiansFromStream().

    • Calls to RandomUnitVectorInConeWithYawAndPitch() should be replaced with RandomUnitVectorInEllipticalConeInDegrees().

    From this point onward, the inconsistency in units between the elliptical and non-elliptical functions should be mitigated, as the degree or radian variants can now be used as appropriate.
  • If you have a custom build pipeline that relies on UAT BuildCookRun automation for cooking and/or building, note that in 4.18 it is no longer necessary to specify the -nativizeAssets flag to enable Blueprint nativization.

    • Instead, UAT now looks at the value of the “BlueprintNativizationMethod” setting in DefaultGame.ini. This can be set by the user in the Editor UI in the Project Settings->Packaging section. If that value does not exist in DefaultGame.ini, then the value is assumed to be “Disabled” (off).

    • You can override the setting by including the following on the UAT command line: “-ini:Game:[/Script/UnrealEd.ProjectPackagingSettings]:BlueprintNativizationMethod=<Disabled|Inclusive|Exclusive>”, replacing the “<Disabled|Inclusive|Exclusive>” substring with one of those 3 available options.

    • Similarly, if your build pipeline calls UE4Editor.exe directly (for cooking) and/or UnrealBuildTool.exe directly (for building), the same holds true for those tools as well. You can also override the setting by including the same argument as noted above on each of their command lines, respectively. In that case, you’ll need to ensure that both tools are specifying the same nativization method in their command lines.


  • New: To disable array reordering, use the metadata flag EditFixedOrder on the TArray.

  • Developers can now register a delegate with SlateApplication to tell when a window’s DPI changes

  • The new port is set by default to 17777, which may conflict with projects that have hardcoded their ports when playing in editor.


  • New: UTexture::GetMaterialType is now const

Gameplay Framework

  • New: As part of the cross-level actor references change, several types and headers were renamed:

    • FStringAssetReference is now FSoftObjectPath

    • FStringClassReference is now FSoftClassPath

    • TAssetPtr is now TSoftObjectPtr

    • TAssetSubclassOf is now TSoftClassPtr

    • StringAssetReference.h/StringClassReference.h is now SoftObjectPath.h

    • AssetPtr.h is now SoftObjectPtr.h

    Including the old headers will give compiler warnings. The old type names are not officially deprecated because many games will have a large number of them, but they should be fixed up as well.
  • ComponentToWorld can no longer be directly accessed; use GetComponentTransform() instead.


  • Messaging: If you use the common helper classes, replace “Messaging” with “MessagingCommon” in your Build.cs files and remove the “Helpers/” subdirectory from your include statements (unless you actually include header files from “Messaging”, in which case you need to keep “Messaging” and add “MessagingCommon”).


  • IOnlineIdentity::GetPlatformUserIdFromUniqueNetId is now const


  • This can be enabled via ‘Android.EnableSustainedPerformanceMode’ Cvar.


  • ObjC exceptions default to off, if they are required then set bForceEnableObjCExceptions = true in your ModuleRules.

  • To enable add the following line to your IOSRuntimeSettings config:

  • bDisableForceInline=true


  • New:

    • UTexture2D::RequestedMips was removed and should be replaced by GetNumRequestedMips*()*

    • UTexture2D::ResidentMips was removed and should be replaced by GetNumResidentMips()

    • UTexture2D::PendingMipChangeRequestStatus was removed and streaming status should be handled through HasPendingUpdate() and IsReadyForStreaming()


  • If you maintain a custom VR plugin that needs to allocate its own render targets, you now need to move the methods out of your IStereoRendering implementation into a IStereoRenderTargetManager implementation. You can reduce the amount of duplicate code by extending FXRRenderTargetManager instead of implementing the interface directly.

  • Bug Fix: A receipt based system was added to request an override of the social screen mode to mirroring so that system dialogs are visible on the social screen, or potentially for other reasons. HMDSetupDialog is the only current use of this system.


  • Removed unused member variable (FArchiveAsync2::bKeepRestOfFilePrecached)

  • Removed FPackageFileSummary’s CompressedChunks array as it was no longer being used by anything.


  • APEX Destruction has been moved to a plugin and is now disabled by default. To enable the plugin, use the Plugin Manager (Edit > Plugins > Physics).


  • The support code for running the Unreal Engine 4 Editor & Games on Mac OS X 10.11 El Capitan has been removed. The minimum macOS version required for Unreal Engine 4 is no MacOS 10.12.6 Sierra. This was necessary due to the number of Metal features absent from Mac OS X 1.11 that are now required for Unreal Engine 4.


  • Deprecating support for the Editor running in Shader Model 4

    • This release we will be deprecating support for running the Editor while using Shader Model 4. This mainly affects users with only DirectX 10 capable graphics cards. Starting on the next release we will require a Shader Model 5 (DirectX 11/OpenGL4/Vulkan) capable card.

  • Deprecating support for the games running in Shader Model 4 for Open GL

    • This release we will be deprecating support for running the game while using Shader Model 4 on OpenGL for both Windows and Linux. Starting on the next release we will require a Shader Model 5 (OpenGL4) capable card.

Mobile Rendering

  • The Android OpenGL ES deferred renderer has been removed.


  • CrashReporter has been removed from the public UnrealEngine distribution until it can be adapted to a more scalable solution that is usable by subscribers and licensees.


  • Deprecated the BuildConfiguration and UEBuildConfiguration aliases from the ModuleRules class. These have been implemented as an alias ot the ReadOnlyTargetRules instance passed to the constructor for several engine versions.

That’s sooooo great. Thanks for doing great.
I just updated the newest from 4.18 preview 4. And I got some small issues. Some of my modular synths did’t work in the newest version. And when I build lighting quality, there is some issues, either. But others are all great. Thank you.

■■■■, this is epic work! :smiley:

Very sweet update, thanks Epic!

Question: “Volumetric lightmap Does not currently support level streaming” - does it mean no level streaming at all or no streaming of level pieces in the current level ?

OMG, the rearranging of Arrays! I’m so happy with this change!!! Thanks team Epic for all the great work!

woooo awesome update!!! tons of bug fixes great work!

I am eager to try to use this Volumetric lightmaps in a VR Experience, looks like a great solution to really get amazing visual with low performance cost…

Good work Epic, can’t wait for more AR updates that unite Apple and Googles implementation into somthing more platform indepenent.

Amazing realease.

Great job Epic teams :cool:

Great work!

Any news on being able to add UMG on VRSpectator Screen?

Quick Question. Why does VS:Code need .NetCore and the C# extension for a C++ project?

Fix OP typo:

Hi, i switched to VS Code or tried to, and it doesnt work, i dont get any autocomplete, i cant build or debug, and after project restart it asks me to rebuild my project.dll and it fails to do build it now i cant access my project anymore??

Very nice, congrats.

Very nice changes. Cheers.

bug report: 4.18 release source compile failed - Platform & Builds - Epic Developer Community Forums

Git Plugin Changelog for UE 4.18:

  • Git plugin: fix action icon in history window #3897](.com/EpicGames/UnrealEngine/pull/3897)
  • Git plugin: add “branch source” in history window #3933](.com/EpicGames/UnrealEngine/pull/3933)

Currently it doesn’t support any streaming at all, which doesn’t scale up to huge levels. You can either raise the Detail Cell Size or switch back to the old method for huge levels.

I don’t see the update yet on 24 October, should I restart my PC or something else? I have already quick and restart Epic Launcher but did not help.

You will need to click the “+ Add Versions” option to create a new engine slot, and choose 4.18.0 for the release version.