虚幻引擎 4.5 版本信息
本次4.5版本包含了大家翘首以待的新功能，包括了动画重定向、自动C++热重载、光照贴图UV生成以及动态载入视频贴图。 新的实时光线追踪的柔和阴影让您可以创建具有绚丽光照的动态场景，并且屏幕空间的次表面散射令异常真实的皮肤材质成为可能。 我们对移动平台和主机平台的支持比以往任何时候都更好，本次更新还包括了数以百计的定向改进，使得复杂的在线游戏能够通过主机平台的验证测试。 最后，Unreal Motion Graphics（虚幻运动图形）已经可以使用，这大大地简化了用户界面的创建！
3dluvr, Allegorithmic, Cameron (Alters), Jefferson Pinheiro (Ixiguis), Kyle Rocha (kylawl), Luna (PSG-Luna), leobenaducci, Mathias L. Baumann (Marenz), Martino Giovanelli (Hurricane86), Moritz Wundke (moritz-wundke), Pierdek, Rama (EverNewJoy), Ryan Ingram (ryani), Robert Wallis (robert-wallis), Rick Yorgason (Skrapion), Roy (Shammah), Salamanderrake, Sam Clegg (sbc100), Steve Anichini (solid-angle), Shaun Hedrick (triplefault), Thomas Mayer (tommybear), Tim Donks (timdonks), Temaran, Vitaly Ogoltsov (vogoltsov), Zachary Burke (error454)
同时我们在此要特别感谢Lee Perry-Smith和Infinite Realities (http://ir-ltd.net) ，他们为我们提供了头部模型并帮助开发了Screen Space Subsurface Scattering（屏幕空间次表面散射）。
这对点光源和聚光源也是一样。 我们使用‘Source Radius’（光源半径）来控制光源的大小，以及由此形成的阴影半影的大小。
Distance Field Ambient Occlusion（距离场环境遮挡）功能也使用这些距离场的数据。 您可以使用光照的 ‘Use RayTraced DistanceField Shadows’ （使用光线追踪的距离场阴影）来启用它，对启用了‘Generate Mesh Distance Fields’（生成网格物体距离场）的项目设置的项目进行启用。
现在游戏中的天空有一些近似于高光遮挡的效果。 距离场环境遮挡的计算生成了bent normal，它是在该点位置处表现天空可见度的一个椎体。 将折射椎体与此椎体交叉，将会展现出天空高光的阴影。 这样可以防止在遮挡体附近的泄漏，并且对有些粗糙的材质或是由于屏幕空间限制而令SSR无效的位置使用能产生最佳效果。
我们添加了全新的“Subsurface Profile”（次表面分析）着色模型！ 您可以使用次表面散射来创建栩栩如生的皮肤材质和其它出色效果。
左侧： 不使用次表面散射。右侧： 真实化次表面散射设置
Unreal Motion Graphics（虚幻运动图形）现已可使用，并且默认可用！ 您可以创建全新的“控件蓝图“，并开始设计您的用户界面。 当然，我们每天还是会添加新功能和新改进内容。
在控件的定义方面,我们现在可以完全通过内联来创建UI的风格。 这样用户就可以更好地控制控件的外观，而无需在各种风格间寻找适合于他们项目的内容。 您现在可以在游戏中改变UI风格，这样您可以在任何UI上使用动态材质实例！
Unreal Motion Graphics（虚幻运动图形）现在支持对与分辨率无关的UI的自动缩放。 我们现在对所有游戏提供默认的DPI缩放规则。 您可以在项目的渲染设置中配置此选项。
您无需在工作时关闭编辑器。 您只需正常从Visual Studio或Xcode中编辑游戏代码，然后引擎会立即应用您对C++代码的变更。
全新的高级车辆模块 展示了具有双横臂式悬架的车辆，以及具有地形和许多斜坡和循环的测试跑道！ 您可以使用虚拟现实头盔来运行这个模板。
新的动画重定向系统让您可以使用类人骨架在 不同的骨架间 转换动画！
这个 新项目 的窗口已经经过了重新设计，以简化创建新项目的流程！
您现在可以选择希望使用的硬件和设备类型，引擎会选择最佳设置以供您获得最佳的用户体验！ 当您在 New Project（新项目） 窗口或在Target Hardware（目标硬件）下的Project Settings（项目设置）中创建您的项目时，您可以设置该选项。
现在不会再出现弹出窗口。 (好棒!) 重叠于编辑器的不引人注目的气泡文本会带领您浏览界面元素和不同功能。 编辑器会对您尚未尝试的教程进行提示，但其不会强制您查看任何内容。
一旦您决定要阅读一段教程内容，您可以 点击右键 来查看其它的导航选项（或者点击内容气泡的右上角处的组合箭头）
这个全新的 教程浏览器 提供了对所有教程内容的快捷访问。
您现在可以从此处访问教程、文档、社区wiki以及AnswerHub页面！ 注意 ： 我们已经移动了编辑器内的调试控制台。 您现在可以在编辑器的任意位置处通过按下波浪 (~) 键来调出控制台！
虚幻引擎文档 现在具有新的外观，改善了可读性！ 另外，我们还对主页添加了搜索术语推荐，以帮助您快速查找您所需的主题。
文档现在包含了视频系统 ，以供您搜寻和查看我们所有的视频教程系列！ 所有内容都被组织到了分类中，您可以很方便地查看整个系列的视频。
The Getting Started page has been overhauled to make the most important resources for those just starting out easily accessible.
We added a whole new section over developing for Virtual Reality platforms.
New How-Tos on the Gameplay page - These are overviews of common game components, and examples of how to do them in Blueprints. C++ examples will be rolling out soon, too!
Blueprint Communication Usage - Outlines the different methods of communication and sample use cases, with links in each section for further documentation.
Blueprint Communication Walkthrough - This Blueprint Communication Project will show you several different ways in which you can pass information between Blueprints.
C++ API Documentation greatly improved - A great deal of work has gone into making sure the most common classes, including their properties and function, have good descriptions.
Video Series: Introduction to Paper2D - Learn about sprites & flipbooks while making a 2D game with an animated Character and lifts.
Video Series: Vehicle Time Attack - This tutorial series covers the basics needed to create a simple Time Attack style race completely through Blueprints, using a Canvas HUD and showing how to save game data.
Editor and Tools
New: Unreal Editor can be now built and run on Linux (experimental, not supported yet.)
New: The editor no longer forces capitalization for asset and object names
New: Levels (.umap files) are now visible in the Content Browser, and you can perform many of the same actions that you would on other assets.
New: Documentation link ('?' icon) next to classes in Place mode.
New: Folder Rename can now be done in the Content Browser Path View.
New: Smaller allowable thumbnail size in the Content Browser.
New: Greatly improved the look and feel of the Message Log window.
New: Replaced UI for FBX importing with a simpler, more intuitive interface.
New: Project Launcher UI (still experimental, but can be quite useful for creating custom launch profiles)
New: Classes added via the C++ class dialog in user projects now apply the copyright notice specified in project settings, and the default notice string has been changed to 'fill this out in project settings'
New: UBlueprintFunctionLibrary is now listed in the short-list for the new C++ class dialog.
New: Added a new feature to support morph targets for clothing.
New: Target Hardware can now be picked when creating a new project, which controls the default values for various rendering and engine settings.
The target hardware choice can be changed at any time in Project Settings, and individual settings can be modified in their respective homes as well.
New: Improved the look and feel of splines in graph editors (Blueprints, Materials, Sound Cues, etc...)
New: Added support for mirrored meshes to a Mesh Merging tool.
Various parameters related to tangent calculations can now be adjusted in the Graph Editor section of Editor Settings.
New: Multi-line node titles are now padded to be a multiple of the graph snap grid taller than single-line nodes, allowing the pins to line up when connecting multiple nodes together.
Fix: "Delete assets" dialog no longer requires a force delete when the only remaining references are in the undo buffer.
Fix: Prevented a vertical layout pop in SSetingsEditorCheckoutNotice when the status query finishes.
Fix: Removed extra blank lines from some graph node titles (such as material nodes)
Improved section headings in the new asset menu.
Improved visual language of the ini checkout notice on the project settings dialog, which now lists the actual ini file to be edited and goes subdued when the file is already writeable.
Improved project settings dialog layout, reducing excess padding and hiding buttons that were only relevant for editor settings.
Added widget metadata - arbitrary data can now be attached to SWidgets.
Added a CamelCase break iterator for use by the content browser.
Added an editor notification for when texture streaming is taking a while.
Allowed undoing changes to the Landscape "New Landscape" panel.
Converted SOutputLog to use a multiline editable text control to show its log output.
Disallowed moving matinee Actors to another level if their matinee is open.
Deleted and rename work in the Content Browser path (folder) view as expected. Hotkeys fixed as well.
Deleting an asset in the Content Browser no longer makes it appear as though "Show Folders" is turned off.
Deleting a folder from the Content Browser path view no longer disables "New" and "Import" - it returns focus to the "Game" directory.
Grouped Editor Preferences, Project Settings and Plugin Editor into same tab window.
Improved the validation for working out if a path is too long to cook.
Import textures and materials enabled by default in FBX import.
Many visual and functional upgrades to the stand alone curve asset editor including box select, snapping, and an expanded toolbar.
Message log now opens the correct page when popped up
More asset types feature 'View Documentation' in context menu.
Prevented CallHandleDisconnectForFailure from crashing on travel or network failure.
Prevented new collision initially overlapping existing collision in Static Mesh editor.
Source code access now works in SlateViewer and Launcher.
Shootergame now allows Play From Here from the editor, as Click Plane is now set when Click Location is.
Seperated out the New Project icon and overlay images into seperate brushes so they could easily be replaced.
Standalone Listen Server now works correctly.
Usernames with spaces in them no longer cause UAT command lines generated by the editor to fail.
Fixed BSP geometry disappearing after seamless travel.
Fixed length->length typos in FNavigationPath.
Fixed crash when non-uniform scaling Actors.
Fixed stall when landing on Foliage Actors.
Fixed some IME activation/deactivation issues that could lead to a crash.
Fixed Several classes that didn't make sense removed from All Classes list (Place mode).
Fixed "Build Failure" error after successfully deploying to Android.
Fixed undo transactions for "interactive" changes (e.g. sliding sliders) so they don't flood the undo buffer with one transaction for every sub-step of the change
Fixed "reset to default" button on Actor transform when multiple Actors were selected
Unreal Motion Graphics
New Widget - Scale Box, allows content to be scaled to fit a space with aspect ratio preserving scaling options.
New Widget - Spin Box, allows direct numeric entry and click-and-drag to change the value.
New Widget - Grid, allows non-uniform gridded items to be laid out in the designer, with multiple row and column spans.
New Widget - Size Box, allows you to specify several size rules for the widget and its contents. Sometimes you just need something to be a certain size, this widget enables that.
New Widget - String Combo Box, allows for a list of string values to be displayed in a combobox.
New: Scroll boxes now support horizontal scrolling in Slate and UMG.
The list of events, both multicast and function bindable events now appear in a single unified list when selecting a widget.
The designer has a new gizmo that can be used to configure anchor points when positioning content in the canvas panel.
All widgets now support Render Transforms (Translate, 2D Rotation, Scale, Shear).
The designer now allows you to move widgets in Layout Transform or Render Transform mode.
A new SetInputMode() API on the player controller allows more control over how input is routed. Modal UI's and so on will be easier to setup.
Added grid snapping to the translation layout mode.
When creating a widget you should use the new Create Widget node. It works similarly to the Spawn Actor node and allows variables marked as exposed on spawn to be set.
We now provide default DPI scaling rules for all Slate/UMG UI in games. They can be found in your projects Rendering settings, the default setup performs a linear scaling of the UI based on the shortest side's resolution.
Drag & Drop now has some limited support, though there are still some issues to iron out so that it doesn't create another window to house the dragged content.
In order to implement it, you'll need at least two different user widgets, a draggable widget, and a widget that will act as the drop target.
"Aspect Ratio" menu in designer view renamed to "Resolutions."
All resolutions that match the currently selected one are checked in the Resolutions menu. The current resolution is also displayed in bottom left of designer view.
Added GetText() to TextBlock.
Lots of stability improvements. Bindings are no longer run at design time to prevent many of the crashes witnessed in UMG.
Low level input handling is now possible in UMG widgets, you'll need to override the mouse/controller/keyboard functions and handle the input there.
The game viewport now disables throttling when it contains focus so that Slate UI in the game doesn't trigger throttling in the editor, meaning interacting with Slate or UMG UI in your game will no longer cause the editor to stop updating.
Changing all BlueprintImplementableEvents to BlupeprintNativeEvent on the UUserWidget so that native implementations can handle those events as well.
Palette now properly displays all other Widget Blueprints in the project.
The progress bar now has clean clipping lines when displaying the progress image. It no longer scales the paint geometry, it instead scales the clipping rect, it does this for everything except for FillFromCenter, where the only reasonable thing to do is scale the paint geometry, otherwise a sphere image would be filled using a square. Additionally, I've added Fill directions for TopToBottom and BottomToTop.
Slate color details customization now has a way to toggle the 'Use Foreground' flag using the new 'Iinherit' checkbox.
TextBlocks now have text justification.
Improving the anchors drop down menu to show a preview of the effect it has.
Anchor points can now be animated.
Fixed a few cases where widget functions did not appear in the graph when "Context Sensitive" was enabled.
New: Added debug rendering for pawn/visibility collision on sprites.
Added support for VMI_CollisionVisibility and VMI_CollisionPawn view modes to FPaperRenderSceneProxy
Changed sprite wireframe colors to match Static Mesh display (including differentation for mobility).
New: Sprites can now affect navmesh generation.
New: Support for defining or querying sockets on flipbook assets and components.
Current implementation passes thru sockets defined on each source frame and does not allow authoring directly in the flipbook editor, but it is otherwise fully functional
New: Improved material support on UPaperFlipbook assets and components.
Converted UPaperFlipbookComponent to derive from UMeshComponent, allowing materials to overridden at runtime or via Blueprints.
Added a default material to UPaperFlipbook assets and changed the Material override in UPaperFlipbookComponent to default to null.
This should have no impact on existing content, but allows flipbooks to have a material set once and show up correctly inside of the flipbook editor, rather than requiring it to be set on each instance.
New: Added support for a negative play rate on flipbook components.
New: Added support for choosing project-wide default materials that will be applied to newly created sprites.
Combine various InitSprite variants into one function that takes an init parameters object.
New: Moved Paper2D plugin out of Experimental folder, as only a few parts of it are still experimental.
New: Expose RenderComponent to Blueprints in APaperFlipbookActor and APaperSpriteActor, and add 'pass-thru' metadata so various functions can be called on the component from an Actor reference.
New: Added DLL export to UPaperSpriteComponent and APaperCharacter
New: Added support for manually creating sprites with holes in render geometry.
New: Added class comments to APaperSpriteActor and UPaperSpriteComponent, remove EarlyAccessPreview flag from UPaperSpriteComponent
New: Flipbooks are now created automatically by auto-detecting and grouping names from selection or sprite sheets.
Sprite source region edit mode workflow has been improved, slice up sprites quickly by ctrl-dragging rectangles.
Fixed: Sockets are now drawn at correct location in the sprite editor when pixels/uu is not 1.0
Fixed: Socket gizmo manipulation speed is now correct when pixels/uu is not 1.0
Fixed: Sprites no longer have swapped vertex color channels on iOS and Android devices
Converted FPaperSpriteVertex and FMaterialSpriteVertex to use FColor instead of FLinearColor
Added check() in FLocalVertexFactory to enforce the assumption that the ColorComponent is VET_Color
Fixed: Contact filtering was not being correctly applied in Box2D prototype (also fixes a crash in debug when using Box2D)
Implemented Geometry editor usability improvements.
Autowire new Behavior Tree nodes when dragging off from input an pin.
Blackboard mode is now selectable after undoing a reset of the Blackboard property.
Correct 'current' Blackboard values are now displayed in Blackboard view
Duplicate-named Blackboard entries can no longer be created.
Right-click menu operations on Behavior Tree sub-nodes now work.
Updated Blackboard view when Blackboard is edited in Blackboard mode.
Undo & Redo now properly affect Blackboard entries
Fixed crash on shutdown when editing behavior trees.
Fixed Behavior Tree details was not scrolling when the details panel was larger than the tab.
Fixed crash selecting enum Blackboard key value when enum was invalid.
Importing: Fixed the crash happening when there is multiple roots for the skeletalmesh and importing multiple times.
Importing: Fixed issue with importing lesser frame for animation.
Exporting: Mesh/Skeleton are not grouped any more under BaseNode.
Exporting: Animation now exports time correctly.
New: Added LightingLODBias to Component to adjust Landscape LOD for Lightmass building.
New: Landscape Splines and Spline Mesh Components can now be used on OpenGL ES2
New: Added Landscape Layer Sample material expression to retrieve a layer weight value
New: Landscape and foliage painting no longer requires Ctrl to be held down
New: Improved landscape sculpting tool, it's now continuous and framerate-independent
New: "Tutorial" button is now present in Foliage and Landscape tool panels.
Enabled simulation mode for XY Offseted Landscape.
Fixed save error after moving landscape components to streaming levels when there is foliage with non-shared settings placed.
Fixed foliage tool data internal data corruption when removing instances, possibly leading to infinite loop.
Fixed foliage erase density and reapply density features.
Fixed noise generated when using the landscape flatten tool with a strength greater than 1.0.
Fixed crash when trying to use the landscape painting tools with no paintable layers
Fixed crash when switching levels with the foliage mode open and foliage brush visible
Fixed lighting of landscapes with a negative x or y scale
Fixed crash when replacing material in the "New Landscape" panel with one with fewer material layers (or null)
Fixed Landscape Layer Painting Restriction showing up for sculpting tools
Fixed UE 4.4 generating thumbnails for landscape textures/materials (bloating map size and making saves slow)
Fixed id on landscape physics shapes so that ignoring landscape on traces works
Fixed for landscape export crashing when exporting a landscape with both multiple subsections per component and a visibility map
Fixed: Add Component regression for interpolation height.
Fixed: Play From Here couldn't spawn Pawn.
Fixed: Tessellation index buffer problem for Game Mode.
Fixed: Spawn rate for LODs with GPU particles.
Fixed: Crash when editing curves in Cascade
Fixed: Mesh data orientation had no effect when Camera Facing was enabled.
Fixed: Trail emitters didn't work properly if their source was simulated in local space.
Fixed: Blueprint spawned particle emitters didn't have the proper LOD set after spawning.
Mesh emitters with orbit modules now properly forward ParticleDirection to the material.
Fixed materials for birds to always use ParticleDirection instead of optionally a transformed worldspace unit vector (affects Zen Garden, LandscapeMountains).
Particle Velocity and RelativeTime are now available in the shader as constants on OpenGL ES and Metal.
UParticleModuleLocationPrimitiveCylinder now shows up in the spawn location module menu.
Improved graph rendering
We have polished up how connection lines are displayed in graph editors.
It is now easy to have straight connections between nodes that are lined up, and the shape of the spline has been tweaked to be easier to follow.
New: Added CInterpTo for linear colors, exposed in Blueprints (https://github.com/EpicGames/UnrealEngine/pull/331, EverNewJoy)
New: Added a Blueprint 'Ease' node for interpolating a value using linear, step, sinusoidal, exponential, or circular modes.
Blueprint palette is now hidden by default.
Blank blueprint graphs now show passive instruction text to help guide new users to use the context menu.
New: Can now select World Settings game mode classes from Blueprints drop down on the main editor toolbar.
New: Camera Actors can now be ticked, and can utilize the blueprint tick event.
Compiling Blueprints, PIE'ing, and SIE'ing no longer flush the undo buffer, so you can undo across PIE/SIE sessions.
Category sorting for components was enabled in My Blueprint panel and some information to track the user sorting was added to blueprints.
Script max loop iteration was exposed to the user through editor settings, located in Project->Engine->Blueprints - Maximum Loop Iteration Count.
Added a documentation node to the Blueprint interface. These Nodes have the ability to display UDN documentation inside the blueprint editor utilising the details panel to set the link and excerpt name.
The Blueprint compiler was modified to identify and cull disconnected/inactive timeline nodes so Actor instances do not have redundant timeline components that require resources to check if they require a tick.
DataTable/CurveTable Blueprint nodes: Drop down box for selecting row name.
GetActorsInSelectionRectangle now takes 'bIncludeNonCollidingComponents' option (https://github.com/EpicGames/UnrealEngine/pull/370, EverNewJoy)
New: DataTable can now use UserDefinedStructure.
New: Latent functions can now be added to macro graphs.
New: Moved warnings/error messages to the bottom of nodes, so that pin vertical positions don't change if a node goes into an error state.
New: Member variables in UserDefinedStructure can be reordered.
Added 'raycast' and 'sweep' keywords to relevant Blueprint collision functions.
Blueprints loaded by the Blueprint Diff Tool no longer appear as reference-able in the Blueprint Editor.
Blueprint diff control now shows changes made to the Blueprint's Components and Defaults.
Component picker UI improved, added links to component documentation.
'const' member functions can now be marked BlueprintPure (all 'const' member functions are still treated as BlueprintPure).
Duplicate Blueprint variables with Ctrl+W in the My Blueprints window.
Deleting local variables in Blueprints will not delete all local variables in the Blueprint of that name.
Enum inputs to Blueprint Macros can now be editing inline, no need to create another node to assign the pin to a constant value
Events can no longer be created in Blueprint graphs that do not support events.
Holding Alt+RMB in the graph panel will zoom on the initial mouse position inseat of the corner of the panel.
Improved detection of Blueprints that are deadlocked invoking a recursive function.
Optimized blueprint menu reaction time.
Removed requirement for blueprint node name pins to be non-numeric values (this requirement seems to no longer be present in other areas of the engine).
Sub-graphs will display under their parent graph in the My Blueprint window.
We no longer prompt to reset the transaction buffer during package cleanup after an object is deleted.
Working to stave off circular Blueprint dependency issues (cutting down one destabilizes another)... working on a full-fledged solution now.
Array properties with external Blueprint dependencies were not being fully loaded prior to generating the Blueprint class on load; fixed.
Blueprint assets containing a native component attachment were incorrectly being marked as needing to be saved upon opening; fixed.
Compiling a Blueprint with external dependencies was unnecessarily marking the dependent Blueprints as needing to be saved; fixed.
"Compile Blueprints" automation test in the Session Frontend was marking all Blueprint assets as needing to be saved; fixed.
DataTable Blueprint nodes: fix for Get Data Table Row's Out Row not updating as expected.
Deleting a parent Blueprint while its child Blueprint still exists was causing a crash; fixed.
Enums with redirects could lead to broken connections to Select nodes in a Blueprint graph on load; fixed.
The "Select" node in a Blueprint graph was not working correctly with array types; fixed.
Fixed Function Entry node title when function has a friendly name.
Fixed a crash on cut/delete Actor instance w/ components followed by undo.
Fixed a copy/paste crash in Components mode in the Blueprint editor.
Fixed a crash during garbage collection caused by an uninitialized Actor instance name inside a ChildActorComponent.
Fixed VM crash on compile when a property was accessed externally by a variable node in a dependent BP's construction script.
Fixed an issue that allowed variable drag-and-drop onto a graph when it would create an invalid self reference to an external object.
Fixed issues with "Text" pins stomping eachothers values after duplicating a Blueprint.
Made various node padding values adjustable to iterate on more compact nodes (WIP).
Removed some redundant code from SGraphNodeK2Event::AddPin, relying on the inherited behavior except for delegate pins
When class properties in Blueprints are missing their classes (because they were removed, etc), we replace those class references with an Object class reference, so they can be fixed up.
New: Added auto lightmap UV generation.
Repacks existing UV charts. Will join charts in cases of tiling.
Added to a setting to the FBX import dialog to enable or disable this feature.
Now part of the Static Mesh build process. Properties are exposed in mesh editor under Build Settings.
New: Added r.ProfileGPU.Pattern which allows you to filter the entries when using ProfileGPU. Renamed some other cvars to start with r.ProfileGPU
New: Added shading model SubsurfaceProfile, can specify new SubsurfaceProfile asset on the material or material instance uses SeparableSSS by Jorge Jimenez and Diego Gutierrez.
New: Added warning to renderer settings when a property is not found or set to read-only (read-only isn't always an error since it still gets written to the ini file, it just won't take effect until the next run)
Distance Field Ambient Occlusion Improvements
Asynchronous generation, meshes no longer have to be closed.
Resulting bent normal is also used to occlude skylight specular using an approximate cone-cone intersection.
Optimizations and quality improvements.
Meshes without a distance field representation now receive occlusion.
Added OcclusionMaxDistance and Contrast properties to Movable sky light.
Reflection captures now work with the movable skylight.
Added new show flag to visualize mesh distance fields, which ray traces through the distance fields and gives a sense of their shape.
New: Rendering project setting 'bUseNormalMapsForStaticLighting'
Improves baked lighting quality on low poly meshes with normal maps containing more than just detail normal information.
New: Ray Traced Distance Field soft shadows.
Traces a ray through the scene's distance fields to the light, approximating a cone trace to produce soft shadows.
Needs 'bGenerateMeshDistanceFields' project setting enabled. Same limitations as DFAO.
Supports point, spot and directional lights, once bUseRayTracedDistanceFieldShadows has been enabled.
Point and spot lights use SourceRadius to control penumbra size, DirectionalLight uses LightSourceAngle.
Ray traced shadows on a directional light cover up to DistanceFieldShadowDistance, and can complement CSM by handling the distant shadows.
New: SM4 feature level now supports reflection captures on translucency.
New: Added support for Sky Lights on Mobile.
Exposed project defaults to allow some postprocess settings to be enabled/disabled by default.
Added new material advanced flag bAutomaticallySetUsageInEditor, which is useful to disable on base materials to prevent usage flags accidentally getting set.
Altered buffer visualization assets to be before tonemapper (will make them AA with newer code)
Disable GPU skin passthrough vertex factories from compiling shaders when the feature is disabled.
Game console history works now like auto completion in editor, up to 50 elements are stored, no elements are removed if there is a duplicated
Improved specular handling in the shading model.
Now you can resolve a render target texture without clearing the buffer by simply calling UpdateResourceImmediate(false) on a UTextureRenderTarget2D.
Renamed function SetBrightness to SetIntensity for ULightComponent and USkyLightComponent.
Shadows cast by hidden Actors now update/animate.
Binormals for destructible meshes are now correctly generated. This should fix cases where vertex normals for destructible meshes were wrong.
Static Meshes completely in shadow from a stationary light will toss their static shadowmap data and use a cheaper base pass permutation.
FPrimitiveSceneProxy::PreRenderView / DrawDynamicElements refactored into GetDynamicMeshElements.
Both paths still exist in code during this transition. The GetDynamicMeshElements path is currently disabled, enable with 'r.UseGetDynamicMeshElements 1'.
GetDynamicMeshElements is called once in InitViews, and the resulting meshes are used in various passes.
GetDynamicMeshElements is const and must not modify the proxy, update work should be pushed to the proxy from the game thread.
GetDynamicMeshElements can be called on views that are not in the view family, which allows a proper view for shadow depth passes.
Improved display names and tooltips for some rendering project settings.
Indirect Lighting Cache improvements (character indirect lighting)
Primitives default to interpolating a single point, overall indirect lighting cache update time is 4x less.
PrimitiveComponents have a new advanced lighting property - IndirectLightingCacheQuality. Set to Volume to get the previous behavior.
Added new Lightmass WorldSetting VolumeLightSamplePlacementScale which allows users to reduce IndirectLightingCache cost and memory in their level.
Fixed artifacts when more than 1728 movable components were present.
Lightmass kDOP preallocates less memory, supports Nodes array resize
LandscapeMountains Lightmass memory usage went from 19Gb -> 10.5Gb
Fixed LightFunctions getting disabled with low FOV.
Fixed CustomDepth BufferVisualization asset.
Fixed CustomDepth rendering.
Fixed some bufferVis materials - for some reasons the pins have been mixed up.
Fixed minor banding issues with bright image based lighting.
Fixed ScreenSpaceSubsurfaceScattering with LPV.
Fixed upside down rendering on Mobile projects when using Canvas.
Fixed specular intensity on mobile
Fixed SSR with clear coat.
Fixed responsive AA.
Fixed velocity rendering in stereo.
Fixed specular on movable skylights.
Fixed IndirectLightingCache show flag disabling direct lighting on dynamic objects.
Fixed stationary skylights not getting lightmap mixing.
New: Animation Retargeting between different spaces.
You can retarget animations between different skeletons using "Retarget" feature in engine via multiple options. This feature allows you to create a copy of animation asset to retarget for different skeleton using copy and/or modifying animation itself. If the bone name matches, you don't have to use rig system. If bone names don't match, you'll have to use new "rig" system. If it's humanoid, please use engine Humanoid Rig. If it is not possible, you can create rig from any skeleton, and make sure both skeleton shares the same rig. Then you'll be able to retarget correctly. Check more for documentation.
New: Added the ability to reimport animations in asset browser via right-click.
New: Added option to duplicate curves in animation assets.
New: Added Smart Names to skeleton.
Central dictionary of skeleton string metadata.
Curve names updated to use smart name system.
New: Added marquee selection to Persona notify panel.
New: Added filtering by skeleton for anim asset reference variables in anim blueprints.
New: Added support for blendspaces to play animations with a playrate of -1.
New: Added SkelControl Trail Node in Animation blueprint.
Import Curve support if it's custom attribute of the skeleton node.
Improved undo in the retarget source manager.
AnimNotify: added duration for the Begin event
BlendSpace: fixed issue with not being able to select bone name for Per-Bone Blend
BoneSelection Widget : not property linked anymore
Changed retargeting logic to deal with AnimSequences that are referenced by other AnimSequences.
New sockets are created with the name of the parent bone instead of variations on "NewSocket".
Persona viewport fitting when focusing on a mesh improved.
"Step" action in blueprint debugging mapped to F10 now. Possess/Unpossess moved from F10 to F8.
Stopped transition nodes being selected instead of the new state nodes when dragging from an existing state nodes.
Turned off notify processing when generating animation thumbnails.
Fixed intermittent realloc crash in Persona.
Fixed Anim Notifies ending up with end offsets when not a state notify.
Fixed Anim Notify States jumping around when dragged
Fixed begin and end snaps appearing on the wrong side of a notify when dragging.
Fixed smart name serialization issues.
Fixed discrepancies in socket assignment in animation assets.
Fixed notify sorting issue causing notify nodes to move around erratically in the panel.
Fixed undo not working correctly on notify objects.
Fixed crash in skeleton when copying animations with curves between them.
Fixed Montage debug display to correctly show weight information.
Fixed manually entered LOD screen sizes from snapping to invalid values.
Fixed "New Notify" menu not showing derived animation notifies.
Fixed crash with multithreaded animation evaluation.
Fixed erroneous references showing up on the delete asset dialog for Blendspaces/Montages after their thumbnails had been generated.
Fixed additional meshes display UI (previously added items were invisible on the UI)
Fix for GetCompletionHandle returning NULL.
Fixed crash when retargeting assets that have no skeleton.
Fixed bug where changing the initial time position of an animation on a skeletal mesh via the details panel didn't cause the mesh to update.
Fixed issue with adding AnimComposite to World.
Gameplay and Framework
New: Added support for ticking ability tasks.
New: Added support for a negative play rate on timeline components.
Added support for an active GameplayAbility blocking other abilities from activating based on ability tags.
New: Added FGameplayTagCountContainer struct, which contains a counted set of GameplayTags.
New: Added target homing ability to the Projectile Movement Component.
New: Added conditional loop decorator.
New: Added CleanupMemory function to BTNode class.
New: Added csv parser.
New: Added ability to specify a font hinting algorithm to use when rendering fonts with slate.
New: Added setting to allow for 'transparent' box selection in perspective viewports.
Enabling this setting will allow marquee box selections in perspective viewports to select Actors even if they are fully occluded by other Actors.
New: Added constant-velocity versions of various interpto functions.
New: Added AActor::UnitializeComponents and UActorComponent::UnitializeComponent to pair with the existing InitializeComponent(s) functions.
New: Added EQS Logging to Visual Logger.
New: Added editor option to draw/visualize NavOctree.
Behavior tree service notify moved from execution start to search start for better results with condition checking services.
New: Can now create a new blueprint directly from button next to class dropdowns for classes that are blueprintable.
New: Converting a TSubclassOf property to a TAssetSubclassOf property will now work automatically. Automatic conversion is also now supported for converting arrays of UObjects to arrays of TAssetPtr
Added code to UAT to support platforms that compile unique executables but use cooked data from a different platform. It is currently not accessible from the command line
Enabled EQS Debugging as part of Gameplay Debugger - it works with client-server games too. It's disabled for projects without EQS.
Extended LogVisualizer tool. It's possible to select and render specific EQS query data.
Extended GameplayDebugger to collect EQS data from Pawn and AIController simultaneously (some queries can be executed on pawn and some on controller)
Extended Visual Logger and UObjects can log data directly. There is no need to log only from Actors any more but there is a catch - object has to redirect his logs to Actor and this Actor will own logs.
Extended GameplayDebugger data view for Simulate in editor. Properties from GameplayDebuggingReplicator Actor (Actor visible only during Simulate) can be used to switch debug views.
Enhanced debug information for single item in EQS Debugger (GameplayDebugger feature).
New: GetGlobalTimeDilation blueprint node is now available.
GameplayDebugger can debug multiple EQS queries now and we can switch between them to view selected one.
New: IsGamePaused is now available as a blueprint node.
Added SetSupressViewportTransitionMessage to library functions.
Added some extra info to the check in RecompileBlueprintBytecode to indicate which blueprint has an invalid genrated class.
Added several string manipulation functions to blueprint string library.
Added metatags to many widgets for new tutorial system.
Changed viewport transition message to default to off.
Max agent step height can be defined per navmesh.
Many functions in the identity and session online subsystem interfaces now have overloads that take an FUniqueNetId instead of a LocalUserNum.
These overloads are useful on platforms that can have user-controller mappings that can change arbitrarily, or are not necessarily one-to-one, like Xbox One.
Removed RenderingSettings.h and AudioSettings.h from Engine.h, including them where actually used.
The "Read Leaderboard Integer" Blueprint node now works correctly for Google Play on Android.
Project settings can now be accessed quickly from the Settings menu on the editor toolbar. World settings moved in to the Settings menu instead of having its own button.
New: ToggleDebugCamera camera rotation now works with touch input (or when bUseMouseForTouch=true).
Removed MinimalAIP from UCurveBase and UCurveLinearColor to allow extending in another module (editor.)
Also made UCurveLinearColor::GetLinearColorValue() function virtual to override.
New: Split Pin for blueprint struct pins is now enabled for all users and is no longer an experimental feature.
Fix: Camera frustum visualization is now updated when camera component properties are modified.
Added check for level bounds while adding to NavOctree.
Added AActor::FinishSpawning to compartamentalize duplicated steps in numerous places. Ensure it only gets called once.
Added dynamic allocations for path finding, removed hardcoded limit of 128 polys in path corridor.
Added support for projecting multiple points on navmesh and raycast with known starting poly.
Added go to C++ file and documentation to right clicking on content browser assets.
Added localization gathering from native, fixed-size array properties.
Added Brazilian Portuguese and Spanish translations to UE4.
Added workaround for .NET framework issue with Chinese cultures in OneSky logic.
Added workaround for OneSky giving project names with an appended null-terminator.
Added IsUsingDefaultBounds to ALevelBounds to indicate that because there are no Actors in the level that contribute to the bounds, the default bounds are being used.
Added a slow task for adding sublevels to a persistent map.
Added CulturePointer.h, which typedefs ThreadSafe TSharedRef and TSharePtr for FCulture. These should be used instead of the manual template instantiations for consistency.
Added a command line option (-nosharedpchs) to UBT to disable shared precompiled headers.
Added Cultures-to-Stage list to Project Packaging Settings. Default value includes only English. Packaging now only stages specified localization data as per the previous comment or by passing "-CookCultures=".
APlayerController::DeprojectMousePositionToWorld and DeprojectScreenPositionToWorld both now return false when unable to deproject, due lack of mouse cursor, valid scene view, etc.
APlayerController::GetMousePosition now returns false when a mouse is not attached.
Attachment replication now takes into account RelativeScale3D.
SimulatedRootMotionPositionFixup: handle zero play rate, and better communicate "Server ahead of Client" pre-requisite.
Removed SkeletalMeshComponent dependency on Character.
Character controlling its Mesh TickPose(), so that only its mesh is affected by it, and not every SkeletalMesh attached to it.
Better NavMesh rendering performance when using GetDynamicMeshElements way.
bIgnoreForFlushing is now propogated from AudioComponent to ActiveSound and works when used for Play In Editor.
Culture fallback logic improved and made consistent - any locale can be used if its internationalization data is present and some parent of it has localization data.
Corrected issue with ICU internationalization data and UE4 localization data not being properly staged.
Consistent localization-related commandlet path-handling with regards to relative paths. From now on, please specify paths relative to to the project's directory or the Engine directory.
Clear smoothing state when Time Dilation changes to avoid lagging sensitivity artifacts.
Clicking on source links in blueprint projects now works correctly.
Continued work on in-editor mobile preview. This feature can be enabled from the experimental editor settings, and then selected from the "Quick Settings" menu.
Improvements and fixes to resolution switching functionality, and initialization precedence for all our various config files.
Datatable editor now refreshes correctly when the datatable is reimported.
DrawDebug* blueprint nodes now have a consistent API.
Dynamically bound nodes are now found in function graphs as well as the main event graph.
EdGraphSchema constant variables are now static variables.
Ensured that Actor's in levels that have been unloaded do not get a tick if they were already scheduled.
EnableInput will always create an InputComponent if one doesn't exist even if there are no BP bindings to add.
Enable Static Mesh Collision view, by default.
FKey is now a BlueprintType.
FEdGraphSchemaAction now uses FNames instead of FString for RTTI.
FAttenuationSettings properties now properly marked as BlueprintReadWrite.
Geometry edit mode now has a UI priority order.
Gathering from assets and metadata nows loads required modules before trying to load packages. Specify modules using ModulesToPreload in the commandlet config files.
Generating archives will now fail if the archives are of the wrong version. This helps to avoid users losing data due to a resave with a different verison and not being able to repair the old data.
Input stack will no longer be cleared when initializing player input as other Actors may have already pushed their input component on to the stack.
Improved messages regarding falling back to the base language of a culture when there is no localization data for the specified culture.
Launching PIE-V as Client, with a Dedicated Server no longer crashes.
Many places that were using FActorIterator now use optimized TActorIterator as appropriate
Moved the per-user DDC cache into a version-agnostic engine folder.
Modified TArray::FilterByPredicate to be const correct (passes const data to the predicate and is a const function itself)
Moved the Release/Development shaders button functionality to a CVar.
Modified reimport analytics to clarify exactly what file type was reimported.
Multiple clients are now spawned correctly when launching a listen server.
Newly spawned Actors in the editor now have more correct unique names.
Optimizations for GameplayDebugger, both regular and related to network data replication and replication channel bandwidth.
Pawn's move action won't be paused by non-move actions.
PIE prefix is now properly stripped when looking for GameMode based on map prefix.
PushInputComponent will put the input component in to the stack even if there are no bindings.
PinFriendlyName is now used consistently across the UI
Primitive component's bCanEverAffectNavigation flag can be now changed in instances
Purge duplicate AxisConfig entries in cases where the ini files have gotten messed up.
PlatformApplication's IsMouseAttached exposed to SlateApplication.
Rich tooltips added to brushes in Modes window.
Recompile-on-startup now shows the project name and file names for out of date modules.
Shaders are now included in projects for standalone games.
Sprite and GPU particles now support Custom UVs.
Switch Enum now uses a proper enum typed pin rather than a generic byte
Streaming strategy for textures calculated based only on primitive mobility settings.
Turning off Surface Snapping in the editor viewport now prevents surface alignment during placement.
Transforms for mesh particles are now passed into the vertex shader correctly. Still not available in pixel shaders.
Transition map for seamless travel correctly marked as Game or PIE world.
Types in blueprint pin tooltips and variable type pickers are now displayed in more readable format.
UAnimInstance::GetWorld() will no longer crash when called on the Class Default Object.
WidthScaleCurve property of trail anim notifies now searches and auto-fills bone names.
@param and @return portions of blueprint functions/events will no longer display in tooltips.
Renamed all localization data and code using the erroneous "zh-CN" locale instead of the correct "zh-Hans-CN" locale for China.
Reworked the new project dialog.
Categorized templates into Blueprint/C++ templates and organized them into tabs.
New categories can be specified in the templatedefs.ini file of a template project using a Category tag: Category=NewCategory.
New category types can be registered with a proper description and icon in code through FGameProjectGenerationModule::RegisterTemplateCategory.
Added preview images to templates.
Generally tidied the UI.
Added hardware targting options to the dialog.
Replaced crude csv parsing (used for data table importing and the like) with FCsvParser use.
Removed deprecated editor mode API that was marked for deprecation in 4.3.
Removed the built in shaders option from the material editor.
Removed unnecessary game thread task from FRecastRenderingSceneProxy.
Removed circular dependency between AIModule and GameplayDebugger.
Removed logic in PO import/export that failed to read/write from culture directories if only one culture was specified.
Reduced UE_VLOG overhead when recording with disabled visual logs.
Refined text rendering on content browser thumbnails.
Switch Node Polish
Name and String have + Add Pin button.
Enum doesn't display Remove Execution Pin on right click.
All types have proper default in selection box.
Add call to EndPlay for quit in standalone game.
Move logic for when to dispatch EndPlay in to a non-virtual RouteEndPlay function.
Only call EndPlay if the Actor has been initialized and the world has begun play.
The physics scenes for a world are now destroyed after cooking a package containing the world. If multiple worlds are in memory at cook time, too many scenes were being allocated and causing a deadlock when locking a scene for read/write
Moved asset thumbnail dirtying code out of ContentBrowserSingleton and into AssetThumbnail.cpp. Updating thumbnails is not the responsibility of the Content Browser since many systems use thumbnails now.
Path pickers that allow context menus will once again allow the creation of a new folder. This also fixes the bug where pickers configured to the extend the menu actually never get a chance to extend anything.
Made the default level streaming class an editor user setting.
Reduced the number of GetTimeStamp calls when checking for DDC files by 1, which reduces I/O burden on the shared DDC a little bit.
Worlds with no Actors in them no longer crash in PostLoad.
Added null checking for missing expressions and comments when fixing up materials on load.
Expanded the particle system audit commandlet to find particle systems with a high spawn rate or far lod distance.
Added FPackageName::ObjectPathToPackageName to match ObjectPathToObjectName
You can now configure which asset types cause a forced GC in the cook commandlet. By default, world assets cause this to happen, which is the existing behavior.
Asset pickers no longer match an asset's class name if there is a filter for exactly one class.
All path views are now affected by the "Show Engine Content" checkbox (and show developers and show plugins), not just path views found in content browsers.
SAssetPickers can now save their view settings. The SAssetDialog saves it's asset picker view settings.
Deprecated ULevelStreaming::PackageName in favor of the new WorldAsset TAssetPtr. All existing usage of PackageName has been replaced with GetWorldAssetPackageName() and SetWorldAssetByPackageName().
If you have Actors from multiple levels selected, you can now move them to the selected level via the level browser. It will only move Actors that are not already in the destination level.
Added support for removing dynamic mount points. Added more information to the OnContentPathMounted delegate as well.
TAssetPtr UProperties now properly report string asset references when saving packages. Also, string asset references with empty values no longer include "None" in the list of references.
Clicking on a folder in any SPathView in the editor will now prioritize discovering assets in that folder.
Removed the "Show only assets in selected folders" editor preference for the Content Browser. This is implied from "Show Folders" and should have been removed when folders were added.
Illegal characters in names are now only reported once, even if they show up in the illegal characters or test string list multiple times.
Fix for loading the mainframe module while in a commandlet. There are no key events when running in a commandlet.
Fixed a performance problem in the editor when discovering paths in the project initially.
Fixed Character and PaperCharacter not properly setting Mesh/Sprite tick pre-requisite to happen after MovementComponent tick.
Fixed uninitialized bounds in some circumstances for NavLinkRenderingComponent.
Fixed minor bug where referencing packages would show up multiple times when fixing up multiple redirectors referenced by the same package.
Fixed some problems that caused code bases that excluded code for certain platforms to generate projects correctly.
Fixed a bug where not all assets would be removed from the disk cache in the asset registry when deleting a package containing multiple assets.
Fixed a rare crash involving releasing the AdjacenctIndexBuffer on Static Meshes.
Fixed inertial scroll not being cancelled when entering overscroll.
Fixed not being able to import FBX animations into camera anims.
Fixed measure tool calculating the wrong size.
Fixed crash when hot-reloading the Level Editor.
Fixed resetting cooldown decorator memory on reentering the same subtree.
Fixed infinite loop decorator hang.
Fixed cycles in blackboard's parent chain.
Fixed multiple nodes connected to special pins in behavior tree editor
Fixed box collision export for navmesh.
Fixed navigation path's string pulling.
Fixed crash in UEditorEngine::TeardownPlaySession.
Fixes for Simulate mode in blueprint component view.
Fixes inside FRecastRenderingSceneProxy to work with GetDynamicMeshElements correctly.
Fixed bug where blueprint node warning/error banner did not display if the message had multiple object parameters and the last one isn't a pin or node.
Fixed bug where sounds could be started by thumbnail worlds.
Fixed crash with ChildActor component due to renaming to an object name that is already used.
Fixed Doppler not working when showing debug information about playing sounds.
Fixed garbage collection issues with some playing sounds that are not referenced via an audio component.
Fixed crash in AGameMode::Restart if the Pawn is torn off (destroyed) during the call to PossessPawn.
Fixed crash in treeview with negative index.
Fixed null ptr crash in undoing camera group modification.
Fixed debug rendering for NavMesh collision geometry
Fixed freeze issue with AIMoveTo blueprint node.
Fixed compilation issues with disabled USE_EQS_DEBUGGER flag.
Fixed crash in EQSRenderingComponent.
Fixed EQS debug data for sorted EQS items (it's slower method to sort items but only active with USE_EQS_DEBUGGER flag).
Fixed rendering for paths (from path finding) while using GameplayDebugger (client/server too).
Fix for null ptr crash that can occur if ending a PIE session when slate widgets are active (viewport gets cleaned up before the widget).
Fix for LogVisualizer, to get rid of duplicated Actors on logs list.
Fixed order in which serializing text marks packages for requiring localization. Resolves issue where some text was not being gathered from assets for localization.
Fixed improper iteration over directories when trying to enumerate which cultures have localization data.
Fixed an issue with passing a gather text configuration file path featuring spaces when running the GatherText commandlet.
Fixed text test that was incorrectly comparing the number of code units in a string of one type to the number of code points in another type.
Fixed case insensitive source string comparison when checking if multiple UTextProperty are identical.
Fixed locales/cultures that don't have base language localization data being omitted from region & language drop downs.
Fixed GatherTextFromSource commandlet gathering text in its escaped form - it now unescapes gathered text. Fixed escape/unescape handling in PO file import/export.
Fixed escaping of double quotes when storing manifest/archive strings from their data structures into a JSON object. The manifest/archive JSON serializers already properly escape text consistently before writing to file.
Fixed FUProjectDictionary incorrectly treating projects as foreign when non-foreign projects are specified with a relative path.
Fixed it so scalability settings are correctly written to the user config file when saving settings, and are properly reset to in memory values when reset.
Fixed several issues that occurred when reattaching components while changing graphics quality settings.
Fixed a bug where FText could become corrupted while editing assets.
New: FName case preservation in the editor.
Previously, built-in names would prevent users from using the same name with different case
FName is now case-preserving when WITH_CASE_PRESERVING_NAME is true.
You can no longer assume that sizeof(FName) is 8-bytes (you can use FMinimalName if you have code that requires an 8-byte name, however this should only be used if the code cannot otherwise be updated).
FName no longer has GetIndex(), it has GetComparisonIndex() and GetDisplayIndex() instead.
Added "-WaitForDebugger" command-line option.
When specified, non-shipping UE4 programs will pause at startup until a debugger becomes attached.
Very useful for remote debugging code that executes at startup time (such as a plugin's StartupModule function).
Added an ensure >0 to FBlueprintCoreDelegates::SetScriptMaximumLoopIterations
Added compiler version logging at engine startup.
Detects both Clang and Visual C++, prints version information to log.
Added ensure messages to the crashes.
Added descriptive error messages when UHT fails to create .generated.h files.
Added automation tests opt-in for console.
Added UTF8 support in FOutputDeviceFile.
Added support for external content for plugins.
DataAgeThreshold=N can now optionally be supplied as a command line argument to BuildPatchTool.exe, where N is a number of days.
If specified during a patch generation operation, only existing data aged less than the supplied parameter (in days) will be considered for reuse
If specified during a compactify operation, only data aged more than the supplied parameter (in days) will be eligible for deletion
These changes have been made to allow for concurrent patch generation and compactify operations on the same cloud directory, during which patch generation should have a lower threshold than compactify.
Exposed UNavigationSystem::OnNavigationBoundsUpdated for BP use and changed the param to a more specific ANavMeshBoundsVolume type.
FName is now case-preserving in the editor and UHT.
This addresses a number of issues where asset, Actor, blueprint component, or variable names could not have mistyped names corrected when they differed only by case, or could cause UHT to generate code that would not compile.
Implemented a generic BTTask for making AI face given BB entry.
Improved error message when GGameName (derived from the .uproject name) mismatches the GameName key in the [URL] section of DefaultGame.ini
IGenericTeamAgentInterface can be used to query team's attitude towards another team.
Made ARecastNavMesh::GetRecastNavMeshImpl protected to that it can be used by derived classes.
Made navmesh query filters virtual by default.
There is still a way to have non-virtual filters, configurable via ARecastNavMesh::bUseVirtualFilters.
Can be controller per filter instance as well.
Made navigation generators public and expandable in external modules.
Made Build Patch Services and BuiltPatchTool public again.
Added BuildPatchTool command line options to add custom fields to the manifests it generates. These new options are: -custom="field=value", -customint="field=value" & -customfloat="field=value"
Minor fixes related to using the FCString.
ScriptPlugin: Added helper project and instructions how to set up LUA to work with UE4.
Fixed an issue with the FPSChart functionality.
Fixed missing property names in 'obj refs' output.
Fixed parsing enum default values in UHT.
Fixed crashes on long compilation command lines.
Fixed TMap move semantics.
Fixed failure when packaging for WindowsNoEditor in UnrealFrontend.
Added the OnlineFriendsInterface.h to Online.h so that UE4 code projects can access online social features.
Changed default label of BTDecorator_Blackboard to more explanatory "Blackboard Based Condition"
Compile time improvements - headers in Engine module include only what they need.
FDateTime and FTimespan can now be edited in the Property Editor and were also exposed to Blueprints.
Optimized invocation list compaction in multicast delegates.
Crash fixes to some NavigationSystem's extreme use cases like enormous navmesh bounds or zero-extent bounds.
Fixed marking a FBlackboardKeySelector as accepting "None" as value breaking key ID caching.
to use the run-removal implementation from TArray::Remove
FMath::LineBoxIntersection() parameter simplification.
TOptional has been refactored, and is now suitable for use with non-POD classes
TOptional will now hit a check() if calling GetValue() on a TOptional that's not set, if you hit this replace your call to GetValue() with Get(DefaultValue) or check IsSet().
Fixed EQSTestingPawn crashing the engine if it got loaded with a level.
Fixed FunctionalTesting crashing when parsing invalid repro-string.
Fixed a bug in ARecastNavMesh::BatchRaycast causing NaN hit locations.
Fixed navmesh not generating for navigation bound volumes from levels added to a persistent level in the editor.
Fixed UNavigationPath.PathPoints not getting updated with changes to the actual observer navigation path.
Fixed ANavigationData::TickActor not calling Super::TickActor.
Fixed broken formatting tokens in FTimespan::ToString()
Added static Make() methods for the various derived FMatrix types.
Allows single expressions that return an FMatrix instead of derived type constructors that rely on implicit conversion..
Simplified the implementation of FQuat::MakeFromEuler.
Implemented GetTypeHash for FVector4 and FLinearColor.
Provides a uniform set of operations for classes that can be used as a spatial transform.
Allows users to focus on intent and not math when working with spatial hierarchies like rigid bodies, etc.
See documentation in TransformCalculus.h
Provides a full suite of conforming transform types for 2D transformations:
Provides adapters for existing 3D transform types in UE4:
Unreal Header Tool
UnrealHeaderTool now supports C++11 scoped enums, aka. 'enum class'
Clarified a couple of error messages that sounded like keywords were limited to only multicast delegate properties (when they are also applicable to functions)
Unreal Build Tool
New: UnrealBuildTool now starts up more quickly (faster C++ iteration times).
New: Unreal Build Tool now display friendly action descriptions when compiling locally on Windows platform.
UnrealBuildTool macros are now consistent across configurations.
UnrealBuildTool now gets the cl.exe from the executable itself rather than the registry, for better compatibility with non-Professional editions of Visual Studio.
Now it deletes old and unnecessary hot-reload PDBs.
RPC UFunctions will now generate virtual X_Validate() functions so they can be overloaded if the function itself is virtual.
Fixed detection of hot-reload compilation if other UE4Editor process was running in the system.
Solution files created for GitHub builds of the engine now set the game to as the active project by default.
New VS2012 projects now include default command line arguments for all projects.
UnrealVersionSelector now prompts to browse for an engine installation if an existing one is not found.
Registering shell extensions now fixes up any stale user overrides for file associations.
UnrealBuildTool now correctly handles user-supplied resource files, and will ignore PCLaunch.rc when they are present.
UnrealVersionSelector now warns when trying to generate projects for content-only games.
New: There is a new stats page for Cooker Statistics in StatsViewer
StatsViewer: Now shows hyperlinked arrays of objects
Added a command 'stat display' which may be used to change various stats display settings
Updated comment regarding stats commands exec.
Fixed minor memory leak.
Fixed FPS Chart not working in the previous version.
Crash Report (probably not very useful for licenses or rocket users)
Crash report receiver is now more reliable, requires less maintenance work.
Crash report client
Added analytics to the crash report client
Crash report website
Added an option to filter buggs by the build version/ or by the crash type
Added displaying the MachineID/EpicID
Added ErrorMessage to the website, error message can contain following values: description from asserts, description from ensures, description from fatal errors or can be empty for unhandled exceptions
Hot-Reload now supports structural changes to UObject-derived classes. It's no longer disallowed to add/remove new properties and classes for hot-reload.
Hot-Reload from IDE: when compiling game target that's currently open in the editor from Visual Studio, the editor will automatically perform hot-reload after compilation has finished.
After hot-reload all default class object will be re-created to match the changes made to the default values.
When performing Hot-reload when the target project is up-to-date, no new DLLs will be produced, thus reducing iteration times.
Slate UI System
New: Multitouch is now supported for mouse capture in Slate and UMG. Actions like pressing and holding a button, while pressing a different button now functions correctly
New: 2D render transforms have been added to Slate. Render transforms allow short, transitional effects for a widget without affecting how it is laid out. They support a complete set of 2D affine transforms (translation, rotation, shear, scale, mirroring).
New: Added image support to rich text editing.
MultiLineEditableText can now be used to edit rich-text (there's a demo in SlateViewer)
TextBlock and SpinBox now support a minimum desired width for layout. Added a SerializeFromMismatchedTag to FSlateColor that can convert an FColor or FLinearColor property to an FSlateColor. Implemented scrolling for SMultiLineEditableText. STextBlock can now specify a justification, margin, and line height percentage. SRichTextBlock now takes its text and highlight text as an attribute. SEditableText, SEditableTextBox, SMultiLineEditableText, and SMultilineEditableTextBox now automatically work with virtual keyboards on mobile devices. Currently only single-line entry is supported.
Added GetLocalToScreenTransform. (Screen space == Desktop space)
Added GetLocalToWindowTransform (Window space == Desktop space without the window offset)
Added three texture atlasing padding styles:
NoPadding - don't apply any padding (used to be Padding == 0).
DilateBorder - copy border edges to apply 1-pixel padding (used to be Padding == 1).
PadWithZero - expand 1-pixel border and fill it with zeros (new style).
Removed incomplete support for Padding > 1. It wasn't useful as we don't support mips or aniso filtering.
FontCache now uses PadWithZero padding to improve the appearance of zoomed text.
Added support for the new transform calculus framework (TransformRect).
Added new members GetBottomRight() and OffsetBy().
Added FromPointAndExtent() factory function
Made the default/4-float ctor explicit.
Supports FSlateRect-like functionality, but for parallelograms induced by render transforms (scale/shear/mirror).
Also added IsUnderLocation() and ToBoundingRect() for overlap testing.
Slate now uses Round instead of Trunc to snap to integer pixel coordinates. Snapping only occurs on final vertex creation now.
Added a ScissorRectBox widget that ensures child widgets are clipped even under render transforms by using hardware scissor rect.
Scissor Rects can be nested. A widget is clipped by scissor of the most recent predecessor.
Expect a performance impact beyond the hardware overhead as this affects batching similar to painting to different layers.
Fixed SScrubWidget::OnPaint drawing the draggable bars with an incorrect offset.
Fixed crash when using SLATE_TEXT_ATTRIBUTE with a delegate that had become invalid.
Fixed crash when pressing return in a read-only text box.
Fixed some wrapping issues when using multi-line text with an STextBlock.
Fixed issue where the bar of a Slider widget did not appear on mobile devices.
Fixed crash when re-styling zero-length text runs
New: Sound Class for VOIP audio component can now be specified via the audio project settings.
Enabled Audio Streaming options behind a new setting in the 'Experimental' section of preferences
Added Audio setting to restrict the amount of streaming sounds that can play concurrently.
Ensured that additional channels for multichannel sounds can be imported correctly.
Ensured that new sounds started via 'Play Sound Attached' would be audible before playing.
Fixed problem with Parameter controlled Crossfade SoundNode.
Exposed Audio Component for the Buggy engine in the Vehicle sample.
Added search capability to key selection boxes.
Moved Streaming Manager update out of the expensive tasks section.
Improved drag and drop between windows on Mac. Inactive window will not activate on mouse down if the cursor is over a draggable item.
Added pragma to treat deprecation attribute as warning, not error, on Mac.
For the benefit of OS X implement support for APPLE_client_storage & APPLE_texture_range and use them for non-renderable textures to eliminate the cost of Lock/Unlock and RHIAsyncReallocateTexture2D.
This only works with uncompressed textures, but helps avoid very slow, synchronous calls to glGetTexImage despite using PBOs. This does not increase memory overhead as client-storage textures use the backing store we provide for the GL engine copy.
Wrap OpenGL texture deletion calls so that on OS X DeleteTextures pools the texture names into one of three buffers so that textures are deleted at least two frames after their last use, this amortises the cost of deleting the textures.
The texture deletion occurs after flushBuffer in BlitToViewport and the min/max number of textures to delete in a single invocation can be overidden by the r.Mac.MinTexturesToDeletePerFrame & r.Mac.MaxTexturesToDeletePerFrame.
Wrap glFlush so that on OS X we always call glFlushRenderAPPLE which is faster, while still sufficient for these calls.
Warn Mac users that attempt to run on Macs with OpenGL 3.3 GPUs as they aren't fully supported also warn Mac users whose GPUs are below the recommended minimums that they may encounter low performance.
Added warnings for running with less than the recommended amount of memory or on a dual-core rather than quad-core processor as they also make a big difference.
Initial work to fix fullscreen mode on OS X properly - these changes make it possible to use 'proper' fullscreen mode which respects the chosen resolution for games where the mouse cursor is hidden.
The default remains as WindowedFullcreen as these changes don't address the difference in mouse & display coordinate systems that results from using OS X's scaled fullscreen mode.
Implemented support for saving open documents in Xcode via the XcodeSourceAccessor using Applescript & fixed the XcodeSourceAccessor's display name.
Rewrote Mac OS X crash reporting to output the minidump information in Apple Crash Report format, which is then parsed by the new code in CrashDebugHelper into our diagnostic display format.
Symbolisation is now implemented using CoreSymbolication, atos is no longer required meaning we don't require Xcode be installed.
Symbolisation now only happens within the CrashReportClient, not the crashed app, so the crash handling is async. handler safe.
More useful information is now provided in the logs.
Used a pre-configured malloc zone allocator instead of the current allocator once execution enters the async. signal handler on Mac OS X so that UE4 doesn't become unkillable if it crashes.
Fixed various crashes and other Mac specific issues.
On OS X detach the game thread from the 'blessed' Cocoa main thread.
Cocoa isn't an event-polling API as UE4 expects, so we separate the threads to emulate that behaviour.
This means less spinning-beachball-of-doom when loading levels or cooking, etc. which made some windows unusable on OS X.
It also allows us to take steps to ensure the event ordering Slate demands, but OS X doesn't always provide.
Implemented support for Distcc + DMUCs as an alternative to XGE on Mac OS X.
By either manually configuring distcc & DMUCS as per their documentation, or using the DistCode Xcode plugin compilation can be distributed amongst networked Macs.
All Macs must have the same developer tools installed & the same distcc/DMUCS/DistCode and be on the same local network.
This works for compiling for Mac & iOS and it should be possible to configure distcc & DMUCS manually for use on build farms for remote building from Windows.
Implemented optional & off-by-default support for automatic graphics switching on OS X, rather than just relying on the OS, with a GUI plugin for the editor.
Adds DisplayMask for setting an explicit display mask, RendererID for the initially preferred rendering device, bUseMultipleRenderers to allow desktops to use multiple GPUs for blitting to the screen and bAllowAutomaticGraphicsSwitching to allow laptops with automatic graphics switching support to switch between discrete & integrated GPUs which provide the same OpenGL version.
The plugin provides an editor preferences panel & for laptops using bAllowAutomaticGraphicsSwitching a live drop-down in the LevelEditor window to select the current GPU.
Experimental support for OpenGL ES 3.1 + Android Extension Pack as seen in the "Rivalry" demo at this year's Google I/O.
Added HTTP support for Android with libcurl with option to allow self-signed certificates in project settings network panel.
Added GetDefaultLocale to AndroidMisc.
Added force feedback support to Android to drive phone vibration.
Android now supports ADPCM audio, selectable via drop down in Project Settings for Android platform.
Android now supports procedural sound sources.
Implemented FPlatformMisc::Controlscreensaver for Android and added ControlScreensaver Blueprint node.
Added x86 Android support, but currently only for full source games, as we don't supply x86 binaries for non-GitHub/Licensee builds yet. You can package separate or fat apks. If using separate, Launch On will query the connected device for the best match. This is pretty early, so we are interested in feedback!
Added concept of r.MobileContentScaleFactor CVar (in DeviceProfiles) with a value of 0, meaning native resolution.
Added libgnustl_shared.so to APK during packaging (not on all Android devices).
Added cxa_demangle for x86 Android.
Changed GetCurrentThreadId on Android to use gettid() instead of pthread_self() to handle 64-bit.
Got rid of duplicate log messages on Android.
Updated x86 PhysX libs for Android.
Enabled ICU on Android. Added scripts for building ICU for Android.
Reduced the number of times the .apk has to be regenerated. If only content changes, Launch On will be much faster.
Support for loading system fonts added.
Updated SoundMod plugin to work with Android code projects.
UE4 on Android now uses the GNUSTL_Shared shared object as the C++ runtime.
System Fonts now usable on IOS.
Added Texture Streaming for Metal on IOS.
Added support for iPhone6/6+ resolution.
Added concept of r.MobileContentScaleFactor CVar (in DeviceProfiles) with a value of 0, meaning native resolution.
New: iPhonePackager now filters out expired mobile provisions and signing certificates
Added checking of validity dates on mobile provisions and signing certificates, choosing only ones that are currently valid
Added extended logging for found mobile provisions and signing certificates, to help debug possible provisioning issues in the future
Removed duplicated Apple chain certificates from DotNET/IOS and switch to using the ones in Engine/Build/IOS
Various other output logging improvements and time stamps during code signing
Removed rotted -interactive option and associated code
Fixed unused variable warning on mono
Deleted UAT merged copy of iPhonePackager as it is currently unused and already out of date; it will be reintroduced once IPP standalone work is finished, probably as a shared assembly.
First pass of the media plugin for IOS and Mac.
Functionality added to Audio Device to check if background sound is playing. Implemented for IOS.
Platform Frame Pacer API added, IOS implementation added.
This adds a delegate to the device which gets called when the frame has ticked.
Added "virtual file handles" for IOS to overcome the 700 file handle limitation
Added Xbox One implementation of RHICalcTexture2DPlatformSize(), for more accurate memory usage statistics.
Added a new delegate to to IOnlineIdentity, OnControllerPairingChanged, which fires when the Xbox event fires.
ShooterGame now handles controller disconnections to comply with XRs.
Shader PDB generation is now supported for better debugging in PIX. To activate this, add the following text to your game's DefaultEngine.ini file, substituting the path for where you want the shader PDB files to be placed. The directory must be one that can be written to from non-administrator level processes. You may need to change the GUID in ShaderVersion.usf to force a rebuild of the shaders.
SSE math functions added (from the Windows implementation).
Xbox now fires FCoreDelegates::OnControllerConnectionChange when a controller connection changes.
Xbox One MP4 movie player plugin has been added.
Added /ZW compiler option for libraries, so that plugins can use the entire XDK.
Changed thread affinities so that worker threads never share the core that the main game thread is on.
Log files are now flushed to disk when suspending the title.
Removed unnecessary SetRenderTarget() call from BeginRenderFrame() to fix incorrect timings.
Removed MEM_TITLE from any VirtualAlloc calls that use MEM_GRAPHICS, as this is unnecessary.
Fixed the shader constant ring buffer using too much memory. This fix also causes a minor performance increase.
Fixed multiple potential crashes in the Live online subsystem.
Devkit/TestKit detection to allow running of development builds on test kits.
Initial support for OnChip Geometry Shaders. Currently disabled due to an outstanding issue.
Optional buffered occlusion queries console variable to eliminate all occlusion query readback stalls on CPU. Adds latency to occlusion results.
PS4 flip management completely overhauled. No more explicit CPU stall at the end of the frame for a flip. Flip management now handled entirely by the GPU.
Added method to reset the controller orientation for DualShock4's.
Check for volatile/single frame buffers being used over multiple frames. Disabled by default.
Correct locale now given to ICU internationalization library.
Correct NumberOfCores returned for threading system.
Enabled frame smoothing.
Geometry shader ring buffers now allocate the global resource table from the command buffer when required rather than using one large value for all shaders.
Make sure Shader Debug Info Root path is always passed correctly to the shader compilers.
Removed LCUE hacks. Missing reserve callback issue has been fixed in the SDK.
Fixed for possibility of Async Submit Dones between midframe submits which can cause a GPU crash.
Fixed for a particle system crash dealing with lights when using -emulatestereo
Fixed for Morpheus ScreenPercentage overrides
Various fixes to make Development builds run on test kits.
Fixed a bug with append/consume buffer counter management that added extra GPU pipeline flushes. Users should see significant GPU gains.
Bandwidth reduction - We do not need to send the subobject class if it is stably named for networking (and more sanity checking).
Better logging when the client loads the wrong package version.
Fixed issue where PIE networking wasn't doing package verification properly.
Cleaned up notification code relating to pending connection loss
Fixed: Offline mode in Shooter Game for consoles.
Added Online/Offline host modes.
Players are now warned when not online and trying to host a match.
Players that are not signed in are now allowed to play offline.
Removed LAN option for consoles.
Shootergame - Added dialog box management to make handling network errors easier
Shootergame - Shooter main menu now keeps track of game instances directly and uses weak object pointers so that we don't hold on to deleted objects.
Shootergame - Fixed names when players aren't signed in but playing offline.
Shootergame - Fixed joystick focus not applying to all joysticks in shootergame browser menu.
Shootergame - has many changes that were made to allow it to go through a certification pass on both XB1/PS4.
Fixes needed to get online splitscreen functional.
Fixed crash that can happen when splitscreen players leave.
Fixed issue where Controller property wasn't replicating to non owners, but needs to when the value is NULL.
Fix for the network GUIDissue during seamless travel when we flush guids on the server. The quick fix is to not even send this property to the server, since we don't need to. This has the added benefit of not only fixing the issue, but saves bandwidth. We still need to look into letting guids persist on the server for a bit longer to rully resolve any future conflicts that could happen.
Lower verbosity on rejected RPC's. This really isn't an error, and more by design.
Fixed PIE crash when simulating with the "use dedicated server" option checked
Greatly simplified how component references are sent over network, and fixed issues when components are deleted mid game.
Fixed bug in ping calculations.
Removed code that handles out of order packets since at this level, packets are never out of order.
Disabled Steam when use Play in Editor with multiple processes.
Modifications to Steam dll loading for better reliability.
Improved Steam initialization failure messages.
Fixed crash related to Steam voice implementation.
New: Added a Analytics Blueprint Library as a plugin.
This allows Blueprint only projects access to the native Analytics APIs.
This Blueprint Library uses the default Analytics provider registered for your project.
New: Added a file based analytics provider as a plugin.
This provider writes analytics data to a file in json format.
Use this to debug your analytic event capturing.
New: Added Apsalar analytics for iOS as a plugin.
This analytics provider sends the data to Apsalar's cloud service (see www.apsalar.com ).
This plugin requires information from your Apsalar account to send the analytics events.
Fixed Use GetUnitAxis instead of GetScaledAxis inside FConstraintInstance::SetRefFrame
Fixed in FConstraintInstance::IsTerminated(), != should have been ==
Added in car view to vehicle templates with 'look' support in vehicle templates.(Uses mouse or VR device)
Console Certification Improvements
Controller pairing implementation and fixes
Fixed issue where you might not have focus of the sign-in dialog in the welcome screen.
No longer store ULocalPlayer as owner, instead store GameInstance directly
Enable in-game menu during countdown
Show proper message when host quits gracefully vs times out
Fixed issue where we see splitscreen artifact while loading levels (don't show splitscreen panes until in game).
Used dialog box which is more appropriate for showing a message when staying in the current menu, and fixes a bug where we can't use the message menu to leave the welcome screen due to priorities.
Improved and consolidate checks that verify user is online.
Cleaned up and consolidated session shutdown code. This is so we can call this when we don't yet have a GameState (haven't fully connected to a server, but need to shut session down). This fixes the issue where if you fail to join a server once, it will keep failing after that.
Detected and display generic errors from server (so we show full lobby when splitscreen player joins)
Added support for a load screen on the main thread. We can now call this during seamless travel, and before the level starts loading to cover session calls, etc.
Made sure to disable load screen anytime we enter the main menu.
Show net version, date, and time on hud (non shipping only).
Handle users that sign in, but previously accepted "continue without saving" (punt them back to welcome screen in this case).
Don't show pairing changed dialog at welcome screen.
Send proper XBox LIVE events to set rich presence (RoundStart, RoundEnd, etc).
Special screen for invite so there is no input while waiting for it to process.
Fixed issue where sometimes second split screen player would show up as owner of game.
Fixes for adding splitscreen players to the Live session.
Make sure OwningUserId is set correctly when creating sessions.
Enable seamless travel for shootergame.
Fixed duplicate calls to CleanupSessionOnReturnToMenu on the client when the server leaves the game. Fixes crash from a check() on duplicate delegate adds.
Fixed bug where the 'switch user' feature could be used to have the wrong user control a LocalUser.
Fix for letting users through menu when network is disconnected.
ShooterLocalPlayer now passes in the FPlatformUserId to the ShooterPersistentUser
Send Xbox events on clients and when users quit mid-match to the main menu.
Only show the "invite players" in-game menu option if it's an online game.
Set online mode when accepting invites so that party operations work correcty (fixes invites not working in some cases).
Don't send incorrect pause/resume events during online games, since the game doesn't actually pause
Load the main menu map in BeginPendingInviteState to force a reconnect when another local player accepts an invite.
Bots no longer appear in the recently met list
Removed LAN option from consoles
Fix for crash that occurs if a client attempts to join the server while the match is restarting (due to NULL GameSession)
Scoreboard no longer appears when the host disconnects
Local players are now killed when they are booted from the game, which cleans up their in-game presence
Fix for timing specific crash if killed whilst leaving game (null Pawn)
Fix for the number of teams in the HUD not updating correctly when there are no players left in a team.
Scoreboard is now more compact to fit in more players
Splitscreen Lobby now says 'find match' when not hosting
If either splitscreen player disconnects during on online game, kick back to the main menu
Fix for invalid index accessing userid when creating save data for player 2
If the user quits the match, either through the menu or by signing out of their profile, when they are winning - label them as a quiter so they don't get rewarded with the win.
Rename players which share the login for offline play.
Fixed a bug where the second controller couldn't join a game.
Fixed a bug where trying to search for LAN games would lock you out of searching for any games until you restarted.
Set up join game flow to handle/process arbitrary errors.
Cable pull handling.
Fixed issue where the map's navmesh wasn't being registered during seamless travel, because ANavigationData::PostInitializeComponents would MarkPendingKill itself if the world didn't have a navigation system yet.
Fixed a case where two in-game menus could appear on top of each other.
Voice chat implementation/UI is now being displayed in the Scoreboard UI in-game. Also added speaker icon to display via slate.
Fix that allows local accounts to play offline matches.
Fixed issue where a player got into a bad state if the in-game menu was open when the round transitioned.
End of round scoreboard is now interactive and can be used to bring up players gamercards.
Don't call HostGame when hosting a quick match, the session has already been created.
Added/removed local users to/from the party (required for Xbox One) in Shooter online games.
OSS - Introduced FPlatformUserId, which is similar to FUniqueNetID, but can live in core engine code.
OSS - Added an Identity interface function to get an FPlatformUserId from an FUniqueNetId.
OSS - Added new delegate for invites that takes a FUniqueNetId. No longer require you to register delegates for each user. Fixes several invite issues.
When switching profiles manually, don't allow the cancel dialog to pop up.
Lower timeout on connection.
Handle profile switch when pressing Y, and the user previously selected "continue without saving."
Live matchmaking and ShooterGame quick match improvements.
The user can now swap profiles on the main menu screen.
Fixed issue that was causing movie files to not be found.
Platform - Call XB1 suspend/resume delegates, fixed signout during suspend.
OSS - Now triggering TriggerOnConnectionStatusChangedDelegates properly.
OSS - Refresh the cached users when we resume from suspensions.
OSS - Make sure stable gamepads array is up to date after a resume from suspend.
OSS - Fixed controller mapping issue.
OSS - Added functions to add and remove local users to the OSS party interface.
OSS - Catch & warn when there's an error getting Live achievements.
OSS - Catch more exception types in FOnlinePartyLive::AddLocalUsers and FOnlinePartyLive::RemoveLocalUsers.
OSS - Refresh the party view even if there was an exception in the async task.
OSS - Added RegisterLocalUser and UnregisterLocalUser functions to the session interface and improved Live OSS async tasks.
OSS - Added a new async task (SafeWriteSession) for writing Live sessions atomically, handles retries and SynchronizedUpdate automatically.
OSS - DestroySession, RegisterLocalUser, and UnregisterLocalUser use the new SafeWriteSession task.
OSS - DestroySession now removes all local users from the session instead of only the user with a corresponding XboxLiveContext in the cached MultiplayerSession
OSS - Move AddAvailablePlayers handling to a task based on SafeWriteSession for atomic session updates.
OSS - SafeWriteSession subclasses can now return false from UpdateSession to indicate they have no updates.
OSS - Clean up the NamedSession on Live join session failure.
OSS - Integrate ping query for Live OSS FindSessions.
OSS - Added logging for SecureDeviceAssociation state changes.
OSS - Implemented online multiplayer privilege checking for Xbox One.
OSS - The XboxOneInputInterface now tracks a list of stable users.
OSS - Send the MultiplayerCorrelationId with Xbox events
OSS - Fixed potential join session failures when accepting invites by adding the local SecureDeviceAddress to the join request.
OSS - Added delegates for adding/removing local players to the party.
OSS - Don't remove a local player from the party if that player is the one who accepted an invite.
OSS - Added some more logging of party members when the party roster changes.
OSS - Canceling matchmaking now attempts to destroy the session as well, in case one was created.
OSS - Removed local and remote voice chat talkers when we destroy a Live session.
OSS - Always use the same unique id when sending Live voice packets. Fixes voice chat for splitscreen.
OSS - Live OSS properly reports that a session is full when trying to join a full session.
OSS - Always mark the host of a Live session as active so that the session doesn't time out.
OSS - Session code no longer assumes player index 0
OSS - A client now correctly leaves the room when they leave the game, and can thus rejoin.
OSS - If joining a room fails, the user will now leave the session they just joined as well.
OSS - Fixing issue where sessions were incorrectly getting set as LobbySessions.
OSS - Implemented GetUserPrivilege.
OSS - General fix for Session Failure states where delegates weren't getting cleared properly and thus asserted when the next attempt was made.
OSS - If a session fails to create, it will remove the NamedSession from the list.
OSS - Fix for crash if a player logs out while in-game.
OSS - Fixed issue where sessions were not getting removed from the internal list if the game ended via someone signing out.
OSS - Fixed issue where no network play could ever be done if the game was started while controller 0 was not signed into PSN.
OSS - Fixed issue where UserWebApiContext was erroneously getting created even if the user was not logged into PSN, which resulted in caching a bad value that would later destroy all the things.
OSS - Fixed bug where the wrong contextId was being used on PS4.
Allowed overriding max players via console command to allow testing full servers (net.MaxPlayersOverride).
Set the PlayerName in APlayerState::OverrideWith (Names can change between connects, this prevents showing an old, incorrect name if an inactive player was found).
Compare unique net ids on console in AGameMode::FindInactivePlayers to eliminate false positives.
Added ChangeTeam() and SwapTeam() code to UPartyBeacon implementation
Added InactivePlayerStateLifeSpan variable to AGameMode to allow for game customization for the amount of time an inactive player is allowed to remain in the inactive players list
Added a null check against FUniqueNetId in Login debug output
Refactored Login() code to create a cleaner relationship between Login() and PostLogin()
InitNewPlayer() will register player, set name and other basic Login initialization, it shouldn't be overloaded by the game as its still too early for game changes
Typically game code should start affecting the logged in player with PostLogin()
Fixed: False negative when comparing FUniqueNetId's. This fixes guests not working on XB1.
Overriding FUniqueNetId on ULocalPlayer is now allowed. This is so we can decouple controller id, and OSS identity.
This is necessary for platforms that need to allow overriding the controller while still maintaining the original user for achievements, etc.
Shootergame - Wrapped PlayerOwner pointers with TWeakObjectPtr's.
Editor and Tools
Large refactor was done to the Project Launcher (formerly Game Launcher). Launch profiles will need to be recreated.
Cleaned up of WorldSettings, some properties are marked as 'advanced' and other are hidden.
C++ header links are no longer shown in SceneOutliner. as it was hard to read. Is still available via Details when Actor is selected.
The SlateApplicationBase::GetMouseCaptor() is now deprecated. Check if a specific widget has mouse capture using the SWidget::HasMouseCapture() method.
Renamed 'Create Copy' to 'Duplicate' in Content Browser.
The notion of category icons has been removed from the API. If you're registering a settings category, you should remove the icon and update your code.
SLATE_TEXT_ATTRIBUTE now uses an FText attribute rather than an FString attribute.
Note: SLATE_TEXT_ATTRIBUTE is legacy and should not be used in new code - if you're using it, please consider using a normal FText attribute instead.
Slate Widget Render Transforms
FGeometry's AbsoluteToLocal, LocalToAbsolute, and IsUnderLocation have been updated to use the render transform.
Added FSlateLayoutTransform (using new transform calculus framework) to store a 2D translation and uniform scale for FGeometry.
Slate slots now have a common base and stricter access to private members:
The .Widget property on Slots has been removed in favor of GetWidget()
Assign the slot content by invoking operator();e.g. (*MySlotPtr)[ContentToSet ]
TPanelChildren and TSlotlessChildren now only support a subset of the Array API.
The AspectRatio() property in Slate has been deprecated.
SColorPicker and SWizard moved into new module AppFramework. Please update your Build.cs file if you're using these widgets!
Replaced embossed 3D borders with flat borders. If you're using borders as a padding mechanism, consider SBox instead.
Fixed an issue where FPointerEvent::CursorDelta was calculated backwards for touch events. Any user created widgets that use this constructor and negated CursorDelta to get proper behavior will now scroll/slide backwards. Fix this by removing the negation to FPointerEvent::CursorDelta where necessary.
FGeometry Breaking Changes
To support Render Transforms for widgets, some breaking changes were made to FGeometry:
Made all public members const to prevent mutating uses of them.
Instead of mutating FGeometry, prepare the necessary values in advance and call FGeometry::MakeChild().
Removed FGeometry::CenteredPaintGeometryBelow() and GetRect().
Direct member access to FGeometry will eventually be going away.
Replace direct member access with calls to appropriate member functions instead.
FPaintGeometry should no longer be constructed directly to properly support render transforms.
Instead call FGeometry::ToPaintGeometry().
Existing usages will not break, but they will not support render transforms.
Removed FPaintGeometry::ToSlateRect() and Identity().
Unreal Motion Graphics
Button Click Bindings from 4.4 won't work out of the box in 4.5! Due to a design change, the UMG Button no longer uses a function binding to register the click events. It now uses a standard Blueprint Multicast Event for performing the click Broadcast. You will need to setup a new handler for this event, then call your old function, or move the logic into the event graph. NOTE: There was another bug associated with function bindings, they were all accidentally generated as pure, so you will need to uncheck the pure checkbox in order to invoke your function.
We now provide a DPI Scaling system for all Slate Game UI. If you already have one you should remove it or configure this one to have a scale of 1 so that they don't both add to the scale of the UI. See New Features for more details on the system.
If you were using the low level overridable input functions that expected the FSReply (now called FEventReply), the way that structure is built has changed a lot to mirror much more closely what is possible with Slate. For example, if you want to have a widget that captured the mouse on mouse down, you could do it like so now:
The old Drag/Drop panels have been removed in favor of a different approach to drag/drop.
To create widgets in the past you had to use the "Create Widget" function. This has been replaced by a new custom node with the same name, Create Widget has many more capabilities, and it always returns the type specified, so you no longer need to Cast a widget you just created! Your old usage should continue to work, but you're encouraged to change over to this new node.
Several unfinished experimental widgets have been hidden until their time comes. Viewport, List View, Tile View, ComboBox, ScrollBar are no longer creatable in the designer.
The Slate Widget Style assets no longer apply to UMG. You can use them in a few places in blueprint scripts, but they are no longer the means by which you style widgets. Existing styles will be copied over, however we now store a copy of all style data directly on the widgets. We do this so that you can freely mutate the style of any widget at runtime, giving them dynamic material instances and just generally changing their look and feel based on user input.
Added To Viewport - Modal, Show Cursor and Absolute Layout flags have been removed! Absolute Layout is now automatically determined if you manually attempt to position/size it after placing it in the viewport. Cursor and Modal options are now controlled through the Player Controller with the new function "Set Input Mode".
DrawDynamicElements in subclasses of FPrimitiveSceneProxy will be deprecated soon and replaced with GetDynamicMeshElements.
Progress on parallel rendering, mostly focused on consoles. For non-consoles, r.RHICmdBypass 0 enables the parallel prototype. That also works on consoles, but togglerhithread enables the full set of parallel optimizations. This remains experimental work in progress, but show promising gains.
Post processing lens flare defaults have been changed (off by default as project setting) and your existing projects might have lens flares that formerly have been switched off by post process settings. The post process setting can be fixed or the new project setting can be used.
Removed UI Blur (has issues and complicated the engine internals).
The r.MobileHDR console variable is now read-only during execution.
Fixed "ApplyDBufferData adding .5 to spec brightness?", was affecting specular brightness if DBuffer is enabled.
ERHIFeatureLevel::Type enumeration entry SM3 was removed, and ES3_1 was added
Any tests for ERHIFeatureLevel::SM3 should be changed to ERHIFeatureLevel::SM4
Any tests for ERHIFeatureLevel::ES2 should be changed to ERHIFeatureLevel::ES3_1
Evaluate Curve Table Row Blueprint node: Added a drop down box for selecting row name, but you may have to delete and recreate any existing nodes to see this change. New nodes should work fine.
Kismet library headers are no longer globally included.
Prevented GetPlayerController, GetPlayerPawn, GetPlayerCharacter, GetPlayerCameraManager, CreatePlayer being called in ConstructionScript.
Users should port their own K2Node GetMenuEntries() implementations over into UK2Node::GetMenuActions() (in preparation for 4.6)
We've been refactoring the blueprint menuing system, which is slated to go live in 4.6. To circumvent hiccups when this happens, please duplicate any GetMenuEntries() logic you may have, and move it over into a UK2Node::GetMenuActions() override.
The ui portion of these menu items will be almost exclusively defined through overrides to UK2Node's GetNodeTitle(ENodeTitleType::MenuTitle)/GetMenuCategory()/GetTooltipText()/GetKeywords()/GetPaletteIcon() functions.
You can preview the experimental menu system by switching on the "Use New Blueprint Menuing System" option in the editor's experimental preferences.
Deprecated the old UEdGraphNode::CanPasteHere(), the replacement version just takes a UEdGraph pointer (and utilizes the new UEdGraphNode ::IsCompatibleWithGraph() function)
Deprecated UEdGraphNode::GetTooltip(), now replaced with UEdGraphNode::GetTooltipText() (which returns a localized text string)
Refactored Montage API to support multi-montages.
Gameplay and Framework
Added ENGINE_API to CurveFloat class to make it available outside of engine. (Required to access various vehicle parameters).
AActor::GetRootPrimitiveComponent deprecated. Use GetRootComponent and cast as appropriate.
Actor lifespan timers now started in BeginPlay not PostInitializeComponents
AGameMode::SetGameMode deprecated, use AGameMode::GetGameModeClass instead
AGameMode::GetGameModeClass and GetDefaultGameClassPath are now const and virtual
BlueprintCallable functions that require a WorldContext should now use the metadata WorldContext=
instead of DefaultToSelf= and HidePin=
ShowHiddenSelfPins class metadata has been changed to ShowWorldContextPin
Functions that require a WorldContext are no longer placeable in graphs for classes that do not implement GetWorld() and are not marked ShowWorldContextPin
Functions that would like a WorldContext, but can function without (for example PrintString) can also supply the CallableWithoutWorldContext metadata to allow placement in all contexts
Component/Actor mouse over updates will now fire while the game is paused.
Enabled virtual sticks for twin stick template.
FVector2D UGameViewport::GetMousePosition() deprecated and replaced by bool GetMousePosition(FVector2D&) which returns false when the mouse cursor is not over the viewport
Improved VR device support in vehicle templates.
General improvements to vehicle templates.
General cleanup of template levels.
Navigation octree was refactored to simplify ownership of collision data. Actor.UpdateNavigationRelevancy() function is removed, please use Actor.IsComponentRelevantForNavigation() to disable collision export. All objects exporting navigation data should use INavRelevantInterface interface.
Removed xbox only pause binding in engine ini file.
Revised FActorDetails::CustomizeDetails to respect some hidden categories.
Resized ball in rolling template.
Revised auto exposure settings on puzzle templates.
Running the Editor on Mobile preview mode (-FeatureLevelES2) is no longer allowed.
The legacy UCodecMovie API for movie textures has been removed. It is being replaced with the new Media Framework (see the 'Media' section further up!)
Various revisions and improvements to Twin Stick template.
Fixed HUD clickboxes when aspect ratio is constrained
Fixed inverted fire control in twin stick blueprint
Fixed const correctness on HUD::Project and HUD::Deproject
Fixed sub 1080 menus in Shooter Game menus
Fixed sub 1080 menus in Strategy Game menus
Fixed issue with keyboard in twin stick code template
Fixed gamma setting not being applied in Shooter Game.
Fixed crash in Shooter Game instance when running dedicated server.
Couple of NavigationSystem's bookkeeping functions have been hidden from public use.
EQS generators and Tests has been refactored to use virtual functions rather then delegates to perform their work.
FPImplRecastNavMesh::ProjectPoints has been replaced with ANavigationData::BatchProjectPoints
More Info (three spaces indented from the previous line for wiki formatting)
Improved stat id creation times. Now stat ids are created and registered once a run.
Improved support for Clang C++ toolchain on Windows platform.
INavAgentInterface::ShouldPostponePathUpdates has been removed. Use APawn::ShouldPostponePathUpdates or AController::ShouldPostponePathUpdates instead.
Moved Base64 class from HTTP module for Core/Misc, to have better visibility from other modules (without any dependency to HTTP module).
NonPIETransient renamed as NonPIEDuplicateTransient to better reflect that it's a variant of DuplicateTransient, not a variant of Transient.
If you use this specifier in a UPROPERTY, or its associated CPF_ flag, you should rename them appropriately.
New experimental support for fast C++ dependency scanning (will be enabled in a future release).
Passing relative .uproject paths to UnrealBuildTool no longer results in bad generated code.
TMap::Emplace no longer gives a compile error if the key has an explicit constructor.
Sorting containers of pointers which contain nulls is now possible by dereferencing the reference and checking for nullptr.
UnrealHeaderTool no longer fails when it encounters a C++11 in-class member initializer.
New /Zo option supported on Visual C++ 2013 Update 3 and above.
Programming standards updated with supported C++11 features.
NonPIETransient (now NonPIEDuplicateTransient) fixed to enable serialization.
AutomationToolLauncher no longer crashes when UE4 is updated via GitHub patches.
LoadVector3* macros replaced with component-wise reads to prevent page faults when reading from unaligned memory at the end of a page.
TArray::RemoveSingle and TArray::RemoveSingleSwap reimplemented in terms of Find to reduce code and avoid an invalid check.
Refactored PathFollowing's MinAgentRadiusPct and MinAgentHeightPct use to be more clear and renamed MinAgentHeightPct to MinAgentHalfHeightPct.
Refactored Login() code to create a cleaner relationship between Login() and PostLogin()
InitNewPlayer()will register player, set name and other basic Login initialization, it shouldn't be overloaded by the game as it's still too early for game changes
Typically game code should start affecting the logged in player with PostLogin()
The Windows specific FCOMPtr type was renamed to TComPtr
Wide character modification functions ToUpper/ToLower/IsAlpha etc. are now implemented using native C++ functions.
Change AutomationTool.CommandUtils.PushDir_NoExceptions to better mirror PushDir.
The code in PushDir_NoExceptions is now consistent with the inline source code documentation.
Previously, PushDir_NoExceptions did not have the ability to pop the final directory and return to the original working directory before anything was pushed.
Fixed bug which prevented BuildPatchTool.exe from chunking empty directories in some situations
Fixed potentially unsafe code in FWordWrapper::ProcessLine() loops with addition bounds checks.
Updated AdBanner Blueprint nodes to reflect not just iOS support and renamed (removed experimental status).
In preparation for x86 support in Android, the standard .apk no longer has -armv7 in the name (the .so inside as the -armv7 name).
iOS deployment from PC now requires the machine date/time to be reasonably accurate
Date/time checks are now in place to filter out expired mobile provisions and signing certificates, which will prevent various deployment issues, but they rely on the local machine time being correct.
The project setting location for Metal support has moved - it's now under the main iOS Project Settings section. Please re-enable Metal support.
The Live identity interface now triggers OnLoginStatusChanged instead of OnLoginChanged for sign-in changes.
OnLoginStatusChanged provides more information via its parameters.
See UShooterGameInstance for example usage.
Unreal Engine 4.5 has been updated to use the September 2014 QFE1 XDK. You will need to install this XDK first, then update your devkit(s) to ensure correct installation.
Upgraded to SDK 1.750!
LCUE has been uplifted from the SDK into the Engine.This will allow future UE4 specific modification of the files. Support for standard CUE has been removed.
Updated HTML5 Emscripten SDK to 1.22.0
Several improvements to HTTP Chunk Installer.
Assets assigned to Chunks for use by IPlatformChunkInstall classes automatically include dependent assets when cooked with -manifests.
UAT can automatically generate Chunk data for use by FHTTPChunkInstall with the command line option -createchunkinstall. This option is experimental.
Fixed issue with HTML5 devices being claimed by other uses on the same network running UnrealEd.