What's NewUnreal Engine 4.16 includes exciting new rendering and animation features, significant performance improvements for mobile and console platforms, and tons of quality of life enhancements that will make it even easier to make stunning environments and engaging experiences that run smoothly on a wider variety of platforms.
Enhance the mood of your environments using the amazing new Volumetric Fog feature, which can be enabled to automatically render realistic fog and smoke effects with consistent lighting anywhere in a scene, even at a large scale.
Breathe life into your characters using new dynamic lightweight rigid body and low level cloth simulation tools! Take greater control of the flow of movement using Animation Modifiers, spline IK solver, updated Pose Driver, and many other improvements to the Animation system.
Garbage Collection is now twice as fast! UI rendering performance and UMG widget creation speed are vastly improved to enable you to create even more compelling interfaces. Interfaces and workflows for VR Mode, Animation, Sequencer, and other tools have been updated to make your development process more streamlined than ever before.
Support for Nintendo Switch is fully-featured and ready for production in 4.16! Epic Games has teamed up with Nintendo to release the full UE4 source code for Nintendo Switch to approved developers for free. To learn more about how to get started, read more here.
DirectX 12 is now the default renderer for Xbox One, bringing both performance and feature enhancements to platform support in the engine. In addition, you can now develop HTML5 games using WebAssembly and WebGL 2, and this new path will continue to improve in UE4.
For mobile, the Android virtual keyboard is now supported, and runtime permissions have been exposed to both Blueprint and code. Plus, we have made even more strides to reduce executable sizes for mobile apps!
In addition to hundreds of updates shipping from Epic, this release includes 160 improvements submitted by the incredible community of Unreal Engine developers on GitHub! Thanks to each of these contributors to Unreal Engine 4.16:
0lento, Akihiro Kayama (kayama-shift), Alice Robinson (Valkrysa), Altrue, Andreas Rønning (Sunjammer), Andrew Gaubatz (e-agaubatz), Angus Jones (crumblycake), Artem V. Navrotskiy (bozaro), Black Phoenix (PhoenixBlack), Cedric Neukirchen (eXifreXi), Cengiz Terzibas (yaakuro), Chris Varnz (chrisvarns), Christopher P. Yarger (cpyarger), Damian Nowakowski (zompi2), DarkSlot, DeanoC, Derek van Vliet (derekvanvliet), devbm, dodgyville, drelidan7, Gabriel Lima (Gabriel-Lima-O), Gyeonghwan (conquests), Hao Wang (haowang1013), Ilya (ill), Jackblue (JohnsonJackblue), James Horsley (mmdanggg2), Jeff Rous (JeffRous), Jon Watte (jwatte), Jørgen P. Tjernø (jorgenpt), jostster, Kalle Hämäläinen (kallehamalainen), katze7514, Kevin Kuegler (FrostByteGER), KrisRedbeard, looterz, Manmohan Bishnoi (manmohanbishnoi), Marat Radchenko (slonopotamus), Markyroson, Martin Treacy-Schwartz (the1schwartz), Matt Edmonds (cleaver404), Matthew Casey (mdcasey), Matthias (haimat), Matthias Hölzl (hoelzl), Matthias Huerbe (MatzeOGH), Michael Schoell (MichaelSchoell), Michał Siejak (Nadrin), Milan Šťastný (aknarts), Moritz Wundke (moritz-wundke), Mustafa TOP (MSTF), Narendra Umate (ardneran), Nathan Stocks (CleanCut), NaturalMotionTechnology, Nick Verenik (nverenik), Paul Murray (awesomeness872), pfontain, Phil Christensen (Rastaban), PrimalJohnScott, projectgheist, Rafael Ortis (rafortis), Rajko Stojadinovic (rajkosto), Rama (EverNewJoy), rhughesgeomerics, Ricardo Rodrigues (RicardoEPRodrigues), Robert Hagglund (hagglund), Robert Segal (robertfsegal), Ryan Pavlik (rpav), sangpan, Sanjay Nambiar (sanjay-nambiar), Satheesh (ryanjon2040), Sean Campbell (scampVR), Sebastian Axinte (ENiGMA9), Sébastien Rombauts (SRombauts), SiebenCorgie, Stefan Zimecki (stefanzimecki), StefanoProsperi, Stephen Johnson (megasjay), TaeYoung Cho (valval88), Timothee Besset (TTimo), Timothy Hagberg (thagberg), Tom Kneiphof (tomix1024), Tom Ward (tomwardio), TRS-justing, unwitherer, Vladimir (VladimirPobedinskiy), Vladimir Alyamkin (ufna), wyhily2010, Yaroslav Shmelev (SoulSharer), yeonseok-yi
New: Volumetric FogCreate incredible ambience and mood in your environments using the new Volumetric Fog! Varying densities are supported so you can simulate clouds of dust or smoke flowing through light shafts, and any number of lights can affect the Volumetric Fog.
Volumetric Fog supports lighting from:
- A single Directional Light, with shadowing from Cascaded Shadow Maps or static shadowing, with a Light Function
- Any number of point and spot lights, with dynamic or static shadowing if 'Cast Volumetric Shadow' is enabled
- A single Skylight, with shadowing from Distance Field Ambient Occlusion if enabled
- Particle Lights, if 'Volumetric Scattering Intensity' is greater than 0
For information on setting up Volumetric Fog, see the documentation.
New: Image-Based (FFT) Convolution for BloomCreate physically-realistic bloom post-process effects using the new image-based (FFT) convolution feature! Unreal Engine 4.16 ships with a FFT Bloom that empowers artists to use custom bloom kernel shapes, with total control over the intensity in order to match the results they imagine.
By using a mathematical convolution of the source image with a kernel image, this bloom technique can produce a continuum of responses ranging from star-like bursts to diffuse glowing regions. The additional realism generated by the image-based convolution is the result of its ability to use visually interesting, non-symmetric kernel images. It generally looks like a star-burst with radial streaks, but could include eyelash silhouettes, bokeh or other artifacts.
Note: Image-based convolution Bloom is designed for use in cinematics or on high-end hardware, while the pre-existing (standard) Bloom should be used for most game applications.
New: Distance Field Lighting OptimizationsDistance Field Ambient Occlusion and Ray Traced Distance Field Shadows are now 30-50% faster on current generation consoles and mid-spec PC! These features allow for more realistic ambient lighting and area shadows on dynamic meshes in your scene.
In addition, static mesh Distance Field Generation is 2.5 times faster, thanks to acceleration from Intel's Embree ray tracing library. Memory usage is also significantly reduced when enabling the Eight Bit Mesh Distance Fields and Compress Mesh Distance Fields project settings.
New: Lightweight Rigid Body SimulationCreate hordes of physically-simulated characters with the new lightweight rigid body character simulation! You can now simulate a Physics Asset inside your Animation Blueprint using a new high-performance immediate mode PhysX API. Characters using this simulation can also generate collision with static geometry in the world.
New: Low-level Clothing SimulationGain more control over clothing simulations using the new low-level NVIDIA NvCloth clothing solver! We have replaced the APEX clothing solver with a lower level solution called NvCloth from NVIDIA. The new solver is similar to the core solver of the previous APEX solution with few slight behavior changes, and it provides better access to the simulation data and extra exposed parameters for inertia settings.
New: Release Games on Nintendo Switch!Registered developers can now build and release games for the Nintendo Switch! Unreal Engine 4's production-ready Nintendo Switch support is certification compliant, enables networked multiplayer, and provides access to multiple rendering pipelines - deferred, mobile forward, and clustered forward - to enable you to ship virtually any type of game for Nintendo Switch.
New: VR Mode UI and Interaction UpdatesVR Mode in Unreal Editor has been overhauled to provide a more intuitive workflow and editing experience!
A new asymmetrical controller setup puts a new and improved Radial Menu on one hand and an interaction laser with improved precision on the other to make working with objects in your level quick and easy.
All VR Mode actions, including all major editor features and UI panels, are now accessed from the updated Radial Menu. Teleport has been updated so that you can instantly move to a location and resize to the default scale to see the player's perspective as well. For more information, see https://docs.unrealengine.com/latest/INT/Engine/Editor/VR/GDC2017/
New: Edit Sequences in VRThe Sequencer cinematics editor is now available in VR! You can create a new sequence and move objects around your level - and in the process automatically create sequence keys for their transforms. By scrubbing through time and setting these keys, you can create cinematic sequences and play them back, all inside VR. You can also open existing Level Sequences and play them back, either from the Sequencer UI or from the Radial Menu.
- New! Adjustable keys allow you to physically adjust your trajectories in the world!
- The Scrub Time option in the Radial Menu takes thumbstick or touchpad input as the speed with which to play your Sequence backwards and forwards. Press the trigger again to exit Scrub Time mode.
New: Physics Simulation in VR ModeYou can now simulate physics Actors in VR Mode using the motion controllers to interact with objects! Place Actors set to simulate physics and let the physical simulation run to get a realistic scattering or to knock Actors around with the motion controllers.
New: Smart Snapping in VR ModeSmart snapping uses the bounds of your object to align to other Actors in the scene, enabling you to exactly fit them together without needing to build modular assets with a grid in mind. This feature is currently only available in VR Mode, but we'll add support for desktop editing in a future release.
New: Xbox One Renders with DirectX 12DirectX 12 is now the default renderer for Xbox One! We've made a number of stability and performance improvements in DirectX 12. This allowed us to enable it as the default RHI bringing CPU and GPU performance improvements for titles developed for Xbox One.
Switching back to D3D11Titles that need to switch back to D3D11 will need to do the following:
- Modify bBuildForD3D12 in your title's defaultengine.ini
- Rebuild your game for Xbox One
- Recook content
New: HTML5 Support for WebAssembly and WebGL 2Unreal Engine 4 now supports the new WebAssembly standard (also known as WASM) for HTML5, the fastest and most efficient way to compile and run C++ for the web! We are using Mozilla's latest Emscripten toolchain (v1.37.9). This is a new technology and not supported on all browsers, so it is considered an Early Access feature, and requires GitHub access.
UE 4.16 also adds support for WebGL 2.0 which is based on OpenGL ES 3.0 and provides more optimal rendering performance, increased visual fidelity, and support for more rendering features, including:
- Most features of UE4's high-end mobile feature level
- Instanced Geometry Drawing for particles and foliage
- Support for Multiple Render Targets (MRTs)
- Texture features such as 3D or volume textures, 2D array textures, and no more non-power-of-two texture restrictions
You can enable WASM and WebGL 2.0 in the Emscripten section of the HTML5 Project Settings. If you require the broadest browser support possible, continue to use ASM.js and WebGL 1. Support for ASM.js and WebGL 1 will be deprecated in an upcoming engine release, and then removed afterwards (exact timing is dependent on additional browser support).
For a LIVE DEMO: try out Zen Garden on HTML5 to see these benefits first-hand in your own Firefox or Chrome browser (supported versions listed above).
New: 2x Faster Garbage CollectionGarbage collection performance has been significantly improved and is now more than twice as fast! Specific improvements include:
- Reachability analysis multithreading has been redesigned to reduce the overhead of task management.
- Garbage Collection clustering now supports Blueprint-generated classes and selected Actor types.
- UObject unhashing code has been optimized to reduce the time spent destroying Actors.
New: Kinematic Bodies with Simulated ParentsWe've added the ability to have kinematic physics bodies with simulated parents. You can now have child bones, such as the character's hands, purely driven by animation data, while the parents of those bones can also be driven by physics simulation data. This enables cool effects such as the player scaling a ledge reacting to falling rocks colliding with its body!
New: Platform SDK UpgradesIn every release, we update the engine to support the latest SDK releases from platform partners.
- Visual Studio: Important: Visual Studio 2013 is no longer supported on Windows with this release. Please upgrade to either Visual Studio 2015 or Visual Studio 2017.
- Nintendo Switch: supports Nintendo SDK 1.3.1
- Xbox One: Built against the October 2016 QFE3 XDK
- PlayStation 4: Upgraded to PSR SDK 4.508.001 SDK
- Android: Updated CodeWorks for Android 1R6u1
- GoogleVR: Updated plugin to version 1.3
- GoogleVR: SDK updated to 1.40.0
- GoogleVR: Mode default changed to Daydream & Cardboard
- Vulkan: Updated distributables and glslang to SDK 184.108.40.206
New: Sequencer Shot Track EnhancementsShot Tracks in Sequencer gain several improvements for both cinematics and film creation!
- Hierarchical bias per shot: By default, tracks at a lower level in the level sequence hierarchy take precedence. This allows filmmakers to build a pipeline they're accustomed to, where adjustments at the shot override tracks in the sequence they're contained in.
- Exposed "When Finished" property for all tracks: This gives the user the ability to specify whether tracks should return values to their pre-animated state or keep them when the sequence finished. In a film production environment, you would typically want animated values in a shot to return to their pre-animated state so that they don't bleed into the next shot. In a cinematic, you might want the value to persist so that you could continue into the game from the sequencer animated state.
- Pre/post roll: Pre and post roll is now a general concept for all tracks. Some tracks have specific behaviors, for example the camera cuts track will notify the streaming system with the upcoming camera cut position in the pre-roll evaluation period.
New: Animate Material Parameter Collections in SequencerYou can now animate Material Parameter Collections in Sequencer giving you total control over animating scalar and vector parameters which can be referenced in any number of Materials. You no longer have to animate individual parameter values on each material instance in order to share animation.
New: Improved UI Rendering PerformanceGames that use Invalidation Panels now have an option to cache only widget elements rather than render data, enabling them to benefit from much improved texture batching and significantly reduces draw calls. The result is a big performance boost on mobile devices!
On the Battle Breakers hero selection UI (shown above), each hero's logical elements are cached but can also be batched together. The console variable Slate.CacheRenderData=0 enables this mode, which is now the default on mobile devices.
New: Improved Animation Pose DriverWe have made many improvements to the Pose Driver feature, which enables you to procedurally drive blend shapes or bones, by comparing the pose of a set of bones to a set of reference 'targets'. This is particularly useful for areas like shoulders, where you may want to activate corrective morph targets depending on the pose of the upper arm and shoulder.
- You can now select multiple bones as 'inputs' to read a pose from
- You can now pick which bones should be modified by the node
- You can specify a 'custom curve' for how each target should be activated
- Can choose to drive curves (morphs, material) directly, instead of needing a Pose Asset
- UI is improved to allow creation/editing of target poses, bars to show target activation, etc.
- Target locations in viewport can now be clicked to select them
New: Opacity and Opacity Mask for Material FlatteningWe have added support for baking out opacity (mask) values when using the Actor Merge Tool or Hierarchical LOD system. The resulting (instanced) material uses your configured blend mode to ensure it follows the correct render path. Here's an example of a baked out masked material:
New: Improved Mesh Paint ToolThe mesh painting system has been overhauled to improve usability and clarity, and to allow for reusing the functionality in other parts of the Editor. Also, the painting tools can now be used on skeletal meshes! Note that painting is not per-instance (as with static meshes) but is applied directly to the skeletal mesh asset(s).
New: Spline IK SolverA spline IK node that is useful for controlling character spines or bone chains has been added to Animation Blueprints!
New: Detect Material on Mesh SurfacesWe've added a new 'Get Material From Face Index' function for Components which enables you to retrieve the Material applied to a Component after performing a (complex) Line Trace. This is supported for Static Meshes, Procedural Mesh Components, and BSP.
New: 'Look At' Animation Node ImprovementsThe Look At Location property of a Look At node can now be used relative to a bone or socket. Previously this value was ignored when you specified a bone or socket. The visualization for Look At controls is also improved. For example, you can see the clamp angles, target location, interpolation and so on.
New: Animation Export ImprovementsWe added support for creating and exporting animations that include additional animation data generated from a post-process graph assigned to the Skeletal Mesh, such as Anim Dynamics for physics simulation.
To include this additional data, choose Preview Mesh from the Create Animation or Export Animation menus.
New: Unreal Audio Engine (Early Access Preview)The new Unreal Audio Engine announced at GDC is available in early access on PC, Mac, iOS, Android, and Switch. It includes a cross-platform audio mixer with full backwards-compatible support for the existing audio engine feature set, including a new multiplatform EQ and Reverb master effects. In addition, the new Unreal Audio Engine introduces new features such as a submix graph, submix effects, source effects, real-time synthesis, and better audio plugin support.
The new Unreal Audio Engine is not enabled by default in 4.16 as there is continued work on implementing backends for console platforms, Linux, and HTML5, as well as stability and performance improvements, especially on mobile platforms.
To enable the audio mixer, use the command line argument "-audiomixer".
Note: Most new Unreal Audio Engine features are hidden if you launch the editor without the audio mixer enabled.
New: Synthesis Plugin (Early Access)The new synthesis plugin contains two new real-time synthesizers written using the new Unreal Audio Engine's "SynthComponent" class to implement a fully-featured subtractive synthesizer as well as a real-time granulator. These new synthesizers are not only useful tools for procedural music and sound design, but they serve as an example of how third-party plugin manufactures and even sound designers might implement their own synthesis. The synthesis plugin also contains a host of new DSP source and submix effects for use with the new Unreal Audio Engine:
- Source Effects: Stereo Delay, Bit Crusher, Dynamics Processor, Envelope Follower, EQ Filter, Virtual Analog Filter (Ladder/State Variable), Wave Shaper, Chorus, Phaser
- Submix Effects: Reverb, EQ, Dynamics Processor
New: Steam Audio (Early Access)Epic and Valve have teamed up to release the first fully-integrated implementation of the Steam Audio SDK using the new capabilities of the new Unreal Audio Engine.
Steam Audio fundamentally integrates with the new Unreal Audio Engine's spatialization, occlusion, and reverb systems to bring next-gen physics-based audio experiences to UE4 for VR. This is an early access version of Steam Audio with significant updates, more example projects, and workflow improvements planned for 4.17. Epic and Valve welcome any feedback, questions, or ideas for improvements.
See https://valvesoftware.github.io/steam-audio/for more information, documentation, and support help about Steam Audio.
New: Improved Color Grading ToolThe Color Grading user interface is improved to make it easier to use!
- A new HSV mode was added.
- You can now dynamically change the min/max value of the sliders depending on their type using Ctrl+Slider Drag.
- A new reset button was added to reset a whole color grading category. (i.e Global, Shadows, Midtones, Highlights)
New: Improved Animation Blend Space EditorThe Blend Space Editor now enables you to display Animation names for each sample using the Show Animation Names button inside of the grid. You can now also drag and drop animations on top of existing samples to replace them.
New: String Tables for LocalizationUE4 now has support for localized String Tables!
String Tables provide a way to centralize your localized text into one (or several) known locations, and then reference the entries within a string table from other assets or code in a robust way that allows for easy re-use of localized text. String Tables can be defined in C++, loaded via CSV file, or created as an asset.
New: Animation Modifiers (Early Access Preview)Animation Modifiers enable you to apply a sequence of actions to a given Animation Sequence or Skeleton, such as pin-pointing on which frame(s) the right foot is placed on the ground and adding Animation Sync Markers to the frames where the ball_r bone is at its lowest point (touching the floor). A new set of functions to access specific animation data are available in the Animation Blueprint function library. Accessing and applying Animation Modifiers is done through a new tab which can be found in the Skeleton Editor and Animation Editor. Animation Modifiers can be added to a Skeleton or Animation Sequence. For Animation Sequences, the Animation Modifier is only applied to the sequence itself. When applied to a Skeleton, it is applied to all Animation Sequences which are based of the Skeleton.
New: Virtual Keyboards on Android (Early Access Preview)Android now supports using the operating system's virtual keyboard in place of the popup dialog input box!
Use of the virtual keyboard is enabled by checking the checkbox under Project Settings > Platforms > Android > APK Packaging. This option enables basic support for the virtual keyboard, but your application is responsible for ensuring input elements are visible and not obscured behind the virtual keyboard using the supplied OnVirtualKeyboardShown and OnVirtualKeyboardHidden event handlers. Note: You may wish to disable the virtual keyboard with the Android.NewKeyboard console variable when the user is using a language requiring IME.
Support for Runtime Permissions on AndroidUnreal Engine 4 now supports Runtime Permissions as required by Android 23 and later to access features requiring permissions categorized as dangerous by Google. These include access to contacts, photos, phone state, external storage, camera, and location services. See this webpage for details: https://developer.android.com/guide/topics/permissions/requesting.html.
If targeting Android 23, the Android Runtimes Permission plugin now provides the ability to check at runtime in native code or by using the Check Android Permission Blueprint node if a permission is already granted. If the permission has not yet been granted, the app may request it from the user using the Request Android Permissions Blueprint node and then get the result using an event bound to On Permissions Granted Dynamic Delegate. This allows permissions to be granted just before the game requires functionality needing a permission, improving the user experience. When targeting versions prior Android 23, permissions are granted by specifying them in the Android Manifest as usual.
Note: 4.16 requires Android SDK 23 or higher to be installed. If you don't have this SDK level installed, you can find the CodeWorksforAndroid-1R6u1 installer in your Engine/Extras/AndroidWorks directory. Also, under "Project Settings", Android SDK, please change your Android SDK API Level from matchndk to œlatest. This will ensure UE4 will use the newest installed SDK found in your Android SDK platforms directory. There is no need to change the NDK API Level; android-19 is correct to allow installing your APK on Android versions prior to Lollipop (Android 5.0); setting this higher will cause your app to require Android 5.0+.
Shader Code Library to Reduce Package SizeYou can now enable a shared storage location for all shader code using the Share Material Shader Code project setting, resulting in a single copy being stored for Materials or Material Instances that generate the same shader code.
Some platforms such as Metal on iOS, TVOS and MacOS support a more efficient platform-specific shader library. Enabling the Shared Material Native Libraries project setting will further reduce the package size by utilizing this native library format.
New: Import Capsule Collision from FBXYou can now import capsule simple collision from an FBX file, in the same way you could already import box, sphere, and convex simple collision. You now use the 'UCP' prefix on a capsule poly mesh, and it will be removed on import, and replaced by a corresponding capsule collision shape.
New: Separate Options for Shared vs Local Asset Viewer ProfilesUnreal Editor now enables you to store asset viewer profiles on a shared or local level, making it possible for teams to have a shared set of profiles which can be used as a unified scene to assess art assets. Storing profiles at a local level ensures that a user can still have a custom set of profiles he prefers to use local but are not required by the team. Shared profiles are stored in DefaultEditor.ini and will require you to check out or make it writable.
New: Improved Animation Preview ScenesWe made several improvements to preview scenes for the Animation Tools:
- Preview scene settings have been moved to the existing settings tab, rather than in a hidden menu in the viewport. This settings tab is now shown by default.
- Added a shortcut to quickly switch preview mesh to the main toolbar. This applies to all animation editors.
- When editing preview scenes, you no longer have to create a "preview scene collection" asset just to preview extra meshes. If you are happy with your mesh setup you can now optionally save it to an asset.
New: Add Default Camera options to Anim ViewerYou can now save a 'Default Camera' position for a Skeletal Mesh. This is used when opening the mesh, and can also be jumped do by pressing Shift+F.
New: Play Montage Blueprint NodePlay Montage is a new asynchronous node which can be used in any Blueprint logic to play Anim Montages. It provides easy access to some callback events, letting you trigger other nodes when a montage blends out, is interrupted, etc...
- OnCompleted is called when the Montage finishes playing and it fully blended out.
- OnBlendOut is called when the Montage is starting to Blend Out, either because it's stopping automatically or manually.
- OnInterrupted is called if the Montage is starting to Blend Out, but because it's been interrupted by another Montage playing.
- OnNotifyBegin and OnNotifyEnd are callbacks when using either 'Play Montage Notify' or 'Play Montage Notify Window' Anim Notifies in the Montage asset. These AnimNotifies can forward an additional 'Notify Name' to differentiate between multiple callbacks from the same Montage.
New: Added Options For Retargeting PosesYou can now import a pose from a Pose Asset to use when setting the Retarget Base Pose. Previous options of modifying and saving the current pose (Use Current Pose) and of resetting bone transform to reference pose (Reset) are still available as well.
Note: You can create Pose Asset in the animation editor and insert any pose to the pose asset with a name assigned.
New: Collision View Option In Static Mesh EditorThere are now separate options for viewing Simple and Complex Collision for a StaticMesh in the StaticMesh Editor tool.
New: Baked Poses in LODsUnreal Engine 4 now supports baking a pose into a LOD level using a new reduction setting called Bake Pose. This can be set to a single frame anim sequence which will be applied to the resulting LOD mesh. This can prove useful when removing bones and still wanting to retain a pose. Note: This feature requires Simplygon
New: Sequencer User Interface ImprovementsThumbnails for Audio Tracks now render the peak samples with an inner (smoothed) RMS curve. Audio Tracks can also be resized vertically!
Other Sequencer UI Improvements:
- Sequencer controlled actors will now tick properly when streamed into a level.
- You can now specify additional event receivers (ie. actor blueprints) for the event track.
- Bindings improvements. You can now drag/drop/set bindings for the level sequence in blueprints. For example, you can spawn an object in blueprints and assign that to an existing track.
New: Mobile VR Rendering ImprovementsDirect multiview is now supported for Samsung Gear VR, removing an extra render target and full screen copy when using mobile multiview which improves overall performance and reduces memory usage.
Monoscopic far field can now be used with multiview enabled on Gear VR ensuring the stereo rendering portion of your scene is rendered optimally.
Google Daydream supports standard mobile multiview with direct support coming in a future release.
New: Social Screens for PlayStation VR (Early Access Preview)PSVR Social Screen preview provides support for Social Screen separate mode, where the the Monitor and HMD display different things.
This preview supports 30fps Social Screen output, and switching between several output modes. The following sample modes are implemented:
- SystemMirror (this is the default mirror mode that has always existed).
- SeparateTest (simply alternates between black and white on the social screen).
- SeparateTexture (displays a blueprint specified texture, for example a render target beting written to by a scene capture component).
- SeparateMirror (displays the full vr render buffer)
The new PSVR project setting bEnableSocialScreenSeparateMode must be set to true to use this feature. When that is true additional screen buffers will be allocated for the social screen. Blueprint functions for controlling the feature can be found by searching for 'SocialScreen'.
New: Android Executable Size ReductionWe have made a number of optimizations to the compiler and linker settings to reduce the size of the Android binary executable. Checking the Build with hidden symbol visibility option allows the linker to more aggressively remove unused code from Unreal Engine when generating the Android executable. This also strips the function symbols from the symbol table further reducing the executable size. We are seeing reductions of around 7MB from the final APK.
Note: This option removes symbols from the binary on the device, so a native crash call stack will appear in the logcat output without any symbols. To facilitate debugging, the build system will also copy an unstripped binary with debug symbols to the output directory, and also generate a batch file that adds symbols to a call stack.
New: Vertex Interpolator Material Expression NodeVertex Interpolator nodes have been added to the Material graph offering better control for value interpolation between vertex and pixel work. These are intended as a workflow improvement, there are no changes to interpolator limits nor will shaders change.
The existing workflow for offloading work to a vertex shader is by making use of the Customized UV outputs. This can be a little cumbersome and involves manually packing your data. The example material below packs the pre-skinned mesh data then unpacks it for use in an effect:
The new interpolator node handles packing automatically, allowing the graph to be simplified and in-lined:
Work that would previously be packed through Customized UVs is hooked up to the VS (vertex shader) pin and retrieved from the PS (pixel shader) pin.
The material stats output has been updated to show the current interpolator usage, both currently packed and available maximum. Note how in the above examples the instruction counts and interpolator usage remain constant. The stats show 2 scalars are reserved by the TexCoord node and the remaining 6 by our pre-skin data, giving a total of 8 scalars packed across 2 vectors.
The feature is compatible with Customized UVs and will pack results together.
New: Asset Management Framework (Early Access Preview)The Asset Manager is a new global object that can be used to discover, load, and audit maps and game-specific asset types in the editor or at runtime. It provides a framework to make it easier to create things like quests, weapons, or heroes and load them on demand. It is is still under active development, and these features will not be ready to be used by Blueprint-only games or inexperienced developers until 4.17. The Asset Manager tab in Project Settings can be used to set up the rules for your game: Primary Asset Types that are scanned by the Asset Manager can be queried at runtime before they are loaded, and can then be asynchronously loaded on demand. Also, the Asset Manager settings can be used to set up cook and chunk rules when packaging and releasing a game. In progress documentation for this feature is available on AnswerHub: https://answers.unrealengine.com/questions/595580/what-is-the-asset-manager.html
New: Asset Audit Window (Early Access Preview)Built on top of the Asset Management Framework, the Asset Audit window can be used to audit disk size, memory usage, and general asset properties for many assets at once. It is a specialized version of the Content Browser, and can be accessed from the Window > Developer Tools menu, or from the right-click menu in the Content Browser or Reference Viewer. Once you have opened the window, assets can be added using the buttons, and platform data loaded out of cooked asset registries can be loaded using the platform drop down. Here's an example of auditing textures from the Shooter Game sample on PS4:
VR: Unified Console Commands for VRWe've consolidated and unified console commands across VR platforms to create a shared layer that developers can work from rather than maintaining each platform independently.
This provides several benefits:
- Bootstrapping new platforms is easier.
- Argument meanings across HMDs are more consistent.
- Current HMD implementations have less redundancies.
- All VR-related console commands share a common prefix, "vr.". Vendor-specific extensions are clearly marked as such in the command name itself.
- The updated console commands support tab completion and inline usage help texts.
Custom Hardware CursorsPlatform native custom hardware cursors are now supported on Windows, Mac and Linux! You can set up the hardware cursors to use in the UserInterface settings for the project.
The system allows you to provide multiple formats for the cursors. For instance, in the settings you could specify you want the "Slate/FancyPointer" to be your default pointer. In the Slate directory of your game's content folder, you could have a FancyPointer.png + .cur + tiff, to cover the multiresolution capabilities of certain platforms. The tiff would be loaded on Mac, the cur/ani file would be used on Windows, and in case a platform specific format is not found that we support, we look for a png.
Fast CreateWidgetUMG widget creation is now up to 3 times faster! When cooking, the widget compiler now generates a widget template/archetype that is stored in the same package as the generated Blueprint Class and used during widget creation.
During compiling, we generate a nearly fully initialized widget tree including all sub User Widgets and their trees, hookup all member variables, initialize named slots, setup any animations, etc. This nearly fully constructed widget can be instanced using it as an archetype, and does not have to use the correspondingly slow StaticDuplicateObject path.
There are restrictions on this method, part of the compiling step for widgets now inspects if the instancing would be successful, or if there would be GLEO references after instancing because a user forgot to setup Instanced on a subobject property. Luckily that should be few and far between since all UVisuals (Widgets & Slots) are now DefaultToInstanced, which takes care of the overwhelming cases that demand the instanced flag. Especially given the bulk of cases using BindWidget in native code.
- New: Added a profiler for Environment Query System (EQS) that can be accessed through the tabs of the EQS Editor.
- It collects data automatically during game sessions as long as UES_EQS_DEBUGGER define is set. This includes options for average and max execution time of each step (including breakdown of composite generators), number of items processed by each step, and average frequency of running, which can be useful to identify how often fail safes are actually running.
- It collects tick load data when USE_EQS_TICKLOADDATA define is set. Each query can store up to 16384 records in cyclic buffer (~4.5 minutes at 60 FPS) showing percentage of EQS tick spent on processing it. This is displayed on the graph in EQS editor tab.
- A console command has been added, "DumpEnvQueryStats", that saves current EQS profiler data to a file (project's Logs folder, .ue4eqs extension), which can be later loaded and inspected in the EQS Editor.
- Bugfix: Fixed an issue with Blackboard Key Selector's "Init Selector" that resulted in it picking the first value from the Blackboard rather than the appropriately typed one.
- Bugfix: Gameplay Task Resource's Auto Resource ID initialization is no longer cleared during Hot Reload.
- The "Get AI Controller" is now a pure Blueprint Function.
- Exposed Brain Component's "Is Running" and "Is Paused" functions to Blueprint.
- Clamped AI Sight's peripheral vision angle as well as changed the UI to not allow values outside of the 0-180 range.
- Disabled collision on Nav Modifier Volumes. Previously they had an 'Overlap All' response and generated overlap events. They are only supposed to be used for preventing navmesh generation, but overlap events could affect gameplay and are also bad for performance.
- Made "Skip Agent Height Check When Picking Nav Data" option ignore height when picking nav data for agents. It now picks solely based on the radius when this is enabled.
- Bugfix: Added safeguards to prevent crashes resulted from Blackboard keys being names being longer than 1024 characters.
- Bugfix: Fixed an issue in dynamic Behavior Tree injection that was causing unexpected behavior when the main BT had more BT injection points.
- Bugfix: Fixed an issue in Blackboard key instantiation that resulted in the instanced key never being used and BB operations always referring to the original BB entry.
- The Gameplay Debugger's input detection has been adjusted so that Tap and Hold work correctly in fixed timestep mode.
- Added a flag to Recast Navmesh, "Allow Nav Link As Path End", that is used to control whether path corridors can end on a navigation link or not. This may happen with partial paths and not usually desired behavior. Navigation links at the end are not allowed by default.
- The Blueprint functions "Project Point To Navigation", "Get Random Reachable Point In Radius", and "Get Random Point In Navigable Radius" all return booleans determining if the projection/generation was successful, as well as the vector value that describes the requested point.
- Bugfix: Fixed a memory leak in navmesh generators.
- Bugfix: Fixed an issue that resulted in losing user settings in Static Mesh's navigation export (Nav Collision object) after changing any property of the Static Mesh.
- Bugfix: Hand-placed AI pawns now get their Path Following Component's "My Nav Data" variable set properly.
- Bugfix: Fixed an issue with missing update of navigation area after duplicate or undo operations on Nav Link Proxy and Nav Link Component.
- Bugfix: Corrected the handling of path following requests by Floating Pawn Movement.
- Bugfix: Fixed an issue with parameters of geometry trace handling drop-down navigation links. All components blocking on ECC_WorldStatic channel will now report a valid hit.
- BugFix: HLOD's navigation collision exporting no longer causes unnecessary log output about NavCollision instances in cooked builds.
- New: You can now rename Virtual Bones.
- New: You can now change Virtual Bones so that you can have a Virtual Bone that is a child of another Virtual Bone.
- New: Added "Get Body Target Transform" to the Physical Animation component, which will return the goal transform that a particular body is trying to get to.
- New: Control rig Sequences can now be exported to Anim Sequences.
- New: Preview Scene settings have been exposed in the existing settings tab rather than in a hidden menu of the viewport.
- New: Support for "Curve Source" nodes to find source components on other Actors. It now searches for the property name rather than the component name.
- New: Added "Set Preview Mesh" to the toolbar for all animation related Editors.
- New: Updated Alembic Third-party libraries to the latest versions.
- New: Added functionality to try and match in-engine Material asset names to FaceSet names found inside of an Alembic cache to automatically assign the correct Materials.
- New: The Alembic Importer now supports Vertex Color data.
- New: Added functionality to inform about changes to source data when reimporting your animation data from FBX. It now checks for the following:
- Whether or not the sequence length has changed.
- Whether or not previously-imported curves exist in the source data.
- Bugfix: Fixed a crash when trying to implement a function in a child Anim Blueprint.
- Bugfix: Fixed a crash when debugging a null Animation Sequence.
- Bugfix: Trying to access a skinned vertex position on a mesh when using Master Pose component no longer crashes.
- Bugfix: Attempting to bind to Skeletal Mesh with Anim Blueprint already set no longer crashes.
- Bugfix: Fixed a crash and effector selection issue for two-bone IK.
- Bugfix: Right-clicking the empty space in the asset shortcut drop-down no longer crashes.
- Bugfix: Removed an ensure (warning) by reverting to default unit vectors if zero-sized lookat/lookup vectors are specified for a "Look At" node.
- Bugfix: Removed a crash when clearing an animation of a 1D blendspace sample.
- Bugfix: Crash fix to import code for Alembic Caches with the HDF5 backend.
- Bugfix: Fixed an issue when adjusting curves in the Anim Curves tab using a slider when they are not currently selected.
- Bugfix: Fixed an issue with Update Rate Optimization update rate being too high. Now we use int, so if you have a high update rate it still can go until it wraps around.
- Bugfix: Child Anim Blueprints can now be retargeted.
- Bugfix: Fixed flipping transforms when mirrored.
- Bugfix: Post Process instances are now appropriately updated, even when the main Anim Instance is not using parallel update.
- Bugfix: Fixed an issue where running the Editor in a different culture could break pins on nodes that have optional arrays of pins (ie. Animation Graph nodes like Blend By Layer).
- Bugfix: Fixed an issue with Anim Class being set by name, causing duplicate-named Anim Blueprints to be incorrectly resolved.
- Bugfix: Fixed an issue where "r.SkeletalMeshLODBias" was affecting meshes in the Animation Editor viewports.
- Bugfix: Fixed an issue with Animation Preview Scene keyboard binding (I and O hotkeys now hide and show scene elements regardless of tab opened state).
- Bugfix: Skinned Mesh LOD now updates in the editor under various physics-related circumstances.
- Bugfix: Fixed an issue with foot placement IK doing line traces on worker threads.
- Bugfix: Fixed an issue with Anim Blueprints that contain State Machines having blank palettes.
- Bugfix: Renaming curves in animations now saves properly.
- Bugfix: Fixed an issue with two-bone IK flickering around full extension when stretch is enabled.
- Bugfix: Animation now works as expected for dynamically-bound wheeled-vehicle anim instances.
- Bugfix: Fixed an issue where you could not undo changes from Alembic Import settings.
- Bugfix: Fixed timing issues occurring while playing back Alembic caches.
- Bugfix: Fixed an issue with incorrect behavior occurring when placing more than three samples in a straight line for a 2D blendspace.
- Bugfix: Dropping a new Animation asset on an existing Sequence Player node can now be undone.
- Bugfix: Breaking transition node connections within Animation State Machines can now be undone.
- Bugfix: Fixed an issue to ensure that changes to animation sync markers are propagated to currently open blendspace assets.
- Bugfix: Skeletal Mesh components tick properly when paused if "Tick Event When Paused" is enabled.
- Bugfix: Fixed Skeletal Mesh Merge duplicating Skeletal sockets.
- Enabled snapping for translation in the Animation viewports.
- Removed force inline from Virtual Compression functions.
- Removed the AnimGraph module from the Graph Editor as a dependency.
- Bone Reference now has improved performance by caching compact post bone index.
- Graph files have been moved to Animation Blueprint Editor.
- We have stopped saving raw curve data into animations on cook in order to save memory and disk space.
- Ticks now appear properly on Anim Sequence scrub bar.
- Persona now depends publicly on Skeletal Editor.
- Montages are now correctly initialized when created. They can be used straight away without first opening them in the Montage Editor.
- We now propagate thread safety flags to child Animation Blueprints.
- The Anim Notify Blueprints now start with a "received notify" event node.
- Made single-node animation instances request clothing simulation resets when their animation is changed. This is because the new animation could be very different from the outgoing animation, and this might cause pops.
- Refactored "Evaluate Bone Transforms" to prevent usage of Skeletal Mesh component.
- Deprecated "Evaluate Bone Transforms" in favor of new 'EvaluateSkeletalControl_AnyThread.
- Deprecated Skeletal Mesh component argument to "Convert CS Transform To Bone Space" and Convert Bone Space Transform To CS. Now they just take a transform.
- When selecting bones that are non-required, we now do not render gizmos or text labels.
- Skeletal selection does not lag behind choice made in the viewport (i.e. when showing bone weights).
- Added accessor and modifier functions for "Start Time Offset" value in Geometry Cache components.
- New: You can now choose a preview slot in the Montage Editor.
- Bugfix: Fixed a crash when reimporting animations with additive transform tracks.
- Bugfix: Fixed an issue with additive Pose Asset preview being applied twice.
- Bugfix: Compressed animation data is now included in Memory Stats for Animation Sequences.
- Bugfix: Fixed an issue where blendspace interpolation settings would not have a direct effect and required reopening the blendspace asset.
- New: Added "Spline IK" node.
- New: Added a property to Blendspace Player nodes that enables users to choose whether the play time is reset when the blendspace changes.
- New: Animation Blueprints can now specify a Preview Mesh.
- New: Added the "Look At" node so you can use "Look at Location" on a socket or joint, and improved the Visualizer.
- Bugfix: Fixed a crash when "Pose Asset" contains a bone that is not in the mesh.
- Bugfix: Fixed an assertion that could occur when selecting certain items in the Animation Blueprint editor.
- Bugfix: Fixed a crash when diffing State Machine Transition graphs.
- Bugfix: Fixed an issue with "Pose Handler" using mesh bone index and not compact bone index for setting up "Bone Blend Weights" array.
- Bugfix: Fixed an issue with incorrect errors on compiling Aim Offset nodes with exposed blendspace pins.
- Bugfix. Fixed an issue with additive nodes breaking the current pose when they have no additive animation attached.
- Bugfix: Fixed issues pertaining to extra references to Animation Blueprints on Skeletal Mesh components.
- Layered Bone Blend node has been optimized so that it will cache mask weights in compile time.
- Bugfix: Fixed a crash when reimporting a Skeletal Mesh that has Virtual Bones.
- Bugfix: Fixed a crash when using re-import button in the Skeletal Mesh Editor.
- Bugfix: Fixed a crash related to Skeletal Mesh resources not being initialised before component is registered.
- Bugfix: Fixed a serialization mismatch in Skeletal Mesh source buffers.
- When importing a Skeletal Mesh, "Activate Bone Indices" now always includes parents even if it's not skinned.
- Bugfix: Fixed a crash in Persona when rotating a bone due to single bone controllers not being initialized correctly.
- Bugfix: Fixed an ensure when deselecting bones in Anim Blueprint editor.
- Bugfix: Fixed an issue where mesh-customized sockets were not showing up by default in 'Active' socket filter mode.
- Bugfix: Fixed issues related to bone removal in Skeletal Mesh LODs.
- Issue where the "Apply" button would not show after adding bone names.
- Issue where previously removed bones would not be restored.
- Ensure that the Skeletal Tree is updated when bones are removed or restored.
- Double-clicking animation assets in Content Browser will now try to re-use existing Animation Editor windows, rather than opening a new one every time.
- Animation picker on Skeletal Mesh component is now disabled rather than hidden when no Skeletal Mesh is assigned.
- The Soundwave-internal curve tables have been moved to the 'Advanced' rollout.
- New: Vorbis-encoded audio files can now be streamed.
- New: Audio streaming is now supported on Android, iOS, and XBox One.
- Bugfix: Fixed a shutdown crash when there is a pending async audio occlusion trace.
- Bugfix: Fixed a crash when opening a Media Sound Wave.
- Bugfix: 'Sound Player' nodes will more efficiently load the referenced sound asset unless a 'Sound Quality' node is being used to select which 'Sound Player' nodes to consider, in which case, the current asset reference evaluation will continue to be used.
- Bugfix: We only queue subtitles once per-wave instances playback.
- New: Added support for -DeveloperReportOutputPath and -DeveloperReportUrl commands to permit local runs of the Automation Tool to generate reports on the report server and launch the browser to view them.
- 'ResavePackages' commandlet now supports lighting in separate packages when using it to rebuild lighting.
- Option to disable taking screenshots has been disabled. Screenshot comparison is an integral part of the testing so disabling them is no longer allowed.
- The system now waits for the asset registry to finish loading assets before running tests.
- New: Added the 'Remove Gameplay Tag' function to the gameplay tag function library.
- New: Blueprints containing a String and Text variables can now be marked as multi-line, which enables values to contain newlines when pressing Shift + Enter while editing them.
- New: Blueprint Variables can now be marked as 'Read-Only' in Blueprint Editor, which prevents them from being set in Blueprints. This behaves the same as using 'BlueprintReadOnly' instead of 'BlueprintReadWrite' on a C++ UPROPERTY() declaration.
- New: 'Get Default Locale' has been exposed to Blueprints.
- Macro instances that contain latent actions will now show an overlay clock icon like other latent nodes, which makes them easier to spot and understand that they impact execution flow
- New: Improved comments in Blueprints.
- Comment node text now wraps while the comment is being edited.
- Reduced cases where the title of a comment node would clip at the end.
- Editing the comment for a regular node using the right click menu will now show changes immediately, rather than waiting until the node was moused over again.
- New: Added the Save and Find in Content Browser buttons to the Level Script Blueprint editor (they will save/show the map package that contains the Level Script).
- New: Added the ability to search for delegate nodes using the function name that they are bound to.
- New: 'Array Get' node.
- Can toggle between returning a reference or copy.
- Using a reference solves a longstanding issue with arrays of structs not being able to easily make changes to the items in the array.
- New: 'Get Class Defaults' node has been extended to include output pin exceptions for Set & Map variable defaults. Like array types, the returned value is now a copy of the default value rather than a reference to it. This is done in order to avoid an accidental mutation of the Blueprint class default object.
- New: Function inputs are now exposed as variable "Get" nodes via the right-click context menu in a Blueprint function graph context.
- To use: In a Blueprint Function graph, right-click to access the context menu. Any input parameters will be listed as additional "Get" actions.
- In this way, input parameters can be accessed like local variables from anywhere in the function graph; in other words, it's no longer necessary to drag wires all the way back to the Function Entry node in order to access these values.
- New: We now support "value-based" Bitfield enum type associations in the editor for a UPROPERTY marked as 'Bitmask' with a 'BitmaskEnum' association.
- Prior to this release, Bitfield properties did not work with associated enum types in which the enum values were explicitly set to a bitmask value (e.g. 0x80). That is, the value was assumed to always be set to the index of the bit that the flag should set in the editor ("index-based" mode).
- To switch the associate to the new "value-based" mode, include an additional metadata key in the UENUM() declaration. Example: UENUM(Meta = (Bitmask, UseEnumValuesAsMaskValuesInEditor="true")).
- New: Added a whitelist mechanism for handling native noexport types that can support direct field access in nativized Blueprint code.
- Bugfix: Fixed a crash in Blueprint Editor when adding an input parameter to a Custom Event node after deleting a Function Graph containing a Create Event node.
- Bugfix: Fixed a crash when creating a new Blueprint class from one or more selected Actors in which the root component is not Blueprint-spawnable.
- Bugfix: Fixed a crash on load in nativized EDL-enabled builds with non-nativized child Blueprint class assets.
- Bugfix: Fixed a runtime Blueprint VM crash upon removing an element from set after consecutive add/remove iterations.
- Bugfix: Fixed a crash that could occur when splitting a struct pin on a collapsed graph node.
- Bugfix: Fixed a crash when trying to use non-supported types as Blueprint map keys.
- Bugfix: Fixed a crash that could occur when changing a Map's value type string to vector. Map variables are properly cleared when value type is changed to an incompatible type.
- Bugfix: Fixed a crash when compiling a Blueprint that contains a split pin in a collapsed graph.
- Bugfix: Fixed a crash loading Blueprints that contain a Blueprint node that no longer exists in code.
- Bugfix: Fixed a crash when using the Straighten Connection shortcut key (and some other related issues with actions done after the Context Menu is closed).
- Bugfix: Fixed a crash when opening a Blueprint with a parent class that no longer exists.
- Bugfix: Fixed a crash with the merge tool when the source control provide is SVN and there are gaps in the revision history. (This may still not work correctly, but it won't crash. The full fix will be covered with UE-43603)
- Bugfix: Fixed a crash when attempting to name component with a very long name.
- Bugfix: Fixed a crash that could happen when running Cook On The Fly server with nested struct assets.
- Bugfix: Fixed a crash that would happen when a level in Blueprint was auto-saved.
- Bugfix: Fixed an assertion that could occur when compiling a Blueprint with certain nodes (Select, Math Expressions, etc.)
- Bugfix: Fixed a crash that could occur when reparenting a component Blueprint.
- Bugfix: Fixed a crash that could happen when setting maps and sets of strings and certain structs.
- Bugfix: Fixed a crash that would occur when passing a self node through a CustomEvent ref parameter.
- Bugfix: Fixed a crash that could occur when adding a new Blueprint function and immediately undoing.
- Bugfix: Fixed a crash that could occur after renaming the category of an implemented interface function inherited from a native C++ parent class in the 'My Blueprint' panel.
- Bugfix: Fixed a crash that could occur when editing a local curve variable's default value in a Blueprint graph.
- Bugfix: Fixed an ensure misfire in PIE exit when using Play as Listen Server Mode.
- Bugfix: Fixed an infinite loop case in the Math Expression node.
- Bugfix: Fixed an issue where misaligned memory access of noexport struct properties leading to incorrectly initialized values in a nativized cooked build.
- Bugfix: Fixed an issue with broken collision shapes at runtime when cooking with the optimized Blueprint component instancing data feature turned on.
- Bugfix: Fixed an issue with a Bitmask Enum type validation failure when serializing a Make Bitmask Literal node
- Bugfix: Fixed an issue with log spam when compiling a Blueprint function with a local TSet or TMap variable.
- Bugfix: Fixed an issue with broken pin wires after expanding a duplicated collapsed graph node.
- Bugfix: Fixed an issue with invalid custom Enum type selection on member fields in the User-Defined Structure editor after a reload.
- Bugfix: Improved context menu "whole world" algorithm to proper take into consideration localisation when searching for terms.
- Bugfix: Fixed an issue where renaming interface input/output parameters will no longer cause broken pin links at interface function call sites in Blueprints that are currently loaded.
- Bugfix: Fixed an issue with broken graph node pin links caused by renaming interface function input/output parameters prior to compiling the interface, but after renaming the function itself.
- Bugfix: Fixed an inability to save after choosing a Level Script Blueprint class as the default value for a class input pin in a non-Level Script Blueprint class function graph.
- Bugfix: Fixed an issue where Blueprints containing a 'Key Get Display Name' node will no longer be marked dirty when opening the Blueprint.
- Bugfix: Fixed an issue where the user defined variable tooltip was not showing up when hovering over Get/Set nodes for local variables.
- Bugfix: Fixed an issue with old versions of Blueprints being diffed accidentally showing up in Find-in-Blueprints search results.
- Bugfix: Fixed some issue in Blueprint Diffing where properties of nodes edited in a Details panel would not show up as differences (this impacted Animation Graph nodes most heavily).
- Bugfix: Fixed an issue in Blueprint nativization that could cause bad interface function calls to be generated.
- Bugfix: Fixed an issue that could cause stale Blueprint instances in a hidden sub-level to spam a runtime error.
- Bugfix: Fixed an issue that could cause a Blueprint 'mismatch' error when using 'Set' and 'Map' node.
- Bugfix: Fixed an issue that could cause struct asset defaults to be wiped on editor reload.
- Bugfix: Fixed an issue that could cause a packaging error when running with Blueprint nativization and no Blueprints were nativized.
- Bugfix: Fixed an issue that removed the ability to set Blueprint object variables as 'config' variables, as you cannot set a object reference from a config.
- Bugfix: Fixed an issue with reroute nodes so that a new output connection will propagate that type through to the node's inputs.
- Bugfix: Fixed an issue so that 'Get Data Table Row' nodes are now compatible with DataTable variables.
- Bugfix: Fixed an issue that could cause material parameter setting in a Blueprint construction script to fail.
- Bugfix: Fixed an issue that could cause overlap events to fire multiple times in PIE.
- Bugfix: Fixed an issue that would generate the nativized Blueprint plugin even if no Blueprint files were nativized.
- Bugfix: Fixed an issue that would cause certain components to be orphaned and hidden from the component hierarchy.
- Bugfix: Fixed an issue that could cause a level Blueprint's bound delegate nodes to not trigger.
- Bugfix: Fixed an issue in Blueprint nativization that would cause cyclical logic (loops, etc.) to not iterate past the first iteration.
- Bugfix: Fixed an issue in Blueprint nativization that could cause Blueprint subclasses to ignore their overridden model and default to their parent's.
- Bugfix: Fixed an issue where non-nativized Blueprints were getting dropped from the cooked asset registry file when running with Blueprint nativization.
- Bugfix: Fixed an issue where there would be a nativized Blueprint asset build error when there are no native code dependencies.
- Bugfix: Fixed an issue with incorrect Blueprint graph pin value display names for user-defined enum types.
- Bugfix: Fixed the variable 'config' setting tooltip to report the correct config file for the user to use.
- Bugfix: Fixed an issue that could cause Blueprint variables set from a config to have their values improperly overwritten.
- Bugfix: Fixed several issues with Switch Blueprint nodes not keeping their node and property UI in sync.
- Bugfix: Fixed several issues where changing pawn/hud/state class from the Level editor toolbar would not work properly until the project was reloaded.
- Bugfix: Fixed a stale class reference in interface properties that reference a Blueprint defined interface that has been recompiled.
- Bugfix: Fixed an issue where 'Get Values' and 'Get Keys' nodes were not providing correct results for Map variables that have had values removed.
- Bugfix: Fixed an issue where Blueprint functions that have all their return nodes pruned (ie. are not connected to anything) now have the correct output pins at call sites.
- Bugfix: Fixed an issue where 'Movie Scene Sequence' and related code was not working when Blueprints were nativized.
- Bugfix: Fixed an issue in nativized packaged builds that would cause default values to be lost.
- Bugfix: Fixed 'Enum As Byte' related warnings in nativized packaged builds. 'Enum As Byte' is no longer used when nativizing Blueprints.
- Bugfix: Fixed issues with Blueprint nativization where it didn't correctly include headers necessary for owners of subobjects, and instances where all modules needed by the generated code weren't being founds. This fixes one cause of "Cannot open include file" errors when packaging with Blueprint Nativization enabled.
- Nodes in the blueprint editor again use their custom cursor (grab hand when hovering over a node and crosshairs when hovering over pins).
- 'Logarithm' node added to the Blueprint Math library.
- 'Set' pins on 'Intersection', 'Union' and 'Difference' nodes now infer their values uniformly.
- Out of date Class Default Objects are no longer duplicated when compiling a Blueprint, reducing blueprints compilation time
- Successive calls to Set Intersect, Union or Difference now provide correct results, previously the Set was not cleared before calculating the new result
- 'Trace By Profile' collision functions have been exposed to Blueprints.
- Nativize code is now more precise about dependencies, reducing the resulting executable size and compiler load.
- Blueprints that override an inheritable component are no longer 'data only'. Blueprints with overridden components but no extra functions now load without losing data.
- Blueprints that extend types that implement 'Needs Load For Server' or 'Needs Load For Client' now honor those functions, meaning they will not be cooked for targets that their type wants to be excluded from.
- Delegates in nativized packaged builds correctly prevent double registration.
- Blueprints used as a child actor class will no longer be marked dirty when compiling the class that references them.
- When duplicating a Blueprint component, that component will now be a sibling of the duplicated node, not a child of it unless it is the root node being duplicated.
- Duplicated root nodes will have their scale set to (1,1,1) to avoid applying the scale multiplier twice.
- Blueprintable Components are no longer considered experimental, they have been enabled by default for several versions.
- The ticking behavior of latent actions in components has been changed to match how they behave in actors. When the component ticks, the latent actions will now be processed at the same time, rather than happening later in the frame when latent actions for non-ticking actors and components are processed. This does change behavior, so there is a console variable (t.TickComponentLatentActionsWithTheComponent) that can be used to revert to the older behavior until affected component Blueprints that depended on the old ordering behavior can be fixed up. The cvar should be treated as deprecated; it will be removed in a future release.
- Updated Blueprint nativization so that it generates source files compatible with 'include what you use' (IWYU).
- Moved nativized Blueprint plugin generation to the project's 'Intermediate\Plugins' folder.
- Removed make/break nodes from the Blueprint menu for structs that aren't marked as a 'BlueprintType'.
- Updated marquee selection in graph editors. Ctrl dragging now inverts nodes' selection state, instead of only deselecting them (holding alt is now for pure deselection).
- The Actor Details view will now refresh property mappings for the current Actor instances selection after a bytecode-only recompile of its Blueprint class as a dependency during reinstancing.
- Child Blueprint class assets are now marked as dirty if its parent Blueprint class incurs a structural change. This alerts the user that updates to the Child Blueprint would need to be saved on exit.
- We now emit C++ ctor initialization code for nested default subobjects when nativizing a Blueprint class at cook time.
- Instanced Static Mesh transform edits are now reflected in the Blueprint editor's preview scene.
- The editor will now raise an error at cook time after an attempt to nativize a Blueprint class that also implements a native C++ interface with a pure virtual function declaration that is not also marked up with UFUNCTION. This is because we cannot nativize a Blueprint class that does not also have an implementation of a pure virtual function inherited from the interface.
- C++ interfaces with one or more pure virtual function declarations not also tagged with UFUNCTION are now excluded from the list of available "Implementable" interfaces in the Blueprint class editor.
- Non-nativized child Blueprint classes will now properly override a nativized parent Blueprint class's component defaults at runtime in a nativized cooked build.
- We will now implicitly nativize any child Blueprint class that overrides one or more BlueprintCallable functions inherited from a parent Blueprint class that is also nativized.
- The Blueprint diff tool now reports when a component changes its type between revisions
- Blueprints are now only dirtied if edited properties are from objects in the Blueprint's package.
- New: Support added for "double" and 'fname' stat types in UFE stat export to CSV.
- New: Pak files can now have their index encrypted with AES, preventing them from being opened by unrealpak.
- An AES key must be provided in the project Encryption.ini, and then index encryption can be enabled in the project packaging settings in the editor.
- Please note, when either pak index encryption or signing are enabled in the project settings, pak ini encryption must also be enabled in order to avoid a potential security issue. All of these settings can be found in the packaging section of the project settings dialog in the editor.
- New: Added "Get Component For Axis" and "œSet Component For Axis" to FVector and FRotator.
- New: Added support for -iterate for content plugins that require path remapping during cook/packaging.
- New: Added a "CookedOnly" plugin type, for plugins meant only to be loaded in cooked games (in support of Blueprint nativization).
- New: Added a Json Object Converter to add support for saving and loading TMap and TSet UProperties.
- New: Absolute paths are now allowed in -UserDir=
- New: Added ability for games to use command line parameters for map overriding in shipping builds if their target.cs file defines UE_ALLOW_MAP_OVERRIDE_IN_SHIPPING macro to 1.
- New: Added support for instanced elements in TMap and TSet properties being copied during "Copy Properties For Unrelated Objects."
- This fixes an issue where instanced fields could lose data during recompilation of a Blueprint.
- New: Added a new method Platform Misc "Get OS Version" that returns a string representing the raw OS version info.
- New: All HTTP implementations now use a consistent User-Agent string (specified via the overridable function Generic Platform Http "Get Default User Agent" method).
- Added a Platform and OSVersion string to the default value (platform=FPlatformMisc::IniPlatformName() and osver=FPlatformMisc::GetOSVersion()).
- Bugfix: Fixed a crash with startup in the runtime asset manager when the on-disc cache already contains more data than the system is configured to use.
- Bugfix: Fixed a crash in 'Chunk Cache Worker' function constructor.
- Bugfix: Fixed a crash when launching "Play In Editor" session caused by missing audio data if its DDC data was not present and the audio was streamed in.
- Bugfix: Fixed a crash when UObject can be added to GC cluster only if all of its Outers can also be added to it.
- Bugfix: Fixed an assert with LocalExportIndex.IsNull. Now the Event Driven Loader code will properly disambiguate imports with the same name and the same outer name.
- Bugfix: Fixed a crash when Hot Reloading caused by reinstancing UEngine objects.
- Bugfix: Fixed an occasional crash during Hot Reload CDO reinstancing that was caused by a redundant insertion into TMap invalidating an existing reference into that TMap.
- Bugfix: Fixed a crash when importing a Blueprint which contains a non-empty TMap with an enum class key.
- Bugfix: Fixed a crash when Hot Reloading a project which contains a user-defined struct.
- when hot reloading a project which contains a user-defined struct.
- Bugfix: Fixed a crash when deserializing a TMap property item with instanced elements, where the CDO contains default element values for that property.
- Bugfix: Fixed the use of many printf non-literal formatting strings, as these are potential security issues.
- Bugfix: Fixed an issue with incorrect error code being returned from UnrealHeaderTool when -WarningsAsErrors and -Verbose are specified code.
- Bugfix: Fixed an issue with the error code returned by UnrealHeaderTool when an error occurs during preparsing of headers.
- Bugfix: Fixed a persistent stat metadata warning generated during PIE..
- Bugfix: Fixed an issue with FMonitoredProcess to prevent infinite loop in -nothreading mode.
- Bugfix: Fixed an issue for runtime asset cache not invalidating files with an outdated version number.
- Bugfix: Fixed stats warnings because each new slate loading screen thread has the same stat name, but is potentially assigned to a different thread.
- Bugfix: Fixed an issue with CSV parser missing empty cells at the end of the string.
- Bugfix: Fixed an issue with external plugin cooking and deployment by remapping plugin directories upon cook & deployment Tested directory structures:
- Bugfix: Fixed a memory leak in MallocBinned which affects the mobile platforms (Android, iOS).
- Bugfix: Fixed a typo in comments for LODColoration in BaseEngine.ini.
- Bugfix: Fixed the Log message in "Exclusive Load Package Time Tracker."
- Bugfix: Fixed an issue where "log.timestamp" command would not work because it was incorrectly handled by "log" console command.
- Bugfix: Fixed an issue where the logging system could hang when running out of disk space while flushing log and fixed unexpected concurrency assert when flushing the log buffer to disk.
- Bugfix: Fixed a deadlock when flushing log file while it's already being flushed by a flush timer on the async log writer thread.
- Bugfix: Fixed a memory leak when running with -nullrhi on the commandline in cooked games caused by shader resources not being destroyed.
- Bugfix: Fixed an issue to make sure the engine is properly cleaned up on UnrealHeaderTool early exit to prevent UnrealHeaderTool hangs.
- Bugfix: Fixed an issue to make sure that streamed-in SoundWaves get added to Garbage Collection clusters.
- Removed dependency preloading system from sync and async loading paths. It has been superseded by the new event driven loading system.
- Removed remaining references to AES_KEY, instead using the encryption key delegates to access the key where needed.
- Refactored encryption and signing key access in unrealpak to make it easier to use.
- Make content projects generate a stub executable when encryption or signing keys are specified so that keys can be embedded correctly.
- Separate pak cache granularity from pak signing chunk size in the EDL loader.
- Increase "Serial Size" and "Serial Offset" in FObjectExport to 64bits, to handle larger file sizes.
- Added some validation of the class index in exportmap entries.
- Added missing support for compiling plugins external to Engine/Plugins & Game/Plugins.
- Disabled the 'HeartBeat' function on platforms that don't actually want to use the HeartbeatThread.
- 'None' is now going to be properly considered by the engine as an invalid filename.
- The editor will now collect garbage after a map is loaded to make sure any stale components or other objects that are no longer needed are destroyed. This is to make sure that these components are not resurrected by another editor operations like duplication.
- Made sure the async log writer flushes the log archive even if there's no serialization requests to prevent situations where some of the recent requests haven't been flushed to disk
- Reduced the code size for the generated Static Register Natives functions.
- Disabled the garbage collector when recompiling child Blueprints, as is already done for the parent Blueprint.
- Simplified Unreal Header Tool's code generation logic.
- Implemented Lex "To Sanitized String" for double.
- The function Local Player Context "Is Valid" now also checks that the player controller has a player set.
Editor and Tools
- New: UnrealGameSync now includes a workspace-specific file filter, separately to the global file filter.
- New: UnrealGameSync now supports pop-up notification for build failures on content changes.
- To mark a badge as applicable to users submitting content changes, add +ContentBadges=Name to the [Notifications] section of the project specific configuration file at
- To mark a badge as applicable to users submitting content changes, add +ContentBadges=Name to the [Notifications] section of the project specific configuration file at
- New: UnrealGameSync now allows a project to specify filters for the streams that should be displayed for fast-switching to.
- The "Quick Select Stream List" setting in the "œOptions" section of the Project Settings references a depot path containing a list of strings used to filter the stream list. An option is shown to switch back to showing all available streams, if desired.
- New: Added support for in memory packages. Helps distinguish between packages which can and can't be cooked.
- New: Added a Blueprint function to convert a Render Texture to Texture2d. This is only available for use in the Editor.
- New: Custom Depth can now be enabled for Foliage.
- New: You can now color-code all of the windows in the editor in order to visually distinguish them when working across multiple branches or projects
- You can adjust the 'Editor Window Background Color' for a subtle effect, as th