新鲜出炉：地形碰撞改良

分类更新明细

AI

New: Ability System's attributes' v-logging is now controlled by a console variable, g.debug.vlog.AttributeGraph.

Note that this also means it can be disabled for the entire project if added to DefaultEngine.ini.

New: Added new option to Environment Query system (EQS) to do tests using depth rather than breadth.

New: Added a blueprint function to set named parameters for use when running an EQS query from blueprints.

New: Added a query count warning threshold to detect and report large numbers of queries being made in EQS.

By default this is disabled, but easily enabled through a config file value change to QueryCountWarningThreshold and QueryCountWarningInterval in Game ini files (e.g. BaseGame.ini, DefaultGame.ini, etc.).

New: EnvQueryContext_BlueprintBase no longer requires the Querier Actor to be non-NULL. It also now specifies a Querier Object (which is a UObject* and can be NULL). The new Querier Object is available through all of the blueprint-implementable functions on the context which return location(s) or actor(s): Provide Single Actor, Provide Single Location, Provide Actors Set, Provide Locations Set.

Navigation

New: Added support for using Tri Mesh Collision as navigation obstacles.

New: Navmesh markup for Nav Modifier Component will now combine all relevant shapes of its parent actor instead of creating simple box.

Bugfix: Fixed a bug in navigation filters that could result in differences in how navigation areas work in development versus debug builds.

Bugfix: Crowd simulation state of agent is now being set correctly.

Bugfix: Multiple blocking hits in geometry conforming for NavWalking movement mode will now be handled correctly.

Bugfix: Memory leak removed from crowd simulation manager.

Bugfix: Navigation export works correctly for destructible meshes without collision.

Bugfix: Fixed navigation updates of attachments when actor is being moved in editor world.

Bugfix: Navmesh raycasts no longer fail due to 2D checks performed on the last node.

Bugfix: Path Following Component block detection no longer results in testing against different a mechanism than requested.

Bugfix: Smart navlink initialization on map load works properly.

Animation

New: Added ability to force-reset states as they are re-entered even if they haven't completely blended out.

New: Added "Teleport To Explicit Time" option to Sequence Evaluators. Defaults to true to maintain prior behavior. If true, does NOT advance time, so that notifies are not triggered, root motion is not extracted, etc. If false, will advance time, triggering notifies, extracting root motion if applicable, etc. Note: Using a sync group forces advancing time regardless of what this option is set to.

New: Added a new node, Copy Bone Delta, that accumulates or copies the transform of a source bone relative to its original reference position.

New: Added a new version of the shader complexity viewmode that also shows quad overdraw cost.

New: Allowed curve renaming in Curve Track to work for existing Curve Names. The existing curve will just take the new UID/Name, and preserve everything else. Added a warning when trying to rename a curve to a name already in use in current sequence.

New: Animation Retargeting supports scale and root motion.

New: Import Material Curves now has a "Set Material Drive Parameter On Custom Attribute" option which can be used to set material parameter flags automatically when importing curves.

New: The "Look At" node will now accept a socket as the target.

New: Top-level state machines are now reinitialized when they become relevant. This matches the behavior of nested state machines.

New: Retargeting a skeleton now copies sockets as well.

Bugfix: Fixed an issue with not serializing metadata in the Anim Montage or Anim Composite.

Bugfix: Fixed a crash when trying to convert curves to metadata after importing an anim sequence.

Bugfix: BlendSpace now merges the weights of identical samples. In addition to being an optimization, this fixes an issue with evaluating marker-based syncs in the same sample with different data.

Bugfix: Fixed issue with different materials with same parameter name not working in Animation Curves.

Bugfix: Added UnrealPak location so that MakeFeaturePacks node can run correctly on Mac.

Blueprints

New: Added a conversion node that will allow pin connections between related struct types (routing a child struct into a parent struct pin). This also resolves a crash that could occur from direct connections.

New: Added a feature where duplicated Blueprint graphs are automatically opened and focused.

New: Added a MakeHitResult node.

New: Added a new "copy" node, for guarding reference outputs against unwanted modifications.

New: Added a warning and new name for copy pasted event nodes, to better communicate that the copy will not be triggered with the original.

New: Added collision generation for spline mesh components which are created or updated at runtime.

This is not intended for realtime collision changes while a spline moves around like a tentacle, but it should work for spline meshes that are procedurally generated or otherwise created through blueprint.

Note: Spline mesh components are "static" by default. To spawn them at runtime you may need to alter their mobility to "movable" in the details panel or the "add component" blueprint node.

New: Added a commandlet for rerunning the conversion step for all assets listed in a manifest, syntax is "-run=NativeCodeGen platformname1 platformname2", eg "C:\MyProject\MyProject.uproject -run=NativeCodeGen windowsnoeditor”.

New: Added Random Bool With Weight node to generate a random result based on a percent value.

New: Added the ability for users to fully expand tree views in the MyBlueprints panel by holding shift while clicking an arrow.

New: Step Over and Step Out have been added as key mappings, although no actual inputs have been configured yet. To make use of the new functionality, either review or remap the keys assigned in editor preferences to step in/step over/step out in Editor Preferences/General - Keyboard Shortcuts/Play World.

New: Asset name is now displayed in the cook log for blueprint compile errors.

New: GUIDs are now used to identify properties created from blueprints. This grants more effective retention of user values.

New: Hooked up lots of new icons for component classes.

New: Macros can now have local variables of type 'wildcard'.

New: Project Settings now includes a new Cooker option for enabling a potentially-faster path for dynamic instancing of Blueprint Actor types with multiple components at runtime.

The option is titled "Cook Blueprint Component data for faster instancing at runtime."

The option is off by default, but can be turned on to potentially boost performance in a cooked build when Blueprint Class instances (Actors) with several components are dynamically spawned at runtime.

New : Added a filter to show only replicated properties of a Blueprint.

Bugfix: Fixed editor crash during Blueprint recompilation before Play In Editor.

Bugfix: An issue preventing users from using debugging keys in blueprints to step through and debug blueprints has been resolved. Graphs no longer lose focus when stepping through blueprints.

Bugfix: Blueprints based on classes other than Actor will now correctly be detected as data only.

Bugfix: SpawnActor/ConstructObject nodes correctly update their hovertext when the Class pin is changed.

Bugfix: Scale no longer changes while drag-scaling inside the Blueprint editor's preview viewport. This is accomplished by not applying near-zero delta values.

Bugfix: Ease node properly handles interpolation between values other than 0 and 1.

Bugfix: Editing the default value of a struct variable no longer causes pins to disconnect.

Added information to the Blueprints search tool to distinguish between out-of-date and unindexed Blueprints.

Corrected inconsistent function names in Blueprint Editor.

Bugfix: The PostConstructLink chain is correctly terminated when relinking a Blueprint class.

Bugfix: Fixed a Blueprint compiler error that could occur when switching an interface function's output to an input.

Bugfix: Fixed a bug that could cause a crash after force-deleting a Blueprint referenced by another.

Bugfix: Fixed a bug that could cause a crash when searching Blueprints after switching the Editor language setting.

Bugfix: Using local object variables inside a Blueprint function no longer crashes.

Bugfix: Custom collision channels will no longer become out of sync with their associated names.

Bugfix: Blueprint compiler error no longer occurs when using a SpawnActor node for an actor with a struct member exposed through the node.

Bugfix: Fixed a bug that would leave collapsed graph nodes in an invalid state, after undoing the deletion of one.

Bugfix: Fixed a bug that would prevent variable references in an interface function from showing up in a Blueprints search.

Bugfix: Arrays of TimerHandles will no longer be cleared when trying to remove a single item.

Bugfix: Blueprint functions within Blueprints that implement an interface are now searchable.

Bugfix: Blueprint nodes added through keyboard shortcuts can now be undone.

Bugfix: When Playing in Editor with a dedicated server running in-process, cosmetic function calls will no longer be skipped.

Bugfix: Fixed a bug where malformed variables were being created through a pin's "Promote to variable" option.

Bugfix: Searches for Blueprint event references now include places that the event is called.

Bugfix: Actor-based Blueprint classes utilizing one or more latent function call nodes (e.g. Delay) in the event graph no longer crash in editor after recompiling.

Bugfix: Loading a project with a struct and Blueprint that cyclically depend on each other will no longer cause a crash.

Bugfix: Per-instance customizations on an actor made from a blueprint which has severe compile errors will no longer be lost when the blueprint compile errors are resolved.

Bugfix: Property edits to inherited components no longer cause a blueprint to be non-data-only

Bugfix: The Components tree view will once again update after an undo/redo of a component attachment action in the Blueprint Editor. This was accidentally broken in the previous version.

Bugfix: Editor no longer crashes when a component with 'Within' markup is added to a Blueprint.

Bugfix: Blueprint Editor will no longer crash when renaming a component to the name of a component that was previously added and then reverted via the undo command.

Bugfix: Fixed the root cause of a potential runtime assertion when attempting to dynamically spawn Actor-based Blueprint Class instances with one or more nested default subobjects created through native parent class construction.

Removed a misleading load warning (complaining about property/value mismatches) that could occur when loading cyclic content.

Improved logic for detecting mouse clicks on pins with short descriptions, including unlabeled exec pins.

Improved "RInterpTo" and “RInterpTo_Constant” node documentation.

Improved the error message for CreateEvent nodes that wrap an event/function that no longer matches the expected signature.

Made load error messaging more descriptive for failed imports of Blueprint-owned component objects on level load.

Moderately improved Blueprint search times.

Optimized ComponentTypeRegistry startup.

Revised FObjectInitializer::InitProperties() and the PostConstructLink chain for Blueprint Class types to create a faster path for Blueprint class instancing.

Some blueprint validation logic has been moved to run after the execution graph is pruned, preventing unused nodes from blocking packaging.

The "Delete Unused Variables" feature now considers the "Get Class Defaults" node and will remove any variable output pins that are not connected.

Editor and Tools

New: Added aggressive filtering to the session frontend profiler with the 'AF' checkbox next to the filter text. This rebuilds the stats tree, removing non-matching options and reparenting stats of identical names such that thread time for a particular stat is visible in a single tree row.

New: Map text box in the editor now converts paths to long package names making them more portable.

New: Now allow AssetUserData-derived Objects to be added to assets in the editor via details panel.

New: Polished Hierarchical LOD outliner and behaviour.

New: 'Recently Used Levels' and 'Favorite Levels' now hold long package names instead of absolute paths. This makes them project relative, which means they will remain valid even if the project location changes.

New: Separated input and output snapping in the curve editor into two different toggles.

New: SplineComponents now have a debug render feature, allowing them to be visualized in-game in non-shipping builds, or in-editor even when not selected.

This can be enabled with the Splines show flag (or 'show splines') from the console.

It can also be enabled or disabled per-instance with the SetDrawDebug function on SplineComponent.

New: The editor now supports many new methods of opening new asset editors. You can choose where tabs open with a great deal more options in Editor Preferences > Appearance > Asset Editor Open Location. This will reset the 'always open asset editors in new windows' option, it completely replaces and enhances that option.

New: The eye dropper in the color picker can now be cancelled by pressing Esc, or completed by clicking the Left Mouse Button.

Bugfix: Fixed some Sequencer tracks incorrectly replaying all keys in reverse when looping forward or backward.

Bugfix: Undo/Redo after using Replace Actors no longer crashes.

Bugfix: Updated ExampleLibrary included in Third Party Plugin example so that it can be built and loaded on Mac.

Bugfix: Now only .FBX or .T3D files are accepted as importable types. Previously, an unsupported type would lead to an editor crash.

Made the Config Editor button more visible.

Bugfix" Fixed a potential crash when managing your favorite levels.

Bugfix: Fixed a crash when changing Media asset path.

Updated the VR In-Editor Tutorial.

UnmappedTexelsPercentage is now 100-based.

When a custom build step is used, if it's async, we now advance the build step upon completion. Otherwise, we just continue to work on the same async build step.

The Landscape In-Editor Tutorial now makes sure you have a Landscape before allowing the tutorial to continue to the next step.

The auto-reimport settings have been changed so that "Detect Changes on Startup" defaults to true. There is a prompt every time a new source asset has been detected, so the user can veto the auto-reimport if desired.

Added Vulkan Preview Enable to Experimental and hide it if Vulkan support is not compiled.Clarified the function of the "Import" option in the File menu. This, and “Import Scene”, have now been combined into a single option 'Import Into Level'.

Content Browser

New: Added built-in type category for Media assets.

New: Added UI action for creating new content browser folders.

New: Sorting asset type categories alphabetically.

Bugfix: Downgraded an assert in Path View’s Load Settings function to avoid a common crash when a saved path no longer exists.

Bugfix: Fixed a crash when pasting a path containing a class into the asset view of the Content Browser.

Bugfix: Fixed a rare crash re-importing a mesh into the content browser.

Landscape

New: Added ability to expand landscape bounds.

New: Added support for baking landscape material world position offset into collision for collision mip settings other than 0.

New: Added support for Landscape grass to use the landscape's static light/shadow maps through the "Use Landscape Lightmap" setting in the Landscape Grass Type. This doesn't look quite as good as dynamic lighting and shadowing, but it is much much cheaper.

New: Landscape can now use material world-position offset in static lighting calculations. This can be enabled via "Use Material Position Offset In Static Lighting" on the landscape actor.

New: "Random Scale" option for Landscape Grass. Works just like the random scale options for foliage.

New: PNG heightmaps are now supported in world composition's tiled landscape import.

New: You can now set a different LOD for Landscape simple collision and full detail collision. If the simple collision LOD is not set or is set the same as the full collision LOD, they will use the same collision object (as before).

Added warnings when trying to use the Landscape Visibility Tool without the landscape material having a "Landscape Visibility Mask" node. Just add the "Landscape Visibility Mask" node to the material and link it to the "Opacity Mask" output (doesn't matter that it's disabled, and you can leave the material as "opaque" blend mode) and Landscape will handle the rest.

Bugfix: Fixed bounds calculation for landscape splines. This fixes the issue with the first landscape spline point being invisible and later points flickering.

Bugfix: Crash fix when undoing following component whitelist changes that were made with [+]/[-] + [Click].

Bugfix: Landscape grass now updates when using a material instance as the landscape material and changing parameters.

Bugfix: Landscape spline lines show up properly on flat landscapes.

Bugfix: Fixed layer allocation issues when undoing after a layer is fully painted away on a component This could cause multiple layers to be allocated to the same texture channel, with very bad visual results.

Project Browser

Bugfix: Fixed an issue when creating a copy of a project whose version is older than the current engine version. Previously, the copy would still be attempting to access assets from the original project, and would fail to package.

Static Mesh Editor

Bugfix: Fixed crash in auto-convex collision tool when running on very small meshes.

Foliage

New: Added foliage scalability group.

By default the foliage scalability option will alter the rendered density of landscape grass between 0% (low) and 100% (high).

It can also alter the density of any foliage types which opt-in to the behaviour via the "Enable Foliage Density Scaling" option in the FoliageType. This is recommended for foliage which doesn't have a gameplay-relevant effect

Note: Foliage density scaling only applies in-game (including PIE), not in the editor, for both usability and technical reasons. Grass density scaling will still happen in-editor.

Bugfix: Content will no longer be marked as modified when garbage collecting.

Commandlet tweaks made to Fixup Redirects and Cook-on-the-fly Server.

Sequencer

New: Sequencer functionality unlocked in UMG.

Event Tracks are now available.

You can now call a PlayTo() function to play to a specified time in the animation.

Bugfix: It is now possible to render out 4K image sequences using Matinee or Sequencer.

Bugfix: The color gradient for color tracks now matches the colors in the color picker.

Bugfix: Scrubbing attached audio tracks no longer causes a crash.

Gameplay Framework

New: Added "cheatscript" functionality to CheatManager. This enables users to combine a set of console commands into a single script accessible via a single command.

New: Actor and Component OnClicked/OnReleased events can now be triggered by more than just Left Mouse Button.

PlayerController now contains a list of keys that will trigger a OnClick/OnReleased event if the cursor is over an Actor/Component that implements the event.

OnClick/OnReleased events now have an additional argument that specifies which key was responsible for the event.

New: Actor delegates OnTakeAnyDamage, OnTakePointDamage, OnActorBegin/EndOverlap, OnBegin/EndCursorOver, OnClicked/Released, OnInputTouchBegin/End/Enter/Leave, OnDestroyed, and OnEndPlay have all had a new parameter added to allow binders to know which Actor the event occurred on in cases where a single event entry point is bound to multiple Actors.

New: A "Strength Over Time" Curve Float parameter has been added to Constant Force root motion source for scaling constant force over its duration.

New: Added support for tag redirectors on Gameplay Tag structs. It works the same as Tag Containers using the GameplayTagRedirects section of Engine.ini. Invalid gameplay tags (which are no longer in the tag dictionary) will now warn at load time.

New: Added "Velocity Mode On Finish" setting to Apply Root Motion Move To Force ability task node. Can now choose to set character velocity to a specific value when root motion ends.

New: Added AbilityTask_WaitAttributeChangeRatioThreshold for triggering logic when the ratio of two attributes matches/stops matching threshold comparison.

New: Added AbilityTask_WaitAttributeChangeThreshold that triggers when the state of an attribute starts/stops matching some comparison threshold.

New: Added a configurable slow frame printout (prints out the length of any slow frames over a threshold of t.SlowFrameLoggingThreshold seconds).

New: Added a method called "Get Default Resolution Scale" to Game User Settings to return the desired resolution scale based on Desired Screen Height and the current resolution.

New: Added 'Get Game Time Since Creation' function to Actor.

New: Added option to allow Camera Shakes to blend out when stopping according to their blend-out time (default behavior is unchanged).

New: Added optional LineThickness parameter to HUD DrawLine function.

New: Added support on listen servers for smooth interpolation of the local view of remote characters.

CVar "p.NetEnableListenServerSmoothing" controls this. It is on by default.

This implementation interpolates the mesh location (similar to how clients interpolate it), but does not simulate movement of the collision capsule on intermediate frames where the server updates without a client update.

New: Added Tau to Blueprint function library.

New: Added the ability to filter DataTable Assets by their row using the metadata. (meta = (RowType="MyRowName”).)

New: All Axis keys can now have their properties edited through the Input section of the Project Settings.

New: Can now query if an Actor Is Replicated in blueprints.

New: Primitive Component delegates OnComponentHit, OnComponentBegin/EndOverlap, and OnComponentWake/Sleep have all had a new parameter added to tell binders which Primitive Component the event occurred on in cases where a single event entry point is bound to multiple Primitive Components.

New: Scene Component Snap To and the blueprint version of Attach To now return a boolean indicating success.

New: Vertical Alignment can now be set from Blueprints for Text Render Components.

Bugfix: Component overlaps now end (triggering the OnComponentEndOverlap event) whenever an overlapping component is destroyed.

Bugfix: Child Actors of the Preview Actor being moved will no longer be collided against when snapping to ground.

Bugfix: Child Actors will no longer bleed into other blueprint thumbnails.

Bugfix: ChildActors now inherit their visibility from the owning component and actor visibility.

Bugfix: Crashes related to WorldSettings not being found after hot reload when a game specific World Settings subclass is in use have been fixed.

Bugfix: ApplyRootMotionMoveToForce ability task can now set Movement Mode to non-Falling modes.

Bugfix: Customizations applied to a child actor from the parent construction script are no longer being lost when recompiling the blueprint of the child actor's class.

Bugfix: Duplicate overlap events when moving the same component again during an overlap event no longer happen.

Bugfix: Fixed a fatal error that could occur when loading a game's default map fails. This could happen if, for example, the asset for the default map specified in the project settings was deleted, and then the game tries to connect to a server and fails.

Bugfix: Fixed cases where child actor component copies could be orphaned in the editor level.

Bugfix: Fixed crash when a Child Actor Component is marked pending kill and does not get destroyed cleanly until garbage collection runs.

Bugfix: A Sound Cue containing a Sound Quality node being referenced from a native constructor no longer causes a crash.

Bugfix: Fixed crash when player stands in a Physics Volume that streams out. Primitive Components with Should Update Physics Volume set to true are prevented from continuing to reference Physics Volumes in a level that is streamed out.

Bugfix: Fixed crash when tick function with a tick interval was disabled while awaiting rescheduling.

Bugfix: Fixed editing Plane Constraint Normal on Movement Component not propagating to instances in the world after some edits.

Bugfix: Character Z velocity is maintained when trying to switch to default movement mode that goes through Walking but then immediately exits walking.

Bugfix: Replicated Actors with a replicated Child Actor Component will no longer result in two copies of the Actor on clients.

Bugfix: Using the Set console command during standalone games no longer crashes.

Bugfix: Undo/redo of attachment changes of an IWCE component from another IWCE component and a BP constructed component now works correctly.

Bugfix: When the console closes it now properly restores the viewport’s input state (both focus and capture).

Bugfix: Fixed a crash during garbage collection calling Destroy Component on a sub-component.

Bugfix: Crash no longer happens if the Game Singleton class specified in Engine.ini is invalid.

Actor iterators will now include results for Actors in an associating level. This means that in Begin Play of sub-levels being streamed in, Actors in that sub-level will now be returned by functions such as Get All Actors Of Class.

Actors can no longer fail to spawn due to mesh overlap with the geometry of a child actor.

Added a warning log when trying to possess a Pawn when we don't have network authority.

Added Blueprint-exposed function to get the closest one on a Skeletal Mesh to a point.

Added Set Control Rotation From Pawn Orientation flag to AI Controller to control whether it copies the Pawn rotation to Control Rotation if there is no focus point.

Added support for Character Movement being based on sockets (not just bones).

We now send client-side camera updates (if enabled) when the Character is simulating physics. This prevents the character from losing network relevance when simulated (or attached to a simulated object).

Static and skeletal mesh sockets now use the supplied Relative Scale. Older-format data will reset scale to (1, 1, 1) to avoid causing problems when upgrading.

Using wildcard operator with the "KismetEvent" or "ke" console commands will now only trigger the event on objects in the world in which it was triggered.

Was Just Pressed, Was Just Released, Is Key Consumed, and Is Pressed now correctly handle AnyKey.

When blending out Camera Anims, the blendout is not restarted, since this will cause a pop if non-immediate Stop is requested again.

You can now run more than 10 Play in Editor sessions simultaneously.

Learning Resources

In-Editor Help

Bugfix: "Next Tutorial" button now links to the designated tutorial.

Localization

New: Added an Asset Localization context menu to the Content Browser. This enables you to create, edit, and view localized assets from any source asset, as well as edit and view source assets from any localized asset.

New: Added methods to remap and restrict the available cultures.

You can now use the config system to remap cultures (either in DefaultGame, DefaultEngine, or DefaultEditor), to deal with platform remappings that aren't natively understood by UE4.

This is represented by an array of semicolon separated mapping entries: SourceCulture;DestCulture.

The remapping is handled by FInternationalization::GetPrioritizedCultureNames.

You can also now disable certain cultures that might be placeholder (either in DefaultGame, DefaultEngine, or DefaultEditor) in certain builds.

This is represented by an array of potentially semicolon separated mapping entries: Culture[;BuildConfig[,BuildConfig,BuildConfig]] (no build config(s) implies all build configs).

The filtering is handled by FInternationalization::GetCulturesWithAvailableLocalization.

New: Improved the culture fallback detection for Chinese (or any cultures that use scripts).

If given a culture without a script code, we now try and work out what script should use based upon the available cultures.

For example, if we were given "zh-CN", we would detect "Hans" (from "zh-Hans-CN") and then process "zh-Hans-CN", "zh-CN", "zh-Hans", and "zh" in order until we find one with matching translations.

This allows you to use "zh-Hans" and "zh-Hant" for Chinese translations without running into issues on platforms that don't provide the script code.

Bugfix: An issue was found and fixed with FText FFormatArgumentData that could potentially cause packages to fail loading in packages created prior to Release 4.11.

Bugfix: Fixed a crash that could occur when using the Google Pinyin IME, the QQ IME, or the Sogou IME.

Most of the localization concerns that had been added to the FPackageName API have been removed in favor of using FPackageName::GetLocalizedPackagePath in a few key places to perform package localization when loading.

This change fixes an issue where the package localization wouldn't consider less specific cultures when loading packages (eg, if your culture was set to en-US, it wouldn't consider en packages), and also allows prioritized fallback of localized packages (eg, you may have an en-GB texture and an en texture, but only en audio).

Literal escaped character sequences parsed from string literals are now un-escaped when gathering them for localization.

UAT now stages all project translation targets.

Networking

New: Added the ability to have single pass, partial network profile streams (i.e. you don't need to change maps to force it to do the final save).

New: Added "demo.minrecordhz" cvar to set a floor on replay recording rate per actor.

New: Added a new replication condition, COND_ReplayOrOwner, for replicating properties to replays as well as the owning connection.

This is useful for properties that would normally be COND_OwnerOnly, but would also be used in replays.

The Ability System Component’s Activatable Abilities’ replication condition is now COND_ReplayOrOwner, so that these abilities can be displayed in replays.

New: Added support for async loading worlds when playing back replays (demo.AsyncLoadWorld 1).

New: Added support for getting replay ID from the Network Replay Streaming interface.

New: Recording actors for replays is now amortized more evenly across multiple frames. This helps smooth out spikes in CPU usage when recording replays.

New: True network saturation detection support added.

UNetConnection::RemoteSaturation contains a value of 0-1, which means the connection is 0-100% saturated.

New: Implemented removal of expired transport nodes.

New: We no longer replicate movement properties in replays now that we save this data externally.

Added new replication conditions that exclude replays.

Added ability to change replication condition of super properties.

New: We no longer use package guid when determining if network connection is compatible. We now only use the checksum built from replicated properties (so as long we you don't change a replicated property in a package, it can load even if it differs on server/client).

Bugfix: Using -notimeouts will no longer prevent a PlayerController from being destroyed if the player was explicitly kicked.

Bugfix: Fixed an issue where servers would GC objects, and client would refer to it. We now allow the server to re-load these objects.

Bugfix: Fixed a bug in Network Driver where a spawn-deferred actor (over multiple frames) could end up being considered for replication even though it hadn't completed its initialization.

Bugfix: Fix bug where enums would use too few number of bits when serializing over network.

Bugfix: Fixed a bug in how we clamp replay delta seconds, which could cause issues when the server was running in slomo, and keeps it consistent with how delta seconds are normally clamped.

Bugfix: Fixed a crash that could occur when attempting to seamless travel while a replay is recording. This only affected non-editor build configurations.

Bugfix: When trying to play a replay using the "demoplay" command in an Execute Console Command Blueprint node, there is no longer an indefinite hang.

Bugfix: Fixed an issue that could cause replicated properties of actors statically placed in a map not to update when scrubbing to a new time in replays. RepNotify functions for these properties will now be called as well.

Bugfix: Remote player controllers on a server are no longer incorrectly flagged as local player controllers after a seamless travel.

Bugfix: Fixed an issue with certain components and actors that could have default values that differ from CDO. This would cause those properties not to replicate if they changed from their CDO to the default value.

Bugfix: The demo.SkipTime cvar now works with negative values.

Bugfix: Fixed issue where clients do not progress if they seamless travel faster than the server does.

Bugfix: Tunnel default settings now save correctly. Also did a code and documentation cleanup pass.

Lowered verbosity on rep layout history overflow (benign issue that can happen with latency/saturated connections).

Separate reading/writing polling status for PS4 sockets, so we can properly wait the full timeout when we want to check read status.

ServerReplicateActors has had a major refactor to make it more readable, removed unnecessary code as well.

We've refactored how we save objects in the network stream, so we can now more easily skip over them if needed. The new method is also generally more stable.

Online

Bugfix: Fixed an issue with HTTP response headers where header values that were set more than once in a single response would cause only the last setting to be remembered. It now is appended to the previous value with a comma. The same issue existed in HTTP requests, but instead of changing the behavior of SetHeader, there is now a new function called AppendToHeader that adds a value onto an existing header.

Bugfix: HTTP Progress delegates are no longer called after the module that registered them has been unloaded.

Other

New: Added in support for pushing touch events to head mounted displays if they're supported by the device.

New: Added user activity tracking API to Engine and hooked it up to the shutdown/crash analytics to add context to error reports.

User activity is passed to MTBF analytics and to crash reports sent to Epic.

Game programmers can use FUserActivityTracking::SetActivity().

Blueprint users can use Set User Activity nodes.

New: MTBF analytics is now an Engine feature (moved from Editor).

New attributes for runtype (editor/game) and projectname.

Controlled by new project settings in DefaultEngine.ini.

Added support for SystemWideCriticalSections on PS4.

New: Better visualization of unknown media durations.

New: Audio track specs are now updated each frame to better support streaming media and variable streams.

New: Windowed fullscreen is now the default window mode in game user settings.

New: Advanced selective download features for UE 4.12 updates include options for Art Tools and Target Platforms on the launcher.

New: Advanced selective download features for locale install support which will allow the ability to download specific languages for smaller downloads on the launcher. This is dependent on games and apps taking advantage of this new feature.

Bugfix: Fixed possible issue where console window from -log could spawn off screen due to errors saving values in the .ini files.

Bugfix: Transitioning levels with a GearVR no longer crashes.

Bugfix: Rendering no longer freezes on GearVR after sleeping and waking up.

Bugfix: SteamVR is now able to initialize when the Oculus runtime is running.

Bugfix: Fixed problems with Maximized Window mode using fullscreen mode's resolution for rendering and a bug that prevented users from increasing fullscreen resolution.

Bugfix: Fixed support for MTBF on PS4 and Xbox One.

Handling app deactivation callbacks and rejecting abnormal shutdowns in deactivated state on PS4.

Handling app backgrounding callbacks and rejecting abnormal shutdowns in background state on XB1.

Reporting abnormal shutdowns on PS4 as AbnormalShutdownPS4 since we can't tell the difference between crashes and abnormal shutdown on that platform.

Bugfix: Fixed the black screen after Alt-Tabbing back into game in Native Fullscreen mode.

Bugfix: The VR PIE analytics event now has a proper event name.

Bugfix: Fixed a culling issue caused by late update on HMDs.

Bugfix: Rewrote async media resolve handling code to prevent a race condition crash when a player is destroyed.

Bugfix: If using fixed framerate, we sleep when performance is faster than expected.

Platforms

New: Added support for deploying and launching to multiple targets from a single UFE command.

New: Enabled IPv6 support on iOS and Mac.

New: tvOS has been enabled in the binary release. This platform is still in an experimental state and similar to IOS. Only content-only projects can be packaged from Windows, but the full tool chain is available on Mac.

Bugfix: Fixed an issue where FMath::RandHelper sometimes returned the upper-bound integer value on several non-windows platforms.

Android

New: Binary build can now enable different Android architecture options if they are included with the installed platforms.

New: Added ability to pass -Architectures and -GPUArchitectures to UBT on the command line, so that other Android Architectures can easily be built/distributed from UAT.

-Arm64 versions added to binary build for now.

New: Added addLibrary and removeLibrary to APL (contributed by robertfsegal).

New: Added support for different Ant verbosity settings during packaging.

New: An uninstall batch or script file is now written for packaged projects.

New: Android Vulkan dynamic loader with fallback to ES2 is used if either the loader or driver is not available when Supports Vulkan is enabled.

New: Deployment for Android now runs Ant with -quiet first, and will rerun without if there is an error to get the log.

New: Updated to support NDK r11c.

New: Android can act as server with OnlineSubsystemNull.

Bugfix: Android movie playback now handles cases where the full surface is not used on some Android devices.

Bugfix: Fixed a crash with the WebBrowser UMG widget when running on devices with Android 6.0.

Mac

New: Added editor settings for selecting the direction of scroll gestures for 3D and Ortho viewports. This allows Mac users with trackpads or Magic Mouse to use Natural scrolling.

New: Crash logs produced while running commandlets from AutomationTool are now printed to the output log.

New: Enable full PostProcessSelectionOutling on OpenGL versions lower than 4.2.

New: Apple's Driver Monitor stats are exposed into UE4 stat groups. DriverMonitor has the common stats, DriverMonitorAMD, DriverMonitorIntel, and DriverMonitorNvidia have the vendor/GPU specific stats.

The Metal and OpenGL RHIs update the driver monitor stats group for the current GPU at the appropriate time.

These stats show details of GPU core, memory and bus utilisation that can be helpful when profiling.

New: Implement Async Compute support in MetalRHI for AMD GPUs which provide it.

New: Implement Metal support for index buffer SRVs.

New: Implemented operation threshold submission of Metal command buffers to keep the GPU busier and not just idle waiting for the CPU.

Whenever the Console Variable "rhi.Metal.CommandBufferCommitThreshold" is set to a positive value and the current command buffer has >= draw/dispatch operations outstanding then the command-buffer will be committed at the next encoder boundary.

New: Initial implementation of parallel execution in Metal RHI to support command-encoding across multiple threads.

New: Metal object lifetime tracking has been reimplemented as stats in the stat-group, though the old system is maintained as a debug-only tool that could (and probably should) be extended to track over/under-release bugs.

Currently the texture count will be distorted by texture SRVs so this will need improvement, but other stats should be reliable.

New: The mechanism to explicitly select the GPU to use on Mac has been unified so that it applies to both Metal and OpenGL.

The value is accessible from Mac Platform Misc's Get Explicit Renderer Index function and is specified as a 0-based index into the GPU listed in Get GPU Descriptors. Using a value of -1 will disable explicit selection and let the OS choose the default device.

The value can be set via the console variable 'Mac.ExplicitRendererID', by specifying the command-line '-MacExplicitRenderer=X' (where X is the index) or selected in the Mac Graphics Switching plugin's settings when using the Editor.

New: Added an explicit, experimental option for using OpenCL to accelerate the convex decomposition tool on Mac rather than assuming that it is desirable (defaults to off).

This may prevent a crash on Nvidia's OpenCL drivers while enabling AMD & Intel users to run it if desired.

Bugfix: Metal shaders now compile properly when Xcode isn't installed by falling back to the slower runtime compiled text format.

Bugfix: Fixed crashes when enabling ES2 emulation in the Editor when running on Mac Metal by adding an ES2 emulation shader platform.

Bugfix: Implementation of BeginRenderingPrePass was changed to clear the depth and stencil buffers only when it is asked to.

Bugfix: Metal reporting of GPU memory through the RHI is correctly treated as being in bytes, not MB.

Bugfix: Fixed synchronisation errors caused by overflowing the ring-buffer inside each Metal context. Instead, we now reallocate it so that it is sufficiently large.

Bugfix: GetPrimaryGPUBrand now returns the primary GPU as expected, which for dual GPU Macs means the discrete GPU connected to a display. Where no GPU is connected to a display, the first GPU will be reported.

Bugfix: The intermittent errors with editor selection outline on AMD 9000 GPUs under Metal (M295X & M395X) have been fixed.

Bugfix: Editor windows no longer reorder on Mac on app activation when a notification is on screen.

Bugfix: Fixed Matinee video recording when using Metal to render on Mac by inserting an intermediate texture before drawing to the screen. This ensures there is always a render-target to draw to and read from.

Bugfix: Fixed support for custom icon for non-monolithic games on Mac.

Bugfix: Compilation via Distcc on Mac OS X was fixed.

Bugfix: A submit-and-wait is enforced in Metal when contexts are being destroyed to prevent kernel panics in drivers which continue to process the now-abandoned command queue and encounter invalid resources.

Bugfix: Only spawn one ShaderCompilerWorker for each physical core on Mac as they consume so much memory and can cause OS X to suspend all running processes to display the ''Out of Application Memory" dialog, which requires user interaction.

Bugfix: Removed erroneous declaration of SM4_PROFILE and SM5_PROFILE when using METAL_SM4_PROFILE/METAL_MRT_PROFILE /METAL_SM5_PROFILE respectively and fixed up the few locations that care about these defines explicitly.

Bugfix: Fixed a memory leak in Metal by caching a temporary texture created in order to render the Material Editor properly.

Bugfix: Identifying the selected GPU in Mac OpenGL no longer crashes.

Bugfix: Added a workaround for a bug in OS X 10.11.5 that can cause a hang when an application switches the active GPU on a dual-GPU MacBook Pro.

We now use managed memory on Mac Metal for buffers.

We capture the system.log contents from the moment we boot to the point we crash to report GPU restarts and other system errors not written into our own logs.

Changes have been made to the shader-cache's default GameVersion that ensure only caches valid for the current build will be used. This is intended to keep load time growth down to what is strictly required.

Construction of command encoders in MetalRHI are deferred on AMD GPUs to eliminate empty encoders that don't perform a clear operation. This improves performance slightly.

Mac compile times in Development & higher have been improved at the expense of optimisations in Slate/Editor code wrapped with PRAGMA_DISABLE_OPTIMIZATION_ACTUAL or PRAGMA_ENABLE_OPTIMIZATION_ACTUAL. These pragmas are defined for Apple LLVM 7.3.0 and higher.

Metal is disabled on Mac OS X versions prior to 10.11.4 because the drivers are too buggy. Many issues that users would encounter have been fixed in 10.11.4.

Point-light shadowing on Intel's Metal driver as of 10.11.4 is enabled.

We no longer set shader resources from current uniform buffers in OpenGL when performing a shader predraw - the resources are tracked and set by the shader cache explicitly, so this may just access stale data.

Enabled Metal resource lifetime delay on all platforms, not just iOS, to try to address intermittent invalid resource errors.

Implemented the same stencil SRV fallback on OpenGL as for Metal by executing a blit at resource bind time so OpenGL versions at or below 4.2 can sample depth and stencil at the same time.

Implemented GetTextureBaseRHI for Metal to avoid unnecessary virtual function call chain to resolve the FMetalSurface* from an RHI texture.

Improved the shader cache code documentation.

In Metal, scissor rect is set correctly through the state cache so that it remains in-sync when rendering and things don't clip incorrectly.

Wants Selection Outline defaults to true so that editor selection outlines work reliably.

Fixed a typo in Metal Features enum.

RHI Block Until GPU Idle has been implemented on Metal.

On Mac, we probe IORegistry to provide basic GPU details which is used to implement Get GPU Driver Info and correctly specify the GPU capabilities in Metal RHI.

For performance reasons, we only verify the vertex attribute layout for Metal in debug builds or when using development with the Metal debug layer turned on.

We pull the dmucs coordinatior name/IP from the settings file if it is present rather than the user having to set it - this means you can run distributed compiles using a DistCode coordinator on a remote machine.

When uploading data to Shared memory, Metal textures dispose of the source buffer immediately because it won't be required after the call to Replace Region.

Added an optional Console Variable "rhi.Metal.MaxOutstandingAsyncTexUploads". If the current outstanding count of asynchronous texture uploads is greater than the specified Console Variable, wait for all operations to complete before purging the used buffers. By default, the Console Variable is set to 0, which disables the tracking and the game will use all available memory.

Removed the -fno-fast-math workaround for Atmosphere rendering on Mac Metal and instead modified the shader code to avoid the problem directly.

Removed the hlslcc major version from the Metal and OpenGL shader formats to ensure that there are enough bits to represent the different version components.

There's no expectation that the major version of hlslcc will change and it will soon be removed entirely.

Removed the presentable flag if present when creating a texture for predraw - for some RHIs like Metal this flag is invalid unless there is an attached viewport.

New: Removed duplicate binary files and reduced the size of PDBs for CEF3 to reduce the total download size.

New: Support for the Visual Studio 2012 and 2013 toolchains has been deprecated.

The only supported toolchain for UE4 is now Visual Studio 2015.

Visual Studio 2015 Community Edition can be downloaded from: http://go.microsoft.com/fwlink/?LinkId=532606.

It is still possible to generate Visual Studio 2013 projects.

Visual Studio 2013 projects will be generated if a platform SDK that is not compatible with the Visual Studio 2015 IDE is detected or if -2013 is specified on the GenerateProjectFiles.bat command line.

Visual Studio 2013 projects only allow the use of the Visual Studio 2013 IDE. Projects will always build using the Visual Studio 2015 toolchain, so Visual Studio 2015 will still need to be installed on any PC building UE4.

New: The project Target.cs file can now specify a filename using for a set of signing keys which will automatically be compiled into the executable, restricting the use of pak files to only those signed with the same key

New: UBT writes to the log to indicate whether pak signing keys were found and included in the executable

New: Visual Studio visualizers now support non-ASCII text for FNames (Credit to Yoshifumi Ohtsu of ORCA).

Bugfix: Rebuild now works properly when binary version is installed in Program Files (x86).

Improved cooker performance by several minutes during long cooks by fixing an early out pathway to work properly when a cooked package was not ready to save and was still waiting on asynchronous tasks to complete.

Minor DDC performance improvement when using Get Async Results (move the result instead of copying it). Saves about 15sec during long cooks.

Rendering

New: A new console variable 'r.ProfileGPU.Sort' was added to control the sorting mode of the 'profileGPU' output.

New: A slew of new material functions are available in the material editor:

Texture Bombing: Texture bombing takes a tiling texture input and blends multiple samples with offset coordinates with some flipping and rotation in order to reduce tiling artifacts. It blends to neighbors so it can be used with any textures, not just textures with tiles or borders. This implementation works using heightlerp so that the transition between offset samples avoids soft blending artifacts which can muddy the colors.

Chroma Key Alpha: This is a classic green screen node. It gives some basic flexibility for alpha thresholds as well as a despill mask that you can use to either desaturate or blend additional edge coloration to help remove spill from the original chroma color.

Contrast Preserve Color: This function lets you increase the contrast of a color texture without altering the relative colors. The behavior of this node is similar to what would happen in photoshop if you first duplicated a layer and set it to "Color" mode and then increased the contrast of the original layer.

Luminosity and Color: Similar to above but simply combines a single channel as luminosity with a color input. Also behaves like a combination of luminosity/color layers in photoshop.

Texture Bombing POM: This one is to be used with caution. Definitely way too expensive for any modern consoles, but may be of some use to archvis or cinematic teams. It performs texture bombing with Parallax Occlusion Mapping, which means a unique POM function is performed for each sample, which means 4 times for each use. So this means a POM-Bomb material with only 2 textures will perform hundreds of texture lookups considering the tracing.

Bricks and Tile UVs: This is mostly meant to help bake procedural textures from inside the editor. As a result, some things in this function assume you want the macro offsets to repeat ever 0-1 overall UV. This is important since with the "Stagger" offset, tiles need to match their other half on the other side. So the macro offset pattern is itself a tiling pattern.

Landscape Manual UVW: Returns a 0-1 gradient on each axis encompassing the bounds of the whole landscape based on the input min and max positions. Positions must be manually defined.

1D to 2D Index: Converts a position from 1d to 2d based on given grid size.

New: The "listtextures" console command now prints a stat summary after the list per Texture LOD Group and per texture format.

Bugfix: Corrected a crashing bug in rendering shadows for objects with malformed transforms. The editor should now handle this more gracefully and log information about the offending object with an ensure message.

MaterialParameterCollection will correctly rename entries when duplicate named items are added.

Optimized HLOD transition and visibility logic.

Render view items and LOD level can be frozen in place now.

UpdateShadowShapes now runs on the render thread rather than the game thread.

The variable "r.ViewDistanceScale" can now go above 1.0.

The screen percentage cvar can now be changed dynamically when using PSVR.

FX

New: BoneSocket module in cascade can now be used to spawn from all bones on a skeleton if no SourceLocations are provided. Allows sharing of a single effect across many skeletons.

New: Decal Components now have their lifetimes exposed such that they can be set to automatically be destroyed once the lifetime expires. The decal's lifetime as a t value (0 to 1) is also exposed as a material graph node to allow controlling the look of the decal as it's lifetime expires.

New: Mesh particles now support motion blur. Mesh particles motion blur can be configured to enable/disable based on detail/quality level settings.

New: Particle cutout optimization works on SubUVMovie module as well.

New: Significance feature for particle systems.

Game code can drive the required significance for each effect.

This is tested against an artist defined significance value for each emitter. Emitters can be progressively disabled based on game-specific calculation of the emitter’s significance to the scene.

For example, Paragon uses distance, VFX performance, and relevance to the local player to drive the required significance for its VFX.

Bugfix: Disabled the Seconds Before Inactive optimization for non-looping effects because it can cause them to leak.

Materials

New: Added the option to the ScreenPosition node that will all the node to output viewport UVs.

New: In response to user requests, deferred decals now support a negative in the transform when defining the decal bounds.

In the past, the transform for a deferred decal had to have all positive scale values for the decal to be displayed. So if you had inadvertently hidden any decals in your content by using a negative scale they will now appear.

New: An early (and unfinished) version of Pivot Painter 2 is included in this build. The final and fully functional version of the script and its material functions will be in the next build.

Bugfix: AOMaterialMask restored to working order (was broken in 4.11).

When a stationary light's dynamic shadow distance is > 0 and inset shadows are disabled, movable primitives will to render to CSM which can then be combined with pre-calculated static shadows.

For performance reasons, you must mark primitives which will receive both CSM and static shadows with 'Receive Combined Static and CSM Shadows from Stationary Lights' checked.

However, you can set r.AllReceiveDynamicCSM=1 to enable both CSM and static shadows for all primitives.

Using stationary lights with CSM requires an additional mobile texture sampler. You can reclaim this sampler and disable the feature with the project rendering setting: "Enable Combined Static and CSM Shadowing".

Bugfix: Resolved an issue where Canvas Text Items did not correctly display some Unicode characters when running on an Android devices.

Bugfix: Fixed an issue where Instanced Static Meshes were failing to render all instances when running in ES2.

Bugfix: Fixed possible crash on iOS in which 2D render target components could be initialized before a valid GSystemResolution was available.

Bugfix: Fixed a crash that could occur when editing an asset with an FText property.

Bugfix: Fixed a regression with UI material nodes that required world position.

Sub-fonts in a composite font are now only used when they contain the character to be rendered.

Slate

New: Added slider bar thickness as a new style property in FSliderStyle.

New: Added "Use Application Menu Stack" argument to SMenuAnchor, enabling programmers to create menu anchors that don't open one stack at a time.

New: The MoviePlayer now has an OnPrepareLoadingScreen callback that modules can hook instead of relying on the PreLoadMap, which, depending on when you hook it, may be before or after the movie player. To alleviate that ordering problem - if the movie player goes to play a loading screen and one has not yet been configured this callback will be triggered so that hopefully one is supplied.

Bugfix: Removed a crash in the menu system. Opening a new menu would lead to a window activation change which would result in the old root menu being dismissed.

Bugfix: Fixed an infinite loop when using Ctrl+Up/Down in a multi-line editable text.

Alt-tabbing out of a Standalone App or packaged version of a game will now trigger LostFocus.

Changed a massive amount of things attempting to improve the Slate and VR intermingling. Popup layers should now function on widget components, lots of changes to make focus work better.

Changing the way slate handles mouse enter/leave when the mouse is captured. Widgets in the capture path are now the only ones that get mouse enter/leave messages. Widgets in the capture path now actually get mouse enter messages after leave messages, previously they were only getting leave, along with all widgets you hovered over and later left, even if they were not part of the captor path - those same widgets did not receive mouse enter.

UMG

New: Add support for animating material parameters which are used on brushes.

Bugfix: Editing the navigation of a root UMG widget no longer crashes.

Bugfix: Fixed aspect ratios now correctly size the right side of the screen, so that right-anchored content will fit properly inside the black frame borders.

Bugfix: The user can no longer name an animation with a name the conflicts with a widget name. This fixes a runtime crash.

Behavior Tree

New: Added a handy function to BlackboardComponent, IsKeyOfType, that allows one to check if given key is of specified type.

Debugging Tools

New: Added a way to define class-whitelist for Visual Log so that classes outside of specified list won't get recorded.

It does respect hierarchies, so if object A of not listed class is rerouted to an object B of whitelisted class then vlogs from that A will get recorded as well.

New: Added new version of Gameplay debugger tool: allows easier creation of project specific categories, without need for implementing a separate module. Tool is currently in early access preview state and disabled by default.

Navigation

New: Added an extra parameter to ARecastNavMesh::FindDistanceToWall that allows user to retrieve found location on a closest wall

New: Added project specific flags to navigation links.

New: Navigation Query Filters can now be instantiated per querier object. This allows passing additional variables to custom scoring and filtering functions for pathfinding.

Animation

New: Changed compressed animation data to have additives baked in and removed code in cook that did the same thing. Moved compressed data to the DDC.

Automation

New: Moved code to write config file entries into InstalledPlatformInfo so that it can be reused by anyone wanting to make installed builds.

Added AdditionalBundleResources to the list of external files used when packaging.

Ensures that these files are included in a packaged build.

Tweaked automation test framework by request from UDN post.

Blueprints

New: Added "BlueprintPure=false" metadata to allow const functions to be exposed to Blueprints as non-pure.

Core

New: Added TScopedDurationThreadsafeTimer<> allowing for threadsafe accumulation of cycles to either a 32 or 64 bit cycle accumulator.

New: Added a leak detection malloc proxy that can help track down memory leaks. Must define MALLOC_LEAKDETECTION

New: Added a ToHashSet extension method to IEnumerable.

New: Added AlignDown function for rounding an integer or pointer down to the next alignment.

New: Added an additional scale factor of 75% in the list to generate in GenerateConvenientWindowedResolutions.

New: Added basic custom deleter support to TUniquePtr.

New: Added better stats for SProfilerMiniView::ProcessData.

New: Added debug code to catch memory stomps in the async loading buffers that's independent from mallocstomp allocator. Changed the signature of PageProtect functions to be able to read-only protect memory.

New: Added FixupNeedsLoadForEditorGame commandlet to fixup exports saved with NeedsLoadForClient, NeedsLoadForServer and NeedsLoadForEditorGame set to false and then had NeedsLoadForEditorGame set to true.

Added -IgnoreChangelist option to ResavePackagesCommandlet.

Removed unused code from ResavePackagesCommandlet.

New: Added FThreadSafeCounter64, a 64-bit version of FThreadSafeCounter.

New: New FMallocBinned2 general memory allocator for PS4 and PC platforms. This allocator is better at recycling freed memory blocks across threads and has thread-local caches to reduce contention during concurrent allocations.

Added a new parameter to UEngine::StartFPSChart that indicates whether or not the per-frame arrays should be constructed, true when doing 'StartFPSChart' from the console but false from other programmatic uses.

Updated HTML output total frame time stats to be tracked explicitly rather than computed from the per-frame arrays.

Removed deprecated functions from TArray and TLinkedList.

Renamed GPU analytics event from GPU to DesktopGPU to reflect that it is the default desktop adapter and not the one we initialized (which is GPUAdapter).

Updated text/log based FPS chart events to print out GPUAdapter instead (with DesktopGPU in parens if they differ, e.g., in an optimus setup).

Replaced FMath::Fmod(x, y) with our own implementation on all platforms. Ensure on y=0 input, and return 0 in this case (rather than NaN).

UObjectBase::Name, Class, and Outer have been renamed NamePrivate, ClassPrivate, and OuterPrivate to fix large numbers of shadow variable warnings in VS2015.

Updated UnrealHeaderTool error messages to refer to the new GENERATED_BODY macros instead of the old deprecated ones.

Editor and Tools

New: Added a new virtual function for Actors: IsSelectable(). Overriding this function allows users to make an actor not selectable in some or all cases rather than relying purely on editor modes to determine selectability. For example, if you have a purely transient actor created at editor time for some purpose and it cannot be deleted or edited, you may want it also to be unselectable.

New: Added UEngine::OnComponentTransformChanged delegate to Editor.

New: Transaction notification can now be temporarily squelched for uses of the transaction buffer that do not need to be displayed to users.

New: UActorFactory::SpawnActor now takes a FTransform instead of a FVector Location and FRotator Rotation.

New: Unreal Editor now supports multiple default editor "modes" active at the same time (FEdModeTools).

New: UnrealPak: Improved -diff output formatting to make it easier to save as .csv and view in Excel, also added it to the usage help for the tool.

New: When calling UTransBuffer::Undo you can now specify that the transaction cannot be redone.

Fixed PostEditChangeProperty being passed a null property when editing a vector or transform with a "3D property widget".

Content Browser

This feature is used by the VR Editor to spawn a Content Browser in VR.

Various new options are available for customizing the spawned Content Browser:

You can set whether the sources view should initially be expanded or not.

You can set whether asset paths are shown in the Content Browser. Only useful if you only want to show collections.

You can force collections to be initially visible, regardless of defaults.

You can set a specific collection to view initially.

You can now opt to have no class name label under the asset.

Also, made a small tweak to the default splitter position for the sources view.

Gameplay Framework

New: AActor::ParentComponentActor has been deprecated and replaced with the private ParentComponent use the accessors IsChildActor() or GetParentComponent() instead.

New: Added a new overrideable function UGameplayAbility::ShouldActivateAbility, which can help decide whether or not an ability should be activated.

New: Added AActor::GetIsReplicated() accessor.

New: Added load time printouts to UEngine::LoadMap and the ListLoadedPackages command (load times in the former case are very useful, times in the latter are less so, since it represents wall time from start to finish, and can include overlapping times).

New: AGameMode::OnMatchStateSet is a new virtual that allows game mode subclasses to insert handling between MatchState being set and notification dispatch to the GameState and Blueprints.

New: Avoided using TG_PrePhysics as the first tickgroup so that licensees can add tickgropups. https://udn.unrealengine.com/questions/279126/code-assumes-that-tg-prephysics-is-the-first-tick.html

New: Can now GetActorTransform on AActor instead of having to access each component piecemeal via GetActorLocation/Rotation/Scale.

New: FTraceHandle can now be used as a key in TMaps.

New: GameMode is no longer mandatory to carry over between Source and Transition levels during SeamlessTravel and is instead included as part of the default implementation of AGameMode::GetSeamlessTravelActorList.

New: There is now a OnPostEngineInit delegate on UEngine that is called after GEngine->Init has completed.

New: UActorComponent::World and Owner have been renamed WorldPrivate and OwnerPrivate.

New: UChildActorComponent can now be used as parent class from other modules.

New: UChildActorComponent::ChildActor, ChildActorName, and CachedInstanceData are now private members.

New: UPrimitiveComponent::MoveIgnoreActors is now a transient property array of AActor* instead of a non-property array of AActor WeakObjectPtrs and GetMoveIgnoreActors returns const TArray<AActor*>& instead of TArray<TWeakObjectPtr<AActor>>&.

New: USceneComponent::AttachParent, AttachSocketName, and AttachChildren have been marked as deprecated as a bridge step to their privatization in 4.13.

USceneComponent::SetupAttachment has been added and is intended to be used in constructors instead of setting AttachParent and AttachSocketName directly.

USceneComponent::AttachTo now routes to SetupAttachment when called from a constructor.

Adjusted inline TArray sizes for Component and Actor arrays in FQueryCollisionParams. Used common define between that class and PhysX filtering code.

Avoid multiple iterations with axis flipping in FindTeleportSpot unless we are spawning something. The teleport spot could otherwise be placed on the other side of a wall.

Also avoid using a partial MTD result in EncroachingBlockingGeometry() when one of the MTD tests fails.

Changed UMovementComponent::UpdatedComponent and UMovementComponent::UpdatedPrimitive to be Transient.

They are not editable properties so should not be saved or loaded. UpdatedComponent is intended to be set in Actor constructors or via SetUpdatedComponent() at runtime.

UpdatedPrimitive is initialized as a cast on UpdatedComponent, it should never be loaded either.

Changed FQuat::IsIdentity() to use a stricter tolerance, and check all components rather than just W to better handle very small rotations.

Fixes root motion in character movement introducing error in rotations.

Also increased number of digits in FQuat::ToString() since the 8th and 9th digits are significant for small rotations.

Cleaned up NaN checks in CharacterMovement. Changed checks to ensures to avoid crashing, and added more details in some messages.

Fix root motion source jump forces not providing consistent in-air velocity on their last tick due to partial simulation times being the default. Added settings flag to DisablePartialEndTicks, enabled that setting by default on jump forces.

USceneComponent::Pre/PostNetReceive and PostRepNotifies are now protected instead of private so subclasses can extend.

When adaptive network frequency is enabled and a character moves, force a net update.

This prevents a long delay between movement updates and the client's perception of movement, and avoids choppy movement while replication is ramping up, while still allowing frequency to go down when not moving.

Added UCharacterMovementComponent::ShouldCancelAdaptiveReplication() which checks for location, rotation, or velocity changes, and can be extended to check other values as well.

UEngine::DefaultPreviewPawnClass and DefaultPreviewPawnClassName have been removed.

Localization

Invalid invalid text format arguments now emit a warning.

Arguments that failed to parse as an index (either because they were a string or were empty) previously silently applied fallback behavior. This warning ensures they will be caught as they may break localization by preventing argument re-ordering.

Networking

New: Added a delegate that will be called as soon as a processing timeslice is exceeded while processing network connections in UIpNetDriver (processing still continues afterwards).

Controlled by a new cvar n.IpNetDriverMaxFrameTimeBeforeAlert, set to 1 second by default.

Adjusted existing warning for slow frames due to networking to be configurable with cvar.n.IpNetDriverMaxFrameTimeBeforeLogging (remains at 10 seconds by default).

New: Added a new replication condition, COND_ReplayOnly, for replicating properties only to replays.

New: Added to JsonObjectConverter the ability for a UStruct to emit json as a string if type traits are setup with ExportTextItem / ImportTextItem. Allows a UStruct to convert to json as something other than FJsonValueObject.

New: Small optimization to network actors when beacons are in use. Network actors are only in the relevant net driver list (DemoNetDriver is the one exception). Made NetDriverName private (Use SetNetDriverName to change)

New: The list of network actors to replicate to clients has moved from per-world (UWorld::NetworkActors) to per network driver (UNetDriver::NetworkObjects).

This shouldn't affect you unless you have modified engine networking code, but it is an important step in enabling more networking optimizations.

It also helps simplify the handling of cases where there are multiple network drivers in one world, such as demo and beacon drivers.

Add progress delegate notification for http downloads on PS4.

Added NotifyPreClientTravel multicast delegate.

Default MaxSearchResults in FOnlineSessionSearch objects to 1 instead of 0, so that the default behavior is to find exactly one session instead of completing right away without searching for sessions.

Fixed an issue where during replay playback, FHttpNetworkReplayStreamer was calling the FOnStreamReadyDelegate with an incorrect second parameter, indicating that the streamer was recording instead of playing back.

Fixed FindInactivePlayer and AddInactive player to make sure to use valid unique IDs if they exist.

Removed an invalid assert in FHttpNetworkReplayStreamer.

Online

New: Add an optional parameter "bPrettyPrint" to FJsonObjectConverter::UStructToJsonObjectString and FOnlineJsonSerializable::ToJson (defaulted to true).

New: Add config options [HTTP]CurlMaxSimultaneousRequests and [HTTP]CurlMaxRequestsAddedPerFrame to limit number of simultaneous HTTP requests processed through curl and number of requests added to curl per frame to reduce hitches. Default values are uncapped to retain prior behavior.

New: Added a CheckAvailability function to the hotfix manager that simply checks for different/new/old hotfix files but doesn't apply them

New: Added ParseHttpDate/ToHttpDate functions to FDateTime - parses based on spec found at https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1

New: Added UParty::HasPendingPartyJoin(), which will return true if a player has accepted an invite, but it hasn't been processed yet.

Improved FindInactivePlayer and AddInactivePlayer functions to better leverage UniqueIds per player if UniqueIds are in use in the game. Preferred over comparing via NetworkAddress.

Other

Cooker: Prevented log spew about moving items to chunk X when they were already pre-assigned to chunk X (items that are referenced by other chunk 0 items but hadn't been reached yet in the chunk traversal).

New: Give the ability to turn off face remap table which saves memory in PhysX.

New: Make sub-stepping run on game thread. This is done for safety of various user callbacks and simplifies a lot of the code. The simulation is still not on the game thread of course, but the callbacks are.

New: Prevent non simulating actors from being put in the simulation scene.

New: Remove WITH_SUBSTEPPING as it is now supported on all platforms.

New: Share BodySetup for sphere component. This skips the need to create a NewObject whenever a blueprint with a sphere component is spawned.

New: Update HandlePhysicsCollisions_AssumesLocked so that it can filter hit events and modify impulses.

Fixed FBodyInstance::GetBodyBounds not working on static bodies.

PhysX fix for penetration test returning NaN.

Platforms

Android

Added a way to unregister signal handlers on Android by calling FPlatformMisc::SetCrashHandler((void(*)(const FGenericCrashContext& Context)) -1); (used in VulkanRHI.cpp).

Improvements for debugging. We now use dwarf-4 and don't force inline for debug builds.

iOS

Make Xcode create a copy of iOS and TVOS apps in Payload folder when needed to work around the bug in Xcode where it tries to launch [GameName]-Mac-[ConfgName].app instead of [GameName].app.

Mac

OnControllerConnectionChange is dispatched on Mac when gamepad is connected/disconnected.

RunUAT.sh can now be run from any working directory.

PlayStation 4

New: Added a new interface in the platform features family, IVideoRecordingSystem, and an implementation for Playstation 4.

This interface allows programmatic control over the platform's video recording functionality and allows clips recorded through the interface to be shared via the "SHARE" button.

New: Implemented the SendSessionInviteToFriend and SendSessionInviteToFriends functions in FOnlineSessionPS4 so now invitations can be sent programmatically.

New: Moved BoundShaderStateHistory to the context instead of the RHI to avoid critical section.

Added a log statement when the gap between SubmitDone calls exceeds 2 seconds and removed a duplicate call to set the LastSubmitDoneTime.

Call SubmitDone immediately after flushing the GPU (to ensure it happens during a long frame in case additional work is generated after the flush).

Optimized PrepareForDrawcall.

When checking the results from sceNpGetParentalControlInfo, we no longer check the chatRestriction or ugcRestriction flags if sceNpGetParentalControlInfo returned an error, since these flags are not reliably set in that case.

Xbox One

New: Added support for FSystemWideCriticalSection to Xbox One.

New: Enabled the use of variadic templates on Xbox One.

XInputInterface now dispatches OnControllerConnectionChange messages.

HTML5

New: master build script for HTML5 ThirdParty libraries.

Windows

XInputInterface now dispatches OnControllerConnectionChange messages.

Window positions are now treated as being the top-left of the window client area. This only affects windows with an OS border, and matches the behavior of the other desktop platforms.

Programming

New: Added the ability to query body setup directly for distance to closest point. Added the ability to query closest point on physics asset.

New: Removed all code testing whether we are using a 'Rocket' build.

Changed to check whether build was installed where appropriate, unified behavior in some other areas

New: UnrealBuildTool: Exposed the ability to compile with checks enabled in shipping and test configurations by setting UEBuildConfiguration.bUseChecksInShipping in your Target.cs.

Added a build exception to give a message instead of crashing when trying to generate all project files from an installed build.

Added UnrealLightmass to list of programs to build when Build Solution is used and Editor configuration is selected.

Changed UnrealFileServer to be non-monolithic so that it doesn't include code that is not public.

Ensured that warnings from Dynamic Compilation of build.cs files are propagated up to user when compiling in IDE.

Rendering

New: Added a tiny state cache to the frontend of RHICmdList to get rid of redundant rasterizer and depthstencil states.

New: Added back support for draw event colors.

New: Added code to optionally move the lighting stuff from initviews to after the prepass.

New: Added detailed command list markers for GPU particles.

New: Added display of benchmark results to the 'scalability auto' command output, and also added them to FQualityLevels returned by BenchmarkQualityLevels so user code can make use of them.

New: Added render thread start and stop delegates. GitHub 2006.

New: Added stats down to the emitter level. New -leaf option for stat dump commands. HUD stats now correctly add new stats while the display is up.

New: Allow UTextureRenderTarget::GetRenderTargetResource to be called in parallel. By user request.

New: Allow collision and trail particles to run off the game thread.

New: Allow users to pass in multipliers for benchmark results to Scalability::BenchmarkQualityLevels (to scale the results prior to lookup in the scalability tables for the different quality levels).

New: Allowed spline meshes to share vertex factories.

New: Changed PC to default to parallel rendering when not in editor.

New: Enabled texture streaming over budget tracking even when stat tracking is not enabled (Test and Shipping) (via IStreamingManager::Get().GetTextureStreamingManager().GetMemoryOverBudget()).

New: Merged atmosphere, global distance field and perlin noise into the frame uniform buffer and disabled the BuiltinSamplersUB.

Avoid recalculating shader map ID in a cooked build; it was readily available.

Fixed a critical bug in the render thread fencing that could sometimes cause fences to complete before previous commands.

Fixed an issue with recurisve shader init on consoles.

Fixed async compute submits in the editor.

Fixed memory bug with HISMC.

Fixed race condition on particle system vertex factories.

Fixed recursive shader intialization crash on consoles.

Fixed rotation bug in DrawDebugSolidBox.

Fixed shadows updating static meshes while the prepass is in progress.

Fixed threading bug with atmosphere.

Fixed crash in FHierarchicalStaticMeshSceneProxy related to reflection captures and foliage.

FX

Postprocessing

Optimized allocations in FFinalPostProcessSettings. Fixed bug skipping an element when updating the ContributingCubemaps array if one is removed during an iteration.

Optimizations

Removed unused TangentZDelta_DEPRECATED member from FVertexAnimDelta.

UI

Slate

New: Added a UObject stat around a cache miss in FCompositeFontCache::GetFontFace, so the load time is traceable to the specific asset that is getting unpacked from bulk data.

Upgrade Notes

AI

Debugging Tools

Please check GameplayDebugger.h for detailed upgrade instructions.

Blueprints

No specific upgrade instructions, but the new system will not take hold until a blueprint is recompiled and saved.

Core

Warnings may now issue on load when converting integer properties that lose information. This includes conversions like an int32 property saved as -1, then loaded as a uint32.

Any tools which rely on reading UnrealHeaderTool.manifest will have to be updated to read [TargetName].uhtmanifest instead.

UCLASS, UENUM etc. declarations are now illegal outside of global scope. If you have a type which is nested inside a UCLASS or USTRUCT, they should be moved to global scope.

Editor and Tools

Content Browser

UFactory::StaticImport will now call FactoryCreateFile for both text and binary files. The default implementation will load the file into a buffer/string and call FactoryCreateBinary/FactoryCreateText to preserve legacy behavior. New factories may override FactoryCreateFile to perform their own file processing instead.

If you've overriden AGameMode::GetSeamlessTravelActorList and are not calling Super::GetSeamlessTravelActorList then must make sure to manually include this in the ActorList if you wish the GameMode to persist across the transition.

Localization

Packages that may have failed to correctly serialize in 4.11 should now automatically serialize correctly if they contain an FText property making use of the FFormatArgumentData.

Networking

Fixed byte ordering issues in IP address conversions

Non-desktop platforms now use a single (multicast) socket for Messaging

Simplified IPv4 API to make it easier to use

Added more unit tests, documentation

This also fixes most of XboxOne Messaging support. It is now possible to interact with Xbox One in UnrealFrontend. Until we have support for running IPv4 and IPv6 in parallel in the Editor, this requires a StaticEnd.

Online

Reimplement inherited implementations of void UPartyGameState::InitLocalPlayerPartyData() to UPartyGameState::InitPartyMemberStateFromLocalPlayer(const ULocalPlayer* LocalPlayer) and initialize UPartyMemberState objects one player at a time.

Platforms

From the command line, separate targets with a '+' character.

From the UI, set your Default Deploy Platform to None, then select the check box next to each intended target.

To select multiple targets:

From the UI, set your Default Deploy Platform to None, then select the check box next to each intended target.

From the command line, separate targets with a '+' character.

Programming

UE4 tools now require the Visual Studio 2015 Runtime to run.

Rendering

In case you see "Rendering of stretched decals" you might have to make some small blueprint/code changes to your project, more info see: "Streched decals - fix and details".

The CreateMeshSection and UpdateMeshSection functions on ProceduralMeshComponent have been changed to use LinearColor for the 'Vertex Color' input, as this is properly supported by Blueprints. Existing nodes will need to be replaced.

Lighting

Memory usage for light probes is slightly increased.

Materials

Fixed inconsistency in lighting (in shadow and not in shadow) with SubsurfaceScatteringProfile. A minor retweak of the material might be needed.

C++ API-Breaking Changes

Removed redundant include statement from K2Node_SwitchEnum.

Prevent cheating with consolevariables.ini and added ensure to see where the cheat flag would prevent a cvar from getting set.

Don't use consolevariables.ini for shipping/test. Cheat flag on cvars should be set in code.

Deprecated UWidget::GetEditorIcon and converted existing icon brushes to conform with FClassIconFinder expectations. Users should redefine their icons in slate style sets using the format ClassIcon.WidgetType, they will then get picked up automatically.

GetComponentByClass is no longer virtual, FindComponentByClass should be extended instead.

Timer Handles are now 64-bit values

Blueprint function "Clear Timer by Handle" has been replaced with "Clear and Invalidate Timer by Handle". The older version is now deprecated and should be replaced.

UActorFactory::SpawnActor now takes a FTransform instead of a FVector Location and FRotator Rotation

Any virtual overrides of UActorFactory::SpawnActor need to be converted to match the new signature taking a FTransform instead of a FVector Location and FRotator Rotation.

UChildActorComponent::ChildActor, ChildActorName, and CachedInstanceData are now private members

Direct accesses of UChildActorComponent::ChildActor, ChildActorName, or CachedInstanceData are no longer allowed. Use GetChildActor or GetChildActorName to access those variables. Direct access to CachedInstanceData is no longer possible.

Actor and Component OnClicked/OnReleased events can now be triggered by more than just Left Mouse Button

C++ events bound to OnClick/OnReleased events will need to have the new FKey parameter added.

USceneComponent::AttachParent, AttachSocketName, and AttachChildren have been marked as deprecated as a bridge step to their privatization in 4.13.

Instead of direct reads of USceneComponent::AttachParent, AttachSocketName, and AttachChildren you should use GetAttachParent, GetAttachSocketName, or GetAttachChildren. Direct writes should be replaced with SetupAttachment from constructors or AttachTo once components have been registered.

Changed the OnMountPak file delegate to take an optional FDirectoryVisitor* so that callers can get a list of the files contained within the PAK file that was mounted

Any existing uses of OnMountPak must be updated to pass in a FDirectoryVisitor* (nullptr is fine)

AActor::ParentComponentActor has been deprecated and replaced with the private ParentComponent use the accessors IsChildActor() or GetParentComponent() instead

Direct references to AActor::ParentComponentActor will need to be replaced either with IsChildActor() if simply checking if the Actor is a Child or with GetParentComponent()->GetOwner() if an actual reference to the parent Actor is desired.

Bounds member of USkeletalMesh no longer public, use GetBounds or GetImportedBounds to access now. GetBounds is the expanded custom bounds and GetImportedBounds is the original mesh bounds saved on import.

MTBF analytics is now an Engine feature (moved from Editor)

Removed FEditorAnalytics::InitializeSessionManager(), ShutdownSessionManager() and SessionHeartbeat() from public API

IsReplicated functions on AGameplayAbilityWorldReticle and AGameplayAbilityTargetActor have been deprecated, use GetIsReplicated instead.

UActorComponent::World and Owner have been renamed WorldPrivate and OwnerPrivate.

UActorComponent WorldPrivate is now private instead of protected. Use GetWorld() instead.

UPrimitiveComponent::MoveIgnoreActors is now a transient property array of AActor* instead of a non-propery array of AActor WeakObjectPtrs and GetMoveIgnoreActors returns const TArray<AActor*>& instead of TArray<TWeakObjectPtr<AActor>>&

Any direct usages of MoveIgnoreActors or the return value from GetMoveIgnoreActors will need to be adjusted to operate on direct AActor* references instead of indirectly via the TWeakObjectPtr<AActor>

GetAllocatedSize functions' return type has changed to SIZE_T.

The return value type of GetAllocatedSize functions has changed and may need to be updated in any user overrides of that function.

Actor delegates OnTakeAnyDamage, OnTakePointDamage, OnActorBegin/EndOverlap, OnBegin/EndCursorOver, OnClicked/Released, OnInputTouchBegin/End/Enter/Leave, OnDestroyed, and OnEndPlay have all had a new parameter added to allow binders to know which Actor the event occurred on in cases where a single event entry point is bound to multiple Actors.

All C++ functions bound to any of these delegates will need to have the new AActor* parameter added to them. Similarly any blueprint bindings of a function via the Create Event node will require the event to have the new parameter added.

PrimitiveComponent delegates OnComponentHit, OnComponentBegin/EndOverlap, and OnComponentWake/Sleep have all had a new parameter added to allow binders to know which Primitive Component the event occurred on in cases where a single event entry point is bound to multiple Primitive Components.

All C++ functions bound to any of these delegates will need to have the new UPrimitiveComponent* parameter added to them. Similarly any blueprint bindings of a function via the Create Event node will require the event to have the new parameter added.

Optimized APlayerController::IsLocalController() in the case where the bIsLocalPlayerController is set, or on dedicated servers (always known at compile time).

AController::IsLocalPlayerController() is no longer virtual. It simply checks a new bool bIsPlayerController and the result of IsLocalController().

Added more logging when character is stuck.

UCharacterMovementComponent::OnCharacterStuckInGeometry() now takes an FHitResult parameter.

Changed how Hierarchical LOD system saves out generated content: meshes, materials and textures are now saved into a sub-folder called "HLOD".

Corrected URL path search when using "download maps on-the-fly" to allow pak file fetches to work from paths other than the "root" path.