This release brings hundreds of updates for Unreal Engine 4, including 129 improvements submitted by the community of Unreal Engine developers on GitHub! Thanks to all of these contributors to Unreal Engine 4.9:
Andrew Zhilin (zoon), Artem V. Navrotskiy (bozaro), Artyom Sovetnikov, Ben Rog-Wilhelm(zorbathut), Ben Wiklund (bwiklund), Black Phoenix (PheonixBlack), Błażej Szczygieł (zaps166), Brad Grantham (bradgrantham), Brent Scriver (FineRedMist), Cengiz Terzibas (yaakuro), chipgw, Christian Radich (yoyohobo665), Christopher P. Yarger (cpyarger), Clay Chai (chaiyuntian), Cliff Jolly (ExpiredPopsicle), Dave Newson (dave-newson), Derek van Vliet (derekvanvliet), Dorgon Chang (dorgonman), ewirch, Felix Laurie von Massenbach (erbridge), Gabriel Hare (GabrielHare), gatools, Hakki Ozturk (ozturkhakki), HueyPark, JaredTherriault, Jason Spangler (Stormwind99), Javier Osset (Xaklse), Jeff Rous (JeffRous), JohnAlcatraz, Kitatus Studios (KitatusStudios), Konstantin Nosov (gildor2), korypostma, Lee Berger (MrCrowbar), Maarten Scholl (maartenscholl), Marat Radchenko (slonopotamus), marynate, Matthias Huerbe (MatzeOGH), Maxim (maxpestun), Michael Allar (Allar), Michael3DX, MiniTurtle, Moritz Wundke (moritz-wundke), Nako Sung (nakosung), Nari Demura (demuyan), Nastenko Michael (deM-on), Nathan Stocks (CleanCut), Niels Huylebroeck (red15), Pablo Zurita (pzurita), Patrick Flanagan (valtrain), Pedja Ljubomirovic (3dluvr), Philipp Smorygo (fsmorygo), Pierdek, Piotr Bąk (Pierdek), Quadtree, Rajko Stojadinovik (rajkosto), Rama (EverNewJoy), Rem (rveilleux), rlefebvre, Robert Khalikov (nbjk667), Russ Treadwell (trdwll), Salamanderrake, Sebastian Witkowski (witkowski-seb), Sébastien Rombauts (Srombauts), Simon Taylor (simontaylor81), Stephen Whittle (stephenwhittle), szyszq, TK-Master, Tobias Mollstam (mollstam), Tomasz Sterna (smokku), user37337, Victor Xie (FTPiano), Vladimir Ivanov (ArCorvus), Will Stahl (merlin91), yamashi, Zhi Kang Shao (zkshao)
Enhanced Support for Mobile Devices
We've been working to greatly improve support for mobile platforms, and this release contains many exciting rendering features to help you create leading-edge mobile titles. New additions include efficient dynamic shadows, movable lights and decals. Expect to see continued improvements to mobile and HTML5 rendering quality in the future. In this release, iOS In-App Purchase functionality has been improved, and we've added Remote Push Notifications and support for CloudKit. For Android, we've added OpenGL ES 3.1, Immersive Mode support, asynchronous audio decompression, and better orientation features. NVIDIA AndroidWorks is now also included to make it easy to get up and running on your device. UE4 now ships with a Flurry analytics plugin for iOS out of the box, too! Many of the new features for mobile devices are also available in your HTML5 games as well.
New: Dynamic Character Shadows for Mobile
Dynamic modulated character shadows from directional lights are now supported on mobile devices!
You can use dynamic modulated shadows even if your scene is statically lit.
To enable this feature, turn on the "Cast Modulated Shadows" option on a directional light!
New: Dynamic Point Lights for Mobile
Dynamic point lights are now supported on mobile devices and HTML5!
These can be used to enhance short-lived visual effects such as explosions, projectiles, particle effects, etc.
Up to four dynamic point lights are supported on each object being illuminated.
Note: Dynamic shadows cast from point lights are not yet supported.
New: Decals on Mobile
Decals are now supported by the mobile renderer!
Translucent, additive and modulated blend modes are supported.
Note: Only unlit decals are supported on mobile and web, currently.
New: Major VR Updates
Steam VR (HTC Vive)
Unreal Engine's SteamVR plugin includes many major fixes to make it easier to use, and more performant.
SteamVR improvements include:
Fix for latency issues that appeared in 4.8 Preview 2+
Support for the standard Motion Controller abstraction, so both Vive controllers can route to the same player
C++ projects are now cleanly supported by the plugin API
Various improvements and bug fixes
Gear VR Updated to Mobile SDK 0.6.0
This revision fixes several major Gear VR rendering bugs and issues present in the 0.5.0 release, as well as some hardware compatibility issues.
New: VR Motion Controller Support
Motion Controllers are now supported through a common abstraction layer in UE4!
This means that motion controller devices will now all be available through a common interface. The HTC Vive controller is currently supported, with more (such as the PlayStation Move) to come soon. Input button presses and triggers can now be routed to a single player from multiple controllers using the Motion Controller key abstraction. Additionally, you can add motion tracking to your project by simply adding a Motion Controller component to your character, which automatically updates anything attached to it to follow the position of your controllers! We recommend that all plugins for motion controllers move over to the new system, so that they can be part of the device-agnostic interface.
New: Experimental DirectX 12 Support
DirectX 12 is now supported as an experimental feature! If you are using Windows 10, try it out by running the engine with "-DX12" on the command line.
Microsoft's engineers added support for DirectX 12 to UE4, and we have worked with them to integrate their changes into 4.9. The feature is still new and is considered experimental. DirectX 12 offers a much lower-level rendering API that is more efficient and allows for rendering commands to be submitted in parallel across many threads, a feature inspired by console rendering APIs. Going forward, we'll continue to improve support for DirectX 12 and look for ways to leverage the new API in upcoming versions of the engine.
New: Full Scene Particle Collision with Mesh Distance Fields
Distance field GPU particle collision allows particles to efficiently collide with the entire scene.
This can be used for sparks colliding with surfaces.
It can also be used for various effects like and snow that accumulates on surfaces,
The Collision module on GPU particle emitters has a new property called 'Collision Mode' where you can specify 'Distance Field.'
In order for a particle to collide we need to have a colliding plane, and this can be extracted very efficiently from the distance field. A single sample of the distance field gives distance to the nearest colliding surface. Computing the gradient of the distance field provides the direction to that surface, and the surface's normal. Putting these together gives the collision plane.
Particle collision using this method is more reliable than the existing Scene Depth collision, which only collides against what's on your screen, restricting it to effects with short lifetimes. However, the global distance field is fairly low resolution so particles will pass through thin objects, and sharp corners are rounded.
As with all distance field features, this requires 'Generate Mesh Distance Fields' to be enabled in the Rendering Project settings. Distance field particle collision is a Shader Model 5 feature, on hardware that doesn't support SM5, the particles will fall back to scene depth collision instead.
Particle collision with distance fields is very efficient - it costs about the same as particle collision with scene depth.
New: Hierarchical LOD Fast Preview and Clustering
Hierarchical Level-of-Detail (HLOD) is a system introduced in 4.8 which allows many objects in your levels to be collapsed down to only a few objects when they are small on screen. This helps you achieve much higher quality levels when viewing objects up close, and faster overall performance for your level. We've made improvements to HLOD in 4.9 and will continue to in future releases.
Fast HLOD Preview
In order to allow for rapid iteration on Hierarchical LOD builds, you can now use the Preview HLOD option. This will create the HLOD Actors with only a visual representation of their bounds and objects without merging and creating the HLODs meshes themselves. Their bounds are rendered according to the Draw Distance setting inside the LOD System settings for the specific Hierarchical LOD Level.
The image above shows both the first and second Hierarchical LOD level clusters popping into view, this gives a clear indication how the level is clustered without having to go through the time-consuming process of merging and creating the Hierarchical LOD meshes. Be aware that this is an initial implementation of the preview system and may tend to change and improve over time.
Custom LOD Clustering (HLOD Volumes)
In order to allow for more granular control over the clustering process for the Hierarchical LODs, you can now place Hierarchical LOD Volumes which will define a cluster for the Actors it encapsulates. Use this to manually define which areas and objects within a level should be clustered together.
New: "Arch Vis" Character Controls
The new "ArchVisCharacter” plugin adds a character class that provides out-of-the-box controls appropriate for architectural visualization applications. It is intended to feel pleasant and natural to control at realistic world scales, and to enable smoother videos and live demos.
You can hook up ArchVisCharacter directly as your Pawn Class, or you can create custom blueprints from it to tweak the movement settings as you see fit.
New: Widget Depth Ordering
Widget Components in screen space now automatically sort based on distance from the viewer, ensuring the closest screen space widget component is always on top of the other components.
We now sort all widget components against one another based on distance to the camera. Previously it was based a manual Z Order, or whoever was added to the viewport first.
New: Area Shadows (for stationary lights)
You're no longer limited to sharp shadows with uniform penumbra sizes. The Lightmass ray-tracer now supports area shadows for stationary lights!
Turn on the "Use Area Shadows for Stationary Light" option to use this feature. The 'Light Source Angle' (or 'Source Radius' for a point light) controls how soft these shadows are.
Uniform penumbra shadows are still better at dealing with low lightmap resolutions, so those stay the default. Previously the uniform penumbra size was controlled with an obscure project setting; now it is controlled by the 'Light Source Angle' property, just like the area shadows are. Double the source angle to get twice as soft shadows, etc.
There's also a new optimization for areas of maps which are only affected by a single stationary light channel (e.g., one Stationary Directional light). Their shadow maps will be packed into a single channel texture instead of a four-channel texture, for 1/4th the memory cost.
New: Ambient Occlusion Material Mask
The new Ambient Occlusion Material Mask feature lets you access Lightmass calculated AO in your material, which can be useful for procedural texturing, for example to add in aging effects and dirt in areas where it would accumulate.
The above screenshot uses an AO mask to blend a dirt layer automatically into corners of the environment.
To use AO mask, you'll need to enable both 'Use Ambient Occlusion' and 'Generate Ambient Occlusion Material Mask' under World Settings -> Lightmass settings, and then build lighting. The other AO controls like Max Occlusion Distance can be useful to tweak the look. (Be sure to set Direct and Indirect Occlusion Fraction to 0, so that this AO will not be applied to the actual level lighting.)
Then, in your material you can access the AO as a 0-1 mask with the PrecomputedAOMask node. This node will provide 1 in occluded areas and 0 elsewhere.
Using the PrecomputedAOMask node is just a standard texture lookup. Enabling the feature adds half a byte per lightmap texel, where the default usage is about 4 bytes per lightmap texel.
AOMaterialMask texture memory can be inspected with the ‘ListTextures' console command.
New: Mesh Distance Field Materials
This feature allows your materials to cheaply determine the distance to the nearst solid from any point in space. There are two new nodes to access the global distance field properties within the material editor.
DistanceToNearestSurface returns signed distance in world space units. Note that the distance will always be near 0 on the surface of an opaque mesh. DistanceToNearestSurface can be used to have effects avoid occluders:
UE4 user Roel Bartstra has already found some interesting uses for this - one to get a soft body look, and another to create flow maps that automatically avoid surfaces.
As with all distance field features, this requires 'Generate Mesh Distance Fields' to be enabled in the Rendering Project settings. Distance field material access is a Shader Model 5 feature. Use a FeatureLevelSwitch material node to provide fallbacks for Shader Model 4 hardware.
New: Improved Distance Field Ambient Occlusion
Sky occlusion gives nice soft shadows around objects lit by the sky, especially important in overcast lighting scenarios, a use case traditionally hard to render at high quality without precomputed lighting. Distance Field Ambient Occlusion solves this for fully dynamic games where both the time of day and environment can change at any time. We've put a lot of effort into improving the quality and performance of the technology for 4.9 and believe that it is now a shippable feature on medium spec PC and PlayStation 4 level hardware with a total GPU cost of under 4ms for a typical game scene!
The previous method did adaptive sampling, so flat surfaces did less work, but this also caused a lot of splotchiness in clean environments.
The AO computations are now fast enough to get rid of the adaptive sampling, so occlusion is much smoother.
The catch is that the new method requires a longer history filter, which can contribute to ghosting, especially when shadow casters are moved. Hopefully this can be improved in the future.
Distance Field AO has been made much faster such that it can run on medium spec PC and PS4. It also has a much more reliable cost now, so that it's mostly constant, with a slight dependency on object density.
In cases with a static camera and mostly flat surfaces, the new method is 1.6x faster. In complex scenes with foliage and a fast moving camera, the new method is 5.5x faster. The cost of Distance Field AO on PS4 for a full game scene is 3.7ms.
The main optimization is the use of a global distance field, which follows the camera around. This is created by compositing all the usual per-object distance fields into a few volume textures centered around the camera, called clipmaps. Only newly visible areas or those affected by a scene modification need to be updated, so the composition doesn't cost much.
Visualization of the texel size of the clipmaps - each clipmap is a different color
The global distance field is lower resolution than the object distance fields, so it can't be used for everything. When computing cone traces for sky occlusion, the object distance fields are sampled near the point being shaded, while the much faster global distance field is sampled further away.
This is a visualization of ray tracing the global distance field vs object distance fields. Surfaces in the global distance field have become blobby and thin objects disappear.
New: Content Browser Advanced Search
The Content Browser now supports advanced search syntax. Unreal Engine 4 is used on many large projects, including some with teams comprising hundreds of developers, and content libraries with hundreds of thousands of assets! These new search features improve the workflow for finding your content on projects of any size.
This augments the existing simple search syntax by providing a way to match key->value pairs from the asset metadata, as well as the following special keys:
Name - Tests against the asset name.
Path - Tests against the asset path.
Class (alias: Type) - Tests against the asset class.
Collection (alias: Tag) - Tests against the names of any collections that contain the asset.
New: Collection Improvements
This release includes many changes to Collections that allow you to help you manage assets in your game such as collection nesting, smart collections and tagging functionality.
Your collections of assets can now be organized into a hierarchy.
Child collections can be created by choosing the "New…" option from a given collections context menu. Alternatively, collections can be parented via drag-and-drop.
Dynamic collections leverage the power of the Advanced Content Browser Search Syntax to allow you to create and share Content Browser filters.
Anything you can do with the Content Browser text search can be saved as a dynamic collection, including referencing other collections (both static and dynamic).
You can create a dynamic collection using the "Save" button to the right of the Content Browser text filter.
Quick Asset Management
You can now quickly add an asset to many collections at once using the new Quick Asset Management check boxes.
These are av