Very impressive article Jake! You are very talented.
nice article! i love seeing the breakdowns.
The newest addition to the Unreal Engine 4 features over 90 improvements. A lot of great additions to the Sequencer, some cool tech for Normal Maps. We’ve also got global shader support for plugins and an Image Plate Actor, which enables display of frame-accurate image sequences in fullscreen when attached to a camera. More details below!
New: Sequencer Improvements
We have made a ton of functionality, stability, and usability improvements to Sequencer to make it as enjoyable to create your story as it is for users to experience it.
Auto-key has been simplified to be a single toggleable state in order to improve usability and clarity.
Sequencer Edits vs Level Edits
You can be confident in whether a change to a property will affect a single shot or propagate to other shots using a new toggle in Sequencer which helps you divide up your work. When Allow Sequencer Edits Only is enabled, any edits to properties will automatically create a track if it doesn’t exist and/or a keyframe. These changes will be isolated to the particular shot you’re working on and won’t leak into others. When Allow Level Edits Only is enabled, you’ll be editing default properties on objects. Properties that already have tracks in sequencer will be disabled in the details panel when you want to make global changes that affect all shots.
Sequencer World Outliner Integration
Sequencer is now more tightly-integrated with the World Outliner. The World Outliner shows which Level Sequences an Actor is bound in and displays Actors spawned by Sequencer so that you can access all Actors bound by Sequencer in one location.
Blending in Sequencer
It is now possible to blend sections in Sequencer together to create seamless transitions with ease. Blending is available for numeric properties in sequencer (2D/3D transforms, vectors, colors, floats etc).
- All supported sections now gracefully blend together when overlapping to produce a single value that is applied to the object.
- Overlapping sections on the same row will now automatically interpolate from one to the other over time where possible.
- Animation tracks also automatically interpolate now
- Many built-in easing functions are available as standard (linear, polynomial, exp ease in/out, etc). Alternatively, you can specify a curve asset or implement your own custom blend functions using the IMovieSceneEasingFunction interface (also available in BP).
- Transform sections can now operate on any combination of channels without affecting the rest of the Transform (i.e., only Location and Rotation)
We als added new blend modes for blendable properties to allow for weighted absolute, relative and additive blending. This is particularly useful for animating properties relative to their starting value, or interpolating to/from absolute or relative space (i.e. interpolating into and out of a cutscene)
New: Image Plate Actor and Sequencer Track (Experimental)
A new (experimental) Image Plate Actor enables display of frame-accurate image sequences in fullscreen when attached to a camera.
The accompanying track in Sequencer streams such images to any Texture property such as input of Blueprint or C++ implemented compositing pipeline, and is frame-accurate when playing back in Play In Editor or when creating burnouts. Both the Image Plate Actor and Sequencer track are part of the Image Plate plugin.
New: Global Shader Support For Plugins
You can now add new global shaders inside of Plugins and Projects! Taking advantage of changes made to the shader compiler and shader directory file structure, Plugins and Projects can provide their own Shaders. You can look at the LensDistortion plugin for a simple example (Engine/Plugins/Compositing/LensDistortion).
- Plugin and Project modules that have global shaders require use of the PostConfigInit loading phase.
- Shader support in Plugins and Projects is still experimental.
- Plugins and Projects can include other plugins’ USH files in the Public directory freely. It is the responsibility of the Plugin author to handle inter-plugin dependencies correctly.
- USF files should only be located in the Private directory.
- All calls to IMPLEMENT_SHADER_TYPE, should now include the full path of the USF shader file (e.g. “/Engine/Private/Foo.usf” or “/Plugin/FooBar/Private/MyComputeShader.usf”).
- C++ Generated files should be mapped within the /Engine/Generated/ virtual directory.
- Shaders/ directory requires at least a Private/ or Public/ directory. The Generated/ directory should not exist.
Shader Directory File Structure
The shader files have been divided in a USF and a new USH file extension. The USH files are used for shader header files that do not contain a shader entry point and that should only be included by other shader files, whereas USF files would be the only non includable files that have the shader entry points.
Additionally, the shader files have been split under Public and Private folders. Just like with the engine’s source code, the public API should be placed in files under a Public folder, while the implementations are placed in the Private folder.
Note: The shader API can have breaking changes between major releases of the engine.
New: Bent Normal Maps and Reflection Occlusion
Bent normals are an additional piece of information that can come when calculating ambient occlusion. AO is the % of rays shot in a hemisphere around a shading point that don’t hit geometry. In other words the amount of ambient light that won’t be occluded. We can also find the average direction of ambient light that is not occluded. For best quality and to match UE4’s assumptions both of these maps should be calculated using cosine distribution in the package of your choice. Use this map in the material using the Bent Normal output node.
With this information we can do multiple things to improve indirect lighting. Bent normals are used with AO to improve diffuse indirect and make it look closer to GI. The bent normal is used for indirect lighting instead of the normal. We add some extra magic to allow detail normals to not disappear but otherwise the concept is the same. The biggest impact it tends to have is to reduce light leaking.
We also use this information in a powerful but less traditional way, for reflection occlusion. AO is occlusion for diffuse indirect light. Reflection occlusion is occlusion for specular indirect light. This works by intersecting the specular lobe with the visible cone or a cone representing the unoccluded part of the hemisphere described by the bent normal as the cone axis and the AO amount as the cone angle. This can reduce specular light leaking significantly, especially when SSR data is not available.
Finally we’ve added a multi-bounce approximation for occlusion. Instead of AO or reflection occlusion shadowing the first bounce we use an approximation of what many bounces will result in. Bright materials get less dark and colored materials get more saturated.
New: Two Bone IK Improvements
You now have better control over joints controlled by Two Bone IK with the new ‘AllowTwist’ option that controls whether mid joints can twist. This can be especially useful for mechanical arm setups.
Allow Twist Disabled
Allow Twist Enabled
We also fixed the ‘Maintain Effector Relative Rotation’ option, and added a new ‘Enable Debug Draw’ option, as show below:
New: Make Dynamic Additive Node for Animation Blueprints
A new Make Dynamic Additive node in Animation Blueprints takes a base and target Pose as inputs and creates the additive pose during runtime. This can be especially useful when working with live performances, live motion capture, or other situations where animation data is being passed to Unreal Engine at runtime. It can also enable you to use a single Animation Sequence asset as an override or as an additive, saving memory on disk at the expense of a small runtime cost.
New: Live Editing of Animation Blueprints (Experimental)
Animation Blueprints can now be live edited and recompiled while playing in editor, enabling much faster iteration times.
When choosing an Animation Blueprint instance to debug in the level, the Animation Blueprint Editor viewport is now ‘connected’ to that instance and displays a mirror of the instance’s animation state.
New: Clothing Tools (Experimental/Early Access)
- Refactor of clothing paint tool framework to create a more extensible editor.
- Changed clothing physics asset to reference instead of extract-once so it can be edited post-create with the clothing simulation correctly picking up the edits.
- Clothing ‘masks’ support
- Masks are a level of indirection away from directly painting on the clothing vertex parameters. This allows multiple masks to be defined and swapped between during development while testing different configurations.
- Reworked tools framework for cloth painter
- Added smooth clothing paint tool
- Added fill clothing paint tool
- Added clothing config edit panel to the clothing tab to avoid having to bounce back and forth from the ‘Asset Details’ tab.
New: Baking Pose When Removing Bones
You can now specify an Animated Pose to use for reskinning vertices in Skeletal Mesh LODs for which the original bones are removed, instead of weighting them to the closest Parent Bone.