这个资源可以用于在引擎中继续制作游戏内容,也可以导出成 FBX 并在其他第三方工具中使用。这能在任何当前激活的游戏场景中得以使用,或者在实时转播中,或者在观看录像中。
除了惯例的更新以外,我们更新了所有主流 VR 平台,使用它们最新的 SDK 以为接下来在它们的平台上发行产品做好准备。在这些更新后,取得了一个扎实稳定并且是面向最终效果的版本,因此任何基于 4.11 的 UE4 产品都已经是“为 VR 发行而准备好了”。
Oculus Rift 1.3.0 SDK 很快会整合到虚幻引擎的 4.11.1 中。(4.11.0 中现在是 Oculus Rift SDK 0.8.0)
我们已经在虚幻引擎 4 中整合了 DirectX 12 的更新,在生成平行渲染指令时更好的利用 CPU 能力,并增加了改进,诸如支持多个 Root 签名,默认支持异步管道状态磁盘缓存,减少内存消耗并解决内存泄漏,资源转移是的优化,更快的内存分配,以及通过在 GPU 空闲时间填充内容避免 GPU 空转。
Epic 和 Apple,AMD,Nvidia 以及 Intel 进米合作,在 Mac 上整合 Metal。在 4.11 中,它已经代替了原先的 OpenGL 成为 OS X El Capitan 的主要图形接口。4.11 中为 Metal 和 OpenGL 提供了同样的功能。Metal 则提供了流化,低开销的 API 支持,协同预编译的着色器和高效的多线程支持,能够最大化 GPU 的处理能力。我们将会继续改进并增加对 Mac Metal 的支持,并在以后的版本中添加新的 API 特性。
光照构建的时间主要用来计算跟踪光线并得出光线是如何反弹的。使用 Embree 后,在一次测试中,间接光照质量设置为 4,“Sun Temple”关卡的光照构建时间快了 2.4 倍(从 45 秒下降到 18 秒)。最后效果视觉表现是一致的,
这些通道告诉 Lightmass 从哪里获取光照来源,这里并不会产生新的光源。使用通道对象的最佳做法是用来覆盖小的空间,并对最终的光照效果很重要。这里妥协了更高的光照和阴影质量,因为 Lightmass 更专注在进入光源的光线上。(左图 是没有通道对象,右图 是有通道对象)
我们添加了一个新的动画节点,能够在动画图表内的骨骼网格组件之间复制姿势。这是对 Master Pose Component 的一个改进版本,现在可以将原动画和新动画进行混合。
在上面的例子中,Gauntlet 就在它的动画蓝图中使用这个 Copy Mesh Pose 节点,从一个源模型中拷贝了手和手臂的姿势数据,同时 Gauntlet 的 Spikes 动画在独立计算。
这里的 Source Mesh 就是作为要复制的另一个模型组件。这里只会拷贝骨骼名字匹配的内容。一旦从这个节点中拷贝获得数据后,就可以用它和其他动画做混合操作。
作为源模型,它的动画总是优先于目标模型,在目标模型依附于源模型时这是自然发生的,关节资源文件名称也要匹配。同时还要注意骨骼位置拷贝优先于物理模拟计算,这意味着如果源模型是模拟计算的则不会工作,当然如果目标模型在物理计算后拷贝则没有问题。
更新:LOD 骨骼简化工具
现在能够从一个骨骼网格体的 LOD 中 移除骨骼。骨骼结构权重将会自动更新!这是一个优化游戏非常简单的方法。
在 骨骼树 上右键菜单中,使用 “Remove Children” 选项,来对指定 LOD 禁用某些骨骼。
先前,这里是和模型简化工具在一起。现在可以简单的观察 LOD 并直接修改骨骼,选中不想要的骨骼并删除,如果想做的话还可以包含他的子骨骼。并还能够控制是仅在这个 LOD 中移除还是在所有 LOD 中移除。
一旦移除骨骼后,它们将会变成灰色,以表明当前 LOD 下它们不再参与计算。在 Persona 界面中的 LOD 预览画面也同时会显示灰色的骨骼资源文件名称。
最后,在骨骼树工具的下拉框中还有一个新的 “LOD 骨骼” 显示选项来过滤查看哪些骨骼可见。
更新:粒子剪裁(更快的 FLIPBOOK 粒子渲染)
粒子剪裁能够让 flipbook 的粒子特效渲染提升三倍!
使用 flipbook 动画的粒子(子 UV 动画模块)通常会有很多浪费的区块,而那些区块的像素着色器仍然在执行,但最终的不透明度是 0.举个例子,下面这个贴图中很多都是不必要的半透像素。
我们现在能渲染粒子时用更加紧凑的边界形状,裁剪掉那些不可见区域,而不是不管当前播放哪一帧都使用完整的一个四边形。
设置
默认设置下引擎并不会使用粒子裁剪功能,因为材质编辑过程允许对粒子的不透明性做任意逻辑修改,甚至这种改动可能来自另一个贴图。美术人员必须主动的来设置使用粒子裁剪功能。
用一个贴图创建一个新的子 UV 动画素材(在内容管理器中右键)
打开这个子 UV 动画资源,确认 Sub Images 的属性设置正确。这个步骤每个 flipbook 贴图都需要做一遍。
在级联编辑器中,找到 SubUV 模块并设置动画素材。
性能结果
在着色器复杂度湿度下显示,使用粒子裁剪后绘制区域减少了很多,同样一个粒子在使用裁剪后 GPU 性能提升 2~3 倍。
更新:基于顶点的半透明光照
照亮半透明效果现在通过使用新的 基于顶点 的半透明光照,能 渲染的更快!
现在在材质编辑器中有两种半透明光照模型,都是基于顶点计算光照的。
基于顶点的光照模式只是用 着色器指令的一半,并使用贴图查找。
"Volumetric PerVertex NonDirectional" 这一设置非常的快速 —— 几乎和无光照材质一样快!
我们建议尽可能多的使用顶点半透明光照材质,一个例外是对具有较大的三角面模型来说避免使用,因为光照会在每个三角形之内插值。
更新:光照通道
光照通道能够使得动态光源 仅在通道重叠时才对物品进行光照影响。我们现在 支持 3 个 光照通道。
可以为一个模型组件,或者一个灯光组件设置它的通道。
这个功能对过场动画十分有用!举个例子,如果希望要一个光源照亮角色,但又不希望它影响周边的环境。
光照通道的影响是动态应用的 —— 这就是说,静态光源无法使用。只能用于固定光源和动态光源。同时,光照通道仅对不透明表面的直接光照产生效果。
光照通道仅在用的时候,基于灯光的数量,需要 GPU 上一点开销。
更新:立体声空间感
现在在 PC、XboxOne 和 PS4 平台上可以使用 3D 空间化 的 立体声资源。立体声空间化最终就是在空间上为每个源单独单独输出(比如左右声道),正如每个是单声道一般。左右声道的音源位置由声音发生器的位置决定,并由 3D Stereo Spread 属性设置,这是在 Sound Attenuation Setting 内的一个新的参数。
该 3D Stereo Spread 参数用游戏中长度单位定义了左右声道的距离,并垂直于面向听众的发射器的向量。这意味着立体声双通道的参数是在世界坐标系下的,并且当远离听者时会自然的回落到一个单声道音源上。
更新:声音焦点
声音的衰减设置现在支持 声音焦点 了,这一新特性使得音效设计人员能够使用参数控制声音在各个方向上对听者产生的效果
下图说明了这种方向设置:
音效设计人员能够定义方向角度,判断声音是在焦内还是焦外。其中的相对位置则是由方位角插值而来。这组新的设置在 Sound Attenuation Setting 的结构下。
焦值和非焦值用来在三个方面修改声音:距离缩放,体积缩放,和优先级缩放。距离缩放用来创建一个 boom-mic 或 zoom-mic 的效果,通过控制声音在焦内和焦外的距离来缩放来获得效果。体积缩放可以基于可见性为声音添加另一个衰减效果。优先级缩放是用来减少(或强化)声音相干性的优先级。
更新:声音遮蔽
虚幻 4 现在支持简单的基于 raycast 的声音遮蔽。要对一个声音使用遮蔽计算的话,需要先在 Sound Attenuation Setting 中按下图设置:
如果对一个声音对象启用了遮蔽功能,该对象会对碰撞体执行 raycasts 来判断该声音是否需要被遮蔽。如果判断为需要遮蔽时,会为它应用一个低通过率频率数值以及一个衰减体积。由于遮蔽系统是一个二元 raycasts 计算(遮蔽,或者不遮蔽),还会在遮蔽和不遮蔽的状态切换过程增加一个插值时间来过渡效果。还有一个选项用来控制是否要考虑复杂几何体的碰撞。
更新:声音干涉
新的干涉系统将声音的干涉数据从声音实例中移除,并将它作为单独的资源存放。现在可以创建新资源时,在菜单中选择 “Sound Concurrency” 类型。
另外,在先前的 Max Count 和 Resolution Rule 外,新的声音干涉对象增加了其他和干涉相关的花哨功能,在下面进行描述。
对拥有者的限制
这个选项用于表示任何用这种干涉来播放的声音都应该它自有的干涉计数。如果一个声音没有 owner(比如并不是由一个 Actor 播放,或者并不是通过 Audio Component 播放),那么则会按照该选项未选中的设置计算。这里的目的是希望支持基于每个对象的干涉数量限制。
体积缩放
这个功能将声音分组进行管理。当多个声音在同一个干涉组中同时播放的话,越早播放的将会变得越轻。在这个功能下声音音量的缩放公式是:
VolumeScale = VolumeScaleSettingNewerSoundCount
这里 VolumeScaleSetting 是由用户设置的数值,NewerSoundCount 是在干涉组中当前播放的声音中晚于这条的条目数。比如,如果声音 A,B 和 C 在同一个干涉组中,在 VolumeScaleSetting 设置为 0.9 的状态下播放时,会被调整为:
A's VolumeScale = (0.9)2 = 0.81
B's VolumeScale = (0.9)1 = 0.9
C's VolumeScale = (0.9)0 = 1.0
换句话说,最近播放的声音不会被影响,每个旧的声音会被指数衰减,有效的形成了在组内声音条目自动退让的机制。
新的解析规则:停止优先级最低的,停止最安静的
新的干涉物体也引入了两个新的干涉解析规则:停止优先级最低的,停止最安静的。
停止优先级最低的规则适用 USoundBase 对象(SoundCue,SoundWave 等)上的优先级数值。一旦干涉组达到了限制,系统将会在组内遍历所有激活的声音,并停止优先级最低的一个(或者如果要播放一个新声音的话,新声音优先级最低则不播放)。
停止最安静的规则正如所说,取代基于距离的规则(通常和体积相关),这条规则将会在组达到上限时停止最安静的一个,或者要播放新的声音时判断该声音为最安静则不播放。安静程度由声音在各个阶段计算后有最小的体积缩放值相乘得到。
将声音干涉对象应用于声音对象
要使用声音干涉对象,可以直接在声音或声音对象上指定它,和声音衰减设置对象的做法一样。下图中是一个 Sound Wave 资源的 细节面板。
高亮处就可以通过下拉框来选定要引用的声音干涉对象资源。
覆盖声音干涉
为了向前兼容性,也为了有人更喜欢旧的系统表现,可以选择使用资源的本地数据来覆盖干涉设置对象。在这个情况下,声音资源变成他自己的干涉组,便能实现原先的效果。旧的项目在转换成 4.11 后将会对已有的资源采取使用这种方式保存。
更新:基于标记的动画同步
动画现在能够根据动画数据中的 标记 来完成 同步。在以前的版本中,唯一同步两个动画的方式是基于时间。现在可以在数据上点击右键并添加一个通知,选择添加通知 -> 添加同步标记。
在初始的版本中这个功能如下描述:
只有在同一个 SyncGroup 中的动画才会同步。有领头的驱动跟随的。
无法调节播放速率。播放速率为主动画的速率。
只有组内通用的标记才会被同步。比如,一个动画如果没有 “Right Foot Down” 的标记,那么其他动画上的这个标记也会被同步计算所忽略。
位置同步是基于领头的相对位置。比如,如果领头动画距离他的 Left 和 Right Foot 标记还有 25% 的距离,那么其他动画也会同步到距离它们各自这标记 25% 的位置。
当动画在一个同步组中有足够的匹配标记时,基于标记的同步会自动启用。否则则是原有的缩放长度同步的方式。
蒙太奇也支持基于标记的同步,因此可以无缝的转换会其他动画。可以在蒙太奇中看到同步组的设置。
更新:动画蒙太奇的曲线混合
蒙太奇 现在能支持 曲线的混合。混合的 In 和 Out 用于控制播放时混合的形态。要注意这里如果有额外的蒙太奇在播放,它的 Blend In 设置将会被使用。
更新:HLOD 大纲视图
新的 HLOD 大纲视图 能够可视化的组合模型并对 HLOD 的设置编辑修改。
材质生成
材质的合并过程现在能够支持更多的材质属性,比如基于顶点的颜色,顶点位置和顶点法线。这意味着该技术比如世界空间贴图,雪地效果和表面法线,以及使用顶点颜色遮罩材质层现在都能在 HLOD 上正确工作。
仍然有一些特性并不支持,比如像素法线,世界坐标到切线转换。在 HLOD 遇到这种情况,或者其他尚不支持的情况是,应该使用另一种材质或者简化材质。这个 Material Proxy Replace 节点可以派上用处。它的功能和 Lightmass Replace 很像。实时的输入用于实时状态,Material Proxy 的输入仅用于生成过程。
材质合并过程的设置现在可以在 HLOD 的大纲视图**面板中找到,还有一个 世界设置面板**。
代理模型生成
代理模型生成过程已经被精简了,并整合了最新的 Simplygon SDK,可以在 HLOD 的大纲视图中找到模型生成过程的设置。
其他改进:
HLOD 现在支持 Spline 类型的模型。
代理模型/族进在可见的关卡(或子关卡)上显示、生成并构建。
自发光颜色现在能够被材质合并过程支持。
不透光材质的静态网格体现在能够被材质合并过程支持。
更新:复杂文本渲染(实验性)
我们正在为 Slate 添加对 从右向左 的文字和 双向文本 的支持,包括支持复杂形状的文字(比如阿拉伯文)。
这个功能仍然处于非常早期。虽然很多地方还比较简陋,但我们鼓励大家尝试一下并给我们反馈。
已知问题:
单行可编辑文本区块目前不支持复杂文字(只有多行输入框和静态简单/富文本框支持)
目前没有对 Text Actor 和 Canvas 的支持。
复杂文字的渲染目前只能在 Windows,Mac 和 PS4 的版本上实现。
更新:蓝图高级搜索
蓝图的搜索功能又更新了,支持更高级的搜索功能(获得更多的预期结果)
可以在搜索是定义特定元素,比如节点、针脚、图、函数、宏、变量、属性、组件等。完整文档见这里:https://docs.unrealengine.com/latest/INT/Engine/Blueprints/Search/index.html
支持 And () 和 Or (||) 逻辑操作符,以及资源文件名称/数值匹配的方式(语法是:Tag=Value)
变量的“查找引用”选项现在功能做了改进,查找更为准确。
更新:VR 头戴显示摄像机改善
为头戴显示设备做的摄像机系统做了改进,丰富了功能并且更加好用。我们将当前激活的摄像机组件在引擎中做了一定的偏移来适配真实世界中头戴显示设备的偏移。这么做能让大家能够更加容易的计算 VR 头戴设备在世界中的位置,可以直接附属其他模型也更为准确。并简化大家 VR 游戏的控制计算。
另外,任何附加到 Camera 组件的东西都会被“延迟更新”,这意味着它们会应用更新最及时的位置数据用于渲染,减少延迟。附加到 Camera 的模型、特效和面片都会被锁定,并和头显使用一样的方式在每帧中更新。
查阅 这个文档 来了解如何将现有项目迁移到新的系统!
更新:VR 立体层
立体层能够提供绘制一个带贴图的四边形在世界中的任意位置,并作为一个单独的层直接置于 VR 合成画面中。通过这个功能能够让 UI 的制作变得更加刻度,减少扭曲。目前这个功能仅在 Oculus Rift 头显上实现,但预期很快就会在其他平台也整合。
更新:SEQUENCER 的主要进展(实验性)
Sequencer 是我们最新的非线性场景动画系统。Sequencer 目前仍然在重度开发阶段,我们暂时并不建议生产项目直接使用它。但我们欢迎大家来尝试并给我们提供反馈!我们希望在接下来 UE4 的版本中听取各种 Sequencer 的反馈。
4.11 中 Sequencer 的主要特性:
新的轨道:Shot/Director,播放速度,缓慢,淡出,材质,粒子参数等轨道。
改进电影渲染,支持 .EXR 渲染
改进关键帧行为,复制粘帖关键帧,从 matinee 中拷贝,关键帧路径 3D 显示
主 Sequence 工作流,能够在一个较大的 Sequcne 中设置子场景。
支持“可生成”物体(存在于过场动画素材中的对象)
UI 改进:轨道颜色区分,关键帧形状、颜色功能,轨道过滤
可以在插件面板中启用 “Level Sequence Editor” 插件,并重启编辑器,来激活并使用 Sequencer 功能。
版本信息明细
AI
New: A new EQS scoring function, Square Root, has been added.
New: A simple "Current Location" EQS generator has been added to support reasoning about AI's current location.
New: Added an EQS test for geometry overlaps.
New: Added Blackboard Keys support to EQS' NamedParams.
New: EQS tests can now be configured to normalize results against declared ideal value rather than max value.
New: Made EnvQuery a blueprint type, which enables storing EQS templates in blueprint classes and AI blackboards.
New: Added a silent auto-conversion of Controllers to Pawns when calling blueprint RunEQS function.
This is usually the desired behavior. But it can be disabled with AISystem.AllowControllersAsEQSQuerier flag in Project Settings
New: The way EQS test scoring gets previewed in EQS editor has been improved towards higher display resolution as well as flexibility for future expansion
New: AI debug display for several subsystems has been improved by disabling their scene outline drawing in the editor.
New: Added a feature to the BT MoveTo task enabling it to observe and react to changes to an indicated blackboard entry storing move goal location or actor.
New: Added ability to specify the number of points generated by the OnCircle generator.
New: Added time slicing, logging and additional profiling stats to AISense_Sight to help debug and manage performance cost for AI on servers.
Exposed new parameters MaxTimeSlicePerTick (in seconds) and MinQueriesPerTimeSliceCheck AI Perception values.
New: Pathfollowing parameters responsible for path's mid-points reachability acceptance have been exposed for configuration via AISystem settings.
New: Stopping AIController's logic during pawn's unpossess event has been made optional. Use AIController's StopAILogicOnUnposses property to control this mechanism.
Bugfix: The blackboard editor no longer crashes when adding new keys while having a search filter applied to keys list.
Bugfix: A crash in garbage collection related to a bug in EQS query template caching in certain use cases has been fixed.
Bugfix: Fixed a crash in EQS where wrappers could be garbage-collected during queries.
Bugfix: Blueprint-implemented EQS generators no longer crash when trying to add a generated value of a wrong type (vector/actor mismatch).
Bugfix: A bug in EQS resulting in FEnvQueryInstance's result never getting set to "failed" has been fixed.
Bugfix: AIPerceptionSystem.UnregisterSource no longer crashes when perception agents being unregistered don't use all of the defined senses.
Bugfix: The AI perception system will no longer allow AIs to bypass visibility-cone checks.
Bugfix: AIController.MoveTo will no longer ignore its navigation data's default querying extent.
Bugfix: AIController's pawn possession no longer overrides cached GameplayTasksComponent references, which could break AI's gameplay tasks usage.
Bugfix: Blueprint interface functions to PawnActions have been fixed to return apropriate values.
Bugfix: Fixed AI stimuli never expiring, which resulted in AI never forgetting perceived actors.
Bugfix: BTService_BlueprintBase will now correctly trigger "deactivation" events that are implemented in derived blueprint classes, but not the base class.
A safety feature has been added to AI's possession logic. AIControllers will no longer try to possess soon-to-be-destroyed pawns.
EQS Query instances that run longer than expected will output once to the log, and then once more when the query finishes. The previous behavior was to log repeatedly until the query finished.
EQSTestingPawn's ticking has been disabled in game worlds. This can be re-enabled with the bTickDuringGame property.
Behavior Tree
New: BTService_RunEQS, a new BT service for regular EQS query execution, has been added.
New: Added new property to all EnvQueryTests: TestComment. This property is a simple, optional string used to label the purpose for a test. For now, it only shows up in the details view, but it is still useful for helping to document the reasons for tests, especially when using more than one of the same type.
New: Expanded the RunEQSQuery BT task so that users can configure it to use a query template indicated by a key in blackboard.
Changed the color of root level decorator nodes in the behavior tree editor to distinguish them from regular decorators.
Bugfix: Stopping behavior tree with instantly aborting parallel tasks no longer crashes.
Bugfix: Handled an edge case in BT's parallel tasks removal that could result in not cleanly finishing all of tasks, and potentially hanging.
Bugfix: Behavior tree focus service reacts to blackboard changes appropriately.
Bugfix: Behavior tree's blackboard filters work correctly when a single object uses multiple configurable filters of the same class.
Bugfix: BTDecorator_Blackboard now handles user-requested condition inversion properly.
Bugfix: Fixed behavior tree decorators not observing in LowerPriority mode when search flow enters and leaves their branch without finding a task to run.
Bugfix: Prevented behavior trees from starting new task execution just to be abandoned in next tick due to decorators firing between abort and execute calls.
Bugfix: Fixed cleanup of active blueprint actions for blueprint based behavior tree tasks.
Bugfix: Fixed missing Tick event in aborting behavior tree tasks from an abandoned subtree.
Bugfix: Copy and paste operations in behavior tree's composite decorators subgraphs now work properly.
Bugfix: Fixed node memory allocations for injected behavior tree decorators.
Bugfix: RotateToFaceBBEntry no longer gets stuck when passed a blackboard key with FRotator value.
Bugfix: Fixed order of behavior tree graph nodes when a node is being moved.
Bugfix: GameplayDebugger's default settings are now applied properly.
Bugfix: Triangulation errors in some convex polygons recorded by visual logger have been fixed.
Navigation
New: CompositeNavModifiers have been expanded to support use of convex and sphere physics shapes.
New: Enabled custom export of navigable geometry for foliage with InstancedStaticMesh type.
Bugfix: Streaming out of a level containing a RecastNavMesh instance no longer crashes the engine.
Bugfix: A bug in editor-time navigation system, resulting in removing all the saved data in static navmesh on map load, has been fixed.
Bugfix: A memory leak in Recast's heightfield layers building has been fixed.
Bugfix: Navigation bounds gathering no longer produces unexpected results while streaming levels with certain streaming setups.
Bugfix: NavLinkProxy no longer marks instances containing only smart links as navigation-irrelevant.
Bugfix: A missing NavigationSystem notification has been added to let it know about editor-time changes to ActorComponent.CanEverAffectNavigation property. This fixes situations where toggling this flag wouldn't result in rebuilding navmesh.
Bugfix: Added a safety feature to address navmesh generation related crashes when BP-implemented actors get their construction script re-run just after navmesh generation finishes.
Bugfix: "Navmesh build in progress" editor notifier no longer hangs indefinitely if it's created just after navmesh has finished building.
Bugfix: Crowd simulation works properly with auto-possessed pawns placed in a level.
Bugfix: Collision data for navigation built from mirrored PxConvexMesh now exports correctly.
Bugfix: Fixed geometry projection for navmesh walking mode when a pawn moves far away from the geometry on the Z axis.
Bugfix: Corrected HitNormal values reported by navmesh raycasts.
Bugfix: Fixed the influence of navmesh edges on crowd simulation near the ends of paths.
Bugfix: Navigation export of destructible mesh without collisions enabled now works as expected.
Bugfix: Fixed navigation export of NavRelevantComponent attached to an actor not affecting navmesh generation.
Bugfix: Navmesh tiles are no longer drawn in red, or not drawn at all, after navmesh generation finishes.
Bugfix: Reuse of navigation paths now updates all flags appropriately.
Bugfix: Corrected scoring of navmesh boundary segments in detour's crowd simulation.
Bugfix: Fixed UNavRelevantComponent not being included in navmesh generation when it's not attached to actor with collision component.
Navmesh raycast will use nearest poly containing ray origin instead of just closest one.
Added Z check to detour's crowd avoidance segment gathering.
RVO avoidance now takes the height of agents into account when culling obstacles.
Animation
New: Level-of-Detail Threshold for Animation Graphs
Many animation graph nodes now have an LOD Threshold option for performance optimization:
Apply Additive
Apply Mesh Additive
Aim Offset
All Skeletal Control nodes
Whenever the Skeletal Mesh instance drops below this LOD, the node will not execute.
New: Per-Animation Compression Settings
You can now set animation compression on a per-animation basis.
Choosing Automatic and then pressing Apply will cause the engine to determine the best setting (based on error metrics) and set that for you.
New: Added "Delete All" option to anim curve panel.
New: Added a new property called "Min Time Between Ticks" to particle systems. This can be used to force a lower tick rate on a particle system by specifying the minimum number of milliseconds between ticks.
New: Added a new role for sync group members: TransitionLeader. It is excluded from the group while it blends in. Once it reaches full weight it becomes leader until it is fully blended out again.
New: Added AssetRegistrySearchable tag to AnimSequence's EnableRootMotion property so that it shows in the content browser.
New: Added blend profiles to skeleton assets, which allow per-bone multipliers when using blend per bone or other blending nodes.
These are accessible from the skeleton tree pane in Persona.
New: Added DrawCanvas and viewport string support to skeletal controls to enable them to output debug information to the viewport.
This feature can be enabled using the Show -> Display -> Skeletal Controls option in Persona's viewport,
New: Added a flag to animation evaluator nodes so users can set whether they should loop when being ticked.
With the addition of Marker Based sync, evaluator nodes now have the ability to be ticked like sequence players (by adding them to a sync group).
By default, the evaluator node's playing direction will be forward or backward based on whether the target time is earlier or later than the current time.
With the loop flag enabled the playing direction will be based on whichever direction will reach the target animation time more quickly. For example, going from 4.9 seconds to 0.1 seconds in a 5 second animation will play forward and loop instead of playing backward.
New: Added GetCurrentStateName as a blueprint-accessible function on animation instances.
New: Added a "Random Player" node for anim graphs. With this node, the user can play a selection of animations in a random order with certain randomized parameters. With Random Player, "Shuffle Mode" acts more like a randomized playlist, in that it will play everything on the list before repeating.
New: Added SetMinLOD and SetForcedLOD functions. These enable the user to restrict LODs for the a specific SkeletalMeshComponent.
For example, calling SetMinLOD with 1 will mean that the component will not use LOD 0, even if it gets close to the camera, but it can use LODs 1 and higher as it normally would.
Similarly, calling SetForcedLOD with 0 will force the component to use only LOD 0 all the time. This can be useful for ensuring that the local player's character is always at maximum quality.
If both functions are used, SetForcedLOD will override SetMinLOD.
New: Added support to tie update rate optimization directly to LOD level instead of selecting the amount based on screen size.
New: Added a "Start Position" to the player node. The Sequence Player and BlendSpace Player both contain the Start Position parameter, which will start the animation at the given position on the first time it plays.
New: Added support for space conversion in the copy-bone skeletal controller node.
New: Added support to PoseableMeshComponents for the MasterPoseComponent property.
New: Added the ability to remap to existing assets when retargeting in Persona.
Persona can also attempt to auto fill the correct assets if the source and destination assets use a similar naming scheme.
New: Allow users to change animation compression settings per animation in the detail panel.
Note that you'll have to click "Apply" to apply to the current compressed data. If not, data will not match the displayed compression setting.
Default compression settings are in Project/Animation.
An automatic setting exists. This may take a while, as it will try all possible configurations and compare results, but it will find the optimal compression settings.
New: Anim Montage now contains FAlphaBlend BlendIn/BlendOut option
Supports both preset and custom curve types.
New: Blend List node now supports Reset Child On Activation for reinitialization when reactivated.
New: Changed TrailRelaxation to Curve type, so that different relaxation values can be used on chains.
New: Offline animation retargeting supports rules for naming output animations.
Rules supported: Target folder, Prefix, Suffix, Replace.
New: Exposed SkeletalMesh property bDisableMorphTarget to blueprints. A new cvar, r.EnableMorphTargets, can be turned off to disable all morph targets.
New: FBX import now saves animation length property.
New: Persona Asset Browser displays folder path column.
Tooltip also displays folder path.
Sorting by path in the asset browser is supported.
Bugfix: Recompiling anim BPs that are dependencies of parent blueprints no longer causes a crash.
Bugfix: Fixed a crash that happened when something other than USkeletalMeshComponent had a MasterPoseComponent set.
Bugfix: Fixed a crash with retargeting additive blendspace animation assets.
Bugfix: Error is reported instead of crashing when compiling an animation blueprint that has a missing skeleton asset and contains a ModifyBone node.
Bugfix: Displaying the debug info of an AnimInstance object whose root node is null will no longer cause a crash.
Bugfix: Blendspace editor does not crash when the editor opens for the first time.
Bugfix: The random animation sequence player does not crash when there are no entries in the playlist.
Bugfix: Fixed a crash when default transition pins are set to true.
Bugfix: Reimporting a skeletal mesh that is currently open in Persona does not crash.
Bugfix: Fixed a crash with animation editing when the source data gets invalidated, possibly due to retargeting.
Bugfix: Fixed a crash with Blendspace having per bone set up when the interpolation value is 0.
Bugfix: Fixed a crash with invalid BlendSpace preview input coming when switching preview assets in Persona.
Bugfix: Prevented a crash in Persona while reimporting data.
Bugfix: Removed possible divide by zero in state machine transitions when using crossfade durations of zero.
Bugfix: Fixed assert on executing blueprint code during post load when an animation wants to spawn a "needs re-saving" message.
Bugfix: Fixed potential to call incorrect functions in derived anim blueprints, which could make derived anim blueprints function incorrectly.
Bugfix: Importing corrupted FBX files no longer crashes.
Bugfix: Fixed issue when importing curve values from FBX files with unwind rotation on.
Bugfix: When importing curves, the break tangent doesn't work, so now import curve defaults to auto.
Bugfix: Particle systems and other events triggered from anim notifies now work properly in the editor and at runtime.
Bugfix: Root Motion from Everything is no longer calculated incorrectly with animations that are part of a sync group.
Bugfix: Anim montage playback error correction is no longer incorrectly applied when the montage is stopped.
Bugfix: Anim instance native transitions no longer rely on state machine initialization to bind delegates.
Bugfix: Fixed animation blueprint relevancy nodes returning unexpected values when no relevancy can be determined.
Bugfix: Animation graph node properties that have underscores in their names now update appropriately.
Bugfix: Blueprint set morph target curves are now being set from master components to slaves.
Bugfix: Cloth and skeletal meshes no longer flicker or disappear at the edge of a viewport.
Bugfix: Memory is now reported correctly in GetResourceSize for UAnimSequence and USkeletalMesh assets.
Bugfix: Removed a one-frame delay when applying animation curve data.
Bugfix: A memory leak related to montages during shutdown has been fixed.
Bugfix: Negative curve values now work with montages.
Bugfix: Fixed issues with montage instances and slot nodes getting inconsistent weight data, causing animations to evaluate in different states.
Removed thread-unsafe access to LastRenderTime in animation system.
Improved duplicate slot node warning to make it easier to find malformed assets in larger projects.
Prevented invalid ranges being entered into FBX import data.
Optimized SafeSetCSBoneTransforms used by skeletal controllers after they have submitted their transforms.
Removed double iteration over the pose.
Removed iteration over the entire pose (we can start at the first bone in the transform list).
Removed bone masks and instead collect interesting nodes to perform conversion on.
Removed unnecessary conversions.
The anim blueprint compiler can now access member variables directly instead of thunking to the VM.
OSX version of the Maya rigging tools are now included in the launcher distribution.
Some animation nodes have moved to AnimGraphRuntime module.
Added a few support functions to UAnimInstance to make querying asset player states easier. Also added more montage stats to UAnimInstance.
Added NativeUninitializeAnimation override point to UAnimInstance.
Animation Compression: "Automatic" animation compression settings now default to the settings specified in Project Settings: Animation: Compression.
Reduced memory churn by removing many unnecessary allocations in various animation update and evaluate methods.
Sub-state machines can now work properly with native bindings. Previously, only sub-state machines in entry states worked correctly.
Audio
New: Improved Gameplay Statics sound API.
New Spawn at Location functions return an Audio Component that allows manipulation of the played sound similar to the Attached version.
Play at Location still does not return the audio component and should be used for one-shot sounds.
Rotation added to Location and Attached API to allow facing to be specified to work properly with non-spherical attenuation shapes.
Play Attached renamed to Spawn Attached.
Sound and Dialogue APIs are now consistent.
New: Added ability to set a global pitch scale for every non-UI sound in the game via a new blueprint function.
New: Made audio component's applied sound attenuation settings accessible from blueprints.
New: Orphaned sounds due to a Sound Node Looping now output a warning to the log.
New: Sound attenuation boundaries match the attenuation curves at min/max.
New: Sound attenuation values match attenuation curves at min and max rather than assuming 1.0 or 0.0 respectively.
This allows for more unusual distance-based attenuation curves, such as donut-shaped curves, or curves that cause audio to be loud far away but quiet nearby.
New: Support for playing sounds with audio component properties without needing an audio component as long as the sound's properties do not change.
New: XAudio2 voices for PC/XBoxOne platforms are pooled and reused.
New: Volume-weight voice prioritization sorting for active voices.
This allows for sounds with zero volume, but high priority, to be stopped by lower priority, but audible, sounds.
Bugfix: This feature includes a fix for when sounds go out of range (attenuation reaches zero) and then come back in range while still active. If not stopped in between, the sound won't automatically restart from the beginning.
Bugfix: Fixed a probable crash that could have happened if 9 reverbs became activated at once.
Bugfix: Concatenator sound cue nodes will now wait for all sounds to finish in child mixer nodes before playing next sound in sequence.
Bugfix: On PC/XBoxOne, an audio skip in sounds past a certain length have been removed.
Bugfix: On Mac, splitting and merging audio streams when using reverb, EQ, or radio effects no longer causes volume levels to to change.
Added low-pass filter for voice audio units to closer match PC audio.
Bugfix: Play In Editor Sound Quality Level is now being used correctly for Sound Quality nodes in Sound Cues when playing in editor.
Bugfix: A rare case where a sound would not be played because an async load request had been made too recently has been fixed.
Bugfix: Core Audio API no longer crashes on Mac when the number of active sounds exceeded the number of available audio units.
Updated OVR Audio SDK.
Automation
New: Added config entries to determine which platforms and configurations are available in an installed build
Also specifies whether platforms are available for code or content projects only
New: Added -FastPDB commandline parameter for UnrealBuildTool, so that we can make use of the /DEBUG:FASTLINK option in Visual Studio 2015
Used by default in Visual Studio Projects and Hot Reload, with a Build Configuration override if you don't want to use it
New: Adding option to mark the output of a module as publicly distributable if the module source code is not
New: Improved methods of identifying installed builds
New: Improved methods of identifying installed builds
New: Refactored automated test flags
Added Disabled flag to disable tests without commenting-out or deleting code.
Replaced Smoke Test button in Automation Front End with a Filters dropdown.
Test configurations do not compile out Automation features (except in Shipping mode).
Automation tests can be triggered from in-game console in non-editor builds (automation controller is enabled).
Added Third Party binaries folder to Build Plugin command
Changed BuildDerivedDataCacheNode to use target receipts to add runtime dependencies.
Deprecating -rocket command line argument as it is no longer needed to identify installed builds
Bugfix: Fixed a bug that could cause a crash when running automation tests from the commandline.
Bugfix: Fixed issue with Packaging DLC on Mac
Bugfix: Use runtime dependencies from module files to determine what needs to be included in released builds
Blueprints
New: Blueprint "Development Only" Functions
Native C++ functions marked BlueprintCallable can now also be optionally marked as DevelopmentOnly. This new metadata allows calls to those functions to be disabled (compiled out) of all Blueprint function graphs in cooked/packaged builds without breaking the execution flow.
The PrintString and PrintText system library functions have now been marked DevelopmentOnly by default. This allows for a quick removal of Blueprint logging in the final build product.
To get packaged/cooked Blueprints to compile without the "DevelopmentOnly“ nodes, disable the “Compile Blueprints in Development Mode" option found in the project's Cooker settings (this option is on by default to preserve functionality).
New: Condensed Blueprint Struct Nodes
We've improved and refined usability for structs that contain toggle values that are conceptually linked to other property "settings" in the same struct (like how our PostProcessSettings struct operates).
Different override/enabled states are now managed through a toggle or dropdown widget that is exposed along with the setting on "Make Struct" and “Set Member” nodes.
To associate a toggle variable with another property, use the "EditCondition" metadata like is pictured above.
We've adopted this workflow for our PostProcessSetting nodes, which have proven to be unwieldy and confusing without it.
New: Added advanced searching syntax to Find-in-Blueprints.
New: Added experimental option to use the Blueprint Diff Tool with Animation Blueprints and Widget Blueprints.
New: Added facilities for specifying override vertex colors for meshes via Blueprints: PaintVerticesSingleColor and PaintVerticesLerpAlongAxis.
PaintVerticesSingleColor sets all mesh vertices to the specified color.
PaintVerticesLerpAlongAxis allows you to specify a linear blend along a mesh axis from one color to another.
New: Added Min and Max nodes for byte variables.
New: Added CopyPoseFromSkeletalMesh node, which takes a snapshot of a skeletal mesh pose and applies it to another skeletal mesh component.
New: Added support to AsyncTask nodes so that their corresponding functions can return null.
New: Added the ability to mark BlueprintCallable functions as development only.
By default, these nodes will be compiled out of Blueprint class function graphs at cook/package time, potentially improving runtime performance.
The "Print String" and "Print Text" functions are now marked as development-only, and will not be executed at runtime in cooked builds by default.
New: Added asset registry tags "NativeComponents" and "BlueprintComponents" to store the number of native and blueprint components, respectively. These counts can be used to identify targets for optimization.
Blueprint context menu performance improved.
By default, Buildmachines will no longer ignore compile on load errors for Blueprints.
Users can no longer edit Actor default values on properties in User Defined Structs or in CDOs that have structs with Actor properties.
New: Users can now delete function graph overrides that used to be interface implementations.
Bugfix: Crash fix when undoing add/remove operations on default instanced subobjects in a Blueprint.
Blueprint division nodes now show the callstack if a divide by zero is attempted.
During undo/redo, when deleted Blueprint instances are restored to the scene, they will be reinstanced using the newest version of their BlueprintGeneratedClass.
New: GetPathName node created. This node returns the full path name of a UObject.
New: Exposed many scalability settings to Blueprints via UGameUserSettings, making it easy to build a settings screen entirely in UMG.
New: The Blueprint Profiler is now available as an experimental feature to help identify costly operations in blueprints and guide optimization.
Enable the Blueprint performance analysis tools option in editor preferences under General - Experimental in the Blueprints section.
Analysis is currently enabled on a per-blueprint basis in PIE only.
To profile a blueprint, enable the profiler option in the blueprint editor and recompile the blueprint to add instrumentation. Then enter PIE and the editor will display the blueprint profiler tab and display timing data.
Work is ongoing in this area and the feature is not expected to be fully complete in this release.
New: Vector2D now has equal and not equal functions, just like Vector3D.
When adding new variables to user defined structures, the variable type will be the same as the last set type.
Bugfix: When converting a selection of components into a Blueprint, CDO values will no longer be lost.
Bugfix: "Convert Selected Components to Blueprint Class" no longer generates new components when used repeatedly.
Bugfix: Find-in-Blueprints will correctly check-out all out-of-date Blueprints if Index All With Source Control is selected.
Bugfix: When modifying default values on inherited Blueprint variables, the default values in the parent Blueprint will not be affected.
Bugfix: "Add Component" node adds components with exposed variables to the correct target actor (previously always went to "self").
"Color" name is no longer restricted.
Bugfix: "Convert selected actor to blueprint class" and "Convert selected components into blueprint class" actions can no longer be used to convert types that aren't blueprintable.
Added "focus" keyword to "AIController::SetFocalPoint".
Bugfix: Adding a WeakObjectPtr to an array of object references in a Blueprint now works correctly.
Bugfix: Assigning an interface property that is exposed on spawn using the Spawn Actor of Class node will no longer error.
Bugfix: Async Task nodes and Load Asset nodes no longer change superficially each time they are cooked
Bugfix: Attempting to follow a Blueprint compile error message to a node that has been delete no longer crashes
Blueprint Options and Class Options details view will correctly display in non-English languages.
Bugfix: Blueprint VM no longer crashes when encountering a type mismatch, throws an exception instead.
Bugfix: Blueprints duplicated for PIE will no longer register as dependencies to other Blueprint.
Bugfix: Blueprints with events in them no longer indicate they are different when compared against themselves using the Blueprint Diff Tool.
Bugfix: Can no longer add reroute nodes to read-only graphs such as math expression graphs.
Bugfix: Can no longer change the "Parent Socket" member of an inherited component.
Can no longer reparent level Blueprints to other level Blueprints, though native classes are still an option.
Changed an ensure to an error when attempting to generate literals for unsupported properties in Blueprints.
Bugfix: Child components in a Blueprint Class asset attached to a default scene root will no longer be lost after reparenting to a Blueprint Class that also has a default scene root.
Bugfix: Copy and pasting local variable nodes for functions into collapsed graphs will no longer invalidate the node.
Bugfix: Crash fix for prompting user to check out Blueprint during the compilation stage.
Bugfix: Crash fix in Find-in-Blueprints after switching languages and searching.
Bugfix: Crash fix when AIController possesses a Pawn during Pawn's Unpossess event while exiting PIE.
Bugfix: Crash fix when attempting to override Timeline event nodes in a child Blueprint.
Bugfix: Crash fix when hiding the "CameraSettings" category on custom Camera Component classes.
Bugfix: Crash fix when pasting an event node is undone/redone.
Bugfix: Crash fix when doing a "Find Reference" on local variables without any placed nodes for the variable.
Bugfix: Crash fix when creating a local variable from an orphaned node inside a collapsed graph.
Bugfix: Custom event nodes bound to delegate signatures that include 'const' and/or TArray input parameters will no longer emit a compiler note/warning.
Bugfix: Delay nodes can now be used in GameInstance's Initialize function. Previously they would only work in PIE.
Bugfix: Dependencies that arise due to Blueprint Macros are now correctly detected so that bytecode can be regenerated when needed - fixes one cause of TRASHCLASS appearing in bytecode.
Bugfix: Diffing Blueprints with deleted component assets will no longer cause an assert.
Bugfix: Warnings about missing parent functions no longer appear if the child function is invalid as a result of compile-on-load.
Bugfix: Dragging and dropping to create pins on function Return nodes when there are multiple of them will correctly update all Return nodes.
Bugfix: Dynamic Component delegate bindings to self are no longer exported on copy/paste ALT-drag. This corrects the side effect of a copied Actor instance also affecting the original.
Bugfix: Find-in-Blueprints no longer requires the Asset Registry to initialize.
Bugfix: Crash fix when editing an instanced variable nested within another instanced variable.
Bugfix: Crash fix deleting graphs or delegates while a "Create Event" node's graph is in the transaction buffer.
Bugfix: Crash fix when a Blueprint's skeleton class is null.
Bugfix: Fixed a Blueprint breaking bug where invalid "PLACEHOLDER" classes would replace Blueprint class references.
Bugfix: Crash fix in Blueprint Editor after removing a previously-serialized root and/or parent component within the native scene component hierarchy of a native C++ parent class.
Bugfix: Crash fix in Blueprint Editor when a specific HideCategory (PrimaryTickProperty) was set on an Actor-based Blueprint Class.
Bugfix: Crash fix in Blueprint Editor when deleting a root scene component with 2 or more children followed by deleting a non-root child of the promoted child node.
Bugfix: Crash fix in Blueprint Graph editor after an undo of an unlinked user-defined pin removal action (e.g. removing an unlinked Function Input).
Bugfix: Fixed a Blueprint Graph editor issue that caused Add Component nodes not to be restored properly on an undo/redo after a deletion followed by a compile.
Bugfix: Fixed a bug in duplicated event nodes that could cause unrelated content to be referenced and loaded.
Bugfix: Fixed a bug in the array Shuffle method where the last entry wasn't as randomized as the other elements.
Bugfix: Crash bug during garbage collection for child Blueprints cyclically dependent on their parent.
Bugfix: Crash fix when applying instance changes to a Blueprint.
Bugfix: Crash fix while dragging off pins.
Bugfix: New components are now able to have the same name as a deleted component without having to compile after deleting the old component.
Bugfix: Copy, duplicate, and rename hotkeys wor correctly in the Blueprint viewport.
Bugfix: Fixed a bug that was resetting arbitrary defaults on Blueprint sub-classes.
Bugfix: ClassAssetIDs properly resolve circular dependencies.
Bugfix: Fixed a bug where special game specific event nodes could be removed on load (when they're associated with interface functions).
Bugfix: Fixed bugs with parent/child cyclic dependencies, where the child's overridden property values would be cleared on load and inherited components would be trashed during compilation.
Bugfix: Crash fix on undo of an Actor-based Blueprint Class instance deletion if it followed a previous redo.
Bugfix: Crash fix when using the diff tool with a Blueprint that implements an interface.
Bugfix: Crash fix on save with an EditInline instanced object owned by an Actor component instance.
Bugfix: Crash fix when modifying a function signature after deleting a sub-class override for it.
Bugfix: Crash fix when passing a default BlueprintSessionResult object to the "Join Session" Blueprint node. Instead of crashing, the join will fail and execution will continue from the "On Failure" pin.
Bugfix: Crash fix when using the "Replace References" feature when deleting a Blueprint asset.
Bugfix: Crash fix in specific cyclic dependency cases involving an Actor and ActorComponent Blueprints.
Bugfix: Crash fix when removing a event/function param in a Blueprint that was associated with the set GameMode.
Bugfix: Crash fix when deleting a map while its level Blueprint is opened.
Bugfix: Crash fix after a hot reload of the compiled game project.
Bugfix: Fixed a potential infinite loop runtime crash when adjusting Actor rotation in a Blueprint function.
Bugfix: Crash fix in to component reconstruction in a Blueprint Class instance related to undo/redo operations.
Bugfix: Fixed an internal Blueprint compile error on expansion of a Macro Instance node with one or more unconnected Enum output pins.
Bugfix: Crash fix when force-deleting a non-Actor parent Blueprint Class asset in the Content Browser if a child Blueprint Class asset was also loaded.
Bugfix: Event Dispatchers do not become unmodifiable after reparenting the Blueprint.
Bugfix: Component property values on a Blueprint class instance in the current scene are no longer reset as a result of recompiling the Blueprint class.
Bugfix: Convert Selected Components to Blueprint Class no longer asserts inappropriately.
Bugfix: Fixed collision response options editing for instances of Skeletal Mesh components added to a Blueprint Class.
Bugfix: Sliders behave properly on Capsule Collision component shape properties in the Blueprint editor.
Bugfix: Find-in-Blueprint goes to an item after the user double-clicks on it when searching locally.
Bugfix: Fixed compile errors after creating a local function variable from a node that could not find its assigned property.
Bugfix: Crash fix from invalid macros resulting from deleting the source graph in MacroLibrary.
Bugfix: Crash fix on Blueprint load when a macro instance referenced a struct.
Bugfix: Crash fix when generating bytecode for circularly-dependent blueprints.
Bugfix: Crash fix when a Blueprint Enum name collides with a Details Customization Name. For example, "Color" is now a safe name to use for a Blueprint Enum.
Bugfix: Crash fix when a Blueprint is saved without valid default values.
Bugfix: Crash fix Fixed when attempting to open the Property Matrix for a Blueprint that is missing its parent.
Bugfix: Crash fix when indexing all Blueprints in the Find Results window.
Bugfix: Crash fix when making changes with multiple components selected in the blueprint editor.
Bugfix: Crash fix when using "Find References" on a struct operation node (Make, Break, Set Members).
Bugfix: Crash fix when modifying some properties in sub-struct variables inside user-defined structs.
Bugfix: Crash fix when using the target of an Interpolate Component To node is destroyed before the node finishes.
Bugfix: Crash fix when using the Editor to debug breakpoints in blueprints with a null MacroGraph. Now it calls Ensure and recovers gracefully.
Bugfix: Crash fix with duplicating Timeline nodes, which was causing the new Timeline's tracks to be misplaced.
Bugfix: Crash fix after reinstancing Component BPs in thumbnails.
Bugfix: Crash fix in editor when using hotkeys to create local variables in graphs that do not support locals.
Bugfix: Crash fix when applying instance changes to a struct array back to the blueprint using the IWCE interface.
Bugfix: Crash fix when using "Draw Debug Float History" and "Draw Debug Transform History" in Blueprints.
Bugfix: Crash fix while garbage collecting recompiled Blueprints.
Bugfix: Promoting function graphs from interfaces during interface removal no longer calls Ensure.
Bugfix: Fixed thread-unsafe code in the Blueprint VM by removing static/global data.
Bugfix: Fixed errors that would sometimes appear when reloading a level that referenced a sub-level.
Bugfix: Fixed issue with appearing to be able to select actors in the viewport using Level Blueprints loaded through the Find-in-Blueprint system.
Bugfix: Deleting macros in Macro Libraries and then using undo no longer causes external dependencies.
Bugfix: Fixed UI issues when clearing GameplayTagContainers.
Bugfix: Fixed issues that could occur if an existing Blueprint class default object or instance contained one or more invalid property values for native component subobjects on load.
Bugfix: Fixed issues with "Find References" on local variables located in function graphs with a space in the name.
Bugfix: Fixed issues with graph node bubbles rendering incorrectly when there is nothing in the top slot.
Bugfix: Fixed the inability to save a Blueprint Class asset after renaming another Blueprint Class asset on which it depends.
Bugfix: Fixed warnings that would sometimes appear when using level Blueprint communications.
Bugfix: Fixed an issue causing Find-in-all-Blueprints to not be able to load up Blueprints due to missing path.
Bugfix: ForEachEnum will now correctly iterate over all enum values.
Bugfix: Functions correctly inherit purity in Blueprints and will update to reflect the current purity state of the inherited function.
Bugfix: GameplayTag and GameplayTagContainer switches will now work in standalone and cooked builds.
Bugfix: Harvesting components into a new Blueprint will correctly mark the components as movable so they can properly attach to the root.
Bugfix: Macros leveraging wildcard parameters will no longer fail to expand during compile-on-load.
Bugfix: Moved error bar for variable nodes to the bottom instead of the top to prevent shifting of nodes when there are errors.
No longer possible to duplicate Blueprint graphs while in PIE.
Optimization for Find-in-Blueprints gathering of property data.
Per instance lighting and vertex coloring on static mesh components is now only applied after the user construction script when the actor is reconstructed.
Removed direct dependency on GameplayAbilities from GameplayDebugger to solve problems with its classes showing in blueprints editor as a result of the OS automatically loading the library.
Bugfix: Removing an interface and keeping the functions will correctly make the pins on the function available in the details panel.
Bugfix: Renaming a component and then adding a new component of the same type in the Blueprint editor will no longer result in broken defaults editing.
Bugfix: Renaming a component no longer renames all components of the same name in dependent Blueprints (inherited components are still updated as expected).
Bugfix: Resolved Blueprint compiler errors with duplicating Matinee Actors and adding controllers.
Bugfix: Right clicking on the graph instruction text for new Blueprints will no longer prevent the node context menu from appearing.
Bugfix: Setting default values of Text properties in the User Defined Struct or for Local Variable properties in Blueprints will correctly assign the value and preserve the value between instances of the editor.
Slight improvement to native Actor instance construction time.
Bugfix: Spawn Actor From Class nodes can no longer be placed in Blueprints that do not support a world context.
Suppressed import linker errors related to Blueprint Generated Classes.
Bugfix: Child actor construction scripts run appropriately when starting Play In Editor sessions.
Bugfix: Blueprint graphs don't lose focus after pressing debugging keys in the blueprint editor.
Bugfix: Validated Get nodes can now be used on local variables.
Bugfix: This fixes an issue with array nodes where the top input pin would be obscured by the comment bubble making it hard to wire up the nodes.
Bugfix: Undoing changes to a Blueprint Actor Class's component hierarchy when the Blueprint Editor is closed now works correctly.
Bugfix: Undoing changes to object reference properties in a Blueprint no longer causes "Graph is linked to private object(s) in an external package" errors.
Bugfix: User Defined Enums begin counting at 0, and will no longer increase by two's.
Bugfix: User defined structs with Blueprint class references in their defaults will no longer lose their defaults when loading.
Bugfix: User defined structs and Local Variables can have non-basic type arrays of size 1 without resetting size 0.
Bugfix: When promoting an orphaned variable node to a local variable, all orphaned variable nodes in the local scope will point at the new local variable as expected.
When using a pin connection to specify the class for "Spawn Actor From Class", the default value overrides from the node are assigned to the new actor when it is spawned.
WorldContext pins will no longer be visible when the editor starts up if a Blueprint is loaded during game module load (actor/object constructors).
Exposed the ESplineMeshAxis type to Blueprints.
Improved "Find References" for variable nodes to more directly search for references to the specific variable.
Improvements to the usability of PostProcessSettings structure in Blueprints.
Log statements coming from blueprints now include the blueprint's name. This can be disabled in [Kismet] in Engine.ini via bLogPrintStringSource.
Optimized performance of USimpleConstructionScript::GetAllNodes. This dramatically improves the performance of FindArchetype which is relied upon heavily when spawning a Blueprint defined Actor with components added in blueprints.
PinTypeSelector has improved usability with the sub-menu for object types.
Added a warning when a deprecated output from Break Struct node is used.
Toggling a function to pure will automatically remove all breakpoints from call sites.
Core
New: .ue4stats file will now have ".inprogress" extension for the duration of stats capture. This prevents accidental use of an incomplete file.
New: Added compile-time define support to filter out command line args on a per-game basis.
New: Added configurable threshold settings for fps/frame time displays.
t.TargetFrameTimeThreshold and t.UnacceptableFrameTimeThreshold set the thresholds (in ms, defaulting to 33.9 and 50.0, respectively).
Values below the target level are green, values above the unacceptable level are red, and the ones in between are yellow.
The bar for on-screen cycle counters is now based on t.TargetFrameTimeThreshold rather than a hardcoded 33.3 ms.
New: Added console command "LoadTimes.DumpReport" which provides a report of the exclusive load time of packages.
New: Added debug renderensure console command.
New: Added -DUMPALLWARNINGS command line param to force dump all warnings and errors after after executing commandlets.
New: Added -fullcrashdumpalways commandline option to force full crash minidumps.
New: Added garbage collection array pool leak checks.
New: Added LIKELY/UNLIKELY macros for static branch prediction hinting.
New: Added -MatchAutoStatCapture command line switch to save .ue4stats automatically during each match.
New: Added more log info when saving temporary shader files fails. Increased the number of attempts when moving a file fails.
New: Added new hitch detection CVars to make it easier to control how hitches are detected and reported
t.HitchFrameTimeThreshold is the definition of a hitchy frame (in ms), defaulting to 60 ms.
t.HitchDeadTimeWindow is the minimum time that must pass before we'll record a new hitch (in ms), defaulting to 200 ms.
t.HitchVersusNonHitchRatio is the minimum ratio between the last frame time and the current frame time to consider it a hitch, defaulting to 1.5 (e.g., if the last frame time was 50, the current frame must be at least 75 to be considered a hitch).
They can also be set in the [SystemSettings] section of DefaultEngine.ini for games that target something other than 30 fps.
Switched 'stat hitches' display to use the t.HitchFrameTimeThreshold value, and updated coloring to use the related coloring thresholds (at 25% of the hitch value) instead of using hardcoded yellow at 100 ms and red at 200 ms.
New: Added "stat startfile", “stat stopfile”, “stat hitches”, and “stat namedevents” to the console command autocomplete list.
New: Active class redirectors map is loaded from all config files, so plugins can define redirectors.
New: Asset Registry tags are now excluded from cooked builds. This reduces memory usage. Tags needed at runtime must be added to the CookedTagsWhitelist list in DefaultEngine.ini
New: Async loading priority has been given a typedef and made into a signed type.
New: Async: Added ability to register an optional callback function that is executed when a Future completes.
New: Console windows opened by the engine on Windows, such as for log output, will now attempt to match their horizontal size to the console's buffer size to minimize the need for manual scrolling or resizing.
New: Added unit test for ISO date/time conversion of empty strings.
New: Allowed for specifying custom data in FStructOnScope.
New: Templatized TypeContainer implementation to allow for thread-safe objects; updated unit test
New: Enabled user-defined suffixes on Saved folders with the -saveddirsuffix= command line parameter.
New: Exposed async load priority through streamable manager.
New: FCachedReadPlatformFile can now be disabled to decrease memory usage in exchange for decreased speed.
New: Function for getting total and free disk space on Mac.
New: Garbage collector will now spawn sub-tasks as soon as there's enough work without waiting for the parent task to finish processing all objects.
New: Implemented Undo Barriers on the transaction buffer.
This adds some new methods to the UTransactor interface for adding and removing Undo Barriers.
PIE now adds an Undo Barrier upon startup, so that it is not possible to undo beyond the start of the PIE session.
New: Pkginfo commandlet can now open packages from outside of the current project by specifying the absolute package path.
New: Script callstacks are now printed out on ensures.
New: Added support for FText properties to serialization.
New: Added support for TMap property serialization.
New: Exposed entire serializer state in backend API.
New: Added HUDinformation about currently running stats file command (in format "STATS FILE: 【时长】Duration: {0}, Filesize: {1}").
New: Stats converter is using a new stats reader which runs 10x times faster.
New: When cooking by the book, saving packages will now skip creating exports and imports that are editor-only (are instances of an editor class).
New: Profiler loading time optimized to be up to 6x times faster.
Bugfix: Crash fix in undo/redo when a lazy object pointer refers to a garbage collected object.
Bugfix: Crash fix in async loading caused by iterating over an array while new elements were being added to it.
Bugfix: Crash fix when loading the AssetRegistry cache.
Bugfix: Crash fix on failure of request file functionality to UnrealSwarm. It will no longer crash on sporadic network problems.
Bugfix: Crash fix to UnrealHeaderTool in some rare cases if the parsing step had other errors.
Bugfix: Crash fix when replacing references to a deleted anim blueprint with a duplicate.
Bugfix: Crash fix to hot reload when dealing with empty user-defined enums.
Bugfix: Profiler indication loading progress reworked so it no longer freezes without a progress bar.
Bugfix: Fixed missing return value in TAsyncResult assignment operator.
Bugfix: CrashReporter records crashes properly on Windows 10.
Bugfix: Async loading system will not promote an existing request's priority where a new higher priority request for an already requested package wn't promote the existing requests priority to match the new one.
Bugfix: Cooked asset registry generation now takes redirectors into account.
Bugfix: "-benchmark" command line switch is now honored in non-editor builds so that benchmarking games is possible again.
Bugfix: Servers no longer make repeated attempts to initialize the HighRes screenshot system.
Bugfix: Fixed a case where FAssetRegistry::RemoveDependsNode could potentially delete an allocation from within an array allocation.
Bugfix: Removed a potential deadlock when suspending and resuming async loading multiple times.
Bugfix: Thread local values are no longer accessed with invalid TLS keys in Stats2 code.
Bugfix: Fixed an assert when cancelling async loading with async loading thread enabled.
Bugfix: Game-agnostic editor settings are now processed correctly when output to the engine saved config directory.
Bugfix: Fixed blueprints compilation errors after hot reload.
Bugfix: UnrealBuildTool dependency file caches are no longer broken when the process is terminated unexpectedly.
Bugfix: Comparisons between module names of different case are now handled correctly when checking files for rebuilds in UnrealBuildTool.
Bugfix: Fixed 'debug ensure' console command logic.
Bugfix: FAssetRegistry::DependencyDataGathered no longer favors soft asset dependencies.
FAssetRegistry::DependencyDataGathered was potentially replacing hard asset dependencies with soft asset dependencies, but the hard asset dependencies need to take precedence.
Bugfix: FURL comments are now properly gathered for documentation.
Bugfix: Fixed leaking certain auto-generated structures (ICppStructOps) on exit (reduces spurious memory leak reports by memory profiling tools like valgrind).
Bugfix: Memory leaks related to async loading have been fixed. Array memory churn has been reduced.
Bugfix: JsonReader::ParseNumberToken now terminates properly on sudden end of stream.
Bugfix: There is no longer a race condition where StaticFindObject can be called from another thread while SavePackage is running.
Bugfix: Fixed 'remove' actions when processing .ini files in UnrealBuildTool.
Bugfix: Removed a possible infinite loop and avoided skipping elements in UMapProperty::Identical.
Bugfix: Various issues fixed with hot reload on Mac.
Bugfix: Time markers in the log file when using -LOGTIMESINCESTART are now logged correctly.
Bugfix: Fixed issue where memory counters are not correctly listed in the profiler's window.
Bugfix: Path generation errors in streaming network file platform layer fixed.
Bugfix: Fixed stack corruption in UnrealHeaderTool when increasing NAME_SIZE.
Bugfix: "Stat MemoryPlatform" no longer exhibiting errors the first time it is used in a run.
Bugfix: UnrealBuildTool is now able to harvest environment variables when the user's Windows login name contains non-ASCII characters.
Bugfix: UnrealHeaderTool now stops the build when a warning occurs and "warnings as errors" is enabled.
Improved the readability of on-screen stat displays.
The background color for each row is now solid instead of a gradient, and it alternates colors from row to row to improve reading across a line.
Hot-reload performance has been improved with parallelized search for old class default objects' referencers.
Added "out of space" checks to the build patch services.
CrashReporter always dumps minidumps even when the full crash dump mode is enabled, mostly to avoid hitches during writing the minidump.
Increased the default UObject count limit in the editor to 16 million objects.
BuildConfiguration.xml changes will now cause a makefile rebuild.
Minimized allocations made by garbage collection process by pooling UObject arrays.
Optimized UObject array copying during garbage collection by using memcpy instead of iterating over the array.
Minor improvements to scoped timing functionality.
Make scoped seconds timer class available outside of stats build. Normal usage macros still remain guarded.
Added SCOPE_SECONDS_COUNTER_RECURSION_SAFE, which only times during the outmost instance of a recursive function
Added SCOPE_SECONDS_COUNTER_RECURSION_SAFE_BASE and SCOPE_SECONDS_COUNTER_BASE, which are defined in all build types, for easy temporary timing in Test/Shipping builds.
Added a boolean parameter to the timer class which can be used to disable it without having to scope the calling code.
Added a more verbose message when crashing due to seeking to invalid file positions.
Optimized custom version system so that it takes less space in saved packages and is faster to access at runtime.
Optimized FElementBatchMap usage in Slate rendering.
Optimized FMemory::Memswap and TSparseArray::Compact.
Optimized object iterator by storing the current object pointer in the iterator object.
Optimized performance of FindFunction, which decreases overhead for calling all UFUNCTIONs.
Optimized the code generation path in UnrealHeaderTool.
Fonts will no longer be loaded on the server.
Framesync for external profilers now happens reliably around gamethread frames.
Game resolution now will always be smaller than the primary desktop size, even if the command line specifies a bigger resolution.
Memory stats are logged on OOM.
Made sure that all instanced subobjects are not reset on actor construction and not only components.
TMap properties are now processed when searching for object references.
Moved FriendsAndChat module to Runtime folder.
OS memory stats are no longer acquired every tick unless stats are being captured.
Bound by (GT, RT, GPU) calculations now uses the t.TargetFrameTimeThreshold cvar (in ms) rather than being hardcoded to kick in only when over 30 fps.
Changed the ini file name generation for PerObjectConfig objects that are saved into a package to use the file name specified by the object instead of the content path where they live.
Cook-by-the-book will now skip saving packages that are only referenced through editor-only properties.
Cooked packages can now be loaded in the editor if cooked for the same non-editor version of the platform the editor runs on.
Buttons on CrashReporter window have been updated for better user experience.
Stats are now visible in VR mode.
String output functions in JsonObjectConverter now ignore Deprecated properties by default.
Various fixes and improvements to asset-registry-based package dependency preloading
Editor and Tools
New: SessionFrontend now has the ability to set session name and owner from the command line, e.g. on consoles running from Visual Studio.
New: "Reset to default" button on the Image Size property of a brush now resets to the size of the brush's texture, if one is set.
New: "Scalabilty Group" console variable category has been added to the device profile editor view.
New: Added "-FixupStringAssetReferences" command line option to use with the ResavePackages commandlet. This will forcibly fix any string asset references the same way it fixes hard object references.
New: Level sequences now support particle system parameter animation.
New: Animation tracks can be copied from a matinee to a level sequence.
New: Added support for slot name animation to the skeletal animation track in the level sequence editor.
New: A font metrics visualiser has been added to the font editor preview. This helps you ensure that all of your sub fonts are within the clipping region (the green box) of your main font.
New: Added a horizontal scrollbar to the Message Log so that very long lines can be seen in their entirety.
New: Added a new add key mode in the curve editor. Shift + ctrl + left mouse will add new keys (value and time) on all editable curves at the mouse location.
New: Added a new Blueprint-callable method to force an update on a Spline Mesh (to recalculate its collision), and also added it as an extra optional parameter on any Blueprint calls which set spline mesh parameters so that mesh/collision update can be deferred if desired. This can provide a big performance optimization in Construction Scripts which manipulate Spline Mesh Components.
New: Added a new Editor Preference (Editor Preferences -> Level Editor -> Miscellaneous -> Move BSP Pivot Offset Automatically) which maintains a Brush's pivot in the center of its geometry when its vertices are being edited in Geometry Mode.
New: Added a new simplified plugin creation wizard.
It can be opened from the plugin browser instead of being another plugin that needs to be enabled.
Now, users only need to choose a plugin template and a path/name for it.
New: Added the ability to bind a delegate to a property to react to a child property changing.
New: Added an option (in editor style settings) to mirror output log warnings or errors into the message log during PIE.
New: Added Data Table support for static sized arrays.
New: Added sRGB color input support in ColorPicker.
New: Added support for a package to be launched to multiple targets from a single launch command line.
New: Material parameters can now be animated in level sequences.
New: User Defined Struct string and text properties can be marked as multi-line text.
New: "Convert to Static Mesh" can be used on volumes and works the same way as it does for brushes.
New: Added template to the Plugin Creator that will help you create a plugin using a Third Party library.
New: Added the ability to take, save, and load widget snapshots via the widget reflector. This works for both local and remote targets, and allows you to do things like take a widget reflector snapshot from your game running on a PS4, and then inspect that snapshot on PC
New: Added the ability to type in a path for the reference viewer, which makes it much easier to track down assets that are broken due to references to missing assets. Paste in the missing asset path to view the assets that referenced it.
New: After making changes to certain language settings which require an editor restart, a toast prompt is now displayed indicating this to the user, with a button for performing the restart.
New: Camera preview window in the level viewport now has better support for actors with multiple camera components. It will ignore camera components with bIsActive set to false, letting the user decide which component to use.
New: Changed Plugin Creator to allow new plugins to be created in subdirectories.
New: Changed the hierarchy of some of the command lists to better reflect when a keypress has the potential to be handled by a parent if necessary.
This fixes the issue where some hot keys were not alerting the user that they had already been assigned in the Keyboard Shortcuts editor.
New: Changed the placement offset for lights so that they're placed closer to the cursor.
New: Changes to spawning / duplicating actors in Simulate In Editor: now actors are always spawned non-permanently into the SIE world, in line with other edits to actors which are reverted upon exiting SIE.
New: Clarified the use of Server Game Options and Command Line Options in the tooltips for the Level Editor -> Play settings.
New: Disabled the "Refresh/Generate Project" and "Open C++ Code" actions for Blueprint projects with no C++ code.
New: Engine: Allowed the use of tokens {GameName}, {PlatformArchitecture}, or {RHIName} in UGeneralProjectSettings::ProjectDisplayedTitle
Note: The value must be manually edited in the ini file and wrapped with "" currently, due to a core issue with ini values for strings/text that contain { or })
New: Experimental "Merge Actors" feature now merges collision bodies.
New: Fixed and enabled UnrealBuildTool makefiles on Mac. This should give faster build iteration times on Mac.
New: FPngImageWrapper now has working error handling. This was previously causing the editor to crash on launch if a project thumbnail had become corrupted.
New: Improved lightmap import performance in editor, improves build lighting time.
New: Improved searching in the console. Typing " " at the beginning of the console command will make it search for all cheat commands containing your terms instead of just those starting with what you type.
New: In the UI widget animation editor and level sequencer editor, you can now change auto key options to auto-key off, auto-key existing animations only, and auto-key all.
New: Made an optimization to component instance data cache application, resulting in big savings for Actors with a large number of construction script created components. Moving actors with many components now works much more quickly.
New: MessagingDebugger: Added keyboard shortcuts for debugger actions
New: MessagingDebugger: Implemented details view for messages
New: MessagingDebugger: Simplified message tracer API
New: New Quad Complexity view mode displaying the amount of rasterized quad overshading.
The quad overshading can also be taken into account in the Shader Complexity view mode by enabling the "Visualize.Quad Overhead" show flag.
New: Added limited support for text based filtering of the event list in Profile.
New: Profiler:made filter box resizable; replaced spaces with slot paddings; more sensible default sizes.
New: Reinstated the ability to edit Spline Components via their visualizer even if the Construction Script sets the points itself. This is done by checking 'Override Construction Script' in the Spline Component's details.
New: Reinstated the control mechanism to move the pivot by Middle-dragging the center point in perspective mode; this allows the vertex snapping mode (holding V+MMB drag) to work as before.
New: Implemented session authorization for remote users in SessionFrontend.
New: Sound class assets no longer modify their package as soon as they are opened in the editor.
New: Stopped the builder brush from being erroneously rendered by 'show collision'.
New: The "Maximum Texture Size" property now yields an error dialog when attempting to change it for non power of two textures which do not have a padded Power of Two Mode.
New: The auto-save feature has been revamped and now functions as intended. It will wait for a small period of inactivity prior to operating, so as not to intrusively interrupt the user's workflow.
New: The light complexity view mode now has improved, more readable color coding. The color per number of lights are configured in BaseEngine.ini under Light Complexity Colors.
New: The process of duplicating Brushes in the editor has now been hugely optimized.
In a test level with 227 brushes, these are now duplicated in around 2 seconds instead of nearly 4 minutes as before.
A dialog has been added to show progress on the operation if it takes more than a few seconds.
New: The reflection visualization viewport mode is now available when using Feature Level ES2, to help visualize mobile reflection differences compared to PC
New: You can now specify a collection to ParticleSystemAudit which will cause you to only audit particle systems in that collection via -FilterCollection=<SomeCollection>.
Bugfix: Crash fix when using custom structs with custom slate UI inside Blueprints.
Bugfix: Crash fix setting struct variable to CurveTableRowHandle.
Bugfix: Crash fix when the engine exits during PIE.
Bugfix: Crash fix when attempting to edit plugin metadata in the Plugins Viewer.
Bugfix: Crash fix when dragging junk text from an external program into the graph editor.
Bugfix: Crash fix when importing multiple objects with the same name at the same time when one of them is an FBX file.
Bugfix: Crash fix when importing an animation containing different rotation order in different bones from an FBX file.
Bugfix: Crash fix when saving a Data Table that didn't have a row-struct set.
Bugfix: Crash fix when using an empty FKey property with a Data Table.
Bugfix: Crash fix when using the eye dropper on color pickers in Material Editor graph nodes.
Bugfix: Crash fix when shutting down the engine while a Play in Editor (PIE) instance is running.
Bugfix: Crash fix when scaling Speedtree assets.
Bugfix: Crash fix when editing an array in the Widget Blueprint editor when there was an active widget animation in the animation editor.
Bugfix: Crash fix when packaging a game after creating a plugin through the editor.
Bugfix: Crash fix when dragging materials onto BSP surfaces within the level editor viewport.
Bugfix: Crash fix to SessionFrontend when right clicking UFE session browser section headers.
Bugfix: "Play in Standalone Game" games now show up in SessionFrontEnd session list.
Bugfix: Unnamed, non-standalone sessions are now correctly showing as "unnamed" in the SessionBrowser.
Bugfix: Fixed an issue in the Widget Blueprint animation editor and level sequence editor timelines where the key editor in the tree view would not stay in sync with property changes when auto-key was turned off.
Bugfix: Byte and enum properties are now evaluating correctly for values greater than 1 in the widget blueprint animation editor and level sequence editor.
Bugfix: Single component values like floats are now showing up in the curve editor within the timeline in the widget blueprint animation and the level sequence editors.
Bugfix: Mac no longer experiences editor hang when removing devices.
Bugfix: Fixed a major issue with rebuilding the collision mesh on Spline Mesh Components when spline parameters are changed. Now collision geometry is always updated correctly when deforming the spline mesh in the editor. Also made the mesh generation more robust for highly deformed spline meshes, which should avoid PhysX warnings in the log and the creation of bogus geometry.
Bugfix: Empty Material Functions no longer mark themselves as dirty when first opened.
Bugfix: Content-only projects will now properly use their config files instead of the defaults when building.
Bugfix: Duplicating, in a Property Tree, an array of instanced objects will correctly deep copy the objects instead of a shallow (referenced) copy.
Bugfix: FBX exporter has two fixes:
Fixed the export order to make sure the hierarchy is exported correctly.
Fixed a crash when an exported selection does not contain a parent.
Bugfix: "Replace Selected Actors With" feature correctly changes all references to the replaced actors.
Bugfix: In the Spline Component visualizer, points are correctly selected on a new spline when a different spline was previously selected.
Bugfix: Speedtree assets will no longer receive blank materials.
Bugfix: Fixed a failure to build Windows and Mac Client from the Project Launcher.
Bugfix: Fixed an issue in calculating the vertical scrollbar ratio for the Curve Editor and Cascade viewports. This was leading to curves not appearing in the Track list when added.
Bugfix: Canceling the color picker dialog in the Curve Editor now correctly preserves the original color.
Bugfix: Fixed an issue where "Show Only Selected" would not show members of actor groups.
Bugfix: Clicking a Text property field corresponding to multiple properties no longer causes the "Multiple Values" text to be erroneously committed to those properties.
Bugfix: Closing the editor with a dirty material open in the Material Editor no longer invokes multiple prompts.
Bugfix: Menu options no longer remain highlighted after the menu closes.
Bugfix: Mobile certificates that are valid do not show up as expired, even if other certificates are expired.
Bugfix: Spline Components added dynamically through the in-world details panel are now editable with the visualizer.
Bugfix: Actor scale (when entered directly in the details panel) works correctly with undo.
Bugfix: Setting the Brush Type of a BSP Brush to default does not put it into an unsupported state.
Bugfix: Hidden BSP geometry will no longer occlude BSP geometry behind it during selection attempts.
Bugfix: Brush extrusion tool now yields correct results if the Brush actor is rotated.
Bugfix: Fixed an issue with files which have been marked as writable not appearing on the list of items to save.
Bugfix: When staging DLC from the Project Launcher, .uplugin files are no longer repeatedly copied.
Bugfix: Changing editor visibility via the World Outliner now correctly hides lights.
Bugfix: Player Collision view mode now draws mirrored collision volumes correctly.
Bugfix: Fixed makefile errors when hot reloading multiple different modules.
Bugfix: "-manifests" parameter is now included when packaging with chunking (PlayGo, Streaming Install etc).
Bugfix: Fixed NavMesh generation around mirrored blocking volumes.
Bugfix: Transformation widgets scale correctly with screen percentage in SIE mode or when using "r.ScreenPercentage.Editor"
Bugfix: Profiler window now is correctly disabled when no session instances are selected.
Bugfix: Fixed not being able to open Sequencer files with audio tracks.
Bugfix: Exiting from the editor during a Launch On will no longer crash.
Bugfix: Camera roll is no longer applied to level viewport cameras after ejecting from the player in a PIE session in the existing editor viewport.
Bugfix: UE4 prerequisites installer will no longer fail when attempting to install an older version.
Bugfix: T3D exporter now properly exports empty arrays and arrays that were larger than the default but otherwise unmodified.Bugfix: Data Table CSV/JSON import now works correctly with FName properties that contain a space.
Bugfix: Fixed undo/redo when locking levels.
Bugfix: AssetImportData for an asset is no longer being lost when the asset is loaded.
Bugfix: Tag and Tag Query Editor windows on Mac can now be clicked.Bugfix: Widget deltas are now correctly calculated when the widget is positioned behind the camera. This was affecting the "Ctrl + Mouse Button" actor movement mode when the widget was offscreen.
Bugfix: The Windows / Command key is now handled correctly as a modifier key. This addresses an issue where switching away from and back to the editor with Win+Tab would result in it no longer responding to input.
Bugfix: Clicking the clear button on the SearchBox widget will no longer close the parent menu (this was affecting context menus in the Blueprint / Material editors amongst others).
Made a number of substantial optimizations and improvements to Mesh Paint mode. This addresses very poor performance when vertex painting on spline meshes or static meshes with a large number of vertices, and also addresses an issue of gradual slowdown when left in Paint Mode for a while.
Added automatic fixup code on load for brushes that were mirrored (which could have resulted in inverted/invalid collision).
BSP is now immediately rebuilt after converting brushes to volumes.
Camera preview window in the level viewport now has better support for actors with multiple camera components. It will ignore components with bIsActive=false, letting the user decide which component to look through.
Color properties with HideAlphaChannel metadata now set the default alpha value to 1.0, instead of 0.0 when the color picker is used to select a new value.
Compilation audio cues now mute if the user disables editor sounds.
Disallowed deletion of assets while PIE is active. Deleting an asset while PIE is active can have a number of adverse effects; before doing so, any current PIE session needs to be finished.
Correct session names are now used by the launch-on feature.
Ensured that all files are deleted when editor fails to create a new project for any reason.
Ensured that Plugin Browser displays correct results after adding a new plugin.
Fixed log spam attributed to redundant component tree updates in the level editor's Details view when the Actor's root component is both native and editor-only.
Internal references in a group of duplicated actors will be fixed up if the referenced object's name coincides with the name of a different object.
Fixed path found for CRT libraries when Windows Driver Kit is installed.
Fixed PIE window positioning when starting a multiplayer PIE session. The 'Center New Window' option is ignored in this case, so that the windows aren't created on top of one another.
Improved rendering performance with very long tangent handles in the spline component visualizer.
Brush Builder parameter editing in the Details panel of a Brush Actor will prevent invalid combinations of parameters. For example, setting inner radius greater than outer radius.
Importing 8bpp BMP images and BMP images stored in reverse row order is now supported.
Fixed the visual appearance of submenu buttons when the submenu is open.
Graph panels no longer handle numpad and direction keys when they are pressed with a modifier.
Grouped actors pasted with 'Paste Here' now have their group actor and pivot position set correctly.
High-res screenshots delay for a few frames to allow temporal artifacts to resolve.
Inertial scroll methods and cached geometry of STableViewBase are now available to derived types.
Made a change so that the Materials category always appears in Primitive Component detail panels with Material properties.
The Maps and Modes setting panel now uses standard asset picker for map configuration properties.
Made minor optimizations to HDR image export process.
Made the shadow color for in-viewport text in the profiler more opaque to increase readability.
Percentage-based scaling is no longer enabled when multiple actors/components are selected.
Redesigned SessionFrontend session browser.
Plugin names are now disallowed from starting with non-alphabetic characters.
StableSort is now used to sort pak files. This preserves file order across builds and can make patch sizes smaller.
Fixed various typos in UMG.
Added FInteractiveProcess class to handle creation and interaction with external processes.
Prevented node flickering when changing details properties with the slider in the Sound Cue Editor.
Reinstated the Plugins menu option in the Edit menu when "Expand Configuration Menus" is enabled.
Reworked plugin templates so that they are laid out with desired folder structure, making it easier to add new templates without relying on existing ones.
Scene component translation manipulator drag is now properly handling the scale and rotation from the parent hierarchy.
Selecting all actors of the same class as the selection (Ctrl+Shift+A) now works when there are actors selected from more than one class.
Smoother scrolling in "Save Packages" dialog when many assets have been changed.
The "New Plugin" button now appears grayed out for Blueprint projects, with an explanatory tooltip. If a Blueprint project is changed into a C++ project by adding a new C++ file, this change is reflected in other project related dialogs.
The data table editor now handles multi-line rows of text.
The editor now only adds plugin directories to the environment path when the plugin is enabled.
The FBX SDK has been upgraded to version 2016.1.1.
The FBX importer is now as fast as it was in version 4.9.
The Level Viewports' Exposure settings are now correctly saved and restored between editor sessions.
Skeletal meshes now use smoothing groups when using mikktspace for calculating normals and tangents.
The User Defined Struct editor now treats TAssetPtr as an asset property type.
Asset discovery performance improved.
Content Browser
New: Added a prototype content browser search filter for assets that use a specific gameplay tag.
Note: The filter currently only shows matching assets that are already loaded, it will not discover tag usage in an unloaded asset!
New: Added a way to forcibly refresh the source control status of a collection.
New: Improved the asset gathering and path prioritization workflow for very large projects.
Previously, the file discovery phase of the asset gathering process would block the entire process until it had found all of the files it needed to test.
This can take quite some time for projects with a large amount of assets, so this change adjusts the process so that discovered paths will be reported back to the asset registry while the file discovery is on-going. This allows you to prioritize the scanning of certain folders before the initial discovery phase has finished.
New: Reinstated Thumbnail Edit Mode Primitive Tools. Now the mesh used by the Content Browser when editing thumbnails can be changed.
New: Removed the UCurve derived asset types from the Create Asset menu in the Content Browser, while still presenting the option to create them as new assets in the asset picker dropdown menu in details panels.
Auto re-import improvement: When a new file is added alongside an asset that has no source file associated with it, a re-import will be attempted instead of reporting a warning.
Bugfix: Editor content browser is now showing an error instead of crashing when user rename a map outside of the editor and then try to manipulate the file in the content browser.
Bugfix: Fixed a bug that could cause a crash when searching asset tags in the Content Browser.
Bugfix: Crash when searching by tag in a folder with redirectors.
Bugfix: Content browser filters used the default category could result in an extra copy of the default category in the menu
Bugfix: Crash that could be caused by creating, reverting, and then moving a file with the same name
FAssetRenameManager::FindCDOReferencedAssets now ignores deprecated and dead classes
Bugfix: There was a potential editor crash when moving assets between folders in the Content Browser.
Bugfix: A new package name was auto-generated when duplicating an asset whose name ends with a numeric suffix. This addresses a crash bug when copy + pasting map assets in the Content Browser.
Bugfix: Crash when importing some FBX files
Bugfix: Drag and drop only worked in the Content Browser tile view
Bugfix: The "Show in Explorer" action in the Content Browser works correctly for C++ classes and finds the associated header file.
Bugfix: The collection manager was sometimes watching non-collection directories for changes
Bugfix: Realtime Thumbnail toggle now correctly remembers state after restarting editor.
Modified DDS cubemap loading to prevent an array overflow when importing a cubemap with too many mips.
Moving assets now corrects source reimport paths where possible
Some performance improvements when opening the Content Browser
Landscape
New: Added a new Landscape Layer Usage visualization mode. This allows you to easily see and optimize which landscape components are using which layers to improve performance.
Each layer has a color code which can be chosen by clicking on the layer thumbnail while the Layer Usage visualization mode is active.
Each landscape component renders a stripe pattern across the entire component. The stripe is made up of the color codes for the layers that are applied to the component.
New: Added layer whitelisting by component to the landscape editor
Enabled via the layer restriction dropdown in paint mode
The brush will go red in areas that aren't whitelisted and will block painting
Hold the main keyboard +/- and click to add/remove layers from the whitelist (not the numpad, the ones next to backspace)
Warning: Removing a layer from components with "-" + click will also delete that layer's painted data on those components
New: Landscape can now have "world position offset" from the landscape material baked into its collision
This feature is experimental and currently has the following restrictions:
Only z (vertical) offset is supported. XY offsets are ignored.
Does not work with CollisionMipLevel > 0
Does not work with an XY offset map (from retopologize tool)
Bugfix: Landscape editor did not show layers that were only defined inside a Material Function used by the landscape material, and not the landscape material itself.
Bugfix: Fixed black spot / hole if all layers on a component use height blending and add to = 0
Bugfix: Fixed crash in LowPassFilter when landscape smoothing brush is used with bDetailSmooth set and a very small brush size
Bugfix: There was a crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
Also hardened the landscape spline tool, although I don't believe it was crashing it could still try to render for a frame after the landscape was hidden/destroyed.
Bugfix: Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
Bugfix: Can now import landscapes over 8161 verts in size
Bugfix: Landscape would become offset and have corrupted blend weights when using the "change component size" tool if an edge row/column of landscape components had been deleted
Bugfix: Landscape component resize tool moved the landscape into the persistent level, and crashing if the persistent level was hidden
Bugfix: Landscape material instances were not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later
Bugfix: Landscape sculpting with a brush below a certain size and strength was not having any effect
Bugfix: Landscape smooth tool was doing strange things near cliffs
Bugfix: Various landscape editor materials (e.g. brushes) being easily obscured by grass or world-position-offset effects in the landscape material
Improved handling of erasing painted landscape layers
Erasing is now possible on vertices 100% painted with one layer, it will now fill with the next most dominant layer on the component
Note: Erasing is still impossible on components which are entirely painted with only a single layer - where there is no next most dominant layer on that component
Bugfix: More robust handling for landscape editor missing the "mouse up" message and getting stuck or crashing
Material Editor
New: Comment nodes added in the Material Editor now start with the focus on the editable text.
New: Landscape Layer Blend now works with Material Attributes
New: Material inputs are now greyed based on translucency lighting mode
New: Removed duplicate entries in the list of Material Functions for the Material Editor right-click context menu.
Bugfix: Corrected an issue with the Material Editor constantly updating node titles while a details slider is moved, leading to flickering.
Bugfix: Crash when selecting a vector and a scalar parameter in the Material Editor at the same time.
Bugfix: A group of material nodes containing a MaterialFunctionCall node would lose their connections when copy+pasted.
Bugfix: Changing a texture's Texture Group was not causing any dependent materials to be refreshed.
Bugfix: Fixed material errors using Custom nodes with LandscapeGrassOutput or other CustomOutput node types.
Bugfix: Parameters connected to LandscapeGrass or other CustomOutput nodes were not appearing in the Material Instance Constant editor
Matinee
Bugfix: The editor would hang when performing a viewport camera transition (by pressing F) while Matinee has a locked actor defined.
Bugfix: Movie scene captures where hardware mapped surfaces to memory of a different stride to the render target is fixed
Bugfix: Matinee audio tracks now properly start at the correct point when scrubbing.
Bugfix: Sound now correctly restarts in matinee preview when jumping back along timeline after reaching end.
Cascade
Bugfix: Fixed a bug that could cause a crash when exporting an emitter
Persona
New: Simplygon Reduction tool
Fixed so that you only apply your reduction setting to certain LOD only
Fixed so that it does regenerate with the setting that was there before.
Fixed so that it warns the users if you'd like to reduce mesh for imported mesh
Now displays in the material section if generated.
Allow BaseLOD to change - for example if you want to generate simplygon from LOD 1, you can using BaseLOD.
Bugfix: Fix for SkeletalMesh section highlighting when number of mesh materials is smaller than number of sections.
Bugfix: Crash in Persona when undoing duplication of state nodes.
Bugfix: Multiple crashes and instances of incorrect behavior fixed when undoing and redoing repeatedly while editing state machines.
Bugfix: Crash on undo when changing child animation blueprint overrides.
Bugfix: Crash when editing details of an animation object and losing focus to another window.
Bugfix: Crash when undoing changes to a socket property in a notify
Bugfix: Mesh reduction tool bugs resolved
Fixed so that it keeps the ScreenSize set before for the regenerated mesh reduction
Fixed so that materials created by Simplygon are to be assigned
Bugfix: Persona and PHaT viewport client can now handle changes in translucency when drawing physics constraints
Bugfix: The playrate in Persona will use the viewport worlds time dilation instead of managing time dilation separately
Static Mesh Editor
New: Cancelling at the prompt to change LOD Group in the Static Mesh Editor now no longer changes the LOD group.
New: Added feature to visually isolate meshes by material
Enabled via the 'Isolate' checkbox in the details panel for each material section (below Highlight option)
Resets when closing the Static Mesh Editor
Bugfix: Added code to restore the section info that is cached when reimporting a mesh so LOD section information is not lost on reimport.
Bugfix: Crash in Auto Convex Collision tool with very small or flat meshes.
Bugfix: 'Focus Viewport to Selection' in the Static Mesh Editor works properly now.
Source Control
New: If the assigned diff tool cannot be launched when diffing assets, the user is offered an opportunity to set a new default one.
New: Added SSL support to Perforce libraries for Visual Studio 2015.
Bugfix: Crash when submitting assets to source control
FEditorFileUtils::FindAllSubmittablePackageFiles now uses FPackageName::TryConvertFilenameToLongPackageName to avoid a crash if it finds a bad package path
Bugfix: Regression where packages were no longer notifying the user that they needed checkout (or were no longer being automatically checked out) when dirtied.
Bugfix: Assets pending delete were sometimes not showing up in the list of files to commit.
Bugfix: An issue where assets under SVN which had been made writable continually prompted the user for checkout when saving.
Bugfix: Git Plugin can find the git.exe binary installed on the Local AppData user directory
Bugfix: User*.ini configuration files are now excluded from source control submission.
World Browser
New: Added the facility to find levels in the content browser from the Level Editor Levels submenu, and in the World Browser context menu.
Fixed: Reduntant seek for world composition related data inside level package in a cooked builds
Fixed: World origin offset handling for UInterpToMovementComponent
Fixed: World origin rebasing now properly shifts hidden actors in the persistent level
Foliage
New: Added a check that the hierarchical instanced mesh "unbuilt bounds list" is the correct size, and fixed a bug where on undo the bounds list would be one entry larger than expected.
There was a crash in 4.10 where the bounds list was unexpectedly empty, we haven't yet seen it in 4.11 but hopefully the check will catch it if it is still happening.
Bugfix: Crash when alt-drag-duplicating a static mesh with attached foliage
Bugfix: SpeedTree foliage was flickering and there were other rendering glitches especially when the same SpeedTree was used both with foliage or instancing, and with regular StaticMeshActors.
Bugfix: Memory leak in instanced static mesh lightmap/shadowmap building
(Approx 200 MB leaked per 1 million instances every lighting build)
Bugfix: a bug in Foliage Type loading code when converting 4.9 content's bEnableStaticLighting setting to a Mobility value.
If your Foliage content from 4.9 was opened in 4.10 and then resaved, it's possible foliage with bEnableStaticLighting=true would have incorrectly had its Mobility setting set to Movable.
Static lighting would no longer work on the foliage unless the Mobility setting was changed back to Static. Please check your Foliage Type assets and set their mobility to Static if needed.
Cooker
New: Avoid cooker reloading ddc data at end of cook to generate asset registry. Reduces time to GenerateAssetRegistry.
New: Deterministic cooking: Added support for diffing cooked packages against a previously cooked package to help track down deterministic cooking issues.
New: Deterministic cooking: Added warning to resave material package when a dependent texture becomes out of date.
New: Deterministic cooking: Added warning to resave the source package of a blueprint when a child blueprint function / dependency is out of date.
New: Deterministic cooking: Changed libraryCategoriesText to EDITORONLY_DATA as it's not needed in cooked builds and was causing deterministic cooking issues with UMaterialFunctions.
New: Deterministic cooking: Fixed issue with distribution not having PostLoad called before initializing RawDistribution.
New: Deterministic cooking: Stopped kismet enums from re-initializing FText from strings.
New: Moved ogg size tag from the asset registry as it causes bulk data to be loaded unnecessarily.
New: Precache shaders for platform in editor has max inflight jobs, to keep editor responsive while cooking
Added commandline options to cook a single package from the editor / commandlet for debugging purposes
New: Reduced peak memory when cooking by clearing out already processed textures / audio data.
New: Stopped default materials from being included in cooked content when they are not required.
New: Deterministic cooking: Distribution float was missing it's postload call before initializing Raw distribution, causing errors in min / max also causing deterministic cooking issues.
New: Deterministic cooking: Removed AssetImportData from the cooked builds.
New: Deterministic cooking: stopped kismet enums from reinitializing FText from strings.
New: Deterministic issue: Moved LibraryCategoriesText into editor only data as it's not needed in cooked builds.
Bugfix: File->Cook option in the editor now receives all options specified in project settings.
Bugfix: Iterative cooking was not working if the Uproject name was different to the project name.
Bugfix: "AllMaps" was being included for cook when providing a map on the command-line.
Bugfix: There was a hang when building audio if audio was not in DDC.
Bugfix: Multiprocess cooking was resaving asset registry multiple times.
Bugfix: Various issues that were only showing up during the process of packaging a project from the editor are now resolved.
Bugfix: Stopped packages which failed to cook from being saved in the asset regsitry.
Gameplay Framework
New: Added some extra keywords to Delay and RetriggerableDelay in KismetSystemLibrary.
New: It is not possible to resize game windows in non fullscreen mode for Windows.
New: Added support for replicated generic events to deliver a vector payload.
New: There is now a "ListTimers" console command, which lists all currently active Timers to the log output.
New: Added "bTickBeforeOwner" to MovementComponent to control whether a tick prereq is set for the owner.
Default is true since, in most cases, a ticking Pawn would need the latest location from the component update. Disabling this can get back some performance when the order doesn't matter.
New: Added "set controller" keywords to Possess and UnPossess in Controller classes.
New: Added GetSquaredDistanceTo method to AActor to get the squared distance between two actors.
New: Added an OnLanded function delegate to the Character class for triggering logic based on CharacterMovementComponent landing.
New: Added DrawTriangleUsingVertexColor function in FTriangleRenderer which takes the color from the vertices for the draw color.
Canvas Triangle items will now use the vertex color by default (since there was previously no other way of passing the color to them).
New: Added extra methods to Spline Component for finding the closest point on the spline to a given world location.
New: Added improved title text to UAbilitySystemComponent debug display - contains category of debug information along with avatar and owner info and their respective roles.
New: Added KeyState accessor function to UPlayerInput.
New: Added new p.VisualizeMovement cvar for showing in-world debug drawing of CharacterMovementComponent state (velocity and acceleration text and arrows show up over character heads when enabled).
New: Added UGameplayCueManager::ShouldAsyncLoadObjectLibrariesAtStart which can be overridden in game-specific derived classes to determine if async object library loads should be triggered on creation.
New: Changed SplineMeshActor so that its SplineMeshComponent defaults to allowing editing per-instance.
New: Eliminated overhead of the HUD HitBox system when not being used.
New: FPS Chart goes to 120 FPS now
New: GameplayEffect GrantedAbilities respect Effect inhibition (ongoing tag requirements) - abilities are applied/removed/cancelled based on whether the ongoing tags are met or not
Previously, if application tags passed, target would have the granted ability for full duration of effect application, even if the ongoing tags weren't met
New: Implementation of Anim Notifies for Play Sound and Spawn Particle Effect moved from blueprint to native.
New: Optimized Matinee Actors no longer tick unless playing
New: Optimized component transform updates by adding bWantsOnUpdateTransform, which controls calling OnUpdateTransform virtual
New: Particles: added "bAutoManageAttachment" option to ParticleSystemComponent such that it can automatically attach to a component when activated and detach when deactivated.
During registration this will also detach the component from any AttachParent previously assigned.
bAutoManageAttachment avoids initial attachment unless the system is set to auto activate.
New: Reduced overhead related to determining which streaming levels should be loaded and visible.
New: Some extra functions to InterpToMovementComponent
Added function to reset the component after its been stopped and allow it to restart.
Added function to initialize the control points array after points have been added (This allows points to be added after BeginPlay has been called)
New: SplineComponent: Added RemoveSplinePoint() and AddSplinePointAtIndex() functions that can also be called from a Blueprint.
New: The controller light color can now be set from blueprints.
New: Touch inputs can now be bound used with functions such as GetInputKeyTimeDown, IsKeyDown, etc. from blueprints.
New: UTextRenderComponent and UFont will now not be loaded on dedicated servers - watch out for NULL references!
New: You can now bind the Any key. This will respond to any key press/release event and follows the same rules for consumption that other keys follow.
New: You can now bind the Any key. This will respond to any key press/release event and follows the same rules for consumption that other keys follow.
Bugfix: Crash fix to PlayerCameraManager crashing on empty entries in DefaultModifiers array.
Bugfix: Crash fix when player stands in a PhysicsVolume that streams out. PrimitiveComponents with bShouldUpdatePhysicsVolume are prevented from continuing to reference PhysicsVolumes in a level that is streamed out.
Bugfix: Crash fix to changing the mobility of a component.
Bugfix: Crash fix when using open console command in PIE to travel to level, or a level that has a sub-level, that is also a sub-level of the open editor world.
Bugfix: Crash fix to CheckStillInWorld() after Actor has been destroyed or is not in the world.
Bugfix: Crash fix to PainCausingVolume when streamed out while objects are still overlapping.
Bugfix: Crash fix in projects where the project-specified game instance class does not exist. Instead, an error will be logged and the game will fall back to the default game instance class.
Bugfix: Crash fix to GameSession in the case that PlayerStateClass is null.
Bugfix: CameraShakes with OscillationDuration of -1 will now shake indefinitely, as intended.
Bugfix: Icons in Windows task bar are set correctly for blueprint Windows games.
Bugfix: Duplicate overlap events no longer run when moving a component during an overlap event that involves that component.
Bugfix: Actors and Components with Primary Tick Functions that do not start with tick enabled will no longer fail to start ticking when instructed to do so.
Bugfix: Removed multiple bugs related to creating more than one UWorld within one game engine instance.
Using multiple UWorlds with UGameEngine is still very experimental, and your mileage may vary.
Bugfix: Fixed issues playing CameraAnims that don't have a movement track.
Bugfix: Visualization sub-components for camera component could end up duplicated and one version would be in the incorrect location.
Spectator pawn movement now accounts for per-actor time dilation.
Bugfix: Fixed USplineComponent::GetInputKeyAtDistanceAlongSpline for closed loops so that the correct value is returned when the input key lies on the closing segment of the loop.
Bugfix: Level streaming will now correctly handle "package async load failed" event
Bugfix: GameInstance objects will no longer be leaked when exiting Play In Editor due to referenced objects preventing garbage collection.
When PIE ends all Objects outered to the GameInstance are now marked pending kill in the same way that Objects outered to the World are.
Bugfix: GetInputKeyTimeDown now returns correct value for Touch inputs.
Bugfix: Changing the values of the Main and Alt Input Keys for a Touch Interface now works correctly.
Bugfix: Actor destruction will no longer output warnings about moving a component with a non-movable mobility.
Bugfix: Actors being spawned during another Actors' BeginPlay during map load will no longer cause ensure() to be called.
Bugfix: Component overlaps now always end when a component is destroyed.
Bugfix: High res screenshot will not break focus in full screen games.
Bugfix: Incorrect Begin/End overlap events are no longer run when BeginOverlap is used to disable collision or overlap events on the other object.
Bugfix: Actors/Components will no longer tick until BeginPlay() has been called when in a game world. This was an issue in some situations in network games.
Actors may opt out of this by setting bAllowTickBeforeBeginPlay to true. APlayerController, AInfo and derived classes (AGameMode, AWorldSettings, etc) enable this by default because they typically have match start up logic.
Components with no Actor owner will start ticking immediately before the world begins play. This should be rare however.
Editor worlds don't "begin play", so ticking begins immediately in those.
Bugfix: GameplayCues will no longer be invoked from ActiveGameplayEffectsContainer::NetDeltaSerialize when there are unmapped objects. This was causing GameplayCues to be invoked with incomplete information in their EffectContext.
Bugfix: Timers that are set and paused in the same frame now keep track of their remaining time correctly.
Null pointer checks on LocalPlayer->ViewportClient have been added to PlayerController.cpp.
bShowDebugForReticleTarget in the HUD is no longer static.
AInfo's root component in editor builds is now set to the sprite component. This avoids AInfo subclasses generating warnings when going into PIE.
ChildActors now inherit their visibility from the owning component and actor visibility.
Keys bound via key or action events will now count as having consumed the event even if there wasn't a pressed or released event this frame. This prevents axes from using the key in lower priority input components in future frames.
Lighting and vertex coloring now persists correctly for Child Actor Components.
Memory corruption no longer occurs due to improper clean up of GameplayDebuggingReplicator
Network clients now sync physics simulation state (on/off) from the server if bReplicateMovement is true.
OnComponentDestroyed now ensures and logs an error about the inconsistency instead of crashing in the case a component is in the AttachChildren array, but has no AttachParent.
Optimized FURL construction when passed a short map name by trying the asset registry before resorting to a disc search. This can save 10-20 seconds when issuing an "open mapname" console command on some platforms.
OnComponentBeginOverlap has been prevented from triggering more than once in some cases, usually when the event tries to disable collision or overlaps.
DestroyActor calls will no longer recurse.
Removed allocations in player input system.
In USceneComponent, AttachTo() now returns a bool indicating if attachment is successful (or if already attached). OnRegister() now clears AttachParent and AttachSocketName if the AttachTo() call fails.
Fixes AttachParent still being set when initialized in a constructor but when the attachment is invalid.
When destroying a component, attached children will now remain correctly at the same world position.
Whether or not to draw subtitles will now take immediate effect rather than waiting for the next sound to play.
Improved error message when SpawnActor fails due to the spawned actor being marked pending kill.
Learning Resources
New: Clarified some comparison functions (IsZero, IsNearlyZero, Equals) in FRotator to explain that they compare as orientations, not other interpretations such as rotational speed, winding, etc.
Sample Content
Bugfix: Old file was checked out. Had to revert.
Localization
New: Added ability to opt out of adding reference comments as extracted comments when exporting localization to PO files.
New: Added new setting for localization import/export in order to persist comments in PO files that aren't generated from manifest/archive.
New: Culture names now consistently use hyphens rather than underscores. Culture names with underscores are still accepted.
New: First pass of the OneSky plugin: Extend Localization Dashboard toolbar with OneSky buttons for "Import all cultures/targets from OneSky" and "Export all cultures/targets to OneSky"
New: Improved the text gather from assets
We now gather the texts from Blueprints using their generated class and script bytecode. This avoids polluting a game gather with all of the editor-only texts that come from the K2 nodes in the blueprint asset.
The objects within a package are now gathered recursively, as this correctly honors the editor-only flags used by the containing object (this both recurses by walking properties - to detect editor-only properties - but also by gathering all of the inner objects at each level).
We now recurse through and gather from map properties.
Fixed texts of differing case being combined when gathering from assets.
Editor tutorial BPs are now gathered as as editor-only.
New: Overall improved Editor Region Language settings page.
New: Blueprint text pins now generate a new key each time they are set, rather than use a deterministic key
This matches what text properties do, and removes the possibility of having a duplicate key (eg, if you serialized some data from a BP pin, changed the BP pin text, and then reloaded the data).
Bugfix: FTextLocalizationManager::UpdateFromLocalizationResource was discarding the data it had loaded
Bugfix: Crash on the Chinese version of Windows version when changing the editor language
Bugfix: Some FText instances were not rebuilding correctly when the culture is changed
Bugfix: The culture display name was not updating when the culture was changed
Bugfix: The Category Names of Components in blueprints are no longer gathered for localization when the "ShouldGatherEditorOnlyData" setting is false.
Bugfix: The editor now loads all available cultures
It only used to load EFIGSCJK culture data, which prevented you being able to localize for other cultures.
Bugfix: The spoken text of dialogue wave assets are now gathered for localization under the root localization namespace, rather than a "Dialogue" namespace.
Bugfix: The translation editor now properly supports viewing and editing the individual translations for different contexts of a dialogue wave's spoken text.
Updated PO export/import logic to use generate msgctxt based on namespace and, conditionally, key (only if key metadata is present) and added info metadata as extracted comments.
Networking
New: Added ability to force various replay failure conditions. Use demo.ForceFailure to enable. 1 Will force failure during initial call to start streaming. 2 will simulate load map failure.
New: Added an initial implementation of an InMemoryNetworkReplayStreaming module.
Unlike NullNetworkReplayStreaming and HttpNetworkReplayStreaming, this implementation doesn't rely on the disk or network, and as a result is generally much faster.
It is intended to be used for specific cases where a local, transient replay would be useful.
New: Added initial support for game clients to record replays. Previously replay recording was only supported on servers.
A client replay will only record the client's view of the world, so actors that are not considered network relevant to the client will not be present in the replay.
Note that RPCs are not currently supported in client replays.
New: Added new Lobby module for a server to host a lobby via beacons before actually connecting to the server itself. Actor replication and classes similar to AGameMode (ALobbyBeaconHost), AGameState (ALobbyBeaconState), APlayerController (ALobbyBeaconClient), and APlayerState(ALobbyBeaconPlayerState) added.
New: Added -REPLAY= cmdline option, which allows you to play a replay from the cmdline
New: Added server network stats that measure in/out bandwidth per client connection (min among clients, max among clients, average among clients).
New: Added task system to replay systems internals for more code maintainability, and stability.
New: Allow ping to subtract server and client frame time from ping to try and predict what true cloud ping is
Set net.PingExcludeFrameTime to 1 to test this out
New: Better networking logging format. Example: [2015.08.03-21.06.12:006][285]LogNet: UChannel::CleanUp: ChIndex == 0. Closing connection. [UChannel] ChIndex: 0, Closing: 0 [UNetConnection] RemoteAddr: x.x.x.x:xxxx, Name: IpConnection_1, Driver: IpNetDriver_3 IpNetDriver_3, Server: YES, PC: NULL, Owner: BeaconClient_0
New: Changed the stats port format to be "HTTP-like" (just enough to be compatible with curl/wget/etc)
stubbed out a super basic framework for being able to issue exec commands via this port (not open by default and binds only to loopback)
New: Custom events are now supported in demo replays. An event has custom metadata and data and is tied to a timestamp in the replay.
New: Allow for servers to create multiple voice data channels.
New: Initial Oodle support as a plug-in added. This is work in progress, and will improve over time.
New: Lots of networking profiler improvements:
Restore chart position when loading new charts after applying filters
Draw last selected range as a transparent red overlay to remind you where selection is after zooming out/scrolling
Re-calculate selected range when filters are applied
Fixed more anchoring issues when maximizing window
Removed default chart series from designer since we add these programmatically now
Added context menu strip for future right click capabilities to be added
Differentiating replicated actor count from total actor count to give a sense of waste
Added "hz" to end of count/s items in summary * Added "Bytes/s" when representing bytes per second in summary
Added tabs for summary, actor perf, and details
Actor perf view how uses a list view, with actual columns you can sort by
Added combo box for search filters that fill in automatically fill in with searchable data, and supports auto-complete
Added "Waste" columns to actor perf view, which shows how much an actor updates vs actually replicates something
Add KB/s in actor details view + more anchoring fixes
Allow loading partial networking profiles (so you no longer have to force a level change to save the profile)
New: Messaging: Implemented interceptor tracing
New: Minor improvement to the setup/tick logic of the perf counter module query port implementation. Should prevent "connection not ready" timeout issues that occur sporadically.
New: Optimized networking CPU time somewhat by not ticking network channels that don't need to be ticked.
New: The NullNetworkReplayStreaming implementation can now play back live games. This is useful for testing with multiple instances of the game running on the same machine.
New: The replay streamer implementation module to use can now be overridden at runtime.
You can pass the name of the module to use into FNetworkReplayStreaming::GetFactory, or you can use the "ReplayStreamerOverride=" URL option. The URL option is useful when combined with the "DemoRec" URL option.
If neither of these overrides is provided, the implementation will fall back to the one defined by the "DefaultFactoryName" in the Engine configuration file, as before.
New: The replay streaming system can now scrub to a new time while playback is paused. Try it out in ShooterGame!
New: UdpMessaging: Added console commands for basic diagnostics
New: UdpMessaging: Added tunnel connection stats to diagnostics command
New: Allow replay chunks to request downloads even if something else is in-flight or pending
Bugfix: Added missing socket error type ENODEV
Bugfix: Removed bug in FNetViewer::FNetViewer that could cause the view location to be at (0,0,0) when nothing was hit which would then cause the net relevancy distance check to fail.
Bugfix: Character movement component now has better smoothing when going up/down terrain in replays
Bugfix: Disconnect instead of assert when channels receive reliable packets before fully opening (this can happen from malicious clients)
Bugfix: A fatal error if a replication notify function couldn't be found at runtime. Now a warning will be logged and the notify function will simply be skipped.
Bugfix: Replays were not recording at intended framerate
Bugfix: RPC's weren't being sent to connections + fixes warning spam where rpc's were getting rejected
Bugfix: Issues when replay scrubbing was aborted mid scrub
Bugfix Crash that happens when server stops recording replays
Bugfix: Crashwhen loading older replays
Bugfix: Bug prevented HTTP retries from working. TimeSinceLastResponse was not getting reset with ElapsedTime so once a request timed out it would always time out N more times until the retry sys gives up
Bugfix: Bug caused the incorrect IRepChangedPropertyTracker to be passed to the UActorComponent::PreReplication function during replay recording. The tracker is now correctly looked up in the demo net driver instead of the game net driver.
Bugfix: Crash occured when many static meshes set to replicate movement were placed in a level.
Bugfix: Crashed when the server stops recording a replay.
Bugfix: Fixed a race condition in UdpMessaging
Bugfix: Replay recording could cause large portions of "dead air" to be saved into the replay if there were slow frames during recording.
Bugfix: An issue caused the output log to spam "no owning connection" warnings when a client used the "ToggleDebugCamera" console command.
Bugfix: An issue occurred while connecting a client to a server while in Play In Editor (PIE) mode during runtime might fail and instead load the default map. The travel to the server's world should now succeed.
Bugfix: FNetViewer::FNetViewer could cause the view location to be at (0,0,0) when nothing was hit which would then cause the net relevancy distance check to fail.
Bugfix: Incorrect receive buffer size in UdpSocketReceiver
Bugfix: If the server detected a malicious packet, the connection would then remain open until session manually stopped
Bugfix: Fixed typo in property tooltip and comments
Bugfix: Lots of cleanup and improvements to how we smooth out character movement in replay playback.
Bugfix: Lowered the verbosity of networking logs involving doubly acked packets, and out of sequence packets (this is completely normal when there is packet loss)
Bugfix: Messaging: Fixed message bridge not unregistering remote endpoints on shutdown
Bugfix: Networking: Processing UDP receive buffer only if bytes received.
Bugfix: Ping calculation fixes:
Fix bug where extra acks were contributing to ping.
Call FlushNet on frames where SendAck was called.
Use wall time when calculating pings.
Stop subtracting half of frame time from ping.
Bugfix: Properly go back to default map, and recover from error gracefully when replay level fails to load.
Bugfix: Replay scrubbing stability fixes.
Bugfix: Sockets: Setting number of bytes read to zero on failure.
Bugfix: Temporarily disable seamless travel in PIE when using single process until proper fix comes in (it results in crash otherwise).
Bugfix: UdpMessaging: Always forcing service restart on settings changes.
Bugfix: UdpMessaging: Avoid an extra copy of outbound message data.
Bugfix: UdpMessaging: Fixed a race condition during message serialization.
Bugfix: When replay events fail to download, it's no longer catastrophic (won't cancel playing the replay), will return error instead.
Online
New: Added a function to the replay streamer to retrieve the custom event data for a specific event.
New: Added a reconnecting state for parties.
New: Added delegates that report download progress for OnlineTitleInterface's reading of files from a remote server
New: Added functionality to the network replay streamer to be able to search for any events from a specified group.
New: Added support for reading/writing user metadata from from/to the server
New: Added the following console commands related to replays:
demoscrub <seconds>: jumps to the given time in seconds in the replay
demospeed <speed>: sets the playback speed for the replay. As an example, demospeed 1.5 sets the speed of the replay to 1.5 times the normal speed.
demopause: pauses the replay if it is paused, or unpauses if it is already paused.
New: BuildPatchServices will skip running of prerequisites that were previously completed successfully
New: Created an early version of a runtime hotfix system. This is a WIP and is not fully complete yet.
New: Exposed username/password settings for logging into an online service (OSS) while running Play In Editor (PIE). If enabled/defined, the credentials will be used to login before PIE actually begins. Not all online services support multiple sign-ins on the same machine.
Bugfix: SSO domain checks would return false positives if a whitelisted domain appeared in the query string portion of the url.
Bugfix: Collision for the spectator pawn is no longer disabled by default in network replays.
Bugfix: Rejoining a steam lobby quickly after leaving would caused the player to get booted from the session.
Bugfix: Hotfix manager failed to return the singleton on the 2+ times calling UOnlineHotfixManager::Get()
Bugfix: Making sure that In App Purchase callbacks for making a purchase, restoring purchases, and querying purchases still get triggered when the game is paused.
Bugfix: Making sure that the logged in player's GooglePlay Player ID and Name get saved after GooglePlay Login UI completes successfully
Bugfix: The demorec and demoplay console commands have been disabled while in Play In Editor (PIE), due to likely crashes and unreliability with saving and loading replays. Demorec has also been disabled if a replay is already playing back.
Bugfix: The http network replay stream should no longer disconnect if streaming has been paused for too long.
Bugfix: WebBrowser widget logs are no longer placed next to the executable
Bugfix: WebBrowser widget now tries harder to recover if the CEF render process crashes
Bugfix: WebBrowser: Adding keyboard focus support to webbrowser widget.
Bugfix: WebBrowser: Fixed an issue causing popup menus to be cut off in some cases.
Bugfix: WebBrowser: The web browser ShowErrorMessage argument is now hooked up to drive the showing of error messages.
Other
New: Stat Budget View
A new budget view allows you to configure which stats you want to see (across different stat groups if needed) and gives you a running total that is broken down by threads. This view is useful for prioritizing CPU performance for different features of characters and gameplay objects. You can assign a total budget per thread.
A view is specified in your DefaultEngine.ini by creating a new section and use that section name as the budget name.
[MainPlayerHero]
+Stats=STAT_AnimGameThreadTime
+Stats=-STAT_BlueprintUpdateAnimation
+Stats=-STAT_Montage_Advance
+Stats=STAT_PerformAnimEvaluation_WorkerThread
+Stats=STAT_ClothTotalTime
+Stats=FPhysXClothTask
GameThread=0.25
MergedTaskGraphThreads=1.0
A "-" in front of the stat indicates that this stat should not be counted for the running total since a parent stat is already accounting for the time.
To bring up this view simply use budget <section name>
You can also filter stat and budget groups by root strings. For example, "stat anim -root=MainPlayerHero" will show the stats that you'd expect from “stat anim” but will filter by UObjects that have “MainPlayerHero” as a substring of their name. This is not limited to UObjects as it's simply looking at parent stats with that substring in their name.
Stats are automatically broken into the threads they execute on and can appear in multiple threads if that is the case.
New: Added a generic Stereo Layers interface, which allows HMDs to implement their own layers to get reprojected separately from the main world scene, for things like UI.
New: Added BuildPatchTool to the Binary Build
New: Added changes in preparation for the Oculus 1.x SDK
New: Added entitlement checking for Gear VR, which lets developers verify that their app has been purchased through the Oculus store.
New: Adding in the StereoPanorama plugin, which allows for 360 stereoscopic movie exporting. This feature is still experimental!
New: Crash Report Client now restarts applications via the Epic Games Launcher if they were started that way.
New: Improved Engine Analytics settings and handling of user data sent to Epic Games.
Added Privacy section to Editor Settings with analytics on/off setting for Unreal Editor users.
New UI customization for important on/off properties in Slate that are shown as large toggle buttons with state descriptions and a link to documentation.
Engine Analytics now switches on/off during an engine session when the user changes the enabled setting.
Added End User section to Project Settings with analytics on/off setting for project's end users.
Anonymized End User analytics by removing machine, user and Epic account ids from games reporting analytics data back to Epic Games
New: Leap Motion Controller now supports HMD mode, along with image passthrough
New: Leap Motion plugin update
New: Media: Added support for async opening of media; implemented async opening for WmfMedia
New: Media: Changed UMediaPlayer.IsStopped to .IsReady
New: Media: Implemented event that gets triggered when playback reaches the end of media
New: Media: Implemented media events for suspended and resumed playback
New: PSVR now supports HMD Server on the 3.15 SDK
New: Updated engine code to support the Oculus 0.7 SDK. Engine will be hotfixed with 0.7 revisions when the runtimes are made public.
New: Updated Gear VR support to use the 0.6.0 mobile SDK.
Bugfix: Added a dialog box to alert users when there is a problem loading a plugin descriptor file
Bugfix: Exported Motion Controller Component, so that it can be used in C++ in game modules
Bugfix: Oculus plug-in forcing frame synchronization every frame. Engine will now allow one frame of buffering
Bugfix: VR PIE was not showing up when editor tabs with viewports are visible.
Bugfix: Crash when GearVR systems attempted to join listen servers
Bugfix: Unable to launch on SteamVR if the Oculus runtime is currently running as a service
Bugfix: Crash that could occur if source folder of a plugin was removed
Bugfix: Crash that occurred when selecting a camera component in the editor with a VR device plugged in
Bugfix: Fixed crashes with the StereoPanorama 360 movie export plugin when running on 4.11
Bugfix: Improper reporting of IsHMDEnabled()
Bugfix: Fixed issue where PIEing with a Vive plugged in would decrease the resolution of the editor
Bugfix: Fixed problem where Crash Report Client would not restart applications after the user had chosen to not be contacted.
Anonymous reporting was clearing the command line for the process which is needed for restarting it.
Bugfix: Crash Report Client would strip the project name from the command line and fail to restart the Editor correctly.
Bugfix: Resetting position and orientation on SteamVR
Bugfix: StereoPanorama plugin was crashing when Instanced Stereo Rendering is enabled
Bugfix: Flipped the y-axis on the SteamVR controller to match engine conventions
Bugfix: Media: Added .m4a to supported WMF file extensions
Bugfix: Media: Avoiding duplicate state changes in play rate management of WMF media player
Bugfix: Media: Audio buffers were not emptied when initializing a media sound wave
Bugfix: Media: Fixed error state handling in WMF media player
Bugfix: Media: Not loading media on dedicated servers
Bugfix: Media: Simplified media event related API
Bugfix: Media: Small optimization for forward looping in WMF media player
Bugfix: Moving PSVR to use eye poses directly, to make it compatible with SDK 3.0+ hardware.
Paper2D
Bugfix: Paper2D sprite sheet import process no longer uses leftover data from previous imports done within the same editor session.
Bugfix: Paper2D sprite sheet importer now correctly handles rotated sprites. Importer also runs faster.
Physics
New: Added enable/disable gravity support for skeletal mesh component. We now disable gravity for all bodies if the skeletal mesh component disables. Note that if it enables, we use the default body instance to determine behavior
New: Added the ability to specify a custom sleep threshold multiplier to BodyInstances. Choose the Custom sleep family for the multiplier to be used.
New: Expose skeletal mesh constraints to blueprints. Makes it possible to break a named constraint on a skeletal mesh
New: Optimize SetSphereRadius, SetCapsuleSize and SetBoxExtent to no longer recreate physics state.
New: Optimized update of fixed (kinematic) bodies on SkeletalMeshComponent, and defer to only do work once a frame (right before physics simulation)
New: Several fixes and features to Collision Analyzer, including overlap recording, and ability to save/load info.
New: You can now profile physx on PVD by using "pvd connect nodebug" which will only send profile data
Bugfix: Cloth was not rendering correctly when cloth assigned to multiple materials
Bugfix: Crash when passing no component to Component Overlap Components.
Bugfix: Crash when setting collision enabled in blueprints
Bugfix: Detach bug where object would snap to root bone of skeletal mesh on begin play
Bugfix: Physics handle was being capped at 1.6 degrees tolerance. (Changed it to 0.016)
Bugfix: Fix welded children not being able to dynamically change collision response
Bugfix: Aggregate broadphase crash in PhysX
Bugfix: Crash in CDO construction when accessing physical materials. The runtime will now emit an error when attempting this.
Bugfix: Crash in SetSkeletalMesh when used to change the mesh on a component that is being used by a vehicle movement component.
Bugfix: Deadlock in destructibles caused by locking an actor buffer that was already locked.
Bugfix: Destructible component would crash when transitioning between worlds with substepping enabled
Bugfix: Destructible mesh root chunk transforms not being correctly updated when not visible, leading to the render mesh being offset from the actual location of the chunk.
Bugfix: Destructible meshes flickering in cooked builds due to incorrect root bone transforms.
Bugfix: Large chunk classification in destructibles was picking up the wrong chunk bounds.
Bugfix: SetCollisionEnabled now works correctly for destructible meshes instead of falling back on the PrimitiveComponent version.
Bugfix: Substepping crashes in APEX due to unused runtime fracture code
Bugfix: Vehicle crash caused when trying to create a convex hull around no vertices.
Bugfix: Optimized ConvertOverlapResults when there are several overlaps to reduce the cost of deduplication (controlled by Engine.MinNumOverlapsToUseTMap, which defaults to 2)
Bugfix: Physics collision events now fill in FHitResult.PenetrationDepth with ContactInfo.ContactPenetration.
Platforms
New: Added ability to deploy to a 'default' device per-platform as a step toward better UFE profile sharing across teams.
New: Added benchmarking of Linux clock sources on start in order to determine which one is the fastest and diagnose performance problems earlier.
New: Added GetTimeStampPair() to the platform file interface, for performance improvements
Used for situations like localization where we know that a pair of files will always exist in the pak file or not at all. If one exists but the other doesn't, we don't check the lower level IO layer, saving a lot of time in platform specific IO calls!
New: Changed cache line size to 64 for PS4 and Xbox
New: Many more server performance counters have been added, exposing additional aspects of a server performance.
New: Support for png and jpg splash screen images added on Linux, Mac, Windows
New: UFE Launch Profiles are now saved under Engine/Programs/UnrealFrontend/Profiles.
Bugfix: UFE profiles were not saving out the compression flag properly.
Bugfix: Mouse capture was not being restored after alt/cmd-tabbing back to game
Bugfix: Wrong Device Profile Texture LOD Settings was being used at cook time.
Bugfix: Editor was not rebuilding UAT when packaging on Mac and Linux (-nocompile being mistakenly matched as a substring in -nocompileeditor).
Bugfix: Moved Vertex and Index buffers to allocate from Garlic memory unless they require CPU readback. This reduces pressure on the small GPU Onion memory, and is a small GPU perf boost.
Bugfix: Renamed CACHE_LINE_SIZE to PLATFORM_CACHE_LINE_SIZE
Bugfix: Timing based stats are now correctly scale to time values correctly based on the platform that generates the stats.
Bugfix: UFE now shuts down old cookonthefly servers properly when launching a second time.
Android
New: Allow access to AndroidManifest metadata from C++
bool AndroidThunkCpp_HasMetaDataKey(const FString Key)
bool AndroidThunkCpp_GetMetaDataBoolean(const FString Key)
int32 AndroidThunkCpp_GetMetaDataInt(const FString Key)
FString AndroidThunkCpp_GetMetaDataString(const FString Key)
New: Android libcurl uses system CA certificates for SSL with optional override or additions in project
To override the system-installed CA certificates, create a CurlCertificates directory in the project's Contents directory for a ca-bundle.pem text file, then in Packaging Project Settings add this directory as an additional non-asset directory to package. If you want to add your own certificates instead of overriding them, place a ca-additions.pem file here instead. NOTE: pem file must use Unix line endings (LF only, not CR/LF)!
New: Optimized media playback to remove extra copies and fixed SetRate so pausing playback works
New: Implemented audio seek functionality on android platform
New: The user can now specify the relative priority for each Android texture format in Project Settings.
This will affect the texture format used when Launching on Device
It will also affect the order texture formats are considered by the device for projects packaged using the Android_Multi target.
Of the formats supported by the device, it will choose the format with the highest priority.
New: Add new GearVR libraries to exclusion list for ARM64, x86, and x64 architectures (libraries not supplied for these)
New: Added a specific DeviceProfile for Android devices with PowerVR 544 GPUs so they will default to a higher resolution
New: Added long suffix to file length in generated OBBData.java
New: Added missing #include to fix non-unity compiles
New: Added missing setPackage on intent in LicenseChecker (Lollipop and above now requires explicit setPackage)
New: Added new prebuildCopies stage to Android plugins before ndk-build is run to allow copies to JavaLibs. Continue to use resourceCopies stage for .so or other assets to copy after ndk-build so they are not removed.
New: Allow full range for store version code (MAXINT)
New: Allow larger valid GooglePlay Game App ID values (must not be blank or non-numeric)
Bugfix: Android plugin CopyFile command properly removes read-only attribute after copy
Bugfix: Better handling of multiple Android build targets
Bugfix: Changed Android audio to use callback thread instead of taskgraph for decoding
Bugfix: Changed reporting level of audio buffer decompression type logging
Bugfix: Changed the way aapt is located to check PgkRevision instead of always using first subdirectory of build-tools in Android SDK
Bugfix: Corrected commandline adb push path in batch file
Bugfix: Disabled NvTimerQuery on Nexus 9 before Android 6.0 to fix slow frame updates
Bugfix: Disabled r.DisjointTimerQueries for Android_Adreno330_Ver53 profile to prevent reported crashes
Bugfix: Disabled using glDebugMessageControlKHR if GPU is PowerVR, even if exported by driver, since calling it can cause driver crashes
Bugfix: Disabled writing NoOBBInstall batch file since it is rarely used and causes confusion if used by mistake
Bugfix: Android IAP query was not returning entire inventory.
Bugfix: Google Play online subsystem was causing leaderboard read operations to fail when they should have succeeded.
Bugfix: Android RestorePurchases functionality for In-App Purchases works
Bugfix: Fixed black screen on return from background
Bugfix: No more crashes with devices with Vivante GC1000 GPU
Bugfix: Deploy to Android devices connected over Wi-Fi to ADB works
Bugfix: Error message for APL addElement showing wrong value for missing variable
Bugfix: Fixed initial seek location for files in OBB but outside of a PAK
Bugfix: Disabling GearVR plugin caused compiling errors
Bugfix: Removed possible crash on accepting editbox text
Bugfix: Reading from ini sections was not cached by build system changes for 4.11
Bugfix: Screen scale issues on early Kindle Fire devices and HTC One M7 Android device
Added a configurable list of devices to BaseDeviceProfiles.ini which contains devices that need to use java functionality, rather than native, in order to have SurfaceView scaling work properly
Bugfix: Startup crash on Android devices with PowerVR Rogue Han GPUs
Bugfix: Fixed way global (activity) audio pause handles recovery if game already paused
Bugfix: Ignore unsupported touch events (previously misinterpreted as touch ends)
Bugfix: Keeps the last export of each path from .bash_profile instead of the first one if not set in ini for Mac
Bugfix: Media player now corrects absolute filepaths from editor if necessary
Bugfix: Only apply #undef GL_EXT_shader_framebuffer_fetch for Adreno devices without the extension
Bugfix: Only use -fno-function-sections on Clang 3.6 or later on Android to correct issue with backward compatibility to older toolchains
Bugfix: Add 'arm64-v8a' as valid directory name for Android toolchain '-arm64' architecture
Bugfix: Small spelling error in the Android configuration description
Bugfix: Added missing inline qualifier to fix compile error when TargetRules::ShouldCompileMonolithic() is enabled
Bugfix: Various fixes for httpchunk installer to get it working for android. Thanks Matt from InnoGames.
Bugfix: Removed libGLES3 dependency from libvrapi.so (part of Oculus mobile VR library for GearVR) so older Android versions supported
Bugfix: Removed unneeded reformatting of clang error output
Bugfix: Resolved issues with incorrect screen resolution when returning back to application from sleep mode
Bugfix: Updated Android libcurl to newer version and to use threaded resolver
Bugfix: Updated Qualcomm libTextureConverter.dylib for OSX
Bugfix: Updates to AndroidMediaPlayer
optimized media playback to remove extra copies; now copies directly to target textures
fixed SetRate so pausing works
auto-correct absolute filepaths from editor if necessary
Bugfix: Use less CPU when game is in the background
Bugfix: Uses gnu-libstdc++ 4.8 for NDK level 19, and allow 4.9 for higher NDK levels
Bugfix: Validate Google Play App ID if Google Play enabled (must not be blank or non-numeric)
Bugfix: Volume is updated immediately when a sound starts playing instead of on first tick
Bugfix: Fixed issue with GearVR surface creation which resulted in black screens.
iOS
New: Added new device profiles (IPodTouch6, IPhone6S, IPhone6SPlus, IPadMini4)
New: Added support for a CanLaunchURL node to blueprints. Courtesy of dererkvanvilet.
New: Added support for iPad Pro launch images.
New: Added support for multiple controllers for iOS/AppleTV
New: Changed minimum iOS support to iOS 7. iOS 6 is now deprecated and will be removed in a future release.
New: Re-enabled offline Metal compiling on the Mac. It had been mistakenly disabled at one point.
Bugfix: Changed the iOS Metal implementation to avoid binding anything to buffer index 31 to avoid a driver bug that was causing incorrect rendering.
Mac Metal is unaffected and can bind buffers to all 31 slots.
Bugfix: Signing an iOS ipa on PC issues resolved.
Bugfix: Occasional failure to create dSYMs on OS X 10.11 resolved
Bugfix: Returning a missing token when already logged in to Facebook is fixed.
Bugfix: Crash on game startup when using MSAA with Metal on iOS devices.
Bugfix: Crash when running the same movie twice.
Bugfix: Fixed a memory leak when utilizing the iOSHTTP API. This API has now been merged with the MacHTTP API into a shared AppleHTTP API.
Bugfix: Fixed an occasional crash on iOS when going into the background.
Bugfix: Fixed an occasional crash when not utilizing a frame rate lock.
Bugfix: Fixed for Restore Purchase not returning a failure when the user selects Cancel when accessing the app store.
Bugfix: Fixed issue with NonUFS files not being properly remapped when a pak file is present.
Bugfix: Fixed issue with splash screen on iPhone 6S and iPhone 6S Plus being stretched when in landscape mode.
Bugfix: Fixed Metal crash occurring with -onethread
Bugfix: Fixed serialization of shader headers when cooking on Windows for either iOS or Mac where the size of TCHAR differs.
Bugfix: Launching on a device from the editor has been re-enabled on Mac.
Bugfix: Pinch gestures on IOS now detect more than once
Bugfix: Remote building of iOS properly uploads static link libraries. Fix provided by pluranium.
Bugfix: Updated the UIRemoteNotificationType usage to UIUserNotificationType for IOS 8 onwards. The former has since been deprecated.
Linux
New: Added Tanglu OS to install script
New: All input will be ungrabbed before breaking into debugger on Linux
New: Bundled FreeType library has been updated to 2.6.
New: Bundled libcurl updated to 7.46.0, OpenSSL to 1.0.2d (both x86_64 and ARM builds).
New: Disabled optimization on triangle order by default; this is a pessimization but it fixes a very common crash on Linux on some setups.
New: Dumping core files is now disabled by default in Test and Shipping configurations (use "-core" commandline switch to override).
New: Implemented LinuxDeviceProfileSelector so different settings can be applied depending on a particular hardware/software configuration.
New: Implemented memory prefetch functions in platform abstraction layer for Linux
New: Jemalloc is now used by default on Linux for the editor and programs, unless overridden on the command line.
New: Linux architecture paths in intermediate folders will now be hashed to make them shorter and reduce probability of running into Windows MAX_PATH limit when cross-compiling.
New: Linux cross-toolchain has been updated to clang 3.7.0
New: Linux servers will not include ICU (internationalization library) by default in order to save memory and simplify deployment.
New: Linux: ensure() callstacks will now be symbolicated, symbolication has been sped up
New: LinuxNativeDialogs third party library is no longer built during the setup on non-Ubuntu distributions (it is no longer used).
New: Moved common Linux startup code to a separate module.
New: Scripts to build the Linux cross-toolchain are now included with the engine itself.
New: Support for xgConsole (octobuild) usage in native Linux builds
New: Target .NET framework has been increased to 4.5 due to IReadOnlyList usage in UBT (you may need to install appropriate mono packages).
New: Thread id will be cached in TLS in monolithic builds only to reduce pressure on static TLS slots in glibc in modular builds.
New: Unused Linux FBX libraries (debug and release .so, debug .a) should not be bundled anymore.
New: A slew of improvements in low level platform abstraction (getting MAC address, correct GIsFirstInstance, editor icons)
New: Added code to handle an unlikely case of TLS key being numerically equal to INDEX_NONE (valid value for a TLS key with pthreads).
New: Clock source for timers on Linux switched from CLOCK_MONOTONIC to CLOCK_MONOTONIC_RAW to avoid possible impact of NTP time adjustments on measurements.
New: Default icons for the editor have been added on Linux.
Bugfix: Fix crash on invalid windows
Bugfix: Crash on exit which could happen if DerivedDataCache was not initialized for some reason.
Bugfix: Ability to precompile Linux binary editor (Rocket) builds for distribution works again.
Bugfix: Fixed calculation of number of physical cores on Linux.
Bugfix: Fixed calculation of window coordinates when processing event queue
Bugfix: Crash on Linux due to OpenSSL name collision with Steam runtime; OpenSSL symbols will not be exported from UE4 binaries (together with nothrow variants of global new/delete).
Bugfix: Crash reporting on Linux.
Bugfix: Custom cursors on Linux fixed
Bugfix: Default permissions for files are now 644 instead of 600 on Linux.
Bugfix: FPlatformProcess::UserName() on Linux is fixed.
Bugfix: Index out of range error in SlateFileDialogs is fixed
Bugfix: Linux shell scripts emitted when debugging shaders are fixed (r.ShaderDevelopmentMode=1)
Bugfix: Log file was being cut even after a clean exit.
Bugfix: Fixed modal dialog on Gnome.
Bugfix: No longer passing redundant switches to clang (like -msse on x86_64).
Bugfix: Fixed reporting of platform memory stats (process and overall machine) on Linux.
Bugfix: Splash screen no longer persisting on Linux after startup under some circumstances.
Bugfix: UBT would crash on trying to access Windows registry on Linux.
Bugfix: No longer experiencing unintended polling for SDL events on servers (even when SDL was not initialized itself).
Bugfix: Fixed UserDir/ApplicationSettingsDir() to be more robust (particularly when $HOME is not set).
Bugfix: Linux: added missing implementation for GetDiskTotalAndFreeSpace().
Bugfix: Linux: added missing misc platform function (GetSystemErrorMessage).
Bugfix: More Ubuntu mono packages will be installed during setup; fixes inability to compile UAT out of the box.
Bugfix: Moved setting LC_NUMERIC to an earlier stage to avoid errors parsing config files.
Bugfix: UBT will now refuse to compile with too old or too new clang.
Bugfix: -usehyperthreading command line switch is now respected on Linux for consistency with other platforms
Mac
New: Added an option to allow the ShaderCache to perform initial precompilation up to specified the timeout synchronously before using asynchronous precompilation.
This helps to balance load times against total time spent precompiling.
New: Added handling of additional arguments to Mac Build.sh script
New: Added support for p4 command line tool installed in /usr/local/bin
New: Added support for streaming audio
New: Added support for unattended reporting of 'ensure' failures to Mac OS X crash reporting.
New: Added support to generate the ShaderCache's code-cache during project cooking.
Each target platform can specify its own list of shader formats to cache, analogous to the list of targeted RHIs. Presently only the Mac implements this.
The shaders in the code-cache are now compressed for size to reduce the overhead associated with the cache.
Shaders will be cached for each target platform even when cooking from a different host platform.
New: AV Foundation changes
Added looping
Fixed a few bugs related to the file ending and not updating the state of the player
Improved cleanup of the avfmediaplayer
New: Changed the minimum supported version of OS X to 10.10.5. We highly recommend latest 10.11 El Capitan for Unreal Engine to make use of Metal API for rendering.
New: Enabled subsurface scattering on OpenGL.
New: Extended the ShaderCache to perform batched shader precompilation which can be made more aggressive behind loading screens to reduce the time to load while still minimising in-game hitching.
With "r.UseAsyncShaderPrecompilation” enabled shader precompilation is now executed on the render thread alongside the predraw, not as a single operation on loading the binary cache.
The setting "r.TargetPrecompileFrameTime" controls what the target frame rate should be when performing async. precompile and the shader cache will try and adjust how many shaders to precompile to stay within this limit, with a minimum of 1 shader per frame.
The shader cache is now updated during initial loading to take advantage of the time spent loading essential data to do as much of the precompile as possible.
It is possible to accelerate the shader cache's precompilation by specifying 'r.AccelPredrawBatchTime' and "r.AccelTargetPrecompileFrameTime” to larger values, then calling FShaderCache::BeginAcceleratedBatching() to start using the more aggressive values and FShaderCache::EndAcceleratedBatching() to go back to the normal values.
Calling FShaderCache::FlushOutstandingBatches() will force completion of all outstanding batched precompilation and predraws during the next frame.
New: Improved Mac trackpad and Magic Mouse support in UMG and Texture editor viewports
New: Added an experimental option to enable OpenCL acceleration for the convex decomposition tool on Mac which defaults to off.
This avoids an OpenCL crash on Nvidia's OpenCL drivers but still allows users of AMD Intel GPUs to enable it if they wish.
Bugfix: Change the ShaderCache to report when resource references are invalid and prevent it from caching states that use invalid references to avoid errors on subsequent runs.
Bugfix: Changed the BlackDummy texture to be transparent black so that Reflection Environments will still render when Screen Space Reflections are disabled.
Bugfix: Changed the build process to use system zip tool instead of Ionic.Zip on Mono to solve a problem with Ionic.Zip.Zip64Option.Always producing broken zip files.
Bugfix: Changed the filenames for the ShaderCache files to prevent loading incorrectly written cache files from previous versions.
Bugfix: Changed the ShaderCache predrawing code to handle incomplete uniform buffer assignment information to avoid rendering errors.
Bugfix: Changed the ShaderCache predrawing to not reuse disposed bound shader states to fix a crash.
Bugfix: Changed the ShaderCache to flush outstanding writes to disk on exit to prevent crashes on startup caused by reading an incomplete cache file.
Bugfix: Disabled Mac OpenGL time-stamp emulation when not explicitly enabled for development builds to avoid crashes on some drivers.
Bugfix: Disabled strict verification when signing apps on Mac to solve the problem with signing games that use Steam SDK
Bugfix: Disabled the SIGPIPE signal on BSD sockets to prevent silent program termination on Mac when using network connections.
Bugfix: Ensure all references to debug symbol on Mac use the case-sensitive .dSYM extension so that they are automatically found on OS X El Capitan.
Bugfix: Ensured that shaders for different graphics APIs are not considered as compatible to prevent crashes loading shaders when games support more than one.
Bugfix: Removed an issue with with widgets in Tab Navigator not reacting to clicking
Bugfix: Apple Movie Player issue resolved where "Wait for movie to finish" setting was not being respected.
Bugfix: Bulk-loading of cubemaps on OpenGL - we weren't incrementing the data offset for each TexSubImage operation and would have uploaded 6 copies of the first face.
Bugfix: GitDependencies.sh for paths with spaces
Bugfix: ShaderCache would rebind shader samplers when unnecessary and cause rendering errors.
Bugfix: Crash on typing " on U.S. International - PC keyboard on Mac
Bugfix: App activation when user clicks on a draggable widget while the app is inactive works properly
Bugfix: Blueprint Editor no longer opening behind main editor window when converting a mesh to a Blueprint.
Bugfix: Fixed colors of the icon displayed in project properties
Bugfix: Fixed Crash Report Client not restarting into the correct project when re-opening UE4 on Mac.
Bugfix: Fixed handling of spaces in the path to crash report files on Mac OS X so that Crash Report Client can send them to the server.
Bugfix: Fixed incorrect library path in VHACD.Build.cs on OS X. This prevented a successful build on OS X with a case sensitive file system
Bugfix: Mac sub-process pipes would become full, causing a stall in the subprocess until the next pipe read from the host.
This directly addresses an infinite hang some users are seeing when using svn with mac
Bugfix: Mouse cursor location on secondary screens in non-native fullscreen modes now works properly
Bugfix: Editor incorrectly assumed that UnrealLightmass process was cancelled or not getting the correct exit code from it in some cases
Bugfix: Crash caused by accessing FMacApplication::AllScreens from two threads at the same time
Bugfix: Strange reflections occurred in templates on Mac OS X by re-enabling seamless cube map support.
Bugfix: Fixed Temporal AA rendering on Mac OS X.
Bugfix: Fixed the source context and callstack for Ensure reports on Mac OS X so that they are correctly reported to the Crash Report server.
Bugfix: Fixed window activation when clicking on a draggable widget of an inactive editor
Bugfix: Hide the splash screen on the main thread to avoid a race condition on OS X 10.11
Improve compressed 2D texture streaming on Mac OpenGL by retaining the pixel buffer objects for compressed 2D textures, trading memory for performance.
Improve performance on OpenGL 3 by optimizing away unnecessary changes to GL_TEXTURE_BASE_LEVEL GL_TEXTURE_MAX_LEVEL.
Improved in-game zoom in/out using scroll gesture for users of Magic Mouse and trackpads
Increased the size of stack for the game thread on Mac again to work around some more problems with running out of stack memory. Also, we now use a different stack size for debug builds.
Moved code that's accessing NSScreen properties and NSWindow's isOnActiveSpace to main thread as it's not safe to use those from secondary threads on OS X 10.11
Bugfix: Moved Mac OS X debug symbols (.dSYM) out of application bundles to prevent a crash on Mac OS X Yosemite (10.10) and earlier.
Bugfix: No longer use a blank RSync Username for remote builds if one is provided in the BuildConfiguration.xml
Bugfix: Optimized the ShaderCache's internal data structures to make recording and tracking of predraw shader states more efficient.
Bugfix: Prefer glBufferSubData to glMapBuffer when using Apple's MTGL engine (the default) to reduce synchronisation between threads and potentially improve performance.
Bugfix: Removed some Mac-specific OpenGL workarounds:
Removed special handling on the Intel HD 3000 GPU on Mac - we no longer officially support OpenGL 3.3 GPUs.
Removed the explicit sRGB encoding/decoding in shaders as AMD have fixed sRGB render target support in OS X El Capitan.
Removed the Mac-specific change to HZB texture format and instead attempt to optimise the CPU texture read back for this particular texture.
Bugfix: Simplified the ShaderaCache versioning to prevent a crash loading user's local ShaderCache files caused by a failure to write the version number.
Bugfix: Stopped Mac OS X compiler stripping necessary allocator overrides and causing memory errors.
Bugfix: Stopped windows being resized to fit on a single display when running under Mac OS X.
Windows will still be repositioned to prevent them creeping under the menu bar and fullscreen game windows are still resized to fit a single display.
This makes it possible to capture screenshots of windows that are larger than the current display.
Bugfix: When locking an OpenGL buffer for writing then discard the backing store by setting the size to 0 rather than redundantly reallocating the buffer to its existing size which will be done again on unlock.
Playstation 4
New: Split PrepareDrawCall into UP and non-UP for an approx 0.6% renderthread speed up.
New: Added ability to dump the callstack during an assert
New: Added ability to move audio and stat thread to the 7th core. Enable with "Use 7th Core" setting in Project Settings\Platforms\Playstation 4 in the Editor
New: Added ability to start an audio file at a particular time through the Audio Component
New: Added ability to use unsafe command buffers. Saves approx 0.4ms of CPU on draw thread in ShooterGame when running single threaded. Enabled in PS4 projects settings
New: Added French Canada locale
New: Added GetDllHandle support for getting .prxs for plugins
New: Added missing PF_R16_UINT and PF_R16_SINT pixel formats
New: Added support for deployment of .prx files used by plugins
New: Added support for thread trace option while compiling shaders with r.PS4UseTTrace=1
New: Added -uploadsymbols to BuildCookRun. Used on PS4 to upload symbols to a crash handler machine (if you set up a crash uploaded server in your Debug Settings)
New: Don't add PS4 C# projects to the solution if PS4 SDK is not installed
New: FORCE_INLINE functions are no longer forced inline for debug builds and generation of debug info for inlined functions is disabled due to inconistent debugging experience
New: GPU memory stats are now dumped to the console when out of memory.
New: GPU Starvation time is now removed from the 'stat unit' counter on PS4. This is similar to how sleep times are removed from the CPU counters.
New: HTTP Requests on PS4 can now timeout. The timeout length is specified by the HttpTimeout config value.
New: Implemented FPlatformMisc methods GetCPUVendor, GetCPUBrand, GetPrimaryGPUBrand, and GetOSVersions
Note: GetOSVersions only returns the actual system software version in non-Shipping builds on a devkit running in Development mode
New: Improved detection of Visual Studio support for PS4 including VS2015
New: Modifier keys from keyboard input, specifically shift/ctrl/alt/capslock, are now supported.
New: Parallel rendering contexts now have a fast thread-local frame allocator.
New: PS4 MediaFramework implementation now uses Sony Decoder2 library, and uses the GPU to convert to RGBA format for final display.
New: PS4 packages now use UnrealPak padding to align properly with the patch creation tool. Should result in smaller patches.
New: PS4 platform file read-ahead caching
Asynchronously buffers blocks of data from the current read position, in an attempt to pre-cache data before it is needed
Disabled by default, but can be enabled with the cvar "ps4.EnableFileReadahead=1".
New: Reduced overhead from Cycles function
New: Removed automatic GPU flushes from around compute shaders on PS4. RHITransitionResource calls are now required. Compute shaders can now be overlapped with graphics work.
New: Replaced the external PS4MapFileUtil by moving the map file parser into UBT. Now about 6 seconds faster to parse the map file when compiling, PS4 startup is 3 seconds faster and saves about 50mb at runtime.
New: SDK 3.0 is now supported for PS4.
New: Some extra logging has been added when creating Np sessions to help diagnose errors when it fails.
New: The PSN sign-in dialog can now be triggered by calling FOnlineExternalUIPS4::ShowLoginUI.
New: The system software invite dialog will now allow the player to invite up to the maximum number of players allowed in the session, minus 1.
New: There is now a project setting to enable LinkTimeOptimization for development and test/shipping PS4 builds. LTO greatly increases linking times but can improve performance.
New: Updated to SDK 3.008.201
New: Using rooms, which are referenced in the npMatching2 library, is now optional. They can be enabled or disabled with the config value bAreRoomsEnabled.
New: When creating NP sessions, the host migration setting can now be set. If the SETTING_HOST_MIGRATION session setting is true, the NP session migration setting will be owner-migration, or owner-bind if the session setting is false.
New: When r.PS4StripExtraShaderBinaryData is 0, shaders will have a list of input/output attributes
Bugfix: Crash when trying to snapshot a devkit that is in use by another user
Bugfix: Fixed packaging issue when AppType in ini is invalid.
Bugfix: Touch pad now working when Morpheus is enabled.
Bugfix: Multiple fixes for PS4 builds accepting console commands from the target manager console view input box
Bugfix: Packaging bug would cause packaging to fail if a 50GB bluray was required, but only a 25GB bluray was specified.
Bugfix: Procedural audio error when using A3D object based audio is fixed.
Bugfix: Fixed a view state bug that could cause a corrupt 'white' first frame.
Bugfix: Fixed aborting of IME dialog
Bugfix: HTTP REST responded with empty content would be flagged as an error, even though it is a valid reply.
Bugfix: Fixed an issue where the task for getting the user access code would never complete if getting the user access code failed with an error.
Bugfix: Attempting to clear invalid targets now works properly
Bugfix: Fixed Cmask channel mapping when clearing the Cmask buffer
Bugfix: Fixed constant reverb on all sounds due to a previous mismerge.
Bugfix: Fixed deepfile folder iteration issues
Bugfix: Fixed disabling of Generic scissor
Bugfix: DS4 Touch and Mouse were not getting initialized correctly
Bugfix: NatVis debug visualizers. TSpareArray, TBitSet, TMap, and TSet can now handle indexes > 31 and invalid values now display "Invalid" correctly.
Bugfix: Fixed one possible cause of 'SubmitDone not called' error.
Bugfix: Fixed potential memory corruption bug in Direct Memory Manager during stack merging
Bugfix: PS4 MediaFramework player will start playing immediately when ready rather than waiting the full timeout period.
Bugfix: Reserve size required for DMA copy fixed when using unsafe command buffers
Bugfix: Return value check for sceNpLookupPollAsync is working
Bugfix: RHIUpdateTexture2D/3D incorrect channel mapping caused R and B colors to be swap
Bugfix: Fixed Scissor GNM Validation errors
Bugfix: Fixed stat capture file saving in PS4 packaged builds.
Bugfix: TMap visualizer was fixed and added missing visualizers to the .natvis
Bugfix: Fixed tracking of CMask memory
Bugfix: Fixed unitialized SceNpWebApiResponseInformationOption causing WebAPI crashes
Bugfix: Fixed USB keyboard not working in shipping builds and removed debug keyboard
Bugfix: Fixed WinDualShock not linking in DebugEditor mode
Bugfix: Make sure to always call the OnDestroySessionComplete delegates even if the call to destroy the NP session fails.
Bugfix: Modifier keys such as Shift, Alt, and Ctrl to keyboard input is now handled the same as PC, Mac, and Linux
Bugfix: Modifier keys such as Shift, Alt, and Ctrl to keyboard input is now handled the same as PC, Mac, and Linux
Bugfix: Reduced the size of command buffer blocks to 64k. This reduces the memory overhead of parallel rendering and reduces pressure on the Onion GPU memory pool.
Bugfix: Removed parallel rendering flushes when locking single-mip 2d textures for write on PS4.
Bugfix: System even checking is now on a task thread. Saves roughly .1ms on the game thread.
Bugfix: The number of open public and private slots for NP sessions are now kept up to date when registering or unregistering players from the session.
Bugfix: Vertex and Index buffers now always use GPU-only memory unless they require CPU readback.
Bugfix: Which switching deployment between cookonthefly and pak file deployment we now remove the unnecessary files to avoid runtime issues.
Xbox One
New: Xbox One Fast Semantics (experimental)
An experimental Fast Semantics Renderer has been added to the Xbox One renderer. In our testing, this has shown a 6-19% improvement in CPU time for the render thread and RHI thread. To enable this, set bUseFastSemanticsRenderContexts to true in BuildConfiguration.cs. Due to its experimental nature, there may be rendering and/or stability issues with this enabled.
New: Custom Stencil passes now work on Xbox One.
New: Distance Field Shadowing now enabled on Xbox One. This was previously incorrectly documented as working in 4.10 (only DFAO worked in that release).
New: RHI resources are now initially allocated in GPU mapped memory on Xbox One, which avoids extra allocations and copies.
New: The November 2015 QFE 1 XDK is now the default supported XDK.
New: VSync is now on by default on Xbox One, for consistency with other platforms.
Bugfix: Crash in the Movie Player on Xbox One.
Bugfix: Crash that could occur when the wrong file system layer was dereferenced to check for local file locations.
Bugfix: Duplicate CulturesToStage entries would cause file access issues during build. Duplicate entries are now safely ignored.
Bugfix: Game specific packaging values were being incorrectly searched for in the Engine INI files instead of the Game INI files.
Bugfix: Textures could end up with the top mip level corrupted on Xbox One.
Bugfix: Fixed rare, but severe rendering corruption in some circumstances.
Bugfix: Fixed the Xbox One target platform for UFE to always do a full device query on startup so that devices are immediately available.
Also fixes an issue where devices were not available for command line execution as they had not been enumerated before the command being executed was run.
Bugfix: Settings used to generate application manifests are now explicitly loaded for that build step.
Bugfix: Texture cooking is now dependent on the XDK used to do the cook, which prevents corruption caused by differing tiling modes in different XDKs (for example).
VR
Bugfix: Stereo rendering was not working when Playing in VR while Blueprint editor was open
HTML5
New: Added a GUID to .emscripten file to add ability to regenerate Emscripten SDK files in case of a bad install
New: Emscripten toolchain upgraded to 1.35.0
New: Packaged HTML5 build can now work on servers with or without compression. Check out the new htaccess file for server setup of compression.
Bugfix: Allow emscripten to process files with "spaces" in the pathname
Bugfix: As of Safari 9.0 setRequestHeader's 2nd parameter value cannot have any leading whitespace
Bugfix: Auto print generated shareable Amazon S3 link of the packaged HTML5 project in the output window
New: Build scripts for ThirdParty libraries -- used with HTML5 packaging. Note: currently only buildable on OSX.
Bugfix: Issue when copying the HTML5 helper command template due to read only file attributes.
Bugfix: Fixed StringBuilder to output \n instead of system dependent line endings.
Bugfix: For loop iterator had objects getting deleted that was not yet removed from the <TArray> first
Bugfix: HTML5 packaging build scripts fixed to pick appropriate "optimization level" libraries
Bugfix: Re-enabled chrome to show up in device manager
Bugfix: Serializer: corrected size reads/assignment and configured for platforms that requires aligned access
Bugfix: Utility.js file was not getting cleared during cooks -- code was getting appended growing every time cooks was run
Windows
New: Added support for free resizing of game window
New: FCachedReadPlatformFile is off by default on Windows since WindowsPlatformFile already caches the reads.
Bugfix: A windows binned allocator memory was having an allocation bug that caused a large amount of memory to be marked unusable.
Bugfix: Alt+Enter full screen reverted back to windowed after game screen changes
Alt+Enter was not updating GameUserSettings with the new windowed mode state
Only applies to games that have bAltEnterTogglesFullscreen=True in DefaultInput.ini
All Mobile
Bugfix: Apply vertical flip to SvPosition for ES2 LDR forward shading on device so screen position is correct
Bugfix: Buttons were not triggering OnClicked events for touch events
Bugfix: Fixed issue with missing event location paired with IE_Pressed if IE_DoubleClick generated for touch events
Bugfix: Removed a potential crash from touch events
Programming
New: Added a workaround for builds hangs when compiled using the Visual Studio 2015 toolchain and XGE.
This workaround requires XGE 7.1 build 1659 or newer to function.
New: The editor now uses a more robust method for filtering out stale dynamic libraries in local builds: a file with the '.modules' extension is written to each output directory listing all the compatible files.
Bugfix: Changed ExampleLibrary in the plugin template to output .dll and .lib to an internal folder first and then copy the .dll to the required location in binaries.
Bugfix: Fixed bug where compile could fail inside UE4 Editor when using VS 2015.
Bugfix: Removed runtime dependency on UnrealCEFSubProcess from CEF3 module
Rendering
New: A message will now be displayed when running over the texture streaming pool size on Debug Development
New: Add SetBoundsScale function to PrimitiveComponent (Blueprint and C++).
New: Added r.D3DDumpAMDCodeXLFile, set to generate AMD CodeXL batch file when dumping shaders
New: Added a debug banner showing when running over the texture streaming pool size
New: Added DecalSize to the decal component, make blueprint workflow easier
New: added experimental optimization r.Tonemapper.ScreenPercentage doing ScreenPercentage/Upscale as part of the tonemapper (disabled by default)
New: added new optional GaussianDOF masking with a circular mask, useful for SniperScope, no performance impact if not used
New: added new ParticelDOF (for CircleDOF) material function
New: Added r.DepthOfFieldQuality 4 to trigger slower but higher quality Circle Depth Of Field (Used for CutScenes)
New: Added r.SSS.HalfRes to get ScreenSpaceSubSurfaceScattering in higher quality (not yet optimized) as reference
New: added r.TonemapperSharpen to do sharpening in the tonemapper
New: CPU optimized PostProcessMaterial blending
New: First pass at experimental Async Compute commandlist interface. Reflection Envrionment converted as 'in-place' async compute as an example.
New: First version of driver detection code to report driver version in log and tell user to consider a different driver (not enabled)
New: Alpha channel mip sharpened for color textures for better quality
New: Fixed velocity rendering for cloth for proper TemporalAA and MotionBlur
New: improved CircleDOF quality, added r.DepthOfFieldQuality 4 to trigger slower but higher quality
New: Improved ScreenSpaceSubsurface quality (was visible as minor colorshift on object borders, more visible with large radius)
New: Improved SubsurfaceScatteringProfile quality by applying Specular Color in full res
New: Improved SubsurfaceScatteringProfile quality by applying Specular Color in full resolution
New: IndirectLightingCache update is now a task that overlaps with shadow setup in parallel.
New: Made CPU/GPU perf index arrays configurable in Scalability.ini. These are the thresholds which govern that "automatic" video settings detection.
New: optimized BasePass Pixel shader to not have to combine two bits to create a new value from the PrimitiveBuffer
New: polished ShaderComplexity view, added Legend and text printout, VS, PS and overdraw is available
New: Remove debug/show rendering features on shipping I did the first part, lock some showflags to be 0 or 1 in SHIPPING
New: Removed a lot of complexity of the skeletal mesh motionblur code (better for multithreading, simpler, faster)
New: Updates for D3D12 performance and stability
New: You can now configure the thresholds where scalability measures a machine's speed in Scalability.ini
New: 32 bit texture pools can go over 2 gigs now
New: Disable VR when using separate process PIE.
New: Export decal bit to GBuffer for Unlit materials as well
Bugfix: Fix for rare rendering crash
Bugfix: Fix for rendering crash when using certain material nodes in translucent materials with shadows.
Bugfix: Fix potential memory leak when generating unwrapped (longitude/latitude) cube map image.
Bugfix: Fix ProceduralMeshComponent incorrectly updating collision when calling UpdateMeshSection
Bugfix: Fixed "CopyMaterialInstanceParameters" no longer works properly
Bugfix: Fixed ScreenSpaceSubusrfaceScattering artifacts and some optimizations (radius scaling, kernel missed a horizontal line of samples)
Bugfix: Fixed a crash when painting vertex colors.
Bugfix: Fixed an issue when landscape would disappear when using the r.forcelod console variable. Landscape rendering now respects the forced LOD value.
Bugfix: Fixed bad particle systems that have dirty distributions saved to disk.
Bugfix: Fixed Black screen for Player 1 in split screen when project fullsceen
Bugfix: Fixed clearcoat shader disappears depending on the view angle
Bugfix: Fixed cloth showing Motion Blur artifacts.
Bugfix: Fixed corruption when updating pre-computed atmospheric fog values.
Bugfix: Fixed crash when texture streaming is disabled on platforms that actually support it
Bugfix: Fixed Crash when using of Circle Depth of Field in Shader Model 4
Bugfix: Fixed Custom Depth not rendering with mesh unless it's selected.
Bugfix: Fixed decals scaling of newly created decals
Bugfix: Fixed dithered LOD transitions on HISMC meshes with materials without dithered LOD transitions.
Bugfix: Fixed ElementalDemo crash due to nil constant buffer
Bugfix: Fixed FastBlur radius scaling, causes wrong radius when using r.FastBlurThreshold or changing radius on bloom or DepthOfField
Bugfix: Fixed instanced vertex color memory being misrepresented in Primitive Stats
Bugfix: Fixed issues with volumetric deferred decals (quality, baked shadows, depth out), partly from Inigo Quilez
Bugfix: Fixed material compiler optimizations that could cause rendering bugs
Bugfix: Fixed procedural mesh components not drawing on certain platforms due to the Max Vertex Index not getting set correctly.
Bugfix: Fixed resources leak when running SynthBenchmark.
Bugfix: Fixed translucency's Responsive AA mask when parallel rendering.
Bugfix: Fixed wrong colors and artifacts when using color grading (extreme red in darks or more subtle ones)
Bugfix: The near depth of field blur should occur after separate translucency is merged in to the final frame buffer to avoid errors
Bugfix: The shadow color of FCanvasTextItem is now drawn before the outline color.
Bugfix: Give access to SceneDepth in worldPositionOffset
Bugfix: Improved ScreenSpaceSubsurface quality
Bugfix: Instanced stereo rendering only available on D3D SM5 and PS4. Packaging for other platforms have this disabled.
Bugfix: Now LensFlares are off by default (project settings prevented it)
Bugfix: Prevented a possible access of uninitialized memory in ribbon emitters
Bugfix: Texture import causes the texture to be compressed processed twice (was only for DDS_cubemaps, DDS_2d, HDR and IES)
Bugfix: Texture processing: Alpha channel was missing sharpening effect
Bugfix: ubsurfaceScatteringProfile for OpenGL (appeared to not have a BaseColor applied / grey)
FX
New: Cascade: Added a viewport overlay display of 'Completed' when a self-terminating system has finished playing (controlled in the View..View Overlays menu)
New: Added a number of useful particle system properties as asset registry searchable data
FixedBoundsSize (maximum component of the fixed bounds or None if it does not not use fixed bounds)
NumEmitters (number of emitter modules)
NumLODs (number of levels of detail)
LODMethod (method of computing which LOD to use)
LODDistanceCheckTime (interval of LOD checking when LOD mode is automatic)
Looping (True if the emitter will keep playing forever without external intervention)
These will show up in the content browser as tooltips or in the columns view, but unloaded particle systems will not have values for these columns until they are resaved!
New: Added flag Auto Deactivate for particle systems. This will automatically deactivate particle systems that have completed and won't spawn again, even if the emitter duration hasn't expired yet. This can help performance by essentially auto-trimming the duration, especially useful for non-looping burst-only systems that don't continuously spawn particles.
New: GPU particles are now simulated using fixed timestep, allowing different frame times and gameplay time scales to generate consistent results.
The fixed timestep is configurable through the ini variable "r.GPUParticle.FixDeltaSeconds".
A tolerance is configurable through "r.GPUParticle.FixTolerance" to prevent small variation of frame time to affect the number of iterations required.
The maximum number of iterations is limited by configuring "r.GPUParticle.MaxNumIterations". This prevents long frame from having costly simulations.
New: It is now possible for deferred decals to access the underlying scene normals if they are not also updating it.
New: Particle Effect lights can now be made 'high quality'. In those mode they go through the normal deferred lighting path. High Quality FX lights can also now become shadow casters. Content creators should use these sparingly as the performance impact can become very high, very quickly.
New: Added a 'auto deactivate' flag for particle systems, that will automatically deactivate them if they can never again spawn particles. Useful for burst-only emitters, to not need to hand-trim emitter lifetime precisely.
Bugfix: Fixed a bug that would cause the editor to hang after being minimized or losing focus and coming back to it, if GPU particles are visible.
Bugfix: Fixed a case where fog used incorrect data.
Bugfix: Fixed animated particle emitter attributes not being animated when time exceeded 1 second.
Bugfix: Fixed non-sprite emitters not being checked for bHasPhysics during PostLoad()
Bugfix: Fixed particles with "Generate Spherical Particle Normals" having wrong normals when used with the pivot offset module.
Bugfix: Increased size of curve texture used for GPU particle curves (now 512x256)
Bugfix: Prevent particle system bounding boxes from being typed in the wrong way around (with Min > Max)
Lighting
New: Added new PrimitiveComponent setting bSingleSampleShadowFromStationaryLights
When enabled, shadowing of a movable component from a stationary directional light will come from the Volume Lighting Samples precomputed by Lightmass
This provides essentially free on/off shadow receiving on dynamic objects, with a fade over time between states
Lighting has to be rebuilt once for this to work
New: Added SourceCubemapAngle to sky lights, so the incoming lighting can be rotated
New: Lightmap streaming fixes - Changed the default MaxLightmapRadius from 2k to 10k, as the previous default made thousands of tiny textures.
New: Lightmass triangle normal is now averaged over the lightmap texel, improves cases where a small ledge near the texel center causes the final gather to be self-occluded.
The lighting position is no longer offset when detecting intersecting surface frontfaces within a texel. This was causing fully shadowed artifacts in cracks, as one side of the crack would move the shading position into the other.
Bugfix: Fix for objects being culled by the near plane of the shadow frustum with RTDF shadows (shadow casters behind the camera pop out)
Bugfix: Fixed a case where self-shadowing would break when selecting an object.
Bugfix: Fixed a minor self-shadowing artifact.
Bugfix: Fixed a rare case where Lightmass would hang on the final stage.
Bugfix: Fixed an IndirectLighting cache bug where an IndirectLighting policy was still chosen even if a mesh had selected ILC quality OFF.
Bugfix: Fixed lightmass exporter being deleted before the swarm connection is closed, causing occasional crashes when canceling a lighting build
Bugfix: Fixed line light source shadows in lightmass
Bugfix: Fixed several incorrect interactions between HLODs and Lightmass.
Bugfix: Fixed skylight occlusion maps being generated from Lightmass for static skylights. Reduces lightmap encoding time, disk space and memory when only a static skylight is present.
Bugfix: Fixed skylights on translucency in projects with static lighting disabled
Bugfix: Fixed spot lights not generating cast shadows
Bugfix: Fixed translucent self-shadowing on static meshes using the static draw path
Bugfix: Fixes for building lighting in a commandlet
Bugfix: More graceful handling of overflowing object count for distance field shadowing and DFAO
Bugfix: Objects with 0 scale are excluded from the distance field scene, fixes bugs with several lighting methods with 0 scale objects
Bugfix: Removed shading terminator bias meant for shadow map acne but it made character faces look worse.
Bugfix: The static shadow depth map used to shadow translucency from Stationary lights is now saved properly during a blueprint construction script
Materials
New: Added Dithered Opacity Mask option for materials.
New: Derive Tangent Basis: New material function can derive a tangent basis from a specified UV channel in order to use normal maps from UV channels other than 0. Can also output a world normal transformed into the derived basis.
New: Give access to SceneDepth in WorldPositionOffset
New: Parallax Occlusion Mapping: added checkbox to use worldcoordinates which skips tangent space transform. For xy world coordinate materials.
New: Parallax Occlusion Mapping: fixed compile error on macs caused by uninitialized variable.
New: TextureCoordiate ID now shown in the caption in a materialexpression.
New: Unit Vector to Octahedron and Octahedron to Unit vector: New material functions for packing v3 vectors as v2 and vice versa.
New: Virtual Plane Coordinates: Updated this material function to include the UV coordinates of the plane.
Bugfix: Automatically migrate View/Frame uniform usage in material custom nodes.
Bugfix: Fixed crash which occurred when overriding the blend mode of a distortion material to opaque in a material instance.
Bugfix: Fixed DepthFade material node
Bugfix: Fixed issue with distortion not rendering on opaque materials that have been overridden to be translucent in an instance.
Bugfix: Fixed issues with volumetric deferred decals (quality, baked shadows, depth out) partly from Inigo Quilez
Bugfix: Fixed UI materials not working with separate translucency
Bugfix: Materials using separate translucency should now work in stereo mode or other multiple-view scenarios.
Bugfix: Shader compiler emits a warning when instanced stereo is enabled but not supported for the target RHI
Postprocessing
New: Updated Camera Lens Effects
The camera lens effect system has been heavily updated. We've streamlined the process of adding particle effects such as water droplets or dirt to the game camera "lens" and it now follows camera motion properly. These features can be used in both C++ code and Blueprints.
To use this feature, create a subclass or Blueprint of AEmitterCameraLensEffectBase and configure it as desired. These effects can then be triggered via the PlayerController or PlayerCameraManager, using functions such as APlayerCameraManager::AddCameraLensEffect() or APlayerController::ClientSpawnCameraLensEffect().
Bugfix: Fixed multiple ScreenSpaceSubusrfaceScattering artifacts
Bugfix: Fixed a performance regression in the Screen Space Ambient Occlusion
Bugfix: Fixed blacks of old tonemapper not being black with log space LUT.
Bugfix: Fixed broken material post process blendable references
Bugfix: Fixed bug where it was looking for tonemap shader features that don't exist in the PC path. Changed the compiled shader options slightly to reflect common use better.
Bugfix: Fixed post process materials not supporting view specific material expressions
Optimizations
New: Added reversed index buffers to static meshes to reduce the number of GPU state changes.
This is can be enabled/disabled per static mesh in the static mesh editor under "Build Reversed Index Buffer" in the "Build Settings" section.
New: Improved the texture streaming logic when hierarchical LODs are used.
Hierarchical LOD textures are not streamed anymore unless they are visible.
Static meshes having hierarchical LODs are not considered by the texture streaming logic when their hierarchical LODs are visible.
A transition prefetch distance is configured by the "RangePrefetchDistance" value in the [TextureStreaming] ini section.
New: LOD dithering now applies a stencil optimization when using a full z-prepass.
New: Material nodes hooked to multiple inputs (emissive, normal, etc) will now share generated code resulting in less shader instructions
New: Optimized particle system initialization by caching more information in advance.
New: 'ShowMaterialDrawEvents' now reports triangle counts properly
New: When using separate translucency, setting r.SeparateTranslucencyScreenPercentage [0;100] can be used to change the resolution of translucency rendering as a percentage of the current rendering resolution. This can be useful to reduce fillrate and bandwidth demand especially for effects heavy situations.
New: Adding instanced stereo support for the following factory types: terrain, foliage, beams, particle trails and GPU particle sprites.
New: Adding instanced stereo tessellation support
Bugfix: Disable instanced stereo rendering when not using a compatible RHI.
Bugfix: Fixed depth buffer decals when using instanced stereo
Bugfix: Fixed foliage culling when using instanced stereo.
Bugfix: Fixed static meshes depth only index buffers not being used with cooked data.
Bugfix: Fixing bias issue when using dynamic shadows and instanced stereo rendering.
Bugfix: Fixed Global shaders compiled twice when running a cooker
Mobile Rendering
New: Devices that do support hardware instancing will always use it (most Android devices, all iOS devices)
New: HQ ES2 Reflections
Added mobile material flag to enable high quality reflections. (parallax correction).
It selects the nearest 3 reflection captures to the primitive and reflects based on the capture size and type.
New: 'Receive Decals' flag supported on all meshes (previously only for skeletal meshes)
New: There is now a Project Setting checkbox "Game Discards Unused Material Quality Levels".
This allows a Device Profile to select shaders from a particular Quality Level at startup and then free up the memory occupied by shaders for the other quality levels.
If the checkbox is not checked, the shader quality level could be changed at runtime by game code, for example by a Settings user interface screen.
New: Update reflection captures button now works when using the editor in mobile preview mode.
New: Adreno 420 based devices will use [Android_High] profile
Bugfix: Fix lighting error in mobile / mobile preview where an object that is fully shadowed from the directional light instead renders as fully lit
This only happened if there was another (e.g. point) light causing the object to have a shadowmap
Bugfix: Fixed a bug in mobile preview mode in which a material texture's alpha channel would be erroneously gamma corrected before use.
Bugfix: Cases where UMG material was not rendering correctly on mobile devices
Bugfix: HUD::DrawMaterialSimple does not look correct on Android device when MobileHDR is disabled
Bugfix: Materials not showing up in HUD on mobile
Bugfix: Refraction should not cause rendering artifacts on devices that do not support refraction
Bugfix: Rendering artifacts specific to Nexus 6 devices
Bugfix: Static shadows rendering artifacts on Galaxy S6 Android 6.0.1
Bugfix: Translucent objects disappear if scene has decals or mod shadows enabled
Bugfix: Uniform binding logic for OpenGL, now it correctly handles situations when uniform array was optimized away in a linked program. This was causing various rendering issues on Android 6.x devices.
Bugfix: Widget 3D Component is not rendering on specific Android devices
Bugfix: When updating reflection captures, the editor now waits for any outstanding shader compilation to complete. This issue was causing black reflection captures on mobile in some circumstances.
UI
New: Added visual editing of analytics provider settings inside the project settings
New: Converted the Slate text layout to use shaped text
The Slate text layout is now aware of bi-directional text. Each hard-line (paragraph) within a document will calculate its base flow direction, and then each run within that line will be broken at flow direction boundaries before being converted into blocks for the text layout to shape and draw.
The base flow direction is used to adjust the logical justification of the text, so that when dealing with right-to-left text, a "left" justification will be transformed into a "right" justification and vice versa. The base flow direction is also used when splitting the text for a line into its directional blocks, as it may affect where some characters are placed, such as brackets and quotes.
The default text shaping method (see ETextShapingMethod) is Auto, as this will always produce the correct result regardless of the text being shaped. You can override this default using the "Slate.DefaultTextShapingMethod" CVar, and you can also override the shaping method per-widget (for example, if you had widget that you knew would only contain numbers, you could set the shaping method to KerningOnly to avoid any bi-directional detection over
The default flow detection method (see ETextFlowDirection) is Auto, as this will always produce the natural result for the text in question. You can override this default using the "Slate.DefaultTextFlowDirection" CVar, and you can also override the flow detection method per-widget.
Bugfix: After closing the console, keyboard focus will now be restored automatically to the widget that had focus when the console was opened.
Bugfix: Changed the font used when a font is missing or invalid to be the last resort font, rather than the localized fallback font
The localized fallback font could cause different results based on your culture, and the last resort font makes it clearer that something is set-up incorrectly as it just draws invalid glyph markers for all of the text.
Bugfix: Creating a menu anchor with a MenuLeft placement now works properly, in both UMG and native Slate
Bugfix: Fix a crash in widget blueprint animation which would occur when starting a new animation in response to another animation ending.
Bugfix: Fix placement of widgets spawned from a MenuLeft Menu Anchor
Bugfix: Fixed a crash when deleting a font in the font editor
Bugfix: Fixed a crash while editing a font in the editor with no TTF/OTF file set
Bugfix: Fixed a font cache crash when using a 3D widget
Bugfix: Fixed an infinite loop when using Ctrl+Up/Down in a multi-line editable text
Bugfix: Fixed an issue where floating windows were having their border size added again and again, causing them to grow in size with each subsequent editor launch.
Allowed PIE windows to not respect work area bounds if they are created centered, so that they can overlap off the edge of the screen (to give the impression of a fullscreen window).
Bugfix: Fixed crash in UObject::SetLinker after loading some circularly dependent UMG assets
Bugfix: Fixed some kerning issues when scaling text
We now handle scaling the kerning ourself, as FreeType scaling didn't work correctly for all fonts
Bugfix: Loading movies can now be skipped via gamepad button press.
Bugfix: Fixed STextBlock not passing through the reply of the double-click handler
Bugfix: When SWindows are constructed with an auto center rule in place, their size will now be automatically clamped to not be bigger than the preferred work area. This prevents partially offscreen windows from being created.
Slate
New: Added custom UV support to Slate vertex shaders
New: Added different scroll descendant behavior for scrolling into view, or to the top of the scrollable area
New: SListView objects now handles gamepad directional up/down and left analog up/down for scrolling.
New: Table Row expander arrow brush is now customizable
New: Updates to the PS4 virtual cursor
Cannot leave the bounds of the screen
No longer spams MouseDown events while a face button is pressed on a controller. On press = one mouse down (just like a mouse!)
In "Game and UI" input mode with cursor hiding during capture enabled, the cursor does not move during capture. This prevents an issue where the hidden cursor was still bound to the edges of the screen and restricted the possible movement during capture.
Bugfix: Substantial progress has been made in hardening Slate. Lots of problems related to memory lifetime/strange crashes have been fixed. This was especially problematic on platforms using a separate RHI Thread.
Bugfix: Fixing a long standing issue with the 3D Slate Renderer. It was conditionally flushing the font cache which in the case that it needed updating was causing it to corrupt the frame that was actively being rendered and needed the cache to still be alive. The primary renderer is now the only one who should be conditionally flushing the cache. This crash normally reproduced by crashing inside of FSlateRHIRenderingPolicy::DrawElements(), trying to access the memory of a now bogus shader resource that was previously the shader resource of the font cache.
Bugfix: Double-click when the mouse captor has capture is now treated as a normal mouse button down event (prevents the double click event falling through to other widgets)
Bugfix: Ensured that Engine/Runtime modules don't depend on SlateReflector in a shipping build
Bugfix: Fix for scrollbox not updating when jumping to a descendant widget
Bugfix: SButton::SetButtonStyle now updates hovered and pressed sounds. These sounds can be dynamically changed from a Blueprint by simply switching the button's style.
Bugfix: Fixed a crash that could occur when flushing the font cache when drawing the main window element.
Bugfix: Fixed a memory leak in shaped text
Bugfix: Fixed bug where Slate Button didn't use it's disabled brush when disabled by hierarchy.
Bugfix: Fixed memory leak in Slate Renderer that can occur when a batch contains no vertex or index data.
Bugfix: Fixed problem with menus not closing when clicking in another window on Mac.
Bugfix: Resetting a slate brush image size will now correctly reset to the image size and not to the default slate size (32x32).
Bugfix: Fixing several issues involving multi-touch. Data stored involving widgets under cursor are now bucketed based on user and cursor index so that multiple pointer devices, as well as index can independently hold separate widget under cursor data.
Bugfix: In an editable text box, the caret position is now updated in the next tick if the text was changed via virtual keyboard input.
Bugfix: Mac OS X: Fixed a potential crash when closing windows
Bugfix: Manually closing an SMenuAnchor will properly flag it as having been closed that frame
Bugfix: SProgressBar marquee can now be tinted and accounts for widget color and opacity.
Bugfix: Supersearch no longer displays the previous set of results if no results for the current search are found.
Bugfix: The visibility of the SMenuContentWrapper that surrounds SMenuAnchor content is now set to match the visibility of the content
Bugfix: Custom Draw elements no longer are attempted to be early clipped using the known scissor rect before going through the element batcher, since their clip rect info isn't valid we just ignore doing this step for those elements.
Bugfix: Improving the way we track references to materials in slate to better keep things alive until they're no longer needed for rendering. Additionally, making it so the we use the material and texture free list when possible when cleaning up things as to not allocate new memory if not required. Coincidentally this can help with problems with corrupted memory on destruct as well, because it means the memory isn't really going to become garbage any more.
Bugfix: Viewports can now use both pre-multiplied and non-pre-multiplied alpha blending
SViewport now has an PreMultipliedAlpha argument (default true), which can control whether to use pre-multiplied alpha when blending is enabled (blending is disabled by default).
Note: This is a change in behavior from 4.10, as non-pre-multiplied alpha blending used to be the default.
UMG
New: Invalidation Box Widget - Allows child widgets to be cached and not be pre-passed, ticked or painted.
The Invalidation Box has been further enhanced from the one that went out in 4.10. The newest version now caches the vertex and index buffers for the children widgets, so it can execute the draw calls directly instead of rebatching the element list every frame.
New: Retainer Box Widget - Renders child widgets to an offscreen render target.
Some UI can be updated at a lower rate than the rest of the game. You may for example, only want the HUD to redraw at 20Hz to increase performance. The Retainer Box by rendering the widgets offscreen can present them every frame, but only update them at both a specific Frequency, and Phase. To allow you to load balance when they redraw as well.
Bonus feature unrelated to performance is that because the children are rendered to an offscreen render target, you can use a material on the Retainer Box that can run shader code on the resulting retained buffer. Which you could use to add some simple post process effects to the children.
New: Added "Go to Variable" functionality for widgets in Widget Blueprint Editor.
When switching modes from Designer to Graph. The widget variable is automatically selected, if one exists.
New: Added a function to convert slot to border slot.
New: Added basic controller support for Checkbox, Slider, and ComboBox
Checkbox - Can now be toggled using the controller's bottom face button.
Slider - The controller's bottom face button must be pressed to begin manipulating the value. The value can be manipulated by using the controller's directional arrows ( This is relative to slider orientation ). Finally, press the face button to navigate away.
Combo box - The controller's bottom face button can be used to open the menu. Directional arrows can be used to navigate options before using the face button to accept the value.
New: Added Blueprint callable functions for setting Slider handle and bar colors.
New: Added individual start/finish delegates to widget animations. Note that stopping a playing animation will trigger OnFinished while pausing the animation will not.
New: Added support for vertex shaders in UI materials.
New: Adding a few extra scaling modes to the scale box, allowing it to Scale to Fit X, and Scale to Fix Y.
New: Adding a new option to the "Replace With..." menu that offers up, replace with your child widget. So if you're a widget with a single child, you can delete yourself from the hierarchy and promote your children up.
New: UserWidgets now have a Padding property for their content.
Bugfix: Fixed crash that occurred when opening Widget Blueprint Editor if 'Animation' and 'Timeline' windows had been previously hidden.
Bugfix: Fixed crash when dragging widgets out of Switchers in the UMG designer.
Fixed unsafe active widget index in SWidgetSwitcher that could act as out-of-bounds index into child array.
Bugfix: Fixed drag-drop to and from named slots in the UMG widget hierarchy view.
Fixed incorrect brightness for UMG Image widgets on mobile devices when the widget used both a texture and modified its color value.
Bugfix: Fixed linker load warnings about WidgetTree outers in cooked builds (of the form Failed to load Outer for resource 'WidgetTree': WidgetBlueprint /Script/UMGEditor.Default__WidgetBlueprint)
Bugfix: Fixed UMG compiler errors caused by changes to widget blueprints of nested child widgets.
Bugfix: Fixed UMG editor allowing invalid object names when renaming widgets.
Having a period in the name of a widget would cause the editor to crash after copying and pasting.
Bugfix: Slider value has been clamped to [0,1] to prevent the handle from sliding off the bar.
Bugfix: UScrollBox's ScrollWidgetIntoView no longer crashes if you pass it a null widget.
Bugfix: Renaming a widget in the designer is now reflected in the sequencer view.
Bugfix: AddToPlayerScreen now properly respects any Aspect Ratio lock you currently have on the camera, so that it does not cover the black bars.
Bugfix: When the Widget Component's Blend Mode is set to Masked, it now correctly makes itself relevant to the opaque pass so that it draws into the velocity buffer to prevent TxAA from blurring it.
Bugfix: Fixed ScaleBox not reporting its relative layout scale correctly, and making it better at laying out text by doing another prepass after calculating the newest scale. Does add additional overhead for using the scalebox but ensures the proper result.
Bugfix: We now properly synchronize the Layer property to the grid slot when it's changed.
Bugfix: Attempting to parent multiple widgets (in Hierarchy tree) to a widget that can't have multiple children will notify the user and ignore the operation, rather than crashing.
Bugfix: Now clearing the AllWidgets array on UWidgetTree after load. This should fix the issue with widgets removed at runtime not being garbage collected.
Bugfix: Slate Brushes now properly pay attention to the Filter option on the UTexture you use.
Bugfix: Fixing the Left menu anchor position to offset the correct amount.
Bugfix: Slider Locked/HandleIndent properties are now respected.
Bugfix: DrawTextFormatted is now correctly static.
Bugfix: The WidgetComponent will now correctly hit test once again.
Bugfix: Fixing placement of hint text in a TextBox when scaled, also multiply HintText's Color by the incoming widget tint, so that it's properly alpha blended if the parent's alpha is modified.
Bugfix: Mostly fixing the notorious problem in UMG when modifying a dependent widget, and it causing cascading compile failures across all widgets that use it - forcing you to recompile them all manually. The new compiler code ensures we use the latest class before generating the variable list.
Bugfix: Fixing the animation stopping code to permit a restart of the same animation on end. If it's played again, we don't add it to the stopped pool.
Bugfix: The widget component now creates the correct collision volume and bounds for any pivot it is given, this fixes some of the strange hit testing issues. Fixing collision and bounds rendering in the editor to correctly render for multiple views and collision visualization now also renders, previously it never showed if you enabled the flag in the editor.
Bugfix: Making it more obvious what keys do special stuff with anchors in UMG. Fixing the way snapping to anchors works with Control, it now only zeros out the side you're dragging instead of the entire widget, which was silly. Enhancing the designer message system to no longer be based on an enum and instead let arbitrary systems push and pop FText messages. Fixing animations in the anchor drop down to properly animate, broke when we introduced active timers.
Performance: If the user does not implement Tick / OnPaint, we now note that in the generated class and configure some flags on the instance to not attempt to ever tick or paint if those were not implemented.
Added missing resource cleanup code to UMG widgets (ListView, TileView and Slider).
Attempting to parent multiple widgets (in Hierarchy tree) will no longer crash if parent can only accept fewer child widgets.
Border widget now correctly updates padding properties.
DrawLines, DrawFormattedText added to the set of low level painting methods for UMG.
Relaxed the naming restrictions placed on UMG widgets in the hierarchy by adding a DisplayLabel to UWidgets for editor-friendly naming
Removed unnecessary check for cleaning up resources when a widget component is about to be destroyed
The cursor property on widgets now works as it should. You can also call SetCursor and ResetCursor to set it at runtime on any UWidget, or clear your overridden cursor.
Correctly setting the affected buttons in touch pointer events, restoring input for checkbox/slider on iOS that were only checking the EffectingButton.
UserWidgets are no longer Focusable by default. Existing UserWidgets should be unaffected.
Programming Release Notes
AI
New: A partial specialization of FEnvQueryInstance::AddItemData for TArray support has been added.
New: A way to cancel all EQS queries by a given Querier has been added. Whether "on finished" notifies get sent out is configurable with bExecuteFinishDelegate parameter.
New: A way to remove all EQS queries requested by a given owner has been added.
New: Added a way to silently (without sending notifies) remove all active EQS queries tied to a given Querier
New: Added an easy way to disable AI senses for a given perception agent
New: AIPerceptionComponent::GetHostileActors has been made virtual to support game-specific hostility logic.
New: EQS query parameters logic has been extracted from BTTask_RunEQSQuery and made available for reuse in other pieced of code.
New: Navigation System related headers have been removed from Engine.h
New: Navigation System related headers have been removed from Engine.h
New: NavModifierComponent has been exposed at part of Engine API, so that it can be used and expanded in game-specific code.
PawnActions' header inclusion has been cleaned up to reduce amount of headers users need to include themselves when using PawnActions
Debugging Tools
New: Added support for tabs ('\t', currently translated to five spaces) to PrintString in GameplayDebuggingHUDComponent.
Removed requirement from AGameplayDebuggingReplicator that the GDC component has a valid Debug Camera Controller. This allows the replicator to function in situations where you don't need the camera to display some debug information (such as in the FE).
Navigation
New: A dedicated memory stat has been added for tracking memory allocated by UE4's Recast memory allocation functions.
New: Added accessor for reading all neighbors of navmesh poly with their edge data for custom navmesh querying.
New: Added preferred navigation data class to nav agent properties.
New: An alternative way of gathering neighbours of a given navmesh poly has been added.
The new way is more efficient and returns a set of NavPolyRefs, as opposed to the older version that was fetching portals.
New: An alternative way to batch point projections to navmesh has been added. This new way supports declaring custom query boxes per batched point.
New: ARecastNavMesh::OnNavMeshGenerationFinished has been made virtual to make it easier for game-specific navmesh classes to react to navmesh generation completion.
New: FNavAgentProperties member variable has been added to FPathFindingQuery and is now being reused in pathfinding code instead of previously used blank, locally created FNavAgentProperties instance.
New: Moved navigation flags from PrimitiveComponent to ActorComponent for simplicity and to avoid some casting
New: Unnecessary AI navigation-related headers has been removed from Engine.h.
A bug resulting in NavigationSystem dynamically spawning NavigationData instances, even if game is not configured for runtime navmesh generation, has been fixed.
Bugfix: Fixed MovingAgent cleanup in NavLinkCustomComponent.
FNavigationQueryFilter has been made thread-safe.
NavigationData's cleanup has been fixed to work reliably both when destroyed and when the game ends.
Animation
New: Added a stat for the specific component in the parallel evaluation worker thread, improving the quality of stat captures or named event captures
New: Added buckets to use for update rate optimizations when configuring native parameters so it can be used over a number of mesh categories without stalling important meshes.
New: Marked AnimNotify_PlayParticleEffect and AnimNotify_PlaySound as MinimalAPI, so they can be cast to outside of the Engine module
New: UAnimNotifyState_Trail cam now be overriden by native classes as well as blueprint classes.
Bugfix: Fixed uninitialized variable in FAnimUpdateRateParameters (OptimizeMode now defaults to TrailMode)
Removed a bogus unguarded dereference of GetWorld() from USkinnedMeshComponent::GetSkeletalMeshResource(), preventing a crash when working with an unregistered component
Automation
New: Moved some automation tests into separate test files their respective modules.
Refactored Async tests; added validation to Void Task test.
Removed dead UDPMessageSegmenter test
Blueprints
New: USCS_Node::ChildNodes is now a private member. Manipulation must be performed via accessor functions.
Bugfix: Fixed a bug that caused instanced properties to be cleared on Blueprint compile.
Made a load warning when a node class is missing more actionable by including the package name in the log output
Reduced the number of memory allocations done when managing latent actions, and added a stat tracking the time spent in ProcessLatentActions
Spline Component Get Segment Length now correctly takes into account the world scale of the component. Also exposed UpdateSpline to Blueprints so that the spline can be updated in code after applying a new scale transform.
UObject::execLocalVariable will no longer crash when there is a type mismatch
Core
New: ABTest command now supports timing a scope rather than the whole frame via SCOPED_ABTEST.
New: Added [UnrealHeaderTool] MaxLinesPerCpp ini setting to control the maximum number of lines stored in unity files.
New: Added an FName churn tracker.
New: Added bAllowShrinking to various TArray heap methods, to allow users to avoid reallocation during removals
New: Added basic support for loading native Blueprints.
New: Added basic UObject thread safety checks to UnrealCodeAnalyzer.
New: Added custom deleter support to TSharedPtr.
New: Added custom version for engine releases branch.
New: Added 'debug stackoverflow' console command
New: Added FastDecimalFormat to provide efficient and culture aware number formatting
New: Added FindSortedStringCaseInsensitive overload which takes an array type.
New: Added FPackageName::TryConvertLongPackageNameToFilename
This allows you to attempt convert a package name (or path) into a filename (or path) without generating an assert. FPackageName::LongPackageNameToFilename now calls this function and asserts on failure.
New: Added functions to access low-level file stat data as a single file-system request
You can now use GetStatData to get all of the stat data for a file (its timestamps, size, read-only state, and type (file or directory)) in a single file-system request
Depending on the platform, this can be much more efficient than making multiple requests
This change also adds alternate directory iteration functions (IterateDirectoryStat and IterateDirectoryStatRecursive) for when you need the stat data along with the files/directories on disk
For platforms that provide this stat data as part of the low-level directory iteration (such as Windows), this can yield much better performance than making two separate file-system requests
Platforms that do not provide this information as part of the directory iteration will just perform a stat request while iterating
New: Added inline allocator support to TFunction.
New: Added intrinsic support for FMath::CountLeadingZeros and FMath::CountTrailingZeros on Clang platforms.
New: Added IsAligned function for testing a pointer's alignment.
New: Added IsValidLowLevel checks to root set objects when initializing Garbage Collector.
New: Added macro "logOrEnsureNanError" which either logs an error or triggers an ensure, depending on the value of GEnsureOnNANDiagnostic.
CVar "EnsureOnNaNFail" can be used to control this behavior.
New: Added specific FMath rounding implementations:
FMath::RoundHalfToEven
FMath::RoundHalfFromZero
FMath::RoundHalfToZero
FMath::RoundFromZero
FMath::RoundToZero
FMath::RoundToNegativeInfinity
FMath::RoundToPositiveInfinity
New: Added support for nested serializable objects during conversion to JSON.
New: Added support for parsing int, signed and unsigned in UnrealHeaderTool.
New: Added support for regular C++ int types when casting an enum type in the dimension of an array property.
New: Added Support for RF_Async and RF_AsyncLoading in FReferenceChainSearch::PrintReferencers.
New: Added support for tracking the total number of objects outside of WITH_EDITOR by defining UE_GC_TRACK_OBJ_AVAILABLE to 1
New: Added TBitArray::SetRange to set a range of bits to a given state.
New: Added ToDirectionAndLength() for FVector2D.
New: Added UDynamicClass for dynamic UObject types
New: Added write flags support to FFileHelper::SaveArrayToFile and FFileHelper::SaveStringToFile.
New: Allow development command line options -execcmds, -exec, -vsync, and -novsync to work in Test configuration builds (still disabled in Shipping configuration builds)
New: Allow memreport to work in Test configuration without requiring UEBuildConfiguration.bUseLoggingInShipping to be true
Note: It still requires ALLOW_DEBUG_FILES, and is disabled in the true Shipping configuration
Added a new FOutputDeviceArchiveWrapper which doesn't try to do any special work and merely adapts the FOutputDevice API to write to a FArchive
Switched UEngine::HandleMemReportDeferredCommand over to use FOutputDeviceArchiveWrapper
New: Basic support for dynamic UClasses (UClasses that don't need to be constructed at runtime, and can be later removed). Native blueprint support for UnrealHeaderTool.
New: Blueprint Generated Class references can now be redirected to Native Class references.
New: CrashReporter - Added a safer method for adding new crashes to the database, should no longer time-out
New: CrashReporter - Added initial support for the unified crash context
New: De-templatizied GetPrivateStaticClassBody to help improve compile times.
New: Engine: Added build configuration (e.g., Development, Test, or Shipping) to the output .log generated for fpscharts
New: Fixed UHT parsing of PRAGMA_DISABLE_DEPRECATION_WARNINGS and PRAGMA_ENABLE_DEPRECATION_WARNINGS macros.
New: FReferenceCollector::AddReferenceObjects performance improvements for TArrays
AddReferncedObjects will no longer call HandleObjectReference multiple times but instead will call HandleObjectReferences just once (currently only implemented for FGCCollector). Reduces the number of virtual function calls while collecting garbage.
New: Garbage Collection and WeakObjectPtr optimizations
Moved some of the EObjectFlags to EInternalObjectFlags and merged them with FUObjectArray
Moved WeakObjectPtr serial numbers to FUObjectArray
Added pre-allocated UObject array
New: Improved "obj list" formatting to make it easier to work with
Removed meaningless 'ResourceKB' number (it is never actionable due to double-counting, etc...); ExclusiveResKB is still present and useful
Changed all sizes to be float KB instead of int KB (10.2f)
Added commas between entries and dropped the K suffixes, to make it easier to import into other software
New: Initial implementation of makefiles for UnrealHeaderTool - designed to improve programmer iteration times.
New: Introduced GC UObject clusters. GC clusters provide means to create disregard for garbage collector subsets at load time (e.g. Materials with material expressions and their textures).
New: LoadClass now provides the same default arguments as LoadObject
New: Made delegates' Create functions throw a warning when their return value is ignored.
New: Merged FTlsObjectInitializers with FUObjectThreadcontext to avoid excessive thread local storage lookups when creating UObjects.
New: Optimized FMemory::Memswap and TSparseArray::Compact.
New: Optimized FName comparisons to be a single branch.
New: Optimized function name generation in BindDynamic, AddDynamic, AddUniqueDynamic, RemoveDynamic and IsAlreadyBound in Clang builds.
New: Optimized TArray and FString ranged-for iteration and added checks to ensure the iterated container isn't modified.
New: Optimized TSet hashing.
New: Added FVector::DistSquaredXY helper function
New: Replaced GetUObjectArray() function calls with GUObjectArray object to avoid redundant function calls in performance sensitive places.
New: Replaced the checks of duplicate bindings in multicast delegates with ensures.
New: Tick functions can now have a different start and end group
New: Turn on async component tick by default. This means any tick function marked as being able to run on any thread will actually do so by default
New: UnfocusedVolumeMultiplier can now be set programmatically.
New: UnrealBuildTool: Exposed the ability to disable /largeaddressaware for Win32 compiles (bBuildLargeAddressAwareBinary)
Bugfix: Fix for implementation of FWindowsPlatformMisc::Is64bitOperatingSystem() which was always returning true.
Bugfix: Fix multiline comments parsing in UHT, where end of comment was treated as start of one, e.g. // Comment //
Bugfix: Fixed a comment about the return value from FString::Compare.
Bugfix: Fixed a compile error in one of TUniquePtr's move assignment operators.
Bugfix: Fixed a lot of Hot-Reload errors.
Bugfix: Fixed access specifiers dropping from one UCLASS to the next within the same header.
Bugfix: Fixed an assert that could occur when creating FMemoryArchive objects.
Bugfix: Fixed an interpolation issue with FRotator.
Bugfix: Fixed an issue where commandlets did not load plugin modules with a loading phase of PostEngineInit
Bugfix: Fixed bug in stack tracker which would not properly zero all unused elements.
Bugfix: Fixed comparison in FSessionMessageRouter::FSessionChangedDelegatePair::Equals.
Bugfix: Fixed compilation errors in TCircularQueue::Count.
Bugfix: Fixed compiler warnings in libJPG with Clang >= 3.7.
Bugfix: Fixed crash in FGCReferenceTokenStream::ReplaceOrAddAddReferencedObjectsCall when using TMap properties.
Bugfix: Fixed crash in TMap range-based-for iteration
Bugfix: Fixed FArchiveProxy::operator return values.
Bugfix: Fixed FBitReference's assignment operator when assigning from one TBitArray element to another.
Bugfix: Fixed FCriticalSection::TryLock to retain the lock if successful, rather than immediately releasing it.
Bugfix: Fixed FString::operator/= adding and extra slash even if the string to be concatenated starts with it.
Bugfix: Fixed hot reload crashes that were occuring when user added C++ enums to the code.
Bugfix: Fixed hot reloading on the Mac when building from Xcode.
Bugfix: Fixed incorrect _MAX values in UEnums.
Bugfix: Fixed incorrect errors reported by UnrealHeaderTool when const UCLASSes have deprecated properties.
Bugfix: Fixed LoadObject to also respect the legacy struct's path, which FindObject was already respecting. Moved legacy logic to StaticFindObjectFast that is shared by both functions
Bugfix: Fixed non-contiguous UUserDefinedEnums.
Bugfix: Fixed parsing of */// in UnrealHeaderTool.
Bugfix: Fixed possible memory corruption when using FArchive::SerializeBits.
Bugfix: Fixed reference controller memory leak in MakeShareable assignment.
Bugfix: Fixed return value of HexToBytes.
Bugfix: Fixed some actors being skipped during ULevel::RouteActorInitialize.
Bugfix: Fixed some inefficient TFunction and TFunctionRef usage.
Bugfix: Fixed some redundant unsigned comparisons which showed up in static code analysis.
Bugfix: Fixed some threading problems with MallocBinned stats.
Bugfix: Fixed the example code in TFunction's comments.
Bugfix: Fixed TTuple move construction in Visual C++.
Bugfix: Fixed UnrealHeaderTool metadata when casting a UENUM() value in the bounds of a C++ array UPROPERTY().
Bugfix: Fixed UnrealHeaderTool not handling explicit constructors.
Bugfix: Fixed UnrealHeaderTool's parsing of inline keywords in UFUNCTIONs.
Bugfix: Fixed Visual Studio 2013 Update 5 and Visual Studio 2015 debug visualizers.
Added an API macro to UMaterialExpressionObjectOrientation.
Added overload for FMath::RandRange() that takes two floats. Using floats with the int32 version is most often a mistake so this makes the behavior explicit.
Better detection of hot-reload-from-IDE builds.
Changed a failure to set a cvar due to a previous set via system settings ini to be displayed as Display instead of Warning
Rationale: There is no way in a game to prevent the project settings or scalability from trying to set the value and failing with the message, and a user had to go out of their way to add one and intended them to exist (there's no UI way to set them in this manner in the editor)
Deprecated FDelegateBase::GetDelegateInstance. This was an internal API that was never intended to be exposed.
Disabled Hot-Reload functionality in game builds.
FArchiveReplaceObjectRef will now respect references added through AddReferencedObjects
FDefferedMessageLog class will now be more thread safe
ForEachObjectWithOuter now correctly considers children of excluded objects for being operated on.
[UObjectGlobals] Do not overwrite instanced subobjects with ones from CDO
Linkers will no longer be reset when renaming objects while post loading blueprints.
Lowered the priority of task graph threads and added the ability to control this with a console command for testing.
Made a serialization error about enums more actionable by including the name of the asset being loaded (if there is one)
Made FCriticalSection non-copyable.
Made FMath::IsPowerOfTwo a template to allow it to take any integral type.
Modified GetParamValueIfNotSpecified to return Default value if the param is not part of the command line
Optimization: Improved FWeakObjectPtr::Get() performance.
Inlined some internal functions that were not being inlined. Removed some branches, especially in the common case when bEvenIfPendingKill=false.
Fix "error: '' within '|'" in EditorPerformanceTests.cpp when using clang-3.5.2
Fixed LogCompile typo: Tabify time was was...
Prevented FPaths::MakeStandardFilename from crashing when passed a 1 character string
Refactored FMallocBinned.
Removed copies of FD3D12PipelineStateCache now that FCriticalSection is uncopyable.
Removed deprecated CanConvertPointerFromTo metafunction.
Removed DiskCachedAssetDataBuffer as it was not strictly necessary and was triggering a crash when loading the cached registry from disk. This data is now stored directly in DiskCachedAssetDataMap. It was already true that this map does not change outside of SerializeCache but now it is critical since NewCachedAssetDataMap keeps pointers directly to its values.
Removed FNameLookupCPPArchiveProxy as it was not used by anything
Removed redundant memory allocation when loading empty files in FFileHelper::LoadFileToString.
Removed unnecessary memory allocations from TMultiMap::MultiFind.
Removed unnecessary zero-byte allocations from BulkData.
Removed unused FUntypedBulkData::GetBulkDataResourceMemory and FUntypedBulkData::ShouldFreeOnEmpty functions.
Replaced some -1s with INDEX_NONEs.
Stopped FName instances with the same string but different numerical suffixes all getting the same hash
UnrealHeaderTool: Fixed a bug where some kinds of shadowing would not generate an error (e.g., struct member shadowing), and one where thrown errors would not return a failure code stopping the build
When cooking by the book, imports that should be excluded from packages for specific targets (i.e. NotForServer imports should not be created for the server cook target) will no longer be created.
Wrapped all vector library calls to math functions through our FMath versions, so they benefit from fixes or improvements therein. Added Exp2() function.
Editor and Tools
New: Added a complete framework to allow plugins to add their own editor build steps.
These can be executed individually (e.g. by selecting an entry in the Build drop down menu), and in the Build All action.
Build actions can be registered to run at any point during Build All, except after Lightmass, as Lightmass never calls back to the editor build system to say it's complete.
Builds can be asynchronous, like Lightmass, and the system handles continuing Build All after this is complete.
New: Added option to display installed platform options even if they are not valid for the current project type
This is used to show the option to package code projects in the editor, so that it can display a message about it not being available
New: Added support for OrthoFreelook viewport types when calculating the view rotation matrix for the viewport.
New: Better display support for Arrays of structs within UDataAssets
Added support for optional meta=(TitleProperty="StructPropertyNameHere") tag on properties of type TArray<FSomeStruct>
This changes the editor rolled-up display of these values from "{0} members" to a stringified version of the specified property (if found) making it easier to identify the element you want to work with.
For example, if your struct has a UPROPERTY called Name you can set that as the TitleProperty to use it as the row summary.
New: Moved component visualizer headers to the Public folder to allow their use as base classes in project code. Also moved some spline visualizer members from private to protected scope and DLL exported the necessary symbols.
New: Refactored the way that property keying works in sequencer based tools. Any sequencer code for custom property tracks in either the widget blueprint animation editor or the level sequence editor will need to be updated. This allowed deleting a lot of duplicated complex key behavior code. No data changes are required.
New: Removed the limitation that BSP must be rebuilt during a transaction.
New: Slow Task dialogs can now be set to automatically open only after a certain amount of time has passed.
This can be useful if it's not necessarily known in advance how long a task will take, but where opening the dialog for only a second or so would be disruptive.
Bugfix: Fixed a crash bug in FEditorFileUtils::AddCheckoutPackageItems when no OutPackagesNotNeedingCheckout array is specified.
Bugfix: Fixed a bug that was causing TAssetPtrs to point to the wrong objects during play-in-editor sessions.
Memory Profiler: Optimized FillActiveCallStackList to avoid frequent reallocations, significantly improving overall token stream parse speed
Prevented ResaveContent commandlet from resaving all content when passed a PACKAGEFOLDER= directory that contains no assets (it now gracefully exits since there is no work to do)
Exposing an extenders list for the Play menu in the level editor toolbar for extension.
<h5 id="contentbrowserContent Browser
New: Added a way to handle user-defined drag-drop operations in the SAssetView
You can now use FContentBrowserModule::GetAssetViewDragAndDropExtenders to register callbacks that are used by SAssetView to handle custom drag-drop operators.
Note: These callbacks are only called if the operation isn't handled by SAssetView itself.
Bugfix: Fixed a crash caused by accessing an invalid string when using the PathChangedDelegate callback
Bugfix: Fixed the back/forward buttons in the Content Browser not triggering the PathChangedDelegate
Gameplay Framework
New: Addded a method IsLooping to determine whether an AEmiterCameraLensEffectBase object will loop forever
New: Added FScopedPreventAttachedComponentMove scoping construct which temporarily sets a SceneComponent to use absolute location/rotation/scale to prevent moving when attached to a parent that moves. The flags are then restored after the scope goes away.
ComponentToWorld of the child will not change when the parent moves (it shouldn't since it stays at the same location). RelativeLocation, RelativeRotation, and RelativeScale3D will be set to match the absolute flags, which are restored after the scope goes out of context.
Optimized SceneComponent::UpdateChildTransforms to do nothing when the child uses all absolute flags.
Relocated bWorldToComponentUpdated and bAbsoluteTranslation_DEPRECATED for better cache behavior.
New: Added SceneComponent::IsQueryCollisionEnabled() and IsPhysicsCollisionEnabled(), since IsCollisionEnabled() is more general than we often want.
MoveComponent now only sweeps if query collision is enabled (not just any collision, so now excludes PhysicsOnly collision).
UpdateOverlaps now only generates overlaps if query collision is enabled (not just any collision, so now excludes PhysicsOnly collision).
A few other locations were changed to only consider query collision, where it didn't make sense to include PhysicsOnly collision.
New: Added a delegate that can be bound to trigger when a hitch is detected while doing FPSCharts ( UEngine::OnHitchDetectedDelegate)
New: Added console commands to list components/actors with a given response to any specified profile, and to list profiles with a given response to any specified collision channel. This processes only those assets which have been loaded in to memory so far. New commands are:
New commands are listed below. "Response" is one of: Ignore, Overlap, Block. "Profile" is either an index or name from the ListProfiles command. "Channel" is either an index or name from the ListChannels command.
Collision.ListProfiles
Collision.ListChannels
Collision.ListComponentsWithResponseToProfile <Response> <Profile>
Collision.ListProfilesWithResponseToChannel <Response> <Channel>
New: Added FQuat methods GetForwardVector(), GetRightVector(), GetUpVector(). Improve comments for GetAxis[X|Y|Z] and GetRotationAxis().
New: Added IsLooping() to UCameraShake to indicate when it will loop forever
New: Added Pawn::IsPlayerControlled() to compliment IsLocallyControlled() (thanks EverNewJoy!)
New: AnimNotifies for trail effects can recycle ParticleSystemComponents, to avoid spawning them each time and avoid the template setup cost. This is enabled by default.
Trails are not limited to PSCs spawned by the trails (though those are preferred), so a persistent effect can be spawned for an actor and reused forever.
Optimized some internal functions to avoid dynamic memory allocations. Optimized editor code for trails to avoid creating FText for every update.
New: Exposed more control over CharacterMovement network smoothing options.
Exposed CharacterMovement network smoothing options in new enum ENetworkSmoothingMode.
Exposed more tunable parameters to network smoothing.
Refactored SmoothClientPosition() to use two helper functions SmoothClientPosition_Interpolate and SmoothClientPosition_UpdateVisuals.
This allows custom code to selectively only update interpolation values and not push transform updates if they use custom throttling or culling code.
New: Fixed multiple bugs related to creating more than one UWorld within one game engine instance.
Using multiple UWorlds with UGameEngine is still very experimental, and your mileage may vary.
New: Gameplay Abilities: Added the ability to flag a pin as requiring a connection on a latent ability call (meta=(RequiresConnection="true") on the delegate property)
New: Improved and optimized FQuat::FindBetween() and add some Vector->Orientation functions that include Quat results.
Added FindBetweenNormals() and FindBetweenVectors() to indicate different input length requirements. Old FindBetween() previously assumed normalized input, new one does not, but is still faster.
Converted most uses of FQuat::FindBetween to FQuat::FindBetweenNormals where the inputs are known to be normalized.
Added FVector::ToOrientationQuat. This preserves the up vector (result has no roll).
Added FVector::ToOrientationRotator, matching FVector::Rotation implementation.
New: New virtual function added to AController to GetMinRespawnDelay
New: Significance Manager is an experimental plugin that provides a framework to help manage the significance of objects based on user view location(s) and based on that significance make decisions about LOD, tick frequency, whether effects should be spawned, sounds played, and other performance related decisions.
New: Spawning an actor will now respect any default transform on a native root component.
New: Split UCharacterMovementComponent::VerifyClientTimeStamp to have "checking" logic in a new IsClientTimeStampValid (const) function and have non-const ServerData.CurrentClientTimeStamp reset within the Verify function so that external code can check client timestamp validity without side-effects (also moved logging)
Moved UCharacterMovementComponent::PackYawAndPitchTo32 to a static function in header to be able to be accessed outside of CharacterMovementComponent.cpp (for project-specific child classes)
New: Systems can now register with AHUD::OnShowDebugInfo to provide additional showdebug categories and details.
New: There is now an override of UGameplayStatics::SpawnEmitterAtLocation that takes a transform rather than separate rotation and location.
New: UActorComponent::OnComponentDestroyed now takes a boolean parameter that indicates whether the entire Actor that owns the component is being destroyed at once or if the component is being destroyed independently.
This can be used to avoid expensive operations like individually detaching scene components for an entire hierarchy that is being destroyed at once.
New: You can now bind double "click" events for touch inputs.
Bugfix: Fixed rare crash in AGameplayAbilityTargetActor that occurred with an invalid OwningAbility.
Bugfix: Fixed crash in GetPlayerControllerFromNetId if the player state's unique ID is not valid.
Bugfix: Fixed UCharacterMovementComponent::ApplyRepulsionForce() using the overlap body index incorrectly. Fixes pushing wrong bodies on skeletal mesh components with multi-body overlap enabled.
Bugfix: Fixed ensure triggering in PIE/editor shutdown cases with AGameplayAbilityTargetActor: Only attempt to unbind confirm/cancel callbacks if we bound them succesfully in the first place
Bugfix: Fixed non-normalized Quats from character network smoothing causing NaN errors.
Bugfix: Fixed UAbilitySystemComponents always ticking even if they don't need to
Bugfix: Fixed UGameplayCueManager handling GameplayCues when world is tearing down (especially during PIE exit) - safety check
Bugfix: Fixed up uses of library math functions to go through our FMath namespace so they benefit from fixes or improvements.
Bugfix: Fixed UPrimitiveComponent::GetCollisionShape not correctly enforcing bounds limits to reject negative sizes when inflation is used.
Bugfix: Fixed a bug in FInterpCurve::InaccurateFindNearestOnSegment where it wasn't finding nearest points on the closing segment of a looped spline.
Bugfix: Fixed a bug where UGameplayAbility::SetShouldBlockOtherAbilities() could run on an ability that is no longer active
Bugfix: Fixed bug with optimized MarkActorComponentForNeededEndOfFrameUpdate.
Bugfix: Fixed crash in CheckStillInWorld after Actor has been destroyed or is not in the world.
Bugfix: Fixed excessive allocation in gameplaytags and gameplayeffects subsystems.
Bugfix: Fixed linear searches of component updates.
Bugfix: Fixed OnComponentCreated not always being called before RegisterComponent().
Bugfix: Fixed possible crash in Particles by checking for nullptr
Bugfix: Fixed replicated transforms not being updated on clients until the next transform or replication update.
Bugfix: Fixed some compiler warnings in FInputActionKeyMapping struct
Added FCollisionQueryParams::ClearIgnoredComponents and SetNumIgnoredComponents.
Added check for valid AWorldSettings to UWorld::IsPaused
Added DestroyActiveState to AbilitySystemComponent so unregistering the component while in-flight abilities are active do not crash.
Added option for reusing player states when they become inactive instead of duplicating them via OnDeactivated and OnReactivated methods.
Added NaN checking to FVector::Rotation and AController::GetControlRotation and make NaN logging in FQuat::Rotator() more verbose. Tweaked FQuat::ToString() to display more precision.
Changed game thread tasks to be high priority. The renderer is generally more tolerant of task latency so this helps keep things running smoothly.
Changed the timer manager to be grow-only, avoiding reallocs due to expiring timers, etc...
Disabled RVO avoidance registration on network clients, and made a note of it only running on the server. It already did not update velocities on clients anyway.
Disabled ticking by default for ACameraActor as there is no work to be done per-tick (subclasses can still set it)
Do not crash when PlayerController is given a LocalPlayer in commandlet mode
Ensure that we pass a valid delta time to UCharacterMovementComponent::CalcRootMotionVelocity()
FloatingPawnMovement uses faster FQuat code path for movement.
FMath::Atan2() no longer calls atan2f() because of some compiler or library bugs causing it to randomly return NaN for valid input.
It now uses a high-precision minimax approximation instead, measured to be 2x faster than the stock C version.
GetAttachParentSocketName now returns the correct information.
Inlined SceneComponent::GetAttachParent() and added GetAttachSocketName().
Made FQuat::DiagnosticCheckNaN() const and added a call to it in FQuat::Rotator().
Made FVector::IsUniform() just call AllComponentsEqual(), as the old implementation was similar but allowed 2*Tolerance difference between X and Z.
Made various FQuat interpolation methods normalize output by default. Added versions that do not normalize if that is desired.
Added FQuat::Slerp_NotNormalized() and made current FQuat::Slerp() always normalize output. FQuat::FastLerp() remains unchanged (does not normalize).
Added FQuat::SlerpFullPath_NotNormalized() and made current FQuat::SlerpFullPath() always normalize output.
Moved AttachmentReplication update out of SceneComponent and to ActorReplication. It only needs to be done on the network authority and only for the root component, and replication updates is a better place to check this.
Network attachment uses less bandwidth when root component is attached and is set to replicate. Actor no longer replicates redundant AttachmentReplication struct in this case.
Optimization: avoid calling USceneComponent::UpdateChildTransforms() when there are no children.
Optimization: Inlined ACharacter methods: GetMesh(), GetCharacterMovement(), GetCapsuleComponent(), GetArrowComponent().
Optimization: reduce calls to GetNetMode() in CharacterMovementComponent. Some cases can be replaced by much simpler net Role checks.
Optimization: removed the need for APawn to implement Tick().
Moved RemoteViewPitch update to Pawn::PreReplication() from Tick().
Optimization: Stop ticking particle systems on the dedicated server if they are not enabled, rather than bailing out of the tick each time.
Optimized FCollisionQueryParams::AddIgnoredActor() and AddIgnoredComponents().
Optimized FDynamicMeshEmitterData::GetParticleTransform() to avoid needless Quat->Rotator and Rotator->Matrix conversions.
Optimized USceneComponent::CalcNewComponentToWorld() to take a faster path when there is no parent.
Optimized allocations in UpdatePrimitiveAttachment.
Optimized character net location update and mesh interpolation to cause fewer transform updates, especially on the mesh.
Added Character::bClientCheckEncroachmentOnNetUpdate to control whether we care about checking for encroachment when we get a new network location.
Optimized character smoothing code to avoid SmoothClientPosition() calls once the target mesh offset has been reached.
New flag bNetworkSmoothingComplete indicates whether smoothing has reached the destination. This is set to false when a new network position is received.
Also fixes trying to smooth rotation towards identity rotation before receiving network updates.
Deprecated FNetworkPredictionData_Client_Character::CurrentSmoothTime in favor of saving last update time, to prevent needing to update time every tick (since we skip updates now).
Optimized CharacterMovementComponent mesh interpolation on clients to only perform one chain of transform updates when using linear smoothing, rather than separately rotating the capsule and then translating the mesh.
Optimized component registration to avoid useless DetachFromParent() for the same pending AttachParent during registration. Added missing UpdateOverlaps() when detaching from object simulating physics.
Optimized FTransform::Equals().
Check translation first as it's a simpler test and more likely to differ.
Scale3D test is now per-component rather than a dot product test versus tolerance.
Optimized particle systems to avoid useless detach/attach during registration when bAutoManageAttachment is enabled and the particle system auto-activates.
Optimized some low level checks used to support Object and Actor networking
Optimized UObject::IsNameStableForNetworking() to check cheap flags first before expensive IsDefaultSubObject().
Optimized UActorComponent::IsSupportedForNetworking() to check GetIsReplicated() before IsNameStableForNetworking(), and inlined GetIsReplicated().
Optimized usage of FHitResult during movement, and added functions to better control initialization of the struct.
Avoid initializing FHitResult in PrimitiveComponent::MoveComponentImpl when it's not used.
Added Init() functions to FHitResult and use them to avoid Construct + Copy in a few places.
Added ENoInit constructor for FHitResult.
Optimized usage of some collision profiles to use existing static FNames rather than names defined at the call sites.
Optimized VInterpNormalRotationTo() to use faster FQuat::RotateVector() rather than converting to matrix first.
Projectile uses faster FQuat code path when passing rotation to MoveComponent.
Remove duplicate AHUD:DrawText function that uses different co-ordinates
Removed a few allocations from the tick task manager.
Removed collision from DefaultPhysicsVolume. It doesn't have collision geometry but can show up in global lists of actors with collision enabled.
Removed misleading/incorrect duplicate signature comments from the FGameDelegates delegate declarations, replacing them with inline parameter names
Removed some branches from character movement ticks, conditionally call some virtual functions, and add a stat counter to UCharacterMovementComponent::SmoothCorrection.
Set sensible default parameters for APlayerController::ClientPlayCameraAnim and APlayerController::ClientPlayCameraShake
Simulated root motion in CharacterMovementComponent uses FScopedMovementUpdate for cheaper movement.
Smooth Z location during Character simulated mesh interpolation just like all other axes.
TActorIterator now properly filters out Actors in hidden levels the same as FActorIterator
UCharacterMovementComponent no longer replicates moves to the server if its character's Player is null, which can be the case if the local player has enabled the debug camera.
Prevents "no owning connection" warning spam for ServerMove RPCs.
Updated async trace handling to accept trace requests more widely. Avoids potential issues when poorly-timed requests would come in.
UPlayerInput::GetInvertAxisKey and InvertAxisKey fixed to work consistently with Mouse Sensitivity.
When clearing a PlayerController's spectator pawn, use regular pawn for attachment and auto-managed camera target if regular pawn has already been set up.
Localization
New: Added string formatting methods for internationalization metadata.
New: Added support for detecting the reading direction of text
This uses the ICU BiDi functionality (where available) to detect whether text is left-to-right, right-to-left, or mixed, and in the mixed case, can give you a breakdown of the direction of each sub-section of text.
Bugfix: Fixed a double FText history allocation in AsNumber, AsPercent, AsCurrency, AsDate, AsTime, AsDateTime, and Format
Added caching for LOCTEXT
Previously, each call to LOCTEXT would create a new FText instance, which involved several allocations and map look-ups. This change aims to allow repeated calls to LOCTEXT to return the same FText instance while also performing zero allocations as part of the look-up. In a synthetic test, this has been shown to yield a 6.5x increase in performance.
This has other side effects where LOCTEXT was being used in a Slate attribute, as it means the text layout can perform a fast pointer comparison (which will pass, as both will now point to the same instance), rather than a slower string comparison.
Blueprint pin property tool tips are no longer gathered for localization unless gathering of editor text is specified.
FText::AsMemory now takes a uint64 rather than a SIZE_T
This allows it to format 64-bit size values in 32-bit builds, which is needed to correctly display file and drive sizes.
Minimized FText allocations when generating text at runtime
Text that is generated at runtime (such as via FText::AsNumber) now allocates its string and history together in a single allocation.
Profiling shows that this almost negates the cost of the text history, without having to remove the text history (which is essential for FText serialization).
Some performance improvements for FText::Format (in Blueprints)
FFormatArgumentData now uses an FString (rather than an FText) as its ArgumentName. This avoids the extra cost associated with creating an FText instance.
FFormatTextArgument has been replaced with a UHT exposed version of FFormatArgumentData. This avoids an extra array conversion in UKismetTextLibrary::Format when using the format text node in Blueprints.
UK2Node_FormatText now stores its pin names (extracted from the format string) as FString rather than FText.
Some performance improvements for FText::Format.
FText::Format which takes an array of FFormatArgumentData no longer converts that into a temporary TMap.
FTextFormatHelper::Format no longer allocates an FString for the argument, and instead passes a lightweight FTextFormatHelper::FArgumentName.
Networking
New: Added IsDedicatedServerInstance() to UGameInstance. Returns true if running a dedicated server of any kind (PlayInEditor, Server exe, Editor as Server, etc).
New: Added "-notimeouts" commandline argument to prevent UNetDriver class from timing out net connections during development. Works with UPartyBeaconHost as well.
New: Added "PostRepNotifies()" event to Objects, called after any rep notifies may be triggered.
New: Added a lobby framework entirely using beacons. Supports a similar workflow to the AGameMode/AGameState/APlayerController/APlayerState actors to create a way for clients to connect and interact with a server without being fully committed to loading the server map.
New: Added an initial implementation of an InMemoryNetworkReplayStreaming module.
Unlike NullNetworkReplayStreaming and HttpNetworkReplayStreaming, this implementation doesn't rely on the disk or network, and as a result is generally much faster.
It is intended to be used for specific cases where a local, transient replay would be useful.
New: Added DestroyNetworkActorHandled function to overload special behavior in AActor::DestroyActor. APlayerControllers and UOnlineBeacons will mark the UNetConnection bPendingDestroy so that the actor will timeout and cleanup shortly.
New: Added new USE_SERVER_PERF_COUNTERS define to enable use of perf counters in networked related code.
New: Beacon types are set by their UObject class name rather than specified by developers. This will prevent accidental incompatibility with derived child classes.
New: Moved "use short connection timeout" feature into its own function. This is used by the net driver to determine when to move from UNetDriver::InitialConnectTimeout to UNetDriver::ConnectionTimeout. During normal gameplay this is when APlayerController has been replicated/acknowledged by the client. For beacons, it is when the connection has been opened by the server and the first server Remote Procedure Call (RPC) has been sent.
New: The NullNetworkReplayStreaming implementation can now play back live games. This is useful for testing with multiple instances of the game running on the same machine.
New: The replay streamer implementation module to use can now be overridden at runtime.
You can pass the name of the module to use into FNetworkReplayStreaming::GetFactory, or you can use the "ReplayStreamerOverride=" URL option. The URL option is useful when combined with the "DemoRec" URL option.
If neither of these overrides is provided, the implementation will fall back to the one defined by the "DefaultFactoryName" in the Engine configuration file, as before.
Bugfix: Fixed a bug which caused the incorrect IRepChangedPropertyTracker to be passed to the UActorComponent::PreReplication function during replay recording. The tracker is now correctly looked up in the demo net driver instead of the game net driver.
Bugfix: Fixed an issue that could cause the value of AWorldSettings::WorldGravityZ to not be applied on clients after it changed on the server.
Client beacons now properly use the "short connection timeout" feature which switches between UNetDriver InitialConnectTimeout and ConnectionTimeout values after the beacon is properly connected to the server. Additionally made sure to set beacon socket state to USOCK_Open at the proper time.
GetNetMode() now correctly returns NM_DedicatedServer instead of NM_Standalone for Actor's on a dedicated server if the netdriver has been disconnected.
Improved server log message for a failed RPC when the actor's level isn't ready on a client
LogNet message "Adding actor NetGUID" verbosity changed to VeryVerbose
Reduced incremental allocations in FClassNetCacheMgr::GetClassNetCache
Online
New: A join-in-progress user can now be associated to a specific replay by calling the INetworkReplayStreamer::AddUserToReplay function.
New: Add GetAuthType function to IOnlineIdentity that corresponds to account mapping on MCP (for example PSN accounts use "PSN")
New: Added a basic URLDecode implementation to the FGenericPlatformHttp class.
New: Added a new (currently optional) delegate to the end of the Online DestroySession call. This will be the preferred method for programmer initiated asynchronous calls to be checked for completion. Events will still be multicast delegates. A future engine change will include changes for more interfaces.
New: Added an "run exec command" endpoint to the perfcounter query port. "/execc=<cmd>" will execute any command. "-StatsPort=XXX" will enable this (and explicitly checks for messages from localhost only).
New: Added generic UrlDecode function for decoding a string that has been URL encoded.
New: Added GetPartyLeader() function to party beacon class for access to a party leader for a given unique id in an existing party.
New: Added IsLoaded function to online subsystem utils for determining the availability of specified online subsystem
New: Added LoadDefaultSubsystem and ReloadDefaultSubsystem functions to OnlineSubsystem (OSS). Used to reset OSS in Play In Editor (PIE) when changing login settings.
New: Added new accessor function GetGameInstance to OnlineSessionClient class
New: Added two new session search comparison operators NOT_IN and IN. Expects string of values of the form [value1;value2;value3]. Additionally added EXCLUDEUNIQUEIDS to exclude sessions with specific registered users. Format is [userid1;userid2]. Neither feature is guaranteed to be supported on all platforms.
New: BuildPatchServices now has new retry logic for downloads with access to download health information
New: BuildPatchServices: Ability to remove a custom field from a manifest
New: BuildPatchServices: Chunk recognition can now verify a match using just SHA1 rather than comparing actual chunk data
New: BuildPatchServices: Tagged installation support. BuildPatchTool can now take information in the file attributes data that optionally tags certain files with custom keywords. These keywords can be used when creating an installer in order to filter the list of files that will get downloaded and installed.
New: Custom events can be added to replays! These events contain a group, metadata, and data. The group is used when enumerating events, metadata will eventually be used to filter within a group, and the data contains an extra information relevant to the specific event. See the DemoNetDriver AddEvent and EnumerateEvents functions for more details.
New: FStructSerializer: Values can be filtered by a predicate to control which properties are serialized
New: ImageWrapper now uses the file header to auto-detect the image format
New: OnlineSubsystem session interface DestroySession call now takes a completion delegate parameter that will only fire for that call. This is in addition to any delegates specified in the corresponding AddDelegate call. Future refactor is planned to add this kind of completion delegate to all OnlineSubsystem calls and deprecate the Add/ClearDelegate paradigm where possible.
New: Speed up online subsystem accessors when not in Development or Play In Editor builds
New: SWebBrowser: Added support for returning arrays from UFunctions to javascript code running inside browser widgets
New: The names for the different online subsystems have been moved into their own file, OnlineSubsystemNames.h, so they can be referenced even if their corresponding subsystems aren't being used.
New: UParty::Init, UParty::CreatePersistentParty, and UParty::LeavePersistentParty are now virtual.
New: Updates to the PerfCounter module to improve a very basic http endpoint that allows a GET verb and simple "exec" execution on the local ip.
New: Use App Id terminology instead of Client Id.
New: WebBrowser cleanup and fixes
WebBrowser now caches content and persists cookies on disk when requested by server
WebBrowser will include the engine version and product name in the UserAgent http request header sent to the server
Using the WebBrowser module will no longer change the name of the Game thread when initialized
New: WebBrowser enhancements and fixes
Created a minimal SWebBrowserView widget for showing a web browser without any additional UI
Improved rendering performance for web pages containing a lot of animation
IWebBrowserWindow has a new method to query the last (CEF) load error code
SSL certificate errors now get reported as load errors instead of being silently ignored
Added IWebBrowser::GetSource to access the source text of the currently loaded page
A few multithreading issues have been fixed by ensuring that most callbacks and events are always invoked on the game thread
New: WebBrowser updated CEF to branch 2357, commit hash 47e6d4bf84444eb6cb4d4509231a8c9ee878a584
New: WebBrowser: Add a way to delete cookies from code.
New: WebBrowser: Added possibility of customizing how to show browser dialogs.
New: WebBrowser: Allow passing TMap<FString,T> as arguments to FWebBrowserJSFunction objects
New: WebBrowser: Functions exposed to JavaScript can now take a FWebJSResponse argument for passing results to the caller on the JS side. Allowing for raising error conditions and implementing asynchronous results.
Bugfix: Fixed a bug that would prevent HTTP retries from working. TimeSinceLastResponse was not getting reset with ElapsedTime so once a request timed out it would always time out N more times until the retry sys gives up
Bugfix: Fixed a crash that could occur in OnlineSubsystemNull's implementation of the IOnlineSession::CancelFindSessions() function.
Bugfix: Fixed a possible string buffer overflow issue in Steam matchmaking code when processing advertised keys.
Bugfix: Fixed many crashes and inefficiencies with the party system that occur after the online subsystem enters a disconnected state.
Bugfix: Fixed party framework to make sure that only one UObject for a party member is created between "joined" and "data received" delegates firing. Fixes possible race condition that would create two instead.
Bugfix: Fixed possible buffer overflow issue in Steam implementation when using FCString::Strcpy (replaced with FCString::Strncpy)
Bugfix: Fixed SWebBrowserView destructor to unbind its own delegate handlers and not event handlers owned by other objects
BuildPatchServices: Download code for file protocols now use Thread Pool to load the files rather than one at a time.
Moved all platform http headers into the http module and out of core. Wasn't possible to export any of the platform implementations because of the improper mix of CORE_API and HTTP_API declarations.
Online subsystem delegate handles are cleared with passed to any of the clear delegate functions.
Online subsystem delegate handles are now invalidated inside the ClearX_Handle calls.
Party framework added a new error code for UnknownParty and properly uses it in the various API callbacks.
test bResult instead of bSucceeded in GenerateExchangeCode_HttpRequestComplete
Voice interface can run while on dedicated server but skips various calls that are only needed on client. Updates to generic voice implementation initialization to improve warnings/logging.
WebBroser: Passing UStruct parameters to FWebJSFunction objects will copy them by value instead of (potentially dangling) pointers
WebBrowser: Patches to CEF
Remove confusing error about renderer not being sandboxed, as that is always expected.
Work around a crash caused by Lavasoft WebCompanion on 64 bit Windows 8 or 10
Other
New: Added bDrawShadow option to HUD DebugText so we can set shadow per debug line instead of it only being a per-HUD setting
New: Added pre-compiled versions of Developer modules for the Editor so that other projects can make use of them
Paper2D
Removed an unnecessary per-world tick function when Paper2D is enabled
Physics
New: Add a special IgnoreMask set of bits to help refine scene queries. Helpful for team based filtering.
New: Add setting to turn CCD off for the entire scene.
New: Added project setting to force CCD off. Can save about 0.5ms
New: Added the ability to turn on release physx libs for all configurations. Look for bUseShippingPhysXLibraries
New: Added the ability to use CHECKED physx libs. Look for bUseCheckedPhysXLibraries
New: Added vs2015 physx/apex solutions and projects for supported platforms
New: Allow skeletal mesh components that do not rely on physics results to delay their animation end tick group
New: Expose flag for switching between physx dispatcher and UE4 task graph
New: Rename pre cloth tick function to be PostPhysicsTickFunction.
New: Symbol files for PhysX are now staged when packaging a game, if available.
Bugfix: Fixed crash when incorrect complex material is given to a welded shape.
Bugfix: Fixed FrameTimeSmoothingFactor not getting initialized correctly.
Added NaN handling and reporting within our PhysX collision queries and result conversions.
NaN or Infinite results log an error (through logOrEnsureNanError) and are removed from collision results.
Allow DestructibleActor to be subclassed outside Engine module
Avoid unnecessary overhead in GatherApexStats when STATS=0 (Shipping or Test builds)
Platforms
New: Allow external access to runtime modifications to OpenGL shaders
New: UnrealPak now supports padding after each file to support some chunked binary diffing systems better.
New: Updated Twitch SDK support to 6.21
Twitch support is still under development and not fully supported yet.
Also, refactored the TwitchLiveStreaming plugin so that third party files and binaries are part of the plugin itself
Added clang 3.7.0 -Wshift-negative-value ignore in JpegImageWrapper.cpp
<h5 id="androidAndroid
New: The shader platform SP_OPENGL_ES2 has been renamed to SP_OPENGL_ES2_ANDROID in the C++ source code to better reflect that it is used only on Android.
New: Visual Studio project generation was modified to add support for Nsight Tegra.
Reworked Android In App Purchase Code for Google play store to fit with the latest Google doc.
<h5 id="macMac
New: Added PauseBatching to pause and ResumeBatching to resume the ShaderCache's shader precompilation as well as NumShaderPrecompilesRemaining which returns how many shaders remain to be processed.
Games can use these functions to suspend precompilation temporarily when the performance impact would be inappropriate and display progress when active.
New: Added support for AddressSanitizer in UE4 via the Xcode project settings.
When AddressSanitizer is enabled in the target's Scheme in Xcode the build will compile and link with the AddressSanitizer libraries to instrument all memory allocations.
This requires a full rebuild of all source files and will also disable compiler optimizations to prevent reporting of errors caused by clang erroneously optimizing away the AddressSanitizer instrumentation.
The UE4_FORCE_MALLOC_ANSI environment variable must be enabled separately for AddressSanitizer to catch all possible memory errors.
New: Added support for calling FOnGetContent in FSlateMacMenu
New: Added support for ShaderPipeline's to the ShaderCache to allow pre-linking of OpenGL shaders into programs prior to rendering.
This ensures that all shaders and programs/pipelines are fully constructed prior to entering gameplay without needing to play through the game first, which will significantly reduce the number and severity of runtime hitching due to shaders.
Due to the nature of shader/program/pipeline construction this specific aspect of the ShaderCache can only function on OpenGL at present.
New: Added the ShaderCacheTool command-line program which can merge shader cache files generated on different machines to make it easier for developers to ship a populated cache with their games.
New: Changed XcodeSourceCodeAccessor to use xcode-select to find Xcode app
New: Improved the way dSYMs are generated on Mac, so that we don't move them around but rather create them at the desired destination. Cleaned up the output from dSYM generation as well.
New: Rearranged link command building in MacToolChain to not require third party libs to have "lib" prefix
Bugfix: Fixed .uproject detection in the Xcode project generator
Bugfix: Fixed product name for DebugGame Editor configuration in Xcode project
Added implementation of FPlatformProcess::UserTempDir()
Bind the index buffer as vertex attribute 0 when performing an attribute-less draw call to work around incorrect gl_VertexID values on Nvidia drivers rather than using different index buffers.
Detect when UE4 Mac is running under apitrace and fallback to using NSView rather than CoreAnimation to display so that tracing OpenGL works.
Improved error handling in Mac media player
Increment frame number call Begin/EndFrame during loading screen movie playback so that RHI implementations can manage their internal resources correctly.
Make UE4 on Mac warn about attempts to free memory with the MallocBinned allocator that wasn't allocated from it to avoid crashing on mismatched allocations and make such errors debuggable.
Retain flow-control statements in Mac OpenGL at the request of Apple/vendors as they feel it should be faster.
Update Distcc/DMUCS integration which requires explicit specification of the correct DistProp server for DMUCS while the number of build hosts can be supplied via Xcode on OS X.
When compiling shaders to GLSL append the source shader name when debug info (r.Shaders.KeepDebugInfo) is enabled to make shaders easier to debug.
<h5 id="playstation4Playstation 4
New: Added platform interforce for SHA256 computation and support for /download0 as 'GamePeristentDownloadDir' on PS4.
New: Added PS4 support for starting/stopping Razor profiler
Use SCOPE_PROFILER_INCLUDER and SCOPE_PROFILER_EXCLUDER for this
Note: Currently PS4 has no API for pausing and resuming Razor, so profling will be stopped after your scope ends
New: Added r.PS4DumpExportStats 1 to dump in-game shader interpolator stats; requires r.PS4StripExtraShaderBinaryData=0
New: Added some extra logging to FOnlineAsyncTaskPS4SessionCreate::DoWork() to help diagnose NP session creation errors.
New: Added support for compressed vertex shader outputs using r.PS4PackParameters and related macros
New: CPU memory prefetch function FPlatformMisc::Prefetch implemented for PS4.
New: Fetch shaders now live in Garlic memory for better performance.
New: FindSessionById is now implemented on PS4, so the session info for a specific session can be retrieved.
New: Small optimization to PS4 math functions in FPS4PlatformMath.
New: Updating the changeable session data on NP sessions is now possible by calling FOnlineSessionPS4::UpdateSession.
Bugfix: Fixed a crash during GPU allocator destruction.
Bugfix: Fixed stackwalking on PS4 when in pre-main static initialization.
Added extra GPU pools to reduce memory waste on PS4.
Decreased command buffer allocator size to reduce parallel rendering memory waste.
Did minor optimizations to the PS4 RHI and drawlists.
Leaving a room now uses the async task queue.
Also, some incorrect return values for FOnlineSessionPS4::DestroySession have been fixed.
Removed the OnConnectionStatusChanged callback in PS4 session subsystem since it was empty.
<h5 id="html5HTML5
Bugfix: Fixed windows centric path separator and user's "home" path to support osx too
Bugfix: libwebsocket for VS 2015 fixed to be functional again
Removed the read only file attribute before copy during HTML5 packaging
Removed deprecated function block that prevents cooking all maps during HTML5 packaging
<h5 id="windowsWindows
Bugfix: Fix to allow launching of external links to work with older versions of Internet Explorer 8.
Programming
New: Added a function to compare how closely two gameplay tags match. Calling GameplayTagsMatchDepth will return an integer representing how many terms in the tags matched. Higher values match more closely than lower values. This may be used to help find the best match when matches are allowed to include parent tags.
New: Compile times: Unity builds are now more deterministic
Before creating unity blobs, we now sort all full file paths alphabetically. This allows for better build system determinism across computers
New: GitHub users can now exclude binary files from download by adding a .gitdepsignore file in the root of the repository. Syntax is the same as a normal .gitignore file.
New: Included UE4.natvis file into the Visual Studio Engine Project to allow for easier debugging
New: Merged most of the base pass static mesh draw lists into a single draw list, by using a common set of parameters for all light map policies.
The new parameters are regrouped into a uniform buffer.
New: Runtime dependencies may now be flagged as optional from .build.cs files, so they won't cause an error if missing when trying to package.
New: ShaderCompileWorker is automatically built as a dependency of the editor. To disable this behavior, set bEditorDependsOnShaderCompileWorker to false in the UEBuildConfiguration setting of your BuildConfiguration.xml file.
New: The editor will no longer display an error message when compiling the project on startup if the -unattended switch is present.
New: Unreal Build Tool: Output total number of actions to execute when building
New: UnrealBuildTool can now be used to check that a single source file compiles. To use, set up a key binding from your IDE to launch UnrealBuildTool with the a command line of the format: '<ProjectName> <Platform> <Configuration> -singlefile=<FileName>'.
New: UnrealVS now supported on Windows 10 without .NET 4.5 or older versions of the framework.
New: Using the -precompile option with UnrealBuildTool will now build all engine modules. Overriding the GetModulesToPrecompile() function from a game's target rules is no longer necessary, and has been deprecated.
Bugfix: Fixed issue with multiple projects sharing a file in the Engine's Intermediate directory
Bugfix: Fixed performance automation tests unavailable in Test build configurations
Automation features are no longer compiled out in Test configuration at runtime (except in Shipping).
Also, enabled automation tests to be triggered from in-game console in non-editor builds (automation controller is enabled)
Bugfix: Fixed Unreal Header Tool being compiled with older compiler (VS 2013) when actually targeting Visual Studio 2015Compile times
Bugfix: Fixed game plugin modules not able to use engine shared PCHs
This change greatly improves compile times for game plugin modules
Game modules never depend on the game itself, so there was no reason not to use shared PCHs by default
Cooking from the editor will only compile UAT scripts for the current project, excluding other projects under the same engine root.
Unreal Build Tool: Fixed XGE console output visible even when XGE is not available
Updated the UnrealBuildTool project file to prevent rule set warnings.
Rendering
New: Added a path so that texture streaming can avoid flushing the RHI thread.
New: Added -forcerhibypass command line to skip using RHI command list
New: Added support for built-in samplers (not needing a shader parameter) on platforms that support it
New: Added support for running the platform shader compiler for one usf file off the dumped usf using ShaderCompileWorker with -directcompile
New: End of frame updates now optionally can do the gamethread updates while we are doing parallel updates. The relevant cvars are AllowAsyncRenderThreadUpdates and AllowAsyncRenderThreadUpdatesDuringGamethreadUpdates. The latter is disabled by default.
New: Exposed GetVectorParameterByName and GetScalarParameterByName on UMaterialParameterCollection as DLL exported methods
New: Reworked task graph in many, many ways. Most of the changes are really only enabled for the PS4 at this point, but will over time migrate to all platforms. After that, there is much cleanup to do.
Bugfix: Eliminated a fatal error for FD3D11DynamicRHI::RHIGetAvailableResolutions in the case of running over remote desktop.
Bugfix: Fixed a few places that would assert in single threaded rendering. And fixed separate translucency without a render thread but with parallel rendering.
Bugfix: Fixed a messed up format specifier in the "Built static mesh" log message
Bugfix: Fixed an assert in debug console and fixed a crash on disabling deferred contexts.
Bugfix: Fixed async RHI thread dispatch and enabled it on one of our games. Added passthrough functions for several RHI create functions and implemented them as non-stalling on the PS4.
Bugfix: Fixed crash in FDeferredShadingSceneRenderer::ShouldPrepareDistanceFields() due to null access violation (Scene->FXSystem was null). Also fixed possible crashes if the scene itself was null or if the Views array was empty.
Bugfix: Fixed crash in MediaTexture on dedicated servers during PostLoad. Shouldn't be initialized on servers at all.
Bugfix: Fixed end of frame updates not being sent for reflection captures.
Bugfix: Fixed lazy uniform buffer updates to actually be effective.
Bugfix: Fixed live streaming bug with creating RHI resource on game thread (instead of render thread)
Bugfix: Fixed memory leak in the view state.
Bugfix: Fixed rare bug with bogus preshadows ending up with "cull none". Added checks to make sure that never happens.
Bugfix: Fixed separate translucency in parallel, but without a rendering thread and added some protection to UnresolvedTargets.
Bugfix: Fixed SpeedTree using an uninitialized uniform buffer.
Added a more actionable error message to a check() failure for a FStaticLightingMesh that has already been processed when building lighting in a map that contains HLOD
Allow DirectionalLightComponent to be subclassed outside Engine module
Allow WindDirectionalSourceComponent to be subclassed outside Engine module.
CalcTextureMipMapSize3D and CalcTextureMipMapSize now round up instead of down so that they will no longer return zero size values for small texture sizes.
Changed the RHI thread dispatch tasks to be run on the RHI thread when we are doing async dispatch.
Disabled parallel occlusion cull and added option for hipri tasks for parallel occlusion cull.
Dynamically set stream source to avoid creating a separate drawing policy for each static mesh with vertex colors.
Made the api consistent for FShaderResource::Get*Shader() methods
Moved shader working dir to the OS temp directory on windows to avoid problems with this being in dropbox or other shared folders.
New option for cmdlist balancing which is faster and doesn't take task thread resources.
We approximate the balance from the last frame.
Removed fencing on volatile and write only vertex and index buffer locks.
<h5 id="fxFX
New: Added UParticleSystem::IsLooping to indicate if any enabled emitters will loop forever
It is currently calculated during PostLoad() and BuildEmitters(), not serialized
Bugfix: Fixed crash with clipped subuvs.
<h5 id="optimizationsOptimizations
New: Added support for FShaderPipeline and removing unused interpolators in a pipeline
New: Increased max threads for task graph and added a way to reduce task threads at runtime for testing the optimal number. Added ability to change thread affinities on the fly so they can be tuned. Added a way to track excessive allocation at runtime without using the memory profiler: LogGameThreadMallocChurn.Enable. Fixed excessive malloc calls throughout engine. Reworked parallel queue ticks. Fixed GHitchThresholdCVar. Optimized gameplaytags.
New: Optimized component movements by avoiding unnecesary virtual OnUpdateTransform calls.
New: Velocity and Depth passes are now using shaders that do not calculate/export unused interpolators
Optimize speed tree stuff in FLocalVertexFactory::SetMesh.
UI
Bugfix: Fixed buffer overwrite caused by strcpy ignoring the length argument.
Added guards to prevent GC running when FLegacySlateFontInfoCache is being used by a non-game thread
Cut down on allocations coming from text blocks in UMG.
FCharacterList now returns its FCharacterEntry by value
This means that we can't accidentally hold a reference to memory that may become invalid if the array or maps that contain the FCharacterEntry are re-allocated.
Stopped the Slate texture atlas being updated by the start-up movie thread
This could lead to a race-condition when loading your games style-set
<h5 id="slateSlate
New: Added option "Allow Context Menu" to enable/disable context menu for SEditableText, SEditableTextBox, SMultiLineEditableText, SMultilineEditableTextBox.
This is also exposed via UMG and defaults to True.
Bugfix: Fixed a crash when deleting a FSlateImageRun that isn't set to use a dynamic brush
Bugfix: Fixed a memory leak in FSlateBatchData that can occur when a batch has no vertex or index data
Ensured user interface assets referenced by UUserInterfaceSettings can be considered part of the disregard for gc root set in a cooked game
Reduced unnecessary memory allocations in various Slate methods
Removed SLATE_TEXT_ATTRIBUTE and SLATE_TEXT_ARGUMENT
SCheckBox now overrides IsInteractable() and returns true if the widget is enabled and supports keyboard focus.
When an SToolTip::SetContentWidget is called, the ToolTipContent widget's font should now correctly use the font passed into the constructor.
Upgrade Notes
Animation
Multi-threaded Animation Optimization
The change to allow more animation work to run in worker threads has required deprecating a lot of API calls in the animation system. The main driver behind this was to control data access more tightly across threads. To this end, much anim-graph-accessed data has been moved from UAnimInstance to a new struct - FAnimInstanceProxy. This proxy structure is where the meat of the data on UAnimInstance is found.
Here is an example of how one would build a custom native AnimInstance class using the new proxy, granting Blueprint access to its innards and avoiding copies of shared data between the proxy and the instance:
USTRUCT()
struct FExampleAnimInstanceProxy : public FAnimInstanceProxy
GENERATED_BODY()FExampleAnimInstanceProxy(): FAnimInstanceProxy(){}FExampleAnimInstanceProxy(UAnimInstance* Instance);virtual void Update(float DeltaSeconds) override{ // Update internal variables MovementAngle += 1.0f * DeltaSeconds; HorizontalSpeed = FMath::Max(0.0f, HorizontalSpeed - DeltaSeconds);}
public:
UPROPERTY(Transient, BlueprintReadWrite, EditAnywhere, Category = "Example")float MovementAngle;UPROPERTY(Transient, BlueprintReadWrite, EditAnywhere, Category = "Example")float HorizontalSpeed;
UCLASS(Transient, Blueprintable)
class UExampleAnimInstance : public UAnimInstance
GENERATED_UCLASS_BODY()
private:
// The AllowPrivateAccess meta flag will allow this to be exposed to Blueprint,// but only to graphs internal to this class.UPROPERTY(Transient, BlueprintReadOnly, Category = "Example", meta = (AllowPrivateAccess = "true"))FExampleAnimInstanceProxy Proxy;virtual FAnimInstanceProxy* CreateAnimInstanceProxy() override{ // override this to just return the proxy on this instance return Proxy;}virtual void DestroyAnimInstanceProxy(FAnimInstanceProxy* InProxy) override{}friend struct FExampleAnimInstanceProxy;
The following functions and variables of the UAnimInstance class are now deprecated:
UngroupedActivePlayerArrays, SyncGroupArrays, VertexAnims, MakeSequenceTickRecord, MakeBlendSpaceTickRecord, SequenceAdvanceImmediate, BlendSpaceAdvanceImmediate, CreateUninitializedTickRecord, GetSlotWeight, SlotEvaluatePose, ReinitializeSlotNodes, RegisterSlotNodeWithAnimInstance, UpdateSlotNodeWeight, ClearSlotNodeWeights, UpdateSlotRootMotionWeight, MontageEvaluationData, GetNodeFromIndexUntyped, GetCheckedNodeFromIndexUntyped, GetCheckedNodeFromIndex, GetNodeFromIndex, RootNode, EvaluateAnimation, NativeEvaluateAnimation, RequiredBones, AnimNotifies, GetSyncGroupReadIndex, GetSyncGroupWriteIndex, TickSyncGroupWriteIndex, MorphTargetCurves, MaterialParameterCurves, InitializationCounter, CachedBonesCounter, UpdateCounter, EvaluationCounter, SlotNodeInitializationCounter, bBoneCachesInvalidated, AddAnimNotifies, PassesFiltering, PassesChanceOfTriggering, AddAnimNotifyFromGeneratedClass, UpdateAnimationNode
Direct anim Blueprint member variable access can be enabled and disabled using "Optimize Anim Blueprint Member Variable Access" in settings.
Previous Blend In Time and Blend Out Time should recover to BlendIn.BlendTime and BlendOut.BlendTime.
This might cause some issue if you modified those nodes.
This change can cause animations to be resaved. Please make sure you resave those animations, otherwise, it will cause them to recompress everytime loading.
You should see the warning message coming up in the editor
Automation
All automation tests now require Context and Filter flags; omission will result in compile failures.
Blueprints
Bugfix: Fixed several blueprint nodes that did not properly handle Enum redirectors
If you would like your Blueprint to execute development-only function calls at runtime in a cooked build, there is a new option in the Project Settings in the "Cooker" section called "Compile Blueprints in Development Mode" that can be toggled on.
Note that by default, these functions will no longer execute at runtime in a cooked build, so it will be necessary to enable this option for your project if you would like to continue to see log output from Blueprints in your cooked builds.
If your game explicitly manages t.MaxFPS and also uses UGameUserSettings, please be aware that UGameUserSettings::ApplySettings will now update t.MaxFPS based on UGameUserSettings::FrameRateLimit
Core
You now put the settings in a centralized file, instead of having to place the file in the same content path the asset that has PerObjectConfig settings.
PostSerialize is now correctly called on DataTables after loading from disk
t.HitchThreshold (the time in seconds to be considered a hitch) has been renamed to t.HitchFrameTimeThreshold (in miliseconds) to be consistent with other performance target cvars
The formatting of the "obj list" command has changed; external parsers for .memreport or log files that relied on the old formatting will need to be updated
Use of IDelegateInstance::GetUObject can be replaced with a GetUObject call directly on the delegate.
Use of IDelegateInstance::GetFunctionName can be replaced with a TryGetBoundFunctionName call directly on the delegate in non-shipping builds only.
Other uses of IDelegateInstance should be rewritten to not depend on the delegate state.
Your UCLASSes may stop compiling if you have accidentally relied on a public (or protected) access specifier coming from another class in the same file. Please make sure to explicitly specify the desired access in your class.
Editor and Tools
In Construction Scripts, it can be fairly customary to set all the various spline mesh parameters (static mesh, start/end, tangents, roll, up vector, scale) one by one. Electing to only update the static mesh on the final call will provide a worthwhile performance gain.
See SESSION console command for details.
Spline Mesh Component now has an extra optional parameter on any Blueprint calls which set the spline mesh parameters in some way, allowing the user to state whether the collision / mesh should be updated afterwards.
In Construction Scripts, it can be fairly customary to set all the various spline mesh parameters (static mesh, start/end, tangents, roll, up vector, scale) one by one. Electing to only update the static mesh on the final call will provide a worthwhile performance gain.
The tab spawners for the widget reflector and atlas visualizers are now registered automatically when the SlateReflector module is loaded. These are now the only way to create these windows.
If you were doing this because you were placing it into your own window, you can take advantage of the fact that the widget reflector tab spawner is always available, and use the global tab manager to create your window and place a spawned widget reflector tab inside it - SummonPerfTestSuite in SPerfSuite.cpp provides an example of this.
If you were doing this in the handler of your own widget reflector tab spawner, you can either just use the standard widget reflector tab spawner instead (you need to load the SlateReflector module once, and then "WidgetReflector" will be available to spawn via the global tab manager), or you can just use the DisplayWidgetReflector function of ISlateReflectorModule (which will internally do the same thing).
To use this feature select multiple targets within the Project Launcher, or from the command line separate each target device with a '+'.
Gameplay Framework
If you make use of the OnUpdateTransform virtual on USceneComponent, you now need to makes sure bWantsOnUpdateTransform is set true.
Localization
If any localization namespaces contain a comma in their name, existing PO files should be edited so that any msgctxt refering to that namespace prepends a backslash before the comma.
Translations for dialogue wave spoken text in localization archives should be moved into the root localization namespace from the "Dialogue" localization namespace.
Networking
Beacon types are set by their UObject class name rather than specified by developers. This will prevent accidental incompatibility with derived child classes.
After specifying the ClientBeaconActorClass in the child class, set the BeaconTypeName equal to ClientBeaconActorClass->GetName() and remove any previous implementation of a "beacon name" from the code.
Online
Implement the OnShowDialog and OnDismissAllDialogs events to get callbacks when the browser want to pop up or hide dialogs
The SWebBrowserView widget can be used as a near drop-in replacement for SWebBrowser in cases where ShowControls, ShowAddressBar and ShowInitialThrobber were set to false. Swap out the class name and remove these options from the construction.
Other
Following this change, your Editor and projects will have default values for new privacy settings. To change these, go to the following settings in the Editor:
Editor Settings -> Privacy -> Send Usage Data (defaults to True)
Project Settings -> End User Settings -> Send Anonymous Usage Data To Epic (defaults to True)
Physics
PhysicsThrusterComponent.h is no longer included by default in Engine.h
Platforms
Existing profiles should be moved to the new location automatically when UFE launches.
Playstation 4
PS4 has been updated to SDK 3.008.201
SDK 2.5 is no longer supported. Projects on 4.11 will need to upgrade to SDK 3.0
More memory can now be given to the GPU heap.
Xbox One
The November 2015 XDK represents a significant change in XDK layout and APIs.
Using an XDK version older than November 2015 with this version of the engine will require significant code changes.
Manifest generation will not function with the original November 2015 XDK. Please use at least QFE 1 with this release.
Programming
The XGE build hang was fixed in an update to the UCRT. It is recommended to install the UCRT update to fix the issue at it's source.
This update is available at https://www.microsoft.com/en-us/download/details.aspxid=50410.
If you use EMouseCaptureMode::Type directly you'll need to convert them to EMouseCaptureMode.
Rendering
Affect the look, content retweak might be needed but the new way provides more control and quality
Can cause a lot of texture to be recooked
Fixes minor colorshift on object borders, more visible with large radius, as this changes the look retweaking might be needed
Look change is possible, might have to change content
Some texture might look a bit sharper and adjusting the settings could be considered
Lighting
This may show shadow acne from movable lights more in extreme cases.
Postprocessing
Look change might need retweaking of the materials
Optimizations
If you derive from USceneComponent and want the virtual function OnUpdateTransform to be called, you now need to make sure the bWantsOnUpdateTransform flag is enabled. This is true by default, but disabled on some classes (e.g. particle components).
UI
The text layout now requires some extra context to handle text shaping. See FSlateTextRun for an example of how these API changes affect how you deal with text within your custom run types.
IRun::Measure and IRun::GetKerning now take a FRunTextContext parameter.
IRun::CreateBlock now takes a FLayoutBlockTextContext parameter.
Slate
Use SLATE_ATTRIBUTE and SLATE_ARGUMENT with the FText type instead of SLATE_TEXT_ATTRIBUTE and SLATE_TEXT_ARGUMENT
C++ API Changes
The shader platform SP_OPENGL_ES2 has been renamed to SP_OPENGL_ES2_ANDROID in the C++ source code to better reflect that it is used only on Android.
Unnecessary AI navigation-related headers has been removed from Engine.h. You may need to manually include headers of navigation classes now.
USCS_Node::ChildNodes is now a private member. Manipulation must be performed via accessor functions. Direct reference of USCS_Node::ChildNodes is now prohibited. Modify code to use accessor functions exposed in USCS_Node instead.
Removed debug/show rendering features on shipping I did the first part, lock some showflags to be 0 or 1 in SHIPPING. Some code might rely on that - consider not using showflags e.g. PostProcessSettings or change the line in ShowFlags.inl
We now use App Id terminology instead of Client Id. Replaced all ClientId usage with AppId.
UActorComponent::OnComponentDestroyed now takes a boolean parameter that indicates whether the entire Actor that owns the component is being destroyed at once or if the component is being destroyed independently. This can be used to avoid expensive operations like individually detaching scene components for an entire hierarchy that is being destroyed at once.
Unreal Build Tool: Using the -precompile option with UnrealBuildTool will now build all engine modules. Overriding the GetModulesToPrecompile() function from a game's target rules is no longer necessary, and has been deprecated.
Refactored automated test flags
Added Disabled flag to disable tests without commenting-out or deleting code.
Replaced Smoke Test button in Automation Front End with a Filters dropdown.
Test configurations do not compile out Automation features (except in Shipping mode).
Automation tests can be triggered from in-game console in non-editor builds (automation controller is enabled).
Srialization: Exposed entire serializer state in backend API. See the documentation in IStructSerializerBackend and the changes in FJsonStructSerializerBackend and WebJSStructSerializerBackend for details.
Media: Changed UMediaPlayer.IsStopped to .IsReady. Change usages of IsStopped() to !IsReady()
Analytics-related settings changes:
Deprecated UEditorSettings::bEditorAnalyticsEnabled in General (advanced) Editor Settings. Use UAnalyticsPrivacySettings::bSendUsageData (see AreEditorAnalyticsEnabled()).
Deprecated UEngine::bHardwareSurveyEnabled config value. Use UEndUserSettings::bSendAnonymousUsageDataToEpic (see AreGameAnalyticsEnabled()).
The ENGINE_VERSION define has been removed, and replaced with references to FEngineVersion::Current(). The BUILT_FROM_CHANGELIST define is still available where required.
Existing overrides of the virtual OnComponentDestroyed must change their signature to accept the boolean parameter and pass it along to the Super::OnComponentDestroyed.
Added new RHITransitionResources API for adding explicit GPU barriers for APIs which require them.
The tabbed layout within the widget reflector has made it impossible to create the widget reflector unless spawned via a tab manager. To this end, the following functions have been removed from ISlateReflectorModule:
GetWidgetReflector
GetAtlasVisualizer
GetTextureAtlasVisualizer
GetFontAtlasVisualizer
New option to reduce the number of render targets updated in the main render pass of opaque materials.
It can be enabled by setting "r.SelectiveBasePassOutputs=1" in the engine ini file.
This affects the following render targets : custom data, preshadow factors and velocity buffer.
Because text shaping requires some extra context, there have been some API changes:
IRun::Measure and IRun::GetKerning now take a FRunTextContext parameter.
IRun::CreateBlock now takes a FLayoutBlockTextContext parameter.
The TargetRules.GetModulesToPrecompile() has been deprecated. Using the -precompile argument with UnrealBuildTool will now precompile all compatible engine modules.
ChildActors now inherit their visibility from the owning component and actor visibility
AActor::ParentComponentActor has been deprecated and made private. Use GetParentComponent() or IsChildActor() to reach the same information.
Renamed automation test flags to remove ATF_ prefix
Split ATF_Game flag into ClientContext and ServerContext flags
Removed action option flags.
Replaced EAutomationTestType flags with filter flags in EAutomationTestFlags.
Added ability to automatically generate mip-maps for a RenderTarget2D resource.
Media: Simplified media event related API
IMediaPlayer.OnClosed, .OnEndReached, OnOpened, . OnOpenFailed, and .OnTracksChanged have been replaced with .OnMediaEvent that provides a value of the new EMediaEvent enumeration type.
Most of the keying logic has been moved from individual tracks and sections to a new base class called FKeyframeTrackEditor.
Custom FPropertyTrackEditors have a few new abstract methods to implement which are documented in the header.
Custom UMovieSceneSections must implement the IKeyframeSection which is documented in it's header.
Moved AttachmentReplication update out of SceneComponent and to ActorReplication. It only needs to be done on the network authority and only for the root component, and replication updates is a better place to check this.
AActor::AttachmentReplication is now private. This is filled in via GatherCurrentMovement() when the RootComponent has an AttachParent.
This was made private because too many people were trying to update this struct to try to change attachment state, only to have those changes overwritten during replication. It is simply used to replicate attachment state, and attachment should be changed the usual way through the component and actor functions.
Added a read-only accessor, GetAttachmentReplication().
Optimized FCollisionQueryParams::AddIgnoredActor() and AddIgnoredComponents().
FCollisionQueryParams::IgnoreComponents is now private, use AddIgnoredComponent() and GetIgnoredComponents() instead.
This enabled an optimization to make the components list unique only once on-demand in GetIgnoredComponents(), rather each time a component is added.
Optimization: Inlined ACharacter methods: GetMesh(), GetCharacterMovement(), GetCapsuleComponent(), GetArrowComponent().
ACharacter members MeshComponent, CharacterMovement, CapsuleComponent, and ArrowComponent are now private. They have been marked with DEPRECATED_FORGAME for a few releases now.
Please use the GetMesh(), GetCharacterMovement(), GetCapsuleComponent(), GetArrowComponent() accessors instead.
Optimized character net location update and mesh interpolation to cause fewer transform updates, especially on the mesh.
Added Character::bClientCheckEncroachmentOnNetUpdate to control whether we care about checking for encroachment when we get a new network location.
Character::UpdateSimulatedPosition() has been deprecated in favor of OnUpdateSimulatedPosition(), and now occurs after SmoothCorrection(). It is no longer responsible for updating the transform.
UCharacterMovement::SmoothCorrection() is now responsible for updating the capsule to the new location/rotation.
SmoothCorrection() no longer moves the character mesh at all (which is the same net result as before since it used to just undo the rotation change from the server).
Viewports can now use both pre-multiplied and non-pre-multiplied alpha blending
SViewport now has an PreMultipliedAlpha argument (default true), which can control whether to use pre-multiplied alpha when blending is enabled (blending is disabled by default).
Note: This is a change in behavior from 4.10, as non-pre-multiplied alpha blending used to be the default.
FSlateDrawElement API cleanup:
FSlateDrawElement::MakeGradient no longer takes a bInGammaCorrect bool, instead pass ESlateDrawEffect::NoGamma as part of InDrawEffects to disable gamma correction.
FSlateDrawElement::MakeViewport no longer takes a bInGammaCorrect bool, instead pass ESlateDrawEffect::NoGamma as part of InDrawEffects to disable gamma correction.
FSlateDrawElement::MakeViewport no longer takes a bInAllowBlending bool, instead pass ESlateDrawEffect::NoBlending as part of InDrawEffects to disable blending.