虚幻引擎4.18版本说明

虚幻引擎 4.18 版本说明

Windows
MacOS
Linux
本页面的内容

image alt text

新增内容

从台式机到移动平台的虚拟现实或增强现实,虚幻引擎 4.18 为您提供了用于 交付用户所需内容类型 的各种工具。扩充并改进了平台支持后,您可以 交付用户在任何平台上使用的内容。通过我们不懈追求更高效更精简的开发流程的努力,持续地更新和改进所有工具,让您 能够以前所未有的速度交付内容

通过“体积光照贴图”和天空光的多次间接照明反射之类的新功能,您的世界将会呈现一种超级真实和可信的感觉。通过支持实时合成的新媒体框架功能,甚至可以将真实世界融入到您的世界当中。或者,您也可以在真实世界的基础上构建自己的世界,打造一种使用 Apple 的 ARKit 和 Google 的 ARCore 所体验到的极致沉浸感。

潜在受众正在不断地演化,从各种不同的新平台获取内容。虚幻引擎 4.18 以前所未有的高保真度和性能在各大主流平台上呈现您的内容。我们提供了可在最新的 iOS 设备上使用的向前渲染器,让高质量移动和 AR 内容能够以惊人的速度运行。WebAssembly 现在是 HTML 5 的默认技术,让开发者可以为 Web 创建能够快速加载、流畅运行的复杂游戏。

虚幻引擎 4.18 使您能够集中精力处理最重要的事情。通过新增的全局*在蓝图中查找*搜索功能,再也不用浪费时间在多个蓝图中进行搜索。我们还添加了改进的服装工具、全新的物理资产编辑器和高级材质编辑器预览支持,以及许多其他生活品质一般的改进,可以明显加快开发流程。

除了 Epic 交付的 数百项更新 之外,本版本还包括由 GitHub 上非常了不起的虚幻引擎开发人员社区提交的 98 项改进!感谢以下每一位贡献者对虚幻引擎 4.18 的贡献:

Akihiro Kayama (kayama-shift)、Alan Edwardes (alanedwardes)、Alec Kosik (akosik)、Andrey Yamashev (ayamashev)、Artem (umerov1999)、aziot、Cameron Angus (kamrann)、Carsten Neumann (cneumann)、Cengiz Terzibas (yaakuro)、Chris Conway (Koderz)、Christopher Reed (christopherreed)、Cody C. (Mumbles4)、Courtland Idstrom (Frugality)、DaveC79、DavidNSilva、getnamo、Grant Peters (ggpeters)、Guillaume Buisson (monsieurgustav)、Harry Kim (shuaiharry)、Ian Huff (IanMatthewHuff)、IHappyDayI、Ilya (ill)、Isabela Schulze (Ereski)、Jason Calvert (jasoncalvert)、Jesse Yeh (jesseyeh)、John McBroom (jimbomcb)、Jørgen P. Tjernø (jorgenpt)、Josef Gluyas (Josef-CL)、Kalle Hämäläinen (kallehamalainen)、karanseqwb、Konstantin Nosov (gildor2)、Kostas Nakos (jubanka)、lwdingNT、Masanori Shinkawa、Mathias Hübscher (user37337)、Matt Hoffman (LordNed)、Maurice Laveaux (mlaveaux)、Michael Allar (Allar)、Michael Kösel (TheCodez)、Mikayla Hutchinson (mhutch)、minichris、Nick Pearson (Nick-Pearson)、Nick Verenik (nverenik)、Patrice Vignola (PatriceVignola)、projectgheist、Rama (EverNewJoy)、Roman Chehowski (RChehowski)、Roman Maksymyschyn (miracle7)、Sam Hocevar (samhocevar)、Scott Freeman (gsfreema)、Sébastien Rombauts (SRombauts)、Sertaç Ogan (SertacOgan)、steelixb、stfx、Triplelexx、Vivid Games - Engine Team (enginevividgames)、Vladimir Ivanov (ArCorvus)、XueBing (DarkSlot)、Yujiang Wang (Luoshuang)、yhase7、YuchenMei 和 Zeblote

主要特性

新增特性:体积光照贴图

新的体积光照贴图以低成本预计算照明在可移动对象上呈现高质量照明效果!角色、粒子系统、实例化植物叶子和其他动态对象在环境中显得比以往更加真实。

image alt text image alt text

体积光照贴图用 4x4x4 砖块大小的照明样本覆盖整个光照系统重要体积,在空间中的所有点存储预计算照明。砖块以更高的密度放置在间接照明变化最多的静态几何结构附近。该数据结构能够有效地将间接照明插入到 GPU 上的任何空间点。体积光照贴图插入到整个组件的每一个像素,而不是就插入一次,并且细节也比之前的间接照明缓存方法更加可靠,漏光现象减少。

有关在项目中使用体积光照贴图的更多详细信息,请参阅体积光照贴图文档

体积雾上的预计算照明

体积雾现在可以使用体积光照贴图,将预计算照明插入到每个体素。这让将间接照明存储在光照贴图中的静止照明对雾产生影响。静态照明和自发光光线对雾的影响没有任何开销,因为它们全部都合并到体积光照贴图中了。

image alt text

天空光现在也可以正确地投射阴影,防止室内区域变成大雾效果。

image alt text

1 - 雾上的天空光正确地投射阴影,2 - 雾上的均匀天空光有漏光

性能

  • 第三人称角色上的体积光照贴图在 PlayStation 4 耗用 0.02 毫秒的 GPU 时间。所有间接照明缓存渲染线程成本均已剔除。

  • 《Paragon》Monolith 地图的内存用量从使用间接照明缓存的 5 MB 增长到使用体积光照贴图并使用默认 DetailCellSize 设置的 30 MB。内存用量可以在“统计内存”下看到。

详细对比

体积光照贴图

预计算照明体积/间接照明缓存

GPU 上的有效插入

CPU 上的高成本插入

逐个像素插入

逐个对象插入,即使在实例化组件上也是如此

应用到体积雾

不能影响体积雾

以高密度状态放置在所有静态表面周围

以高密度状态仅放置在静态表面上,低密度样本频繁漏光

较宽体素会延伸,覆盖到重要体积外面的区域

重要体积外部为黑暗间接照明

目前不支持关卡流式播放

支持关卡流式播放

新增特性:改进了静态天空光方向性

天空光过去是用三阶球谐函数在光照系统中表现出来的,这样不会捕获日出或日落中存在的细节。我们现在使用过滤后的立方体贴图,默认的分辨率更高。光照系统根据最终聚集光线的大小选择立方体贴图的适当 MIP,避免失真。在遮挡较多的场景中,天空光立方体贴图的亮度和色差非常明显,最能看出差异。

image alt text

1 - 新增过滤后立方体贴图静态天空光,2 - 原始静态天空光

开口越小,天空光线的方向性越强。如果开够足够小,甚至会重现一种针孔摄像机的效果。

image alt text

image alt text

天空光原始立方体贴图

产生的天空光线

新增特性:天空光多次反射间接照明

现在,通过“全局设置 -> 光照系统”中新增的“天空光反射次数”设置,支持静态和静止天空光产生多次间接照明反射。感谢论坛用户 Luoshuang 对首次实现此功能做出的贡献。

image alt text

1 - 多次天空光反射,2 - 单次天空光反射

在大多数情况下,材质必须具有高漫射值才能明显地显现出多次天空光反射。例如,漫射值为 0.18(18% 灰),第二次天空光反射只会贡献光线辐射能量的 18^3 = 0.006,这其实是非常少的。如果漫射值为 5,第二次天空光反射将贡献光线辐射能量的 0.125,就会比较明显。

此外,我们还从自发光网格获得多次反射:

image alt text

光照系统使用辐射度解算器来计算天空光和自发光网格的多次反射。每一次反射都会增加不可分配的构建时间,所以请务必谨慎使用。

新增特性:Apple ARKit iOS 11 支持

根据我们与合作伙伴的协作,随着 Apple iPhone 8 和 iPhone X 的发布,虚幻引擎 4.18 现在包含对 iOS 11 Apple ARKit 的生产就绪支持。

image alt text

image alt text

我们利用现有的框架组件简化了工作流程,添加了对穿透相机的稳健处理,通过改进性能和预测提高了保真度。

注: 自虚幻引擎 4.17 中推出对 ARKit 的试验性支持以来进行了大量更改。用 4.17 创建的 ARKit 项目将需要更新才能在 4.18 中使用。下载更新的 ARSample 项目以查看 4.18 中的更改。

入门

现在入门超级简单。只需要:

  1. 为项目启用相应的 ARKit 插件即可。

  2. 检查“项目设置”中的 bStartInAR 属性。

  3. 确保具有一个带 CameraComponent 的 Pawn。

已知 ARKit 问题

  • 暂时没有全方位支持设备旋转。目前,应选择“右横向”作为项目唯一支持的方向。

  • 唯一公开的用于点击测试的函数是 HitTestAtScreenPosition_TrackingSpace。该函数返回 CameraComponent 父空间中的结果。在默认设置中,这是该 Pawn 的空间。要转换到全局空间,目前需要用这个结果乘以父级(例如 Pawn)的全局转换。

  • 函数 HitTestAtScreenPosition_TrackingSpace 会忽略参数 Types,它始终针对所有可用的表面进行点击测试,并返回可以通过选中 FAppleARKitHitTestResult 结构的 Types 字段进行手动过滤的结果。

  • FAppleARKitHitTestResult 不会填充 Anchor 属性;该属性始终为 nullptr。

  • 全局比例目前假设为默认值,不能更改。

新增特性:Google ARCore 开发者预览支持

虚幻引擎 4.18 包含对 Google ARCore 开发者预览的正式支持,在引擎中利用常见的增强现实功能,包括对穿透相机的改进处理。

我们也更新了 ARSample 项目以支持 ARCore 和 ARKit。下载该项目以查看 4.18 中的更改,并从现在开始开发 ARCore 项目。

支持 Mac 上的 SteamVR

在 4.18 中,虚幻引擎正式支持 Mac 上的 SteamVR!在 PC 上使用的接口也同样在 Mac 上可用,现在可以很容易的将项目转到 Mac 上尝试一下了。随着这个更新,还有对 Metal 2 的支持和其他运行时的优化。大家可以更新到 SteamVR 的最新 Release 版本并试一下!

image_24.png

新增特性:布料工具

我们添加了一套完全改造的工具集,用于在骨架网格编辑器中创建和配置布料!

现在有一个“布料”窗格,用于编辑一套扩充的布料特定属性,让用户能够更多地控制布料约束、自碰撞顶点剔除和惯性比例调整。增强的绘图工具支持直接在网格上根据顶点布料参数进行绘图。新的绘图工具包括:笔刷、渐变、平滑、填充。可以关闭绘图参数来帮助迭代,而不必重写。

布料工具已经集成到物理资产中,便于创作碰撞。新增的 LOD 管道用于在布料数据对象中创建和更换模拟网格,包含一个参数映射系统,用于将绘图参数映射到新的 LOD 或替换几何结构,从而根据较高级细节 LOD 参数估算较低级细节 LOD 参数!而且通过右键单击网格部分进行转换,在骨架网格编辑器中创建布料数据也更加简单。

这是对所有重点介绍的较小错误修复和改进的补充功能,该工具仍在试验/测试阶段。

注: 对于倾向于使用 DCC 管道的用户而言,仍可以使用 APEX 文件导入

新增特性:媒体框架改进

4.18 中的媒体框架进行了大幅更新和扩展,支持即将推出的高级用例,例如 实时视频合成、时间同步、简化工作流、捕获硬件和基于 IP 的视频支持、在线流媒体播放、与虚幻编辑器集成以及改进了稳定性和性能!

媒体框架 API 进行了简化,缩短了编译时间,并更新为使用 C++11 中的现代功能。此外,高级媒体播放器逻辑也进行了重构,从推送式范式改为了拉取式方法,成为了一种可重用的、与引擎无关的类别,能够更好地区分媒体播放器界面中的重点。

延迟和性能方面也有所改进,采用了基于时间码的样本处理管道,针对时间敏感型样本(例如音频、镜头跟踪和面部跟踪)使用高频计时,任何对象都可以使用多阶段计时,从而提高帧利用率,实现可预测的计时。

音频播放现在集成了新的混音器 API,使用新的媒体音效组件(取代了媒体声波),该组件是基于可以连接到关卡 Actor 并在 UMG 小部件中使用的合成组件构建的。媒体采样速率转换器(原来仅在 16 位 44.1kHz 上受支持)现在支持 int8、int16、int32、浮点型、双精度输入样本以及最多 8 个音频输入通道和 1 到 2 个输出通道(环绕立体声计划在 4.19 中推出)的任何采样速率(包括可变速率)。通过 Actor 上的媒体音效组件,还支持空间音效。

在视频端,媒体框架现在使用外部纹理取样器 API,支持无需内存拷贝的视频帧渲染。目前仅针对安卓平台实现了此功能,但我们计划扩展到其他平台上。我们将有问题的三重缓冲机制更换为取样队列,改善了对外来视频和像素格式以及有问题编码器的支持。

媒体播放器编辑器中更新了新的轨道格式选择器菜单、音频/视频捕获设备选择器、缓存状态可视化(面向支持该功能的播放器插件)、播放列表控件和保存播放列表的功能。此外,拉动时间轴现在响应速度更快,信息覆盖也有所改善。还有一项针对文本覆盖可视化和 360 视频视口控件的试验性支持。针对媒体源资产的基于平台的媒体播放器覆盖现在也可以使用。

现在增加了一些蓝图功能,用于查询媒体播放器轨道和轨道格式、枚举音频、视频和网络摄像头捕获设备以及向媒体播放列表添加文件和 URL。

所有媒体播放器插件均已更新为支持虚幻引擎 4.18 媒体框架中提供的所有令人激动的新功能。

注: 此次更新的其他一些方面,例如 Sequencer 集成、立体声和 360 度视频支持以及硬件加速 4K 播放等仍在积极开发当中。

新增特性:Sequencer 改进

我们对 Sequencer 进行了一些“生活品质”一般的改进,包括:

  • 改善了 FBX 导入,现在能够导入静态/默认转换,添加过场动画镜头(如果地图中不存在对应的镜头)和强制前 x 轴选项

  • 更高效的轨道、关键帧和路径轨迹绘制。重叠键现在会带有红色边框。

  • 编辑工具,包括适合音频、骨架动画和较短轨道的滑动编辑。

  • 增加了拖放支持 - 现在可以拖到较短轨道、子场景镜头切换轨道和序列记录器上。

  • 从主序列录制电影时镜头边界进行预热。

  • 添加了拖动时间轴时在编辑器中重新运行构造脚本的能力。

  • 电影摄影机可以用卷轴观看

  • 序列记录器改进,例如用于动画录制键的插值和切线设置以及拖放支持。

新增特性:改进的物理资产编辑器

物理资产编辑器(原名 PhAT)进行了全面修改,现在大幅改进了易用性,扩展了功能!该 UI 采用了全新的外观,升级了骨架树视图,能够更好地过滤和显示所有场景元素,还提供了一个新的图形视图,可以使用节点以可视化方式设置形体之间的约束。甚至可以设置约束循环 - 这在之前是不可能实现的。

image alt text

UI 元素进行了整理。许多项目已经移到或更改为更合理的位置。例如,“显示”菜单现在允许访问与动画有关的设置,就像在动画编辑器中一样。现在可以随时选择、暂停和前后拉动动画(之前只能在开始模拟之后才可以进行这些操作)。模拟也可以在制作动画期间随时开始和中断,操作方式类似于关卡编辑器,使用一个很明显的“模拟”按钮和下面的选项即可。

其他更新和改进:

  • 时间延缓配合动画和物理一起使用,可以在视口菜单中快速设置,就像在动画编辑器中一样。

  • 录制现在可以通过传输控件进行控制,就像在其他动画编辑器中一样。

  • 物理动画和约束概要的 UI 也进行了改动。现在便于选择、分配和管理约束和物理轮廓。

  • 约束和形体模式不再可用。我们现在将约束和形体一起显示。可以在树视图和视口中启用/禁用和过滤各自的渲染。

  • 新形体创建已经移到了新的选项卡“工具”中,而不是之前使用的模态对话框。这改进了新资产的迭代时间,每次减少 3 次单击。创建新物理资产时重复使用同一个小部件,这与以前一样。

  • 物理资产现在可以直接从内容浏览器创建。之前只能从骨骼网格资产的隐藏式上下文菜单选项进行创建。

  • 可以对形体/约束执行的操作现在位于所有上下文菜单中,而不仅限于之前要求的键盘快捷键。

新增特性:面向物理资产形体的多顶点生成

现在可以针对每个骨骼使用多顶点物理外壳自动生成物理形体。这样使用多顶点物理外壳就能够形成大致的非凸面几何结构。

image alt text

新增特性:动画蒙太奇的时间拉伸曲线

现在可以在动画蒙太奇中添加一个时间拉伸轨道来控制播放速率!这一功能使得可以在保持蒙太奇的一个正常播放速度的同时,有选择的慢放蒙太奇的其中一部分片段。比如,就单个攻击动画,现在可以通过控制来改善得到一个更好看的回访效果。

要使用 时间拉伸曲线 的话,需要在蒙太奇中创建一个浮点曲线,命名为 MontageTimeStretchCurve,并添加关键帧用于定义曲线。如果想要更多一些的控制手段,则可以在资源明细面板的时间拉伸曲线的属性中,选择曲线如何采样,也可以用于调试的目的,或者查看具体的标记点数量。

新增特性:RigidBody 动画节点改进

RigidBody 节点现在支持根骨骼模拟空间选项。如果连接的骨架网格是从玩家关节囊逆向旋转过来的,此改进十分有用。我们还在物理资产编辑器中提供了惯性比例调整和约束显性,极大地提高了稳定性和抖动。

新增特性:混合空间编辑器易用性改进

现在可以拖动预览引脚(绿色)横跨整个网格,而不必按下 Shift 键让引脚跟着光标移动。在实际混合空间网格上添加了状态敏感提示,提供了对特性和功能的上下文说明。

新增特性:全局在蓝图中查找

现在可以无需打开蓝图编辑器窗口,直接执行“在所有蓝图中查找”搜索。现在最多可以保持同时打开和/或在另一个窗口中停靠四个全局“在蓝图中查找”选项卡。主“窗口”菜单中现在提供该功能。

在蓝图编辑器菜单中,选择“编辑 -> 在蓝图中查找”(或者在焦点位于蓝图编辑器窗口的情况下,按 CTRL-SHIFT-F 键)也会打开新的全局“在蓝图中查找”选项卡(或切换到已经打开并解锁的第一个全局选项卡)。即使在蓝图编辑器窗口关闭后,如果在蓝图编辑器窗口外部的某个位置已经打开或停靠该选项卡,该选项卡仍会保持打开。

全局“在蓝图中查找”选项卡包含一个“锁定”按钮,这样可以将当前结果集锁定到当前选项卡。如果当前已经打开的选项卡已被锁定,那么从蓝图编辑器调用“编辑 -> 在蓝图中查找”将打开一个新的全局“在蓝图中查找”选项卡。

在蓝图编辑器菜单中选择“编辑 -> 查找”(或按 CTRL-F)仍会打开局部“查找结果”选项卡,用于仅在当前蓝图中执行搜索。单击“在所有蓝图中查找”按钮将允许您对全局“在蓝图中查找”选项卡中的所有蓝图资产执行相同搜索。

如有必要,可以取消选中“编辑器首选项 -> 蓝图编辑器 -> 工作流”中名为“将在蓝图中查找保持在全局选项卡中”的选项来关闭该新行为。

新增特性:改进了跨关卡 Actor 参照

现在可以使用软对象参照(原名为资产标识/AssetPtrs)更好地支持跨关卡 Actor 参照。如果要创建指向某个 Actor 的软对象参照属性,它们现在具有改进的 UI,显示它们是已经卸载还是损坏,以及所指向的完整 Actor 标识:

image alt text

如果使用“移动到当前关卡”选项重命名或移动了参照的 Actor,可以正确修复此类跨关卡参照。它将尝试检出并重新保存执行该特定 Actor 的任何其他关卡/序列。还会在您删除以此方式参照的 Actor 之前发出提醒。在启用关卡流式播放的“在编辑器中播放”中,这些功能也有效。新创建的 Sequencer Actor 参照现在是软对象参照,但较旧的序列必须先使用“重新绑定可占据参照”进行修复,然后重新保存。

注: 作为此次更新的一部分,原生类型 FStringAssetReference 和 TAssetPtr 重命名为了 FSoftObjectPath 和 TSoftObjectPtr。

新增特性:编辑器内的本地化预览

我们增加了“在编辑器中播放”(PIE) 运行期间,在 UMG 编辑器预览游戏本地化的功能,使您能够以不同的语言预览小部件!

此功能使用“预览游戏文化”设置(“编辑器首选项 -> 地区和语言”)进行配置,“在编辑器中播放”(PIE) 运行时会自动激活。预览语言还会传递到通过编辑器启动的任何独立游戏。

  • 预览运行期间,所有可编辑文本字段都会被锁定(只读),防止意外地使用翻译数据覆盖源数据。您还可以使用该新增的锁定功能来防止项目中发生任何语言更改,方法是在 DefaultGame.ini 或 DefaultEngine.ini 配置文件的“Internationalization”节下,将“LockLocalization”设置为“True”。

新增特性:数组重新排序

现在可以通过拖放元素,在数组中重新排列元素顺序!默认情况下,所有通过蓝图和 C++ 建立起来的数组都可以重新排序。如果不想使用默认行为并用 C++ 创建固定顺序的数组,请使用 EditFixedOrder 元数据。

新增特性:高级材质预览视口

材质编辑器和材质实例编辑器现在具有高级预览场景,用于在视口中预览材质。这让您能够更改一些视图设置,例如场景照明和环境立方体贴图,以及围绕着预览网格在场景中旋转环境。

您可以在“窗口 > 预览场景设置”下更改预览设置。

image alt text image alt text

新增特性:平台 SDK 升级

在每一个版本中,我们都会更新引擎以支持平台伙伴的最新 SDK 版本。

image alt text

  • Build farm 编译所需的 IDE 版本

    • Visual Studio: Visual Studio 2015 更新 3

    • Xcode: XCode 9.0

  • 安卓:

    • NDK 12b

    • 安装程序 1r6u1

  • HTML5: emscripten toolchain to 1.37.19

  • Linux: v10_clang-5.0.0-centos7

  • Steam: 1.39

  • Oculus Runtime: 1.17

  • SteamVR: 1.39

  • Switch: 1.7.0,3.5.1 + NEX 4.2.0;固件版本 3.0.1-1.0

  • PS4:

    • 4.508.111

    • 固件版本 4.730.001

    • 支持的 IDE:Visual Studio 2015 和 isual Studio 2013

  • Xbox One:

    • XDK:2017 年 6 月 QFE3,面向所有 Xbox 游戏机(XB、XB1-S、XB1-X)

    • 固件版本:2017 年 10 月预览 3 (versuib 16291.1000.170913-1900)

    • 支持的 IDE:Visual Studio 2015

  • macOS: 添加了对 macOS 10.13 High Sierra 的支持,作为完全受支持的平台!

  • iOS: SDK 11

  • tvOS: SDK 11

新增特性:Windows、Mac 和 Linux 支持的 Visual Studio Code

现在可以使用 Visual Studio Code 在所有 UE4 宿主平台上编写代码。要使用该软件,从编辑器首选项对话框选择“Visual Studio Code”作为首选 IDE,或者在命令行上生成项目文件时添加 -vscode 参数。所有平台都必须已经安装 .NET Core 2.0 运行时,可以从 Microsoft .NET Core 网站获取

要使用 Visual Studio Code 构建和调试所有项目类型,需要一些额外扩展。在所有平台上,确保安装 Microsoft C/C++ 扩展和 C# 扩展。在 Linux 和 Mac 上,需要“Mono Debug”扩展来调试 C# 项目,需要“LLDB Debugger”扩展来调试 C++ 项目。此外,为了调试 C# 项目,还必须安装 Mono 运行时:

  • 在 OS X 上:brew install mono

  • 在 Linux 上:sudo apt-get install mono-complete

image alt text

新增特性:简化了 iOS 认证和登录

在使用远程工具链从您的 PC 在远程 Mac 上构建 iOS 时,从 PC 上的“项目设置”进行认证和供应设置。这意味着无需再使用“钥匙串访问”在远程 Mac 上安装私有密钥或证书。

新增特性:iOS 上的桌面级向前渲染器(试验性功能)

虚幻引擎 4.18 包含 WWDC 2017 上的 Wingnut AR 演示中使用的桌面级向前渲染器!此功能在装有 A9 或更高级别处理器,运行 iOS 10.3 或更新版本系统的 iOS 设备上受支持,强烈推荐使用运行 iOS 11 并装有 A10X 或更高级别处理器的 iOS 设备。

image alt text

该渲染技术为最新的 iOS 设备带来了基于物理的明暗、反射、照明和阴影支持。与现有移动渲染器相比,这些功能对硬件要求更高,仍在试验阶段,所以某些功能并不能在所有设备和 OS 修订版上正常运行。以下是已知不能正常工作的功能:GPU 皮肤缓存、GPU 变形目标、大气雾和多样本抗锯齿。

新增特性:安卓默认启用的 Gradle

Gradle 现在是打包安卓 APK 的默认设置。Ant 仍然可用,如有必要,可以禁用“启用 Gradle”安卓项目设置,但建议过渡到 Gradle,因为已在考虑弃用 Ant。

注: 如果之前在接受安卓 SDK 许可协议时没有选中“启用 Gradle”,需要单击安卓项目设置中的“接受 SDK 许可证”按钮来启用此功能。如果尝试在没有接受该许可证的情况下打包或启动,将会显示错误。

新增特性:安卓摄像头插件

虚幻引擎现在有一个可选插件,用于公开对安卓设备前后摄像头的访问权。启用该插件会添加一个新的安卓摄像头插件项目设置面板,用于选择安卓清单要求。

image alt text

新增特性:HTML5 优化浏览器 WebAssembly 现在设置为默认值

现在在默认情况下,会为 HTML5 项目启用 WebAssembly。许多主流浏览器制造商支持 WebAssembly 标准后,您会发现在发布到网上时,资产大小、浏览器加载时间和运行时性能出现大幅改善。先前优化的 HTML5 输出 ASM.js 已经停用,已从代码库中删除。

注: WebAssembly 中仍不可使用多线程。虽然 ASM.js 支持多线程,但 WebAssembl 目前只能在单线程模式下运行。但是,多线程是所有浏览器制造商在接下来几个月中要重点突破的重大功能。

新增特性:LLM 低级内存跟踪器

新增的 LLM 低级内存跟踪器使您能够 一次性跟踪所有内存,只会跟踪一次,不会遗漏任何内容,也不会有重复计算!

image alt text

引擎或游戏的每次分配都会被指定一个标记值,用于表示其所属的类别。所有类别的总计会累计到游戏所用的总内存。这些标记使用标记范围宏进行应用。在该范围内应用的任何分配都会被分配指定标记。

LLM 统计信息可以在游戏中使用“stat LLM”或“stat LLMFULL”进行查看。每个标记的当前总计将以 MB 为单位显示。LLM 还会将统计信息值输出到 CSV,以绘制值的时间推移图。

正因如此,需要为每个平台添加对 LLM 的支持。目前 LLM 支持 PS4 和 XboxOne。Windows 作为试验性发行版受到支持。

新增特性:改进了 XGE (Incredibuild) 着色器编译器支持

我们对 XGE (Incredibuild) 着色器编译进行了改进,大幅缩短了旧系统中的拖延和延迟,让新着色器作业能够异步传输到 XGE 中。

新系统执行效率大幅提高,可以明显加快所有情况下的着色器编译速度,包括动态烘焙、常规烘焙和编辑器中的着色器迭代。

这些改进默认为启用状态,但至少需要 Incredibuild 8.01 或更高版本。引擎会在启动时检查版本,如果没有找到受支持的安装,将恢复为旧的 XGE 着色器编译器。对于旧系统,XGE 着色器编译器本身必须在命令行上通过“-xgeshadercompile”启用,或者在 ConsoleVariables.ini 中将“r.XGEShaderCompile”设置为 1 进行启用。

虚幻音频引擎(测试功能预览)

新的虚幻音频引擎仍在继续开发当中。该发行版为更多平台提供了支持,更新了插件架构和一些令人激动的新功能。这些新的虚幻音频引擎功能仍应作为测试版本。我们将在后续版本中重点关注性能和稳定性的改进。

除了 Windows、Mac、iOS、Android、XboxOne 和 PS4,我们还添加了对 Nintendo Switch、Linux 和 HTML5 上的新虚幻音频引擎的支持。新的虚幻音频引擎在 Linux 中默认为启用状态。对于在 4.17 和 4.16 中先行发布的所有其他后端,也进行了一些重大修复和改进。

音频插件架构改进(仅适用于新的虚幻音频引擎)

音频插件对于需要*覆盖*或*扩充*音频引擎核心功能的音频效果十分有用。基于对象的立体声源空间化、声源阻挡和大师级回响通过深入集成到核心混合引擎可以达到最佳效果。这些效果需要特殊的音频插件支持。

image alt text

  • 增强的音频插件架构让想要覆盖核心混合功能的第三方开发人员能够更顺利地集成

  • 让项目能够混合和匹配插件覆盖:声源空间化、声源阻挡和回响

  • 现在无需重启编辑器即可换出不同的插件!

新增特性:声源总线(仅适用于新的虚幻音频引擎)

声源总线是一款强大的新功能,展示了新的虚幻音频引擎的灵活路由功能,允许多个声源发送并汇总到单一实时声源中。声源总线是从声源库中派生出来的,使它们能够以声波或声音线索的使用方式进行播放和使用 - 即空间化为 3D 混合总线或作为保持声效持久性的方法。声源总线将成为音频设计师的宝贵工具,为将来开发令人激动的功能奠定了基础。

  • 声源总线允许任何音频源将自己的音频路由到 3D 音频源,包括其他声源总线(包括自身,创造运行时音频反馈系统)。

  • 声源总线是新的 USoundBase 类型,所以可以在普通声音 BP 和 C++ API、音频组件和环境 Actor 中像另外一种声效一样进行播放,可以指定自己的持续时间,成为一次性总线,如果指定为 0.0,将会被视为具有无限持续时间的循环声源。

  • 声源效果和副路混合发送可以与声源总线一起使用,就像普通声源一样

  • 其他声源将自己的音频发送到总线,方式类似于副路混合发送,并可以选择将音频只发送到声源总线,也可以同时将音频发送到副路混合。

新的附录混合效果(仅适用于新的虚幻音频引擎)

我们使用从简单延时到灵活计算高效回响的全新时间型副路混合效果更新了合成插件,让您可以创建复杂有趣的交互式空间效果:

  • 延时:简单的多通道延时线路,可以在运行时从蓝图进行调制。该效果在发送到给定副路混合的音频中模拟简单的广播延时,该副路混合在应用此效果的情况下运行,可以用于实现与动画或其他游戏系统的亚毫秒级的同步。

  • 控制延时:复杂的多通道延时效果,允许任意数量的控制(“回声”),可以在运行时通过强大的蓝图 API 独立添加、修改和删除。每次控制都根据控制弱化、控制方位和控制延时进行参数化。这对于模拟多普勒效果、仿真早期反射和许多其他延时混合效果十分有用。

  • Flexiverb: 计算开销低的单通道回响算法,针对最大化回声密度、尽量减少多重回声进行了优化。该效果最适合用于在 CPU 资源有限的平台上模拟小房间回响。

改进了弱化设置

我们改进了弱化设置,提高了对清晰度和结构的关注。改进包括根据具有特殊编辑条件的类别显示弱化设置,明确当前利用的是哪些弱化设置功能。

image alt text

新增特性:重构的 VR/AR 摄像头系统

虚幻引擎 4.18 现在包含针对摄像头组件和原始视图的默认摄像头实现,包括由引擎自动处理的后期更新。该默认摄像头实现会自行移动位置(相对转换),等效于在视图目标中有 CameraComponent 组件时,设备从其校准的原始位置移动位置。因此,硬件开发人员必须实现的 API 占用的资源更少,所以效率会大幅度提高。

注: 所有现有的平台都必须删除其摄像头实现,并更换为默认摄像头实现。

RELEASE NOTES

AI

  • Added a Blueprint callable function AIPerceptionComponent.SetSenseEnabled that can be used to toggle specific AI senses.

  • Bug Fix: Prevent crashes if UMockTask_Log is created manually rather than via the CreateTask factory method

  • Bug Fix: Fixed a bug in AISense_Sight processing that resulted in inconsistent frequency of "line of sight lost" reporting. Now this even should be reported only once, when sight of target is lost.

Behavior Tree
  • Bug Fix: Prevent an ensure in UBlackboardComponent::ClearValue when called on a component with a null BlackboardAsset

General
  • Bug Fix: Fixed UAIPerceptionSystem::GetCurrent causing a BP error when its WorldContextObject parameter is null

  • Bug Fix: Fixed UCrowdFollowingComponent::UpdateCachedDirections crashing when CharacterMovement is null

  • Bug Fix: Fixed: bNavigationAutoUpdateEnabled was not always working when reopeinig the map Fixed: Navigation Build was not clearing some mesh tiles when bNavigationAutoUpdateEnabled is enabled Fixed: Streaming out a level in editor was not always updating NavMesh debug draw

Animation

  • New: TimeStretchCurve system for AnimMontages. Allows adjusting playback time of montages in a non constant way. This optional curve allows the user to determine how animation frames are influenced by play back time scaling, instead of using a constant play rate scaling. For example, with an attack animation, the strike could have zero influence (no play rate), and the recovery time could have 100% influence (most play rated). This system is entirely optional and compatible with current Montage API. You still determine desired play back time via the Play Rate parameter. Based on desired playback time, if there is a curve named 'MontageTimeStretchCurve' then, it will use the curve to determine animation frames to play based on playback time and TimeStretchCurve. Otherwise, if no curve exists, it is done using the constant supplied PlayRate.

  • Added FAnimationRuntime::LerpPosesPerBone

  • Added FAnimationRuntime::LerpPoses. Blends two poses together, but first pose is also storing results. To save on copying poses when not necessary. Removed individual use of ZERO_ANIMWEIGHT_THRESH, instead use FAnimWeight functions. FAnimationRuntime weight functions use FAnimWeight for consistency. (IsFullWeight was different).

  • Added outline to skeletal mesh section selection.

  • Changed behaviour when reimporting an Alembic Cache to ensure at least one track is ticked

  • Animation Optimization: Added EMeshComponentUpdateFlag::OnlyTickMontagesWhenNotRendered to only update montages when not rendered, instead of doing a whole pose update. This means on dedicated servers we'll only update montages when needed, and not the AnimGraph, which we have no need for. This is also affects non rendered meshes on clients.

  • Added short dummy bones to end effectors to prevent their rotations from being too aggressively compressed.

  • Fixed broken 'ComputeCompressionError' with additive animations. Optimized 'ComputeCompressionError' by caching bone indices, so they don't have to be looked up every frame. Added CompressCommandletVersion INDEX_NONE to bypass DDC and test locally recompression.

  • RemoveLinearKey optimizations from licensee submission: https://udn.unrealengine.com/questions/167344/animation-compression-doesnt-scale-well.html

  • More Anim Compression Fixes: - Fixed frame->error bug in FAnimationUtils::ComputeCompressionError resulting in incorrect compression error measurement, and in some rare animations not being able to find a suitable compressor. - Make sure automatic compression actually go through all the compressors. - Removed unused reduction based on retargeting settings.

  • Automatic Compression fixes. - Error reporting: normalize rotations and added ensures to make sure NaNs do not sneak in there. - switched size reporting from 32 to 64 bits, so we have enough space for large recompression jobs. - fixed compression ratio to be accurate. Measures actual compressed animation data instead of whole asset size. - prevented infinite loop when trying to recompressed a failed automatic compression. - Fixed reporting when no suitable compressors were found. - Compression ratio is now against uncompressed raw size, and not (trivially) compressed raw size. - Force recompression if data we got back from DDC is invalid.

  • Bug Fix: SkelMeshComponent LOD update only refreshes transforms when rendered. If AnimGraph eval is done, make sure Graph has been updated at least once.

  • Bug Fix: SkeletalMeshComponent::InitAnim - Do not call RefreshBoneTransforms without calling TickAnim first. AnimGraph could get in a bad state. - Do not call RefreshBoneTransforms if AnimInstance has not been initialized. - Do not call RefreshBoneTransforms if bUseRefPoseOnInitAnim is set. Which it could if bForceReinit was false.

  • Bug Fix: Fixed animation curves not correctly being updated to post process instances.

  • Bug Fix: Removed deprecated FTAlphaBlend class and AlphaBlendType.h header

  • Bug Fix: Marked UAnimInstance as Within=SkeletalMeshComponent since it assumes the outer in various places

  • Bug Fix: Fix FPoseDataContainer::Shrink bug while LocalSpacePoseMask already contains Tracks.Num() data before SetNumZeroed.

  • Bug Fix: Fixed issue with Animation Sequence bounds imported from an Alembic Cache including the origin

Animation Assets
  • This allows you to link curve to MaxLOD, where the lowest LOD (as 0 is highest) is [0, MaxLOD]. If your MaxLOD is 1, it will be only evaluate from [0, 1]. You can't disable LOD 0 this way, but if you want to disable curve, use USkeletalMeshComponent.bAllowAnimCurveEvaluation

  • Cleaned up animation compression logging (change to compression category and downgraded from warning)

  • -Added option to state machine to allow it to skip reinitialization when it becomes relevant -Added option to slot nodes to keep source pose relevant while montage slot is playing.

  • Bug Fix: Fix for the bug: when montage is interrupted after it starts to BlendOut neither Completed pin no Interrupted pin is executed.

  • Bug Fix: Fix playrate not being calculated correctly when 2 samples use the same animation

  • Bug Fix: Add curve evaluation to aim offset blendspaces

  • Bug Fix: Correct root motion extraction on anim composites and montages with more than one segment

  • Bug Fix: Fixed crash in compression code when cropping animations in editor.

Animation Blueprint
  • New:

    • Two Bone IK and FABRIK uses FBoneSocketTarget that supports bone and socket

    • Created new detail customizaton for FBoneSocketTarget that can display bone and socket together.

  • Multiple APIs are exposed in SkeletalMeshComponent to control Animation Curves handling either to enable/disable/reset.

    • void SetAllowAnimCurveEvaluation(bool bInAllow);

    • bool GetAllowedAnimCurveEvaluate() const { return bAllowAnimCurveEvaluation; }

    • void AllowAnimCurveEvaluation(FName NameOfCurve, bool bAllow);

    • void ResetAllowedAnimCurveEvaluation();

    • void SetAllowedAnimCurvesEvaluation(const TArray& List, bool bAllow);

  • Re-organized AnimBlueprint menu, so that it prioritize showing up anim node Two Bone IK.

  • Added more descriptive pin name and node text for constraint node

  • Improved root motion extraction performance by storing it on the anim instance during post update to avoid waiting on the parallel eval task later on.

  • Bug Fix: Fixed inconsistent animation entries in Blueprint context menu (displaying differently depending on whether the asset is loaded) and cached correct tooltip when asset isn't loaded

  • Bug Fix: Fixed compilation errors when nativizing animation Blueprints that use subinstances

Animation Blueprints
  • Bug Fix: Fixed debug link for animation Blueprints not persisting when changing preview mesh

  • Bug Fix: Fixed incorrect reporting of animation Blueprint fast path caused by compilation manager

Animation Tools
  • Bug Fix: Prevented actors & components of anim preview scenes (and the preview scenes themselves) from persisting after editors are shut down

  • Bug Fix: Assets with no preview mesh now no longer allow access to other skeleton's physics assets in their shortcut bars

  • Bug Fix: Undo/redo now correctly affects animation preview scene settings

  • Bug Fix: Fix crash with Retargeting Manager: Auto Mapping.

  • Bug Fix: Fixed crash when deleting notifies while the mouse was moving on top of the notify.orion

General
  • Bug Fix: Changed SmartNames FindUID API to return UID rather than pointer to UID, fixed code in Orion that was caching a pointer to internal TMap allocated memory.

  • Bug Fix: Fixed multiple calls to FinalizeBoneTransforms when calling RefreshBoneTransforms outside of tick

  • Bug Fix: Fixed root motion when using ForceAnimRate's of more than 1

Skeletal Mesh
  • Bug Fix: Fixed insert/delete/duplicate button not appearing for bones within the "Bones to Remove" setting of the Skeletal Mesh editor.

  • Bug Fix: Fixed crash when reloading mesh asset that are used by animation editor.

  • Bug Fix: Fix for USkinnedMeshComponent::GetCPUSkinnedVertices() failing in shipping config on platforms that supported GPU skinning (Contributed by Koderz)

Tools
  • New: Improved discover-ability for Blend Space Editor features

  • Break up Live Link plugin so that the client can run in cooked builds too

  • Smart name refactor - Remove guids entirely - Remove automatic fix up - Simplify smart name mapping container - Make animations deterministic for cooking

  • Add bulk rename support (matching bulk remove support)

  • Bug Fix: Fixed crash when Undo-ing transactions after placing Blendspace Samples on the Grid

  • Bug Fix: AnimNotify Macro is not visible anymore in the notify selection list.

  • Bug Fix: Fix crash when interacting with multiple notify management windows for the same skeleton

  • Bug Fix: Fix newline being added to single selection bone name copies

  • Bug Fix: Fix crash when pasting invalid bone name into 'Bones to Remove' array.

  • Bug Fix: Fixed BlendSpace editor preview (holding Control) when it doesn't have focus.

  • Bug Fix: Fixed issue with BlendSpace editor where new samples list would not regenerate BlendSpace sampling.

  • Bug Fix: Fixed crash when performing drag operations in the notify track window

  • Bug Fix: Notify windows now stay up to data across multiple editors when adding notifies to an animation.

  • Bug Fix: Fixed Bake Pose functionality not working correctly if the Root Bone of the Skeleton contained any transformations

Audio

  • New: Spatialization, Reverb, and Occlusion plugin support has been rebuilt. It now supports per platform mix and match of plugins. Audio plugins can now also be swapped out without closing the editor.

  • New:

    • Cleaning up Attenuation Settings UI.

    • Breaking up attenuation settings into categories.

    • Added edit condition so only editable if attenuation settings are overridden in audio components or sound cues.

    • Adding ability for audio plugins to indicate if they have custom settings. Allows hiding settings in attenuation settings.

    • Cleaning up reverb send code and updated attenuation settings.

    • Added custom reverb send curve support.

    • Added default stereo spread of 200 for attenuation settings.

    • Added ability to do a normalization for stereo spatialized sound sources (to avoid clipping when spread is

    • Added ability to apply a HPF to a sound source based on distance for audio mixer and added that option to attenuation settings if audio mixer is enabled.

  • New:

    • Source buses allow any audio source to route their audio to a 3d audio sources.

    • Source buses can be routed to other source buses (including themselves).

    • Source buses are a new USoundBase type, so can be played as if it was another sound in our normal sound BP and C++ APIs, audio components, and ambient actors.

    • Buses can have their duration specified to become a 1-shot bus or, if specified as 0.0, will be treated as a looping source (i.e. indefinite duration).

    • Source effects and submix sends can be used with buses like normal sound sources.

    • Other sources send their audio to buses in an analogous way to submix sends and can opt to only send their audio to buses vs also sending their audio to submixes.

    • Fundamental architectural feature allows sources to be mixed into 3d buses which allow persistence of source effect state between instances of other sources and opens up the possibility for a number of other exciting features.

  • New: The new Unreal Audio Engine now supports HTML5.

  • New Submix Effect added: Tap Delay. The Tap Delay submix effect allows you to add any general number of taps ("echoes") and control them independently, both ahead of time and at runtime using Blueprint functions. This can be used to emulate the doppler effect, simulate early reflections, and more.

  • Added ability to pass in an owner to PlaySound2D and PlaySoundAtLocation BP functions so they can be used with concurrency limits that are limited to owners.

  • Allowing launching audio to HMD audio device with -VR in non-editor builds.

  • Moved setting a default reverb send level for audio mixer master reverb to audio settings.

  • Moving the synth component intialize to before audio component attachment is setup.

  • Adding code to not update filter parameters unless the parameters have changed.

  • Adding utility function to get a log-frequency value from a linear value.

  • Update to IAudioPlugin to allow audio plugins to query if they have custom settings.

  • Removing default master reverb send amount on audio components. Breaking out an initialize function so that synth components can be initialized outside of OnRegister().

  • SDL backend implementation for windows, linux, and HTML

  • Don't send or mix built-in reverb submix if there's a plugin reverb enabled.

  • Added Blueprint functions to the Sound Utilities plugin: GetBeatTempo. GetFrequencyFromMIDIPitch, GetMIDIPitchFromFrequency, and GetPitchScaleFromMIDINote.

  • Added a new submix effect to the Synthesis library: Flexiverb. Flexiverb is a computationally inexpensive single-channel reverb algorithm optimized for maximizing echo density with as few multiplies as possible. This effect is best suited for emulating small room reverberation on platforms where CPU resources are limited.

  • Fix for allowing audio plugins to work in non-editor builds who don't support multiple audio devices for PIE.

  • The new Unreal Audio engine has been refactored so that audio buffers are allocated with platform specific memory alignments.

  • Adding attack and decay interpolation times for focus feature to avoid fast sweeps of focus.

  • Optimization in converting procedural audio buffers to 16 bit PCM.

  • New submix effect in the Synthesis library: Delay. This effect is a simple multichannel delay line that can be adjust at runtime.

  • Bug Fix: Fix for Editor crash when baking indirect sound for a Phonon Source that has no audio component attached.

  • Bug Fix: Fixing assets showing up under miscellaneous when audio mixer isn't enabled.

  • Bug Fix: Fixed issue in the new Audio Engine's FDelay class wherein Delay lines would not work when set to the maximum time they were initialized for.

  • Bug Fix: Fixed issue where the new Unreal Audio engine would sometimes crash on shutdown while playing a streaming sound wave.

  • Bug Fix: Adding thread safe mode for plugin interface shared pointers.

  • Bug Fix: Resetting available byte count when resetting the procedural sound wave

  • Bug Fix: Moving opus lib to subfolder Windows instead of win32 to fix UGS game sync issues.

  • Bug Fix: Allowing audio devices to have a fade in when creating a new PIE window.

  • Bug Fix: Crash fix for loading multiple sound waves with multiple granulators.

  • Bug Fix: Using audio thread platform affinity mask for audio render thread in audio mixer.

  • Bug Fix: Fixing a crash in Ngs2 when initializing a source from the Ngs2 rack that is still being stopped from its previous lifetime.

  • Bug Fix: Fix for incorrect spatialization of audio sources on iOS using legacy audio engine.

  • Bug Fix: Implemented basic handling for audio device hotswap. This will solve the issue of the UE4 editor hanging when an audio device is unplugged from the system. However, please note that any audio sources played via source or Blueprint will be stopped when this happens.

  • Bug Fix: Audio: Fix case where audio is already set to be a preview sound. Sequencer sets the sound to be a preview sound when scrubbing in editor.

  • Bug Fix: Streaming audio on MacOS and iOS in the audio mixer is now fixed.

  • Bug Fix: Fixed Platform Headroom levels for Android.

  • Bug Fix: Fixing parameter interpolation in the audio mixer.

  • Bug Fix: Fix for ajm decoder running out of memory for large source instances.

  • Bug Fix: Fixing audio mixer shutdown to ensure final commands are pumped.

  • Bug Fix: Fixing seaking in ADPCM sound files.

  • Bug Fix: Fixed issue where OnReleaseSource would not be called on every active source for audio plugins.

  • Bug Fix: Fixing thumbnail generation on sound file reimport.

  • Bug Fix: Fix for sound submix graph recursion.

Automation

  • Add individual FTest enumeration to Orion perf tests Moved methods to run FTests to helper for reuse. Effects perf tests now show individual test cases for more granular runs. All perf tests now do map check and draft logic as setup.

  • Bug Fix: Fix Perforce automation routine to return files whose last action was a rename.

Blueprints

  • New: Find-in-Blueprints is now hosted in a global tab by default. This tab can remain open even if the Blueprint Editor window is closed.

  • New: Added MakeMap Blueprint node.

  • New: Added MakeSet Blueprint node

  • Added Blueprint functions for getting vectors from cones using random streams, to complement the existing non-stream variants. For consistency, this entire family of functions have been modified and renamed to provide versions that take arguments in both degrees and in radians. See the Programmer notes for specific details.

  • Blueprint input nodes for key, action, and axis can now be subclassed from other modules.

  • Made the compact node title for cross and dot product the words cross and dot rather than hard to see . and x symbols

  • Improved the visual styling of user disabled nodes and development-only nodes (still an experimental feature, but this is a step towards removing that label)

  • Made it easier to pick a specific actor in the level as the Blueprint instance to debug by adding "(selected)" after the label in the 'debug filter' dropdown in the Blueprint editor

  • Allow adjusting the font size for each individual comment box node in Blueprint graphs (also works in Material graphs)

  • Allow specifying a description for user defined enum assets (shown in the content browser)

  • Allow drag-dropping component Blueprint assets into the graph to create Add Component nodes and improved the error message when dragging something that cannot be dropped into an actor Blueprint

  • Added a tooltip field for each value in a user defined enum

  • Added a key binding for Find References (Shift+Alt+F)

  • Improved the implementation of Goto Definition, allowing any node to implement it by overriding CanJumpToDefinition or JumpToDefinition - Collapsed 'Goto Code Definition' for variables and functions into the same path, so there aren't separate menu items and commands - The default behavior for UK2Node subclasses is to call GetJumpTargetForDoubleClick and call into FKismetEditorUtilities::BringKismetToFocusAttentionOnObject - Going to a native function now goes thru a better code path that will actually put the source code editor on the function definition, rather than just opening the file containing the definition

  • Added a key binding for Goto Definition (Alt+G)

  • Allow 'Goto Definition' and 'Find References' to be used while stopped at a breakpoint

  • Added an option to disable the comment bubble on comment boxes that appears when zoomed out

  • Added the full name of the type, container type, and value type (for maps) to the tooltips for the type picker on Blueprint variables, so long names can be read in full

  • No longer need to explicitly register nodes implementing UK2Node_AddPinInterface to use SGraphNodeK2Sequence

  • Remove deprecated CustomMapParamValue code

  • Add InRange (int) to Blueprint math library

  • Added Blueprint node for swapping entries in arrays.

  • KismetRenderingLibrary: Added EditorOnly Blueprint function for creating static textures from Render Targets. Has options for Mip and Compression Settings

  • The VirtualReality Blueprint template is now available on Mac.

  • Blueprint compilation manager now skips compilation of dependent Blueprints when no function signatures are changed. This can greatly speed up compilation of Blueprints with large numbers of dependent Blueprints

  • Fixed various issues with both UAT-driven and manually-configured code/data build workflows with respect to enabling Blueprint nativization.

  • Added new Editor Only Plugin called Blueprint Material Texture Nodes. This plugin adds Blueprint nodes for reading texture and render target data as well as the ability to create and modify MIC assets.

  • Bug Fix: Marked a number of container functions as BlueprintThreadSafe From UDN: https://udn.unrealengine.com/questions/384561/should-map-find-be-tagged-Blueprintthreadsafe.html

  • Bug Fix: Fixed an issue diffing text properties/pins in Blueprints

  • Bug Fix: Blueprint nodes can no longer be renamed on read-only graphs.

  • Bug Fix: Fixed undo not removing pins added to make container nodes via Add Pin from the context context menu.

  • Bug Fix: Compiling a Blueprint containing a child actor component will no longer mark the Blueprint of child actor's class dirty.

  • Bug Fix: Fixed a runtime crash in nativized child Blueprints that include a parent function call node in a replicated function implementation.

  • Bug Fix: Array shuffle node no longer uses biased shuffle algorithm.

  • Bug Fix: Fixed various issues with split pins not being correctly connected when expanding macros and functions.

  • Bug Fix: Fixed ensure when connecting the output pin of a create delegate node to a wildcard input.

  • Bug Fix: Correctly reconnect split pins when changing class on create widget, construct object, and spawn actor nodes

  • Bug Fix: Fix two compilation manager issues: Make sure CDOs are not renamed under a UClass, because they will be considered as possible subobjects, which has bad side effects and make sure that we update references even on empty functions, so that empty UFunctions are not left with references to REINST data

  • Bug Fix: Prevent crashes when a loading blueprint that implement an interface that was deleted

  • Bug Fix: Fixed Construct Object not working correctly with split expose on spawn pins.

  • Bug Fix: Fixed an EDL assert on load in a nativized build caused by a native reference to a nativized BP class that also references a nativized UDS asset.

  • Bug Fix: Prevent wildcard pins from being connected to exec pins

  • Bug Fix: Made drag-dropping assets into a graph to create a component undoable

  • Bug Fix: Made wires into/out of a user-disabled node draw very dimly (other than the passthrough execution wire if it exists)

  • Bug Fix: Fixed the tooltip when dragging a variable onto an inherited category so it shows the 'move to category' hint

  • Bug Fix: Changed UK2Node::GetPassThroughPin so that only the execution wire on nodes with exactly one input and one output exec wire will have a corresponding pass-through pin (when there is ambiguity in which exec would be used, e.g., with a branch or sequence or timeline node, the subsequent nodes are now effectively disabled as well)

  • Bug Fix: Changed the behavior of various things that were hard-coded to operate on the first event graph to instead operate on the most recently used event graph page

  • Bug Fix: Fixed the tooltip of a user defined structure not updating immediately in the content browser after being edited

  • Bug Fix: Fixed discrepancy between the Structure tab name and the menu option for the tab in the user defined structure editor (now both say Structure Editor)

  • Bug Fix: Improved editor performance when working with Blueprints that contain many components or variables

  • Bug Fix: Prevent converting a variable get node to impure/back while debugging

  • Bug Fix: Add support for 'goto definition' on Create Event nodes when the Object pin is not hooked up

  • Bug Fix: Fixed swapped undo/redo messages when converting a cast node between pure and impure

  • Bug Fix: Actor bound event related warnings now show up in Blueprint status when opening level Blueprint for first time, improved warning message

  • Bug Fix: Adjust search query when doing 'Find References' on variables from My Blueprints so that bound event nodes show up for components and widgets

  • Bug Fix: Allow the autowiring logic to better break and replace existing connections when made (e.g., when dragging a variable onto a compatible pin with an existing connection, break the old connection to allow the new connection to be made)

  • Bug Fix: UField::Serialize no longer serializes its next ptr, UStruct::Serialize serializes all Children properties instead. This resolves a hard circular dependency between function libraries that EDL detected. It was resolved in an ad hoc way by the old linker

  • Bug Fix: User-Defined Struct assets now support their own external dependencies when nativized.

  • Bug Fix: Blueprints will no longer remain dirty when compiling when a Get Class Defaults node with a split struct pin is in the graph.

  • Bug Fix: Changing the pin type of a function input from struct to something else now correctly works when the struct input pin had been split.

  • Bug Fix: Undoing 'Collapse to Macro' now works as expected

  • Bug Fix: Prevent CDOs from getting weird names if they are loaded while we are reinstancing

  • Bug Fix: Clear out null entries in the LastEditedDocuments list during PostLoad() and remove entries when a graph is being deleted to prevent new nulls from being added

  • Bug Fix: Fixed crash on launch of a nativized build that includes an instanced default subobject that's referenced by another instanced default subobject.

  • Bug Fix: Fixed a bug where a bogus value could be read from a Map Find node if a find failed after a previous success

  • Bug Fix: Can no longer select remove pin on split pins on a MakeSet node.

  • Bug Fix: Cast nodes can no longer be switched from pure to impure while debugging.

  • Bug Fix: Fixed a packaging code build failure that would occur with a nativized Blueprint class that contained a UInterfaceProperty.

  • Bug Fix: Fixed a crash on load when an external variable member reference's owning type could not be loaded.

  • Bug Fix: It is no longer possible to create a set or map with duplicate entries from the Blueprint virtual machine.

  • Bug Fix: Remove Tooltip, Category, and HideCategories tooltip from the Blueprint generated class if source data is cleared, this allows these fields to be cleared after they have been set

  • Bug Fix: Subobjects in Sets and Maps are now properly patched into the linker table. Required add of missing implementation for sets/maps to FInstancedPropertyPath, correct uproperty logic in FFindInstancedReferenceSubobjectHelper::GetInstancedSubObjects_Inner

  • Bug Fix: Added support for creating appropriate outers for objects that must be nested within another class during fuzzing (ones that specify Within=, other relationships aren't knowable yet)

  • Bug Fix: We now prevent ConstructGenericObject nodes from compiling in a Blueprint if the selected class type does not include 'BlueprintType' in its inheritance hierarchy.

  • Bug Fix: Fix for crash when attempting to access a value in an array by ref, when the array being accessed was trying to be found on a null object ref

  • Bug Fix: Placing a get to an input parameter with same name as a member variable no longer creates an incorrect property reference.

  • Bug Fix: Fix rare crash when running ConformImplementedEvents when loading .uassets asynchronously

  • Bug Fix: Fixed a potential crash when changing the ChildActorComponent class default value on a Blueprint that also sets the class in the Construction Script.

  • Bug Fix: Fix ActorBoundEvent and ComponentBoundEvent to always refresh their event signature from the delegate property they are bound to, which will fix broken Blueprints when those signatures are moved or renamed

  • Bug Fix: CollectGarbage Blueprint node now correctly works in shipping builds.

  • Bug Fix: Fixed non-native script interface property value initialization for nativized Blueprint class default objects.

  • Bug Fix: Fix issue where GUID variables on Blueprints would not correctly update after being cleared or initialized

  • Bug Fix: Fixed a compile error in UHT-generated boilerplate code after choosing to package with Blueprint nativization enabled if the project includes a converted User-Defined Structure asset.

  • Bug Fix: Fix issue where pasting or moving actors between levels would break delegates bound within that actor/component hierarchy

  • Bug Fix: Fixed bug in Blueprint Compilation Manager that could result in a crash when compiling Blueprints that both inherited from another Blueprint and called functions in that Blueprint

  • Bug Fix: Fixed issues where a class reference to a Blueprint class in a set or map could fail to load correctly.

  • Bug Fix: Fixed NegateInt/Float in StandardMacros returning an unchanged value even though the passed in reference had been changed.

  • Bug Fix: Fixed generated code failing to compile when nativizing a Blueprint which has a property of a less derived type referencing a sub object with modified default properties declared in a more derived class.

  • Bug Fix: Fixed crash when adding component to child actor class after a component of the same name was removed from the parent.

  • Bug Fix: Fix grammar and improve clarity of comment for DestroyComponent node

  • Bug Fix: Fix crash renaming a composite graph with no bound graph.

  • Bug Fix: Fix native code generation for MakeMap node.

  • Bug Fix: Fixed crash that could occur when compiling Blueprints that had function calls to Blueprints that used Construct Object nodes (e.g. SpawnActorFromClass or ConstructObjectFromClass)

  • Bug Fix: Fixed bug copy pasting collapsed graphs resulting in a crash or invalid graph.

  • Bug Fix: Functions that have parameter type changes (rather than name changes) now properly orphan their pins

  • Bug Fix: Fix crash when diffing a Blueprint whose older version's parent Blueprint has been deleted.

  • Bug Fix: Fixed rare assertion failure when undoing Blueprint graph node deletion operations

  • Bug Fix: We no longer emit a BOM to generated nativized Blueprint asset source files encoded as UTF-8. Fixes an issue with C++ compilation on some platforms.

  • Bug Fix: Fixed a crash on load in a nativized build caused by a reference to a BP class containing a nativized enum

  • Bug Fix: Fix construct object from class nodes not clearing orphan pins when connection broken. Improved warning messages about orphaned pins to include the name of the node it is occurring on. Fixed some bad content causing an orphan pin.

Core

  • New: Support for Visual Studio Code

    • Pass "-vscode" to GenerateProjectFiles in order to create a set of task/launch/cppconfig files that can be used by Visual Studio Code to build and debug Unreal Engine projects

    • A new source code access plugin that will allow the opening of projects and source files in Visual Studio Code

  • New: Chromium Embedded Framework (CEF) upgraded to branch 3071 Win32/Win64/Mac. Added web browser support for foreign language character input via IME.

  • Core: Various improvements to FTimespan

  • Core: Added scalar division to FTimespan

  • Core: Added TLruCache template for least-recently used caches

  • Core: Added FTimespan::Ratio

  • Changed the default sorting algorithm to intro sort. - Algo::Sort and ::Sort will call Algo::IntroSort - The sort version that was in Algo::Sort is now in Algo::LegacySort

  • Added the ability to verify the DDC content is not stale. Systems have to opt in (-VerifyDDC).

  • Fixed documentation comments for FName inequality operator.

  • Fixed incorrect definition of DECLARE_DELEGATE_NineParams, DECLARE_MULTICAST_DELEGATE_NineParams macros.

  • Added FString::ToUpper() and FString::ToLower() rvalue overloads for improved efficiency.

  • Improved UnrealHeaderTool to support multiple interface definitions in a single header.

  • Improved UnrealHeaderTool's error message when unsupported template parameters are provided in a TSet property.

  • Improved Intellisense when generated headers are missing or out of date (eg. line numbers changed, etc...). These errors seem to be masked by VAX, but are present when using the default Visual Studio Intellisense. UCLASS macro is defined to empty when INTELLISENSE is defined. Previous macro was preventing any following class declaration being parsed correctly if generated code was out of date, causing squiggles over all class methods/variables. Insert a semicolon after each expanded GENERATED_BODY macro, so that if it parses incorrectly, the compiler can still continue parsing the next declaration.

  • Added container modification checks to ranged-for loops which are iterating over TMap, TSet and TSparseArray.

  • Added code to verify compression flags in package file summary to avoid cases where corrupt packages are crashing the editor

  • Added a batch file to Engine/Build/BatchFiles for detecting and running MSBuild

  • Added VisitTupleElements, which calls the given functor with each element in the tuple.

  • Improved UnrealHeaderTool's error message when multiple types with the same name are found.

  • Changed the logic so that engine UObjects boot before anything else. The engine classes are known to be cycle-free, so we will get them done before moving onto game modules.

  • UENUM enumerator initializers can now be arbitrary C++ constants, including values which are not parsed by UnrealHeaderTool (e.g. values from third party headers). However, script generator plugins will not have access to these values at script-generation time. Added support for editor-only data UENUMs. Fixed multiple MAX values being generated for UENUMs which already define a MAX.

  • Logging improvements for pak signature check failures

  • Split RunExternalExecutable into RunExternaNativelExecutable and RunExternalDotNETExecutable

  • Added editor support for packages cooked with the Event Driven Loader enabled.

  • Added validation that arguments passed to the checkf macro are valid sprintf types, and fix up a few places which are currently incorrect.

  • When creating GC clusters and asserting due to objects still being pending load, the object name and cluster name will now be logged with the assert.

  • Added FBase64::GetDecodedDataSize() to determine the size of bytes of a decoded base64 string

  • PR #3847: Add GC callbacks for script integrations (Contributed by mhutch)

  • Added support for displaying log timestamps in local time. Set LogTimes=Local in *Engine.ini, or pass -LocalLogTimes on the command line.

  • Various changes to Unreal Build Tool and DotNETUtilities assemblies to help support building and executing on the .NET Core 2.0 platform

  • Added ENABLE_GC_OBJECT_CHECKS macro to be able to quickly toggle UObject pointer checks in shipping builds when the garbage collector is running.

  • Fixed a race condition with the async loading thread enabled caused by missing linker object.

  • PR #3839: Make non-encoding specific Base64 functions accessible (Contributed by stfx)

  • Moved some common C# classes into the DotNETCommon assembly

  • FString::Trim() and FString::TrimTrailing() have been replaced with separate versions to mutate (TrimStartInline(), TrimEndInline()) or return by copy (TrimStart(), TrimEnd()).

  • Allow the network version to be set via Build.version if it's not overriden from Version.h.

  • UBT - Add a ToString to ProjectFile.Source file to help with debugger watch presentation

  • Plugins may now specify a list of supported target platforms, which are propagated to any .uproject file that enables it. This has several advantages over the per-module platform whitelist/blacklist: Platform-specific .uplugin files can now be excluded when staging other platforms. Previously, it was only possible to determine which platforms a plugin supports by reading the plugin descriptor itself. Now that information is copied into the .uproject file, so the runtime knows which plugins to ignore. References to dependent plugins from platform-specific plugins can now be eliminated. Plugins containing content can now be unambiguously disabled on a per-platform basis (having no modules for a platform does not confer that a plugin doesn't support that platform; now it is possible to specify supported platforms explicitly). The editor can load any plugins without having to whitelist supported editor host platforms. UE4 targets which support loading plugins for target platforms can set TargetRules.bIncludePluginsForTargetPlatforms (true for the editor by default, false for any other target types). This defines the LOAD_PLUGINS_FOR_TARGET_PLATFORMS macro at runtime, which allows the plugin system to filter which plugins to look for at runtime. Any .uproject file will be updated at startup to contain the list of supported platforms for each referenced plugin if necessary.

  • Fixed lazy object pointers not being updated for streaming sub-levels in PIE. Fixed lazy pointers returning object that is still being loaded which could lead to undefined behavior when client code started modifying the returned object.

  • PR #3760: Fix typo (Contributed by jesseyeh)

  • Made MoveTemp static assert when called on a const reference or rvalue, to allow inefficiencies to be tracked more easily. Added MoveTempIfPossible which follows the earlier behavior, which is still useful for templates and macros where it's unclear if the argument is valid.

  • Removed the extraneous subfolder when writing out .mprof files.

  • Fix non-thread safe construction of FPluginManager singleton. Length of time spent in the constructor resulted in multiple instances being constructed at startup, making the time to enumerate plugins on slow media significantly worse.

  • Optimizations to SignedArchiveReader

  • Improved assert message when the initial package read request was too small.

  • Made max package summary size to be configurable with ini setting

  • Add support for a "Mods" folder distinct from the project's "Plugins" folder, instead of using the bIsMod flag on the plugin descriptor. Mods are enumerated similarly to regular plugins, but IPlugin::GetType() will return EPluginType::Mod. The DLCName parameter to BuildCookRun and the cooker now correctly finds any plugin in the Plugins or Mods directory (or any subfolders).

  • Added a new TArray constructor that takes a raw pointer and a count. Improved checks inside TArray::Append() to allow nullptr in empty ranges.

  • UDataTable::AddReferencedObjects will no longer try to iterate over the RowMap if there's no UObject references in it.

  • Custom Version Container will no longer be always constructed in FArchive constructor. This reduces the number of the Custom Version Container allocations considerably.

  • Removed obsolete code for UHT makefiles.

  • Moved FSimpleObjectReferenceCollectorArchive and FSimpleObjectReferenceCollectorArchive to be internal archives used only by FReferenceCollector so that they are constructed only once per GC task instead of potentially multiple times per GC (as was the case with UDataTables and BlueprintGeneratedClasses).

  • Added new AllOf, AnyOf and NoneOf algorithms.

  • Shrunk size of code generated by UnrealHeaderTool, around 10% of Win64 executable size.

  • Deprecate /-prefixed commandline switches as they cannot be distinguished from absolute file paths on Linux/Mac.

  • Bitfield properties can now be exposed on spawn.

  • FName now works correctly with Lex::To/FromString.

  • Added FQuat::InitFromString.

  • Add ability to pass option flags to ActorIterator to enable searching non-active levels

  • Moved the Hamming-weight function from StaticMeshDrawList.inl to FGenericPlatformMath Added SSE versions using _mm_popcnt_u64 for platforms that support it Added a SSE check to gracefully exit when missing the instruction and it was expected to be there

  • Fixed stale modules being enumerated when running UE4Editor-Cmd.exe.

  • Fix DECLARE_LOG_CATEGORY_EXTERN requiring a trailing semicolon if NO_LOGGING is defined.

  • Added a packaging setting that allows the user to choose whether or not to build the game executable. Includes a setting to build the executable only if not using a promoted build ("Only if locally built editor"). The same option has to the "Play" settings in the editor. This allows developers that want to submit game binaries to Perforce to configure the engine to use it without building anything.

  • Bug Fix: Core: Fixed FTimespan import/export/copypaste (UE-43990)

  • Bug Fix: Fixed custom mesh component bounds being computed incorrectly.

  • Bug Fix: Fixed the deserialization of integer properties, which would cause a guaranteed property mismatch each time and an inefficient tag lookup. Added support for converting double and float properties to int properties. Fixed conversion of enum class properties to int properties when their value is greater than 255.

  • Bug Fix: UBT - Minor refactor of BackgroundProcess shutdown in SourceFileWorkingSet. Check whether the process has already exited before trying to kill it during Dispose.

  • Bug Fix: Move pre/post garbage collection delegates into accessor functions so they can be used by globally constructed objects

  • Bug Fix: Build fixes for when malloc profiler is enabled

  • Bug Fix: Fixed parsing error in UnrealHeaderTool when a class name is fully capitalized.

  • Bug Fix: Fixed bad code generation in UnrealHeaderTool when passing a TMap to a BlueprintCallable function.

  • Bug Fix: Fixed FPaths::GetProjectFilePath() to return a value instead of a reference, for thread safety reasons.

  • Bug Fix: Fixed TTuple visualization in the Visual Studio debugger.

  • Bug Fix: Fixed a race condition with async read completion in the prescence of cancels.

  • Bug Fix: Fixed some incorrect EObjectFlags use due to implicit conversions.

  • Bug Fix: Follow up to fixing several edge cases in the low level async loading code.

  • Bug Fix: Fixed several edge cases in the low level async loading code, especially around cancellation. Also PakFileTest is a console command which can be used to stress test pak file loading.

  • Bug Fix: Marking UObject as intrinsic clas to fix a potential crash on Unreal Frontend startup.

  • Bug Fix: UBT - Correct direction of slash in global named mutex creation

  • Bug Fix: Fixed Visual Studio debugger visualizers for containers whose elements are pointers which aren't syntactically like Type*.

  • Bug Fix: Fixed UFunctions disappearing from Blueprints after a hot reload.

  • Bug Fix: Fixed a buffer overrun in TChunkedArray ranged-for iteration.

  • Bug Fix: After loading packages the engine will flush linker cache on uncooked platforms to free precache memory

  • Bug Fix: Include 'ExeBinariesSubFolder' in nmake target path for vcproj files if it exists

  • Bug Fix: Material resources will now be discarded in PostLoad (Game Thread) instead of in Serialize (potentially Async Loading Thread) so that shader deregistration doesn't assert when done from a different thread than the game thread.

  • Bug Fix: Fixed nested preprocessor block parsing in UnrealHeaderTool.

  • Bug Fix: MaterialInstanceCollections will no longer be added to GC clusters to prevent materials staying around in memory for too long

  • Bug Fix: Fixed a race condition in async package reference counting when the async loading thread is enabled.

  • Bug Fix: Fixed Japanese errors not displaying correctly in the cook output log.

  • Bug Fix: Fixed a critical race in the pak precacher.

  • Bug Fix: Fixed critical race which potentially could cause a crash in the pak precacher.

  • Bug Fix: Fixed a critical race condition in the new async loader. This was only reproducible on IOS, but may affect other platforms.

  • Bug Fix: Fixed a critical crash bug relating to a race condition in async package summary reading.

  • Bug Fix: Fixed a crash on UnrealFrontend startup caused by re-assembling GC token stream for one of the classes.

  • Bug Fix: Fixed a critical crash bug with non-EDL loading from pak files.

  • Bug Fix: Fixed the error message in FAsyncPackage::AddObjectReference to refer to the correct scope guard class.

  • Bug Fix: Added missing PF_ATC_RGBA_I into FOREACH_ENUM_EPIXELFORMAT.

  • Bug Fix: Fixed a crash in the taskgraph when running single threaded

  • Bug Fix: Fixed FScopedMallocProfilerLock to be properly non-copyable.

  • Bug Fix: Forced a garbage collection after a hot reload to clean up reinstanced objects which may still be registered to tick.

  • Bug Fix: Fixed bad codegen when TAssetPtrs are passed into BlueprintImplementableEvent functions.

  • Bug Fix: Disabled MallocBinned2 stat collection in shipping builds.

  • Bug Fix: System error dialogs when loading DLLs are now suppressed if -unnattended is on the command line.

  • Bug Fix: Added MemoryProfiler2 to the generated project files.

  • Bug Fix: Fix rare assert involving cancelled precache requests and non-pak-file loading.

  • Bug Fix: Fixed compile errors caused by incorrect line numbers when parsing multiline macros in UnrealHeaderTool.

  • Bug Fix: Fixed a compile error when attempting to serialize a TUnion.

  • Bug Fix: Fixed mismatched stat categories warnings in AudioMixer.

  • Bug Fix: Fixed EObjectFlags' operators so that they can now be used in constexpr contexts.

  • Bug Fix: Made sure the Super Class token stream is also locked when assembling Class token stream with async loading thread enabled. This to to prevent race conditions when loading BP classes.

  • Bug Fix: Fixed a crash caused by recursion guard being enabled with the old async loading path but it should only be active with the Event Driven Loader.

  • Bug Fix: Fixed generated indices of static arrays when saving config files.

  • Bug Fix: Made servers not to link to CEF3 (even if otherwise enabled).

  • Bug Fix: Fix several crashes while incremental cooking if the source content is heavily changed

  • Bug Fix: Change it so Editor builds work like cooked builds when loading packages that are already in memory, it will now reuse them instead of trying to recreate them in place. This fixes several PIE crashes.

  • Bug Fix: Fix issue where IsEditorOnlyObject would return false for objects with editor only classes or outers. There is now a recursive check option that defaults to true.

  • Bug Fix: Reduced the chance of .RC file compilation errors by reducing the number of defines passed in on the command line (excluding definitions that contain "_API")

  • Bug Fix: Removed any deprecated code older than 4.10 that didn't affect content compatibility

  • Bug Fix: Prevent FScopedExternalProfilerBase::StopScopedTimer() from asserting if called an unmatched number of times with StartScopedTimer, as both are exposed to Blueprints

  • Bug Fix: Class Properties are only identical if they are literally the same object. Do not consider the deep compare port flags as object property base does.

  • Bug Fix: Changed ensureAsRuntimeWarning to just evaluate to the expression when USING_CODE_ANALYSIS is true (matching the behavior of ensure() and preventing false positive errors in static analyzers)

  • Bug Fix: Fix issues where using Launch multiple times during one editor session would not pick up all modified files

  • Bug Fix: Fixed error writing files to disk with long package names, due to attempting to create an intermediate file with a GUID appended.

  • Bug Fix: Fixed +Array=... and .Array=... config syntax (unique/non-unique addition) having opposite meaning.

  • Bug Fix: Fix memory corruption crash when using the StreamableManager when the async loading thread is enabled via ini

  • Bug Fix: Fixed console output not working when using -log in a shipping build

  • Bug Fix: Fixed hot reload not considering dependent modules when rebinding a package (e.g. after adding a new class to one). Fixed FMacPlatformProcess::GetDllApiVersion() returning a valid version number for a missing module.

  • Bug Fix: Fix bug where requesting an async load with StreamableManager from a PostLoad could return a partially loaded object, it now queues up to wait for it to properly load

  • Bug Fix: Fixed crashes when accessing console variables with the async loading thread enabled

  • Bug Fix: Fixed a crash when recompiling the Graph Editor module in the editor.

  • Bug Fix: Fixed crash when adding a new native feature pack to a Blueprint project for the first time.

Editor

  • New: Array elements can now be re-ordered using a drag and drop handle on the left side.

  • It is now possible to save and reload the result of the 'profileGPU' command. The ProfileVizualizer can be found under Windows\Developer Tools\Debug menu.

  • Added the ability to remove vertex colors from static meshes from the content browser

  • Added flag to PrimitiveComponent to disable certain BP components to be excluded from HLOD generation

  • Added support for incremental cooking in File->Cook Content via the new flag in Project Settings, Editor->Cooker->Iterative cooking.

  • Added FSourceCodeNavigation::GetSelectedSourceCodeIDE() which returns the name of the selected source code accessor. Replaced all usages of FSourceCodeNavigation::GetSuggestedSourceCodeIDE() with GetSelectedSourceCodeIDE(), where the message is referring to the opening or editing of code.

  • Added an option to allow overriding the local DDC path from the editor (under Editor Preferences > Global > Local Derived Data Cache).

  • Add fbx exporter option dialog.

  • Create a LOD Custom Mode in the meshes editor UI. This allow user to compare details values between LODs

  • Added dual key bindings support. There is another column In Editor Preferences - General - Keyboard Shortcuts and users can now set two keyboard shortcuts for each operation.

  • Enabled high DPI awareness for the editor. The editor now respects OS level DPI scaling. On high dpi monitors fonts should look crisp and the editor properly scaled.

    • Editor viewport screen percentage is now adjusted automatically to account for DPI scaling. By default the scene will be rendered at a lower resolution based on screen percentage calculated based on 100/DPIScale. Users can override this automatic calcuation in the editor performance options if desired.

  • Focus the details view when actor selection changes if it is not focused

  • Issue warning when we found zero normal, tangent or binormal

  • PR #3852: Add FEditorDelegates::BeginLocalPlay event (Contributed by mhutch)

  • PR #3851: Add argument to pass params to standalone play session (Contributed by mhutch)

  • Merged the "Categories" menu into the Output Log "Filter" menu

  • Added a new type of property editor called a property row generator. This is essentially a details panel that can generate each unique row but adds no visual styling around the property editors and does not generate a master tree widget for the properties. This is useful for creating proper widgets for properties and displaying them in a UI that is not the details panel

  • The output log now applies a search to its editable text when filtering to highlight the term matches on each line

  • Make sure we export normals, tangents and bi-normals information when exporting to FBX.

  • Fbx SDK 2018.1.1 Integration

  • Added automated import support for USD. Automated import now also supports loading a level per import group so that factories may spawn actors and manipulate the level

  • Added ability for users to specifiy usd plugins for the USD importer

  • Added ability to set properties from USD attributes when using scene import to import USD files. See UsdPropTestScene.usda for an example file of how this works

  • New setting for specifying a custom port when launching a multiplayer PIE instance.

  • Moving favorited levels to a standard flyout submenu under File.

  • PR #3933: Git plugin: add "branch source" in history window (Contributed by SRombauts)

  • Added support for ArrayRemove, ArrayClear in property change event type Added the possibility to know if an archetype instance was updated

  • Bug Fix: Matinee: Fix Matinee redirect missing as UClass has been GC'ed (GitHub PR 3382)

  • Bug Fix: Editor: Fixed texture samplers in materials not getting notified when sRGB mode changed

  • Bug Fix: Fixed a crash occurring when Generating Proxy Meshes for an HLOD cluster which was not overlapping with the culling (landscape) mesh

  • Bug Fix: Optimize checks for whether the game project contains source code. Now stops as soon as the first file is found and ignores directories beginning with a '.' character (eg. .git)

  • Bug Fix: Make sure a warning is log when we cannot export an animation sequence.

  • Bug Fix: Fix merge actor do not keep the material slot name

  • Bug Fix: Fix crash accessing potentially invalid parent layout from a detail category

  • Bug Fix: The class viewer now functions properly on mac.

  • Bug Fix: Fix ctrl+w not duplicating on mac

  • Bug Fix: Fix LOD identification in USD files

  • Bug Fix: PR #3897: Git plugin: fix action icon in history window (Contributed by SRombauts)

  • Bug Fix: Fix widget component spawning widgets when cooking

  • Bug Fix: Fix mac menus updating during unsafe times such as modal windows and slow tasks

  • Bug Fix: Fix color picker not properly converting FColor properties back to gamma space

  • Bug Fix: Fix bogus warning message when a property has an editcondition that is not marked edit aynwhere. This has always been supported and is the correct way to make an editcondition

  • Bug Fix: Fix USD importing not respecting DestinationPath set by the automated import commandlet

  • Bug Fix: Editor: Fix toolbar shared ref which was keeping the viewport toolbar around when switching between default and cinematic viewports.

  • Bug Fix: Prevent slow task feedback from performing slow operations (flushing rendering commands, checking if shaders are initialized) when there are no modal dialogs open

  • Bug Fix: Guard against high res screenshot crashing if the requested image size doesnt match the image data size

  • Bug Fix: Guard against crash in the details panel when there is a message in the queue and something scrolls into view when the list has been invalidated

  • Bug Fix: Reduce memory footprint when importing large FBX scene PR #3834

  • Bug Fix: Fix the fbx re-import factory handler to say failed in case there was no geometry to import.

  • Bug Fix: PR #3850: Source code navigation is now extensible

  • Bug Fix: Fix staticmesh merge applying scale twice PR #3807

  • Bug Fix: Fix how the FBX importer find the sample rate to import an animation.

  • Bug Fix: Fix locked actors still being moved by piloting them

  • Bug Fix: Fix import of large FBX scene (over 2 Gb) base on pr #3784

  • Bug Fix: fix FBX reset options code.

  • Bug Fix: Make sure all staticmesh general settings(build, reduce...) are persist when we re-import from a FBX file.

  • Bug Fix: Exporting render targets now chooses PNG if the render target format is an LDR format

  • Bug Fix: Fixed a bug where the transform widget on selected actors occasionally disappeared after exiting PIE mode.

  • Bug Fix: PR #3733: UE-46683: Don't increment MovieIndex when playing next movie (Contributed by projectgheist)

  • Bug Fix: Dont save non-dirty built data when playing PIE in a standalone process

  • Bug Fix: PR #3715: Turn off the automatic expiration of the restore assets notification (Contributed by IHappyDayI)

  • Bug Fix: Fixed a bug where the Editor Undo History didn't refresh when after a single undo followed by a single action.

  • Bug Fix: Fixed a bug where World Outliner selection did not update transform widget location during play.

  • Bug Fix: Hide property matrix button from settings editor. For the combined settings objects view this produces nonsensical results and the property matrix is for bulk editing which settings are not designed for.

  • Bug Fix: PR #3682: Details view - matrix button visibility toggle and crash fix (Contributed by kamrann)

  • Bug Fix: Fixed cases where the redo buffer could be removed despite no new transaction being added to the undo buffer.

  • Bug Fix: Fixed a Pixel Inspector crash when using the high-precision normals format.

  • Bug Fix: Fixed foliage not updating to match the new landscape height

  • Bug Fix: PR #3942: Sort Data Table Structures Alphabetically (Contributed by Nick-Pearson)

  • Bug Fix: PR #3932: UE-48693: if instead of while statement (Contributed by projectgheist)

  • Bug Fix: Fixed a profiler crash when selecting the "Maximum" button while aggressively filtering.

  • Bug Fix: Fixed a bug where editor would crash when showing the property matrix and deleting one of the targeted actors.

  • Bug Fix: Fix several issues with the Component Transform UI that is used for actor and component placement. Dragging to spin rotation now works better and in most cases it will correctly maintain the exact rotation entered. It now correctly displays "dirty" status and will propagate values better to inherited or instanced components.

  • Bug Fix: Fix issue where pressing escape while dragging on a numeric field with a spinner could lock input from ever working again

  • Bug Fix: Fixed HLOD selection sphere persisting on undo/redo

  • Bug Fix: Fixed ortho viewports being bright white in sub-editors

  • Bug Fix: Make editor scene viewport backbuffer format consistent with game back buffer format to avoid quantization.

  • Bug Fix: Fixed issue with vertex colors being distorted after using the Merge Actor tool

  • Bug Fix: Fixed texture disappearing in the Texture Editor when zoomed to a zoom level other than "Zoom to Fit".

  • Bug Fix: fix reduce algorithm to make sure the order of used material is consistent

  • Bug Fix: Fixed an issue where sometimes a client wouldn't be able to connect to the server if "Use Single Process" was unchecked in the editor Play settings and starting a play session with more than one player.

  • Bug Fix: Fix crash setting edit conditions on inner array props due to potentially stale array indices

  • Bug Fix: Fixed rare import failure in AbcImporter

  • Bug Fix: Fixed a hang at exit after asset reimport.

  • Bug Fix: Fixed FastXML to properly parse attributes with legally unescaped single and double quote characters

Content Browser
  • Add Export To CSV to Content Browser/Asset Audit windows, accessible from the view options while in column mode

  • Bug Fix: Fixed: Entering search expression into Content Browser crashes Editor in some rare cases

  • Bug Fix: Fixed various issues with filename validation for collections (e.g. trying to use system reserved keywords as filenames).

  • Bug Fix: Custom columns with the same name as fixed columns no longer cause infinite duplication in the Content Browser

  • Bug Fix: Fixed a crash when reloading the lighting data for a world while the world was open in the editor

  • Bug Fix: Content browser settings are now global instead of per-project

  • Bug Fix: Solved an issue where Content Browser returned to the previous directory after duplicating a searched asset.

  • Bug Fix: Cleaned up source control log spam when finding out-of-date dependencies when reloading assets

  • Bug Fix: Improved drag-and-drop validation between Content Browsers

  • Bug Fix: Fixed a crash when Force Deleting the MapBuildData package.

  • Bug Fix: Fixed crash when doing editor 'Force Delete' on a static mesh whose distance field is still being built.

  • Bug Fix: Fix for asset context menu warning on Mac.

  • Bug Fix: Fixed a crash that could happen if renaming an asset failed

Foliage
  • Add the possibility to specify if we need CPU access to the instance buffer depending on the usage.

  • Bug Fix: Bug fixing of Static Mesh Instancing

  • Bug Fix: Added a guard to prevent a possible crash when using CVarFoliageDiscardDataOnLoad.

  • Bug Fix: User can no longer hide the actor holding the foliage instances

  • Bug Fix: No longer mark the package dirty while generating the GrassMap

  • Bug Fix: When occlusion query is disabled no longer process sub queries

  • Bug Fix: Fixed a possible graphic corruption if you had unbuilt instances being draw on Vulkan/DX12 device

  • Bug Fix: Handle static mesh instancing removal properly

  • Bug Fix: Properly handle the creation of Instance Static Mesh Component from c++ Add handling of all operations on the PerInstanceSMData array when done in PostEditChange

Landscape
  • Improve performance when having many landscape layer in Paint mode

  • Bug Fix: Prevent moving a Landscape Actor when running in Simulate Mode

  • Bug Fix: Prevent possible crash when building lighting with a non squared heightmap

  • Bug Fix: Fixed: Occasional Landscape related crash while streaming in sub-levels

  • Bug Fix: Prevent copy of landscape in simulate mode/or any other PIE related mode

  • Bug Fix: Properly register to material changes event so we always have an up to date used layer list

  • Bug Fix: Fixed a ensure related to bad handling of copy/paste of spline component

Media Framework
  • General

    • NEW: Moved high-level media player logic into reusable Engine-agnostic classes

      • Low-level interfaces exposed via facade (see FMediaPlayerFacade)

      • Reusable helper objects for creating, caching and consuming samples

    • NEW: Support for multiple output formats per media track (see IMediaTracks)

    • NEW: API for querying player’s caching state (IMediaCache)

    • NEW: API for enumerating A/V capture devices (IMediaCaptureSupport)

    • NEW: Time source API (for internal and external clocks / timecode generators)

    • NEW: Exposed buffering and connecting states

    • NEW: Separation of media overlays into caption, subtitle and custom text tracks

    • NEW: Added extensive verbose logging in most player plug-ins

      • To enable, add the following to your project’s Engine.ini:

    • Better separation of concerns in media player interfaces

    • Delegates were replaced with thread-safe interfaces

    • Refactored push-based into pull-based API (see IMediaSamples)

    • Most operations are now asynchronous to eliminate hitches

    • Multiple media assets can now use the same MediaPlayer

    • Modernized all Media related modules (IWYU, C++11, documentation)

    • NEW: multi-stage ticking API

      • Can be used by any object, not just media players (see IMediaClockSink)

      • Better frame utilization and predictable timing

    • NEW: timecode based sample processing pipeline

    • NEW: high-frequency (200 Hz) ticker for time sensitive samples, such as audio, camera tracking, and face tracking (see IMediaTicker and IMediaTickable)

    • NEW: Sample queues and pooling for better memory usage

    • NEW: Generic C++ template for media object pooling (see TMediaObjectPool)

    • NEW: String conversion functions for media enums (see MediaHelpers.h)

    • Media Framework is now mostly lock-free to eliminate thread stalls

    • Removed all render thread flushes & render thread dependencies

    • Fixed media texture crash when recreating render device, i.e. when changing resolutions

    • Fixed all known multi-threading and concurrency issues

  • Audio

    • NEW: Integrated with new Audio Mixer API

    • NEW: Media Sound Components (replaces Media Sound Waves)

      • Built on top of synth components

      • Can be attached to level actors

      • Can be used in UMG widgets

    • NEW: Media sample rate converter (previously supported only 16-bit @ 44.1kHz)

      • Supports int8, int16, int32, float, double input samples

      • Supports any sample rate, including variable rates

      • Supports up to 8 audio input channels

      • Supports 1 and 2 output channels (surround sound is scheduled for 4.19)

    • NEW: Spatial audio supported via media sound components on Actors

  • Video

    • NEW: External texture sampler API

      • Enables video frame rendering without memory copies

      • Currently only implemented for Android

    • NEW: API for 360 and stereoscopic video players (see IMediaView)

      • Currently not implemented in any player plug-ins

    • Replaced problematic triple-buffering mechanism with sample queues

    • Better support for exotic video and pixel formats, and faulty encoders

  • Media Player Editor

    • NEW: Track format selector menu

    • NEW: Audio/video capture device selector

    • NEW: Cache state visualization (for player plug-ins that support it)

    • NEW: Playlist controls & ability to save playlists (playlist editing is still WIP)

    • EXPERIMENTAL: Text overlay visualization (currently not used)

    • EXPERIMENTAL: 360 video viewport controls (currently not used)

    • Scrubbing is now more responsive

    • Improved information overlays

  • Media source assets

    • NEW: Per-platform media player overrides are now functional

  • Blueprints

    • NEW: BP functions for querying media player tracks and track formats

    • NEW: BP function library for enumerating audio, video and webcam capture devices

    • NEW: BP events for SeekCompleted and TracksChanged

    • NEW: BP functions for adding files and URLs to media play lists

  • Media Player Plug-ins

  • AndroidMedia

    • NEW: External texture sampler support for highest performance (no data copies)

    • NEW: Asynchronous file loading

    • Improved support for streaming video

  • AndroidCamera

    • NEW: Media Framework plug-in for Android webcam support

    • Access front or rear camera using available resolutions / frame rates (see Mobile Major Features for additional details on this feature)

  • AvfMedia (macOS / iOS)

    • NEW: Support for caption tracks

    • NEW: Audio playback via Audio Mixer (will be enabled in 4.18 Preview 2)

    • Fixed track switching issues / lock-ups

    • Fixed rendering artifacts/flicker on some devices

    • Fixed aliasing/pixelation with high-res media

    • Removed render thread flushes to prevent hitches

    • Improved video sample texture handling

  • ImgMedia (macOS, Windows)

    • Replaces the old ExrMedia plug-in

    • NEW: Generic file loader for extensible file format support

    • NEW: BMP, JPG, PNG support (albeit much slower than EXR due to slow legacy loaders)

    • NEW: Proxy directories for alternative (i.e. low-res) image streams

    • NEW: Per-image sequence frame rate & proxy override (i.e. for using a low-res sequence during development)

    • NEW: Supports playback synchronization with Sequencer

    • NEW: Loading and caching system similar to Shotgun RV

    • NEW: Multi-threaded EXR loader

    • NEW: Asynchronous file loading

  • WmfMedia (Windows)

    • State machine has been completely rewritten

    • NEW: Track switching

    • NEW: SAMI subtitle file support

    • NEW: Low-latency pipeline support in Windows 8 and newer

    • EXPERIMENTAL: Support for audio and video capture devices

    • Fixed color space conversion problems with certain encoders

    • Fixed audio track lock-up when no audio device available

    • Fixed playlist related problems

    • NEW: Asynchronous file loading

    • Fixed skipping to next I-frame when pausing

    • NOTE: Hardware acceleration is not finished yet

Material Editor
  • New: Added Advanced Preview Scenes to the Material Editor and the Material Instance Editor. Adjust the settings from the Windows menu.

  • The realtime state of the preview viewport in the Material Editor and Material Instance editor now also changes when the turntable rotation is toggled for the advanced preview scene.

  • Bug Fix: Fix for parameter tooltips not being found in the Material Editor.

  • Bug Fix: PR #3913: Fixed 3D preview issue in the material editor (Contributed by YuchenMei)

  • Bug Fix: Adjust floor height in material editor preview scene based on preview mesh

Sequencer
  • New: External textures are now fully supported and enforced when attempting to sample external texture types in materials.

    • Textures can now dynamically provide an external texture GUID at runtime, which is queried by the uniform expression. Statically defined GUIDs remain supported.

    • Added necessary ExternalTexture(Parameter) methods to the material compiler and HLSL translator

  • New: New ImgMedia media player plug-in for EXR/BMP/PNG/JPG image sequences

  • New: Media: Media Framework 3.0 API updates

  • Media: Added Buffering media event

  • Media: Split media capabilities into features and controls

  • MediaAssets: Filtering out unused UTexture properties in UMediaTexture in the Editor

  • MediaAssets: Notifying materials when media texture properties changed.

  • MediaAssets: Added unit tests for UMediaPlaylist

  • MediaAssets: Added looping for play lists

  • Cine Camera: Add toggle to disable constraining the roll when look at tracking is enabled. This allows the user to animate the roll while tracking an object.

  • Sequencer: Add OnPlayReverse() event for when playback is in reverse

  • Sequencer: Import FBX settings. Added settings to toggle force front x axis and whether to create cameras that don't already exist in the level.

  • Sequencer: Added option to rerun construction scripts on bound actors in the sequence every frame.

  • Movie Scene Capture: Delay on shot boundaries by setting the sequencer play rate to 0. This allows particles, TAA, and other effects to settle on the shot cuts.

  • Movie Scene Capture: Expose "Open Folder" hyperlink while capturing.

  • Sequence Recorder: Add interpolation and tangent settings for animation recording keys

  • Sequencer: Track drag drop. Implement drag and drop onto a camera track, subscene track, and cinematic shot track.

  • Sequencer: Import static/default transforms and camera focal lengths from fbx.

  • Fbx: Add static transform values to curve data import.

  • Optimization pass on key and trajectory rendering when dealing with large numbers of tracks and/or keys

    • Memory is reserved where possible on hot code paths

    • Reduced amount of sorting and shuffling of arrays where possible

    • Key collections (and thus key groups) are now cacheable so we don't have to regenerate them every frame

    • Reduced amount of overdraw on keys in sequencer UI

    • Added editor preference to limit the number of keys shown around the current time when rendering trajectories in the editor (default=250)

    • Optimized various algorithms used for key introspection and manipulation

    • Overlapping keys are now highlighted with a red border

  • Sequence Recorder: Add drag and drop functionality to sequence recorder

  • Cine Camera: Added GetFilmbackPresetName(), SetFilmbackPresetByName(), GetLensPresetName(), SetLensPresetByName().

  • Sequencer: Added slip functionality for sections. Hold down shift and drag the section left and right (as if you were moving it).

  • Bug Fix: Sequencer: Fixed skylight and reflection components off by one frame in PIE

  • Bug Fix: GitHub #3183: Conversion to base class is inaccessible.

  • Bug Fix: Sequencer: Fixed sections not being filtered on select in range

  • Bug Fix: Camera Rig: Fix crane and rail not being packaged properly.

  • Bug Fix: Sequencer: Update spawnable name when the spawnable actor name is changed.

  • Bug Fix: Sequencer: Fix a few player state issues. When paused, calling stop now tears down properly (spawnables are removed, etc). When a level sequence is deleted, tears down properly as well.

  • Bug Fix: Sequencer: Fix cinematic mode getting activated on BeginPlay() instead of OnStartedPlaying().

  • Bug Fix: PR #3872: Fix small typo in ImagePlate Plugin (Contributed by TheCodez)

  • Bug Fix: Sequencer: Put level visibility tracks in the SpawnObjects evaluation group to ensure levels are streamed before any possessable bindings are resolved

  • Bug Fix: Sequencer: Fix crash in removing delegate

  • Bug Fix: Sequencer: Array bounds check.

  • Bug Fix: Movie Scene Capture: Override cinematic mode in the movie scene capture.

  • Bug Fix: Sequencer: Capture thumbnail before pre save so that the thumbnail isn't captured with the evaluation in a reset state.

  • Bug Fix: Movie Scene Capture: Move window to within the desktop bounds when resizing.

  • Bug Fix: Fbx: Fix aperture width, height, focal length and field of view calculations.

  • Bug Fix: Sequencer: If already at the correct play position, don't jump to it. This fixes a bug where if you play to a position and pause, resuming play will playforward and not keep pausing.

  • Bug Fix: Sequencer: Serialize the custom guid version for sections.

  • Bug Fix: Sequencer: Call SkyLightComponent's SetLightColor() directly, similar to LightComponent

  • Bug Fix: Actor Sequence: Add runtime as a plugin, remove from dynamically loaded module list.

  • Bug Fix: Sequencer: Add transactions to easing type and setting changes.

  • Bug Fix: Sequencer: Fix ensure when deleting sections. Sections were getting removed from the array during iteration.

  • Bug Fix: Sequencer: Fixed crash caused by erroneous persistent references to FSequencer.

  • Bug Fix: Fix crash when recording to animation in-use

  • Bug Fix: Sequence Recorder: Record to the specified target animation for the target actor only. Newly tracked components will have newly created animations so that they don't record to the same target animation assets. Sequence Recorder: Close the target animation asset editor if it exists before recording into it.

  • Bug Fix: WmfMedia: Fixed NV12 webcam output not working for non-multiple of 16 horizontal resolutions

  • Bug Fix: WmfMedia: Fixed NV12 webcam output not working for non-multiple of 16 vertical resolution

VR-Editor
  • Bug Fix: Allowing (smart) translation snapping if smart snap is on but translation snap is disabled

World Browser
  • Added more zoom levels for World Composition window

  • Better selection behavior in World Composition window

  • Added a new context menu command to lock all tiles location in World Composition window. Once tiles are locked they can't be accidentally moved/dragged.

  • Bug Fix: Fixed: Toolbar widget clipping issues in World Composition window

Editor and Tools

  • Added feature to allow for calculating final Light Map Resolution for the output Static Mesh from Merging Actors according to the input Static Mesh Light Map resolutions.

  • Adding ability to add custom row and properties to categories for detail customizations.

  • Renamed "Find in CB" toolbar button to "Browse" and renamed "Search" (in Blueprints) to "Find", so terminology is consistent and keyboard shortcuts make sense (Ctrl+B for Browse, Ctrl+F for Find)

  • Bug Fix: Fixed clothing meshes sometimes not drawing from certain angles when the clothing tools were in paint mode, as the mesh bounds were being computed incorrectly.

  • Bug Fix: Fixed merging negative-scaled actors breaking the mesh normals

  • Bug Fix: Fixed crash when specifying too large texture size for Bake Material tool.

  • Bug Fix: Fixed issue with Bake Out Material not updating data used for texture streaming, causing ensure.

  • Bug Fix: Fixed bug with Merge Actor when using recompute normal and Overlapping UVs causing incorrect normals.

  • Bug Fix: Asset reloading now defers re-opening asset editors until post-GC phase

  • Bug Fix: Fix issues renaming maps that contain legacy map build lighting data

  • Bug Fix: Removed any deprecated code older than 4.10 that didn't affect content compatibility

  • Bug Fix: Fixed crash that could occur when opening a physics asset and deleting unused bones.

  • Bug Fix: Fixed issue when trying to Vertex Paint on a Skeletal Mesh without a Physics Asset or non overlapping Physics Bodies with the Skeletal Mesh

  • Bug Fix: When visualising constraint axes in the physics asset editor, the axis arrows are now scaled in world space according to the user-specified constraint drawing scale, instead of being a fixed size on-screen.

  • Bug Fix: Fixed issues with HLOD content left unchanged after a Level is renamed

  • Bug Fix: Fixed issue with Texture Sizing Type not having any effect on Merge Actor functionality

Landscape
  • Bug Fix: Marked ULandscapeComponent and ULandscapeHeightfieldCollisionComponent as Within=LandscapeProxy, since they do CastChecked on their Outer all the time

Sequencer
  • Bug Fix: Fixed issue with Animation re-initializes when using AnimBlueprint for the animation track.

  • Bug Fix: Fixed a potential crash in UMediaPlaylist::Insert and UMediaPlaylist::RemoveAt when passed an invalid index

  • Bug Fix: Prevented crashes in some methods of UMovieSceneSequencePlayer when there is no Sequence set Prevented a crash in FMovieSceneRootEvaluationTemplateInstance::Evaluate when the instance has no template set

  • Bug Fix: You can only select AnimSequence or AnimComposite on the property window of track.

Gameplay Framework

  • New: Cross-level Actor references are now better supported, using SoftObjectPath and SoftObjectPtr (called Soft Object Reference in Blueprints). As part of this, FStringAssetReference and TAssetPtr were renamed to FSoftObjectPath and TSoftObjectPtr.

If you create a SoftObjectPtr property pointing to an Actor or subclass, they will have an improved UI that will show rather they are unloaded or broken, as well as the full Actor ID they point to. Cross level references like this will now correctly be fixed up if the pointed to actor is renamed or moved using the "Move to current level" option. It will attempt to check out and resave any other levels/sequences that point to that specific actor. They will also work correctly in PIE when level streaming is used.

  • Draw box around Actor being debugged by 'ShowDebug' command, to help identify what we're viewing.

  • Allow Scale to be set on an AnimNotify as well as the spawn emitter gameplay statics

  • Add ToString Blueprint functions for SoftObjectReference/SoftClassReference/PrimaryAssetId/PrimaryAssetType to assist in debugging

  • USceneComponent::ComponentToWorld has now been made private per the previous deprecation message.

  • Change the way that PIE networking works so the sent paths strip the PIE prefix and restore on load. This allows connecting a PIE client/server to an external non-PIE client/server.

  • Change it so Standalone PIE and multiprocess networked PIE do not save temporary levels starting with UEDPC and instead prompt the user to save. This is how Launch On works by default already, and this fixes several cross level reference and sequencer bugs.

  • Added GetKeysForAxis() to complement GetKeysForAction() in UPlayerInput

  • Add support for downloading Chunks on demand to the Asset Manager, if they are set up for your project. AcquireResourcesForAssetList can be used to predownload chunks, and chunks will be downloaded on demand if bShouldAcquireMissingChunksOnLoad is true in the Asset Manager Settings

  • Add FCollectionReference type and customization that allows selecting a Collection in the editor. Add one to PrimaryAssetLabel so it will label all assets in a Collection

  • Small optimization to CleanupActors

  • Reduced memory footprint of UActorComponent, USceneComponent, UPrimitiveComponent, UMeshComponent, UStaticMeshComponent, and UParticleSystemComponent.

  • UStaticMeshComponent::StaticMesh has completed being made private. Use Get/SetStaticMesh() instead.

  • AHUD::GetOwningPlayerController and GetOwningPawn are now public accessors.

  • Added FTransform::TransformRotation(FQuat) and FTransform::InverseTransformRotation(FQuat). Added matching Blueprint library functions taking FRotator. (Contributed by EverNewJoy).

  • Active force feedback effects and components can now ignore time dilation.

  • Added console command to disable URO interpolation.

  • Exposed GetAzimuthAndElevation to Blueprints.

  • Bug Fix: Removed call to DebugCanvas->Flush_GameThread(); to fix 'showdebug' commands not rendering anymore.

  • Bug Fix: Fix several crashes that could happen while attempting to use Play in Editor in less common configurations

  • Bug Fix: Child Actors created by transient child actor components are now correctly created as transient. Note that this will not remove existing Actors that had been saved in to maps inadvertently.

  • Bug Fix: Fix issue where running a game with bUseFixedFrameRate=true could crash because it generated negative delta times.

  • Bug Fix: Copying an actor in the level editor will no longer reset array values if a new element has been added.

  • Bug Fix: Fix issue where Combined streamable handles could be freed before they finished loading

  • Bug Fix: Removed any deprecated code older than 4.10 that didn't affect content compatibility

  • Bug Fix: Overriden Child Actor Class property will no longer reset to default when a new instance is created through copy/paste.

  • Bug Fix: Garbage Collection timing is no longer managed on a per World basis, but instead at the UEngine level.

  • Bug Fix: Marked ULevelStreaming as Within=World, since various places already assume it

  • Bug Fix: Fix several issues with loading the same asset twice in a row with Asset Manager.

  • Bug Fix: All components will now clear the component need end of frame update mark when unregistered, not just primitive components.

  • Bug Fix: Added GetTargetRotation() to SpringArmComponent, which returns the rotation target based on the combination of various rotation setting flags (bUsePawnControlRotation, bInheritPitch, bInheritYaw, bInheritRoll, absolute rotation flags). Use this instead of querying the SpringArmComponent's own rotation, which isn't changed at runtime.

  • Bug Fix: Reduced memory churn/allocations when duplicating an Actor's components for PIE.

  • Bug Fix: Fixed comment in GetComponents (UActorComponent version), which was referencing wrong component type.

  • Bug Fix: Fixed issues where lighting could be unbuilt when reloading packages.

  • Bug Fix: Renamed USceneComponent::bWorldToComponentUpdated to bComponentToWorldUpdated (since the transform is called ComponentToWorld).

  • Bug Fix: Fixed crash when SpawnObject has a null class passed to it.

Localization

  • New: In-Editor Localization Preview

  • Bug Fix: Fixed some crashes where IMEs would try and access a deleted widget

  • Bug Fix: Fixed high memory usage when using certain IMEs

  • Bug Fix: Games now use the native culture of any of the game targets as the fallback (rather than always using English)

  • Bug Fix: Fixed abnormally long PO export times under certain circumstances

  • Bug Fix: Fixed iOS not detecting the locale correctly

Networking

  • New: Added experimental network encryption functionality.

    • This is handled by a new packet handler component in the AESHandlerComponent plugin.

    • This component depends on another new plugin, PlatformCrypto, which wraps basic encryption algorithms implemented either by APIs provided by the platform, or by OpenSSL.

    • Net connections and their packet handler objects are now aware of encryption components, and have new functions to allow setting the encryption key.

    • When connecting to a game server, a custom token can be exchanged. This token may be used to obtain the actual encryption key for the connection.

  • UdpMessaging: Not showing warning message if tunnel settings left empty to use defaults

  • Messaging: Waking up message router thread on shutdown

  • Messaging: Moved common helper classes into MessagingCommon module

  • Merged over the change to expose more of dormancy to Blueprints (UE-46240)

  • Enable the TCPMessaging plugin on platforms other than Windows/Mac so it can be used for profiling/automation, and fix several platform-specific bugs. If this is not desired, you should disable the plugin for your project.

  • Add support for -TcpMessagingListen=IP:port and -TcpMessagingConnect=IP:Port command line options to the TCP messaging layer used for automation and profiling, this allows manually connecting to specific devices

  • Added some additional stat instrumentation to the low-level network replication code. This may help track down replication performance issues when viewing ue4stats files in the Profiler.

  • It is now possible to configure the UDP socket buffer sizes that the IpNetDriver requests of the operating system when creating a new connection.

  • Bug Fix: Networking: Fixed nullpointer crash in TcpListener if socket initialization fails

  • Bug Fix: NBOSerializer security fixes to protect against possible overflow in the values

  • Bug Fix: Fixed client assert when trying to send RPCs while connection is pending closure due to queued bunches. ChIndex is -1 during this time, though the channel is not actually closed. Added ensure when calling SendBunch() under this condition to catch future cases like this.

  • Bug Fix: Fix issue where nonblocking BSD sockets on some platforms may return EINPROGRESS on initial connect, which should not be treated as an error

  • Bug Fix: AActor::PreReplication is now called prior to RPCs when they would have triggered initial replication.

  • Bug Fix: Fixed an issue where connecting to a Server that had deleted startup actors and then unloaded their sub level would cause a crash.

  • Bug Fix: Fix to update actor replication stats even when the connection is currently saturated.

  • Bug Fix: APawn::IsNetRelevantFor properly checks AGameNetworkManager::bUseDistanceBasedRelevancy.

  • Bug Fix: Fixed a rare issue where the data stored in network replays could be corrupted, potentially causing a crash when the replay is played back.

  • Bug Fix: Fixed an issue when the server is paused, the clients were not getting the update that it had happened.

  • Bug Fix: Changes were made to FTcpListener and FTcpMessageTransportConnection to prevent them from polling sockets in a thread while waiting for connections or data. This improves performance on Android clients when launched from the editor and should also benefit other systems using FTcpListener.

Online

  • New: Google Sign In SDK for iOS/Android/PC has been integrated into the engine with OnlineSubsystemGoogle

  • IOnlineIdentity::GetPlatformUserIdFromUniqueNetId is now const

  • Voip streaming improvements - use the underflow feature of sound streaming to feed the audio buffer rather than enqueue the data directly - wait a small period of time to buffer period actually playing new voip streams

  • Added intrinsic FNames for NAME_GameSession and NAME_PartySession left #define for GameSessionName and PartySessionName to map to new FNames

  • Voice module improvements / refactors for Windows/Opus codec - added ability to change more parameters at runtime (samplerate, channels, device) - ability to change bitrate at runtime - ability to change complexity at runtime - ability to set VBR on/off - fixed some bugs related to stereo playback / diagnostics - exposed more settings / information in the various classes - added num channels as an input parameter to CreateVoiceAudioComponent helper function - improved test voice class and its capabilities - various exec commands to change audio capture values at runtime - queue audio data differently for the procedural sound wave class - more buffer sanity checks - fixed bug when nothing to encode (super low bitrate) causing the decoder to fail -- encode 0 size frame data and make decoder aware of it - added more stats under "stat voice" - added LogVoiceEngine to separate out OSS related voice calls from rest of audio capture code

  • Update cacert.pem from curl's website https://curl.haxx.se/docs/caextract.html

  • Google Sign In SDK implemented for iOS, Android, and desktop platforms

  • Hotfix manager will only reload config during "restore ini" for classes that were actually affected by the previous hotfix which prevents calling ReloadConfig on every class in an ini file

  • Handle instances in UParty where World is null

  • Add optional StatePrefix to OnlineSubsystemTwitch

  • Add RevokeAuthToken to IOnlineIdentity. Implemented in OnlineSubsystemTwitch. Remove auto revoke auth token on logout from OnlineSubsystemTwitch.

  • OnlineSubsystemTwitch: Use a specific error when auth token validation fails

  • Add join party failure reason of GameSpecificReason for game defined join party failures

  • Extended IOnlineTitleFile OnEnumerateFilesComplete to include an error string.

  • OnlineSubsystemTwitch: Use the web browser to go through the Twitch login flow on consoles.

  • Bug Fix: Fix potential null pointer access in Oculus session cleanup

  • Bug Fix: VoiceDecoder Opus security fixes that sanity check packet header calculations to prevent buffer overrun

  • Bug Fix: Facebook implementations using the embedded browser will delete cookies on logout

  • Bug Fix: Google implementations using the embedded browser will delete cookies on logout

  • Bug Fix: Update manager will skip initial hotfix check if user isn't signed into the console at the time.

  • Bug Fix: Remove caching of config values in OnlineSubsystemTwitch. Fixes hotfixes not taking effect

  • Bug Fix: Party Beacon: Prevent player from being leader of multiple party reservations. Prevent party from creating a reservation that contains members that are in other reservations.

  • Bug Fix: Changed message sanitizer SanitizeMessage to SanitizeDisplayNames to better convey its function Added QueryBlockedUser to check user to user permissions Added ResetCache function for clearing permission cache Added Live version of message sanitizer

  • Bug Fix: Fixed hardcoded controller id in RejoinCheck in TravelToSession call

  • Bug Fix: Remove ensure in UPartyBeaconState::UpdatePartyLeader, this function is called while the player is being kicked, revoking their reservation

  • Bug Fix: LoginFlow module now properly included in OnlineFramework uplugin with proper IWYU semantics

  • Bug Fix: Fix crash when logging out in the middle of joining a party

  • Bug Fix: Fix simultaneous party join requests dropping some requests

  • Bug Fix: Added GetFirstSignedInUser function as an improvement/workaround for a bunch of GetPlayerUniqueId(0) calls in the OnlineSubsystem APIs.

Other

  • Added EditorFunctionalTest class that should be used as the base class for editor-only functional tests. The Automation Test Framework now understands the difference between runtime and editor only tests

Physics

  • New: Clothing tools moved out of experimental

  • Added per-axis inertia scaling and parent dominance settings to physics bodies/constraints

  • Added "Smooth Mesh" button to the smooth clothing paint tool that applies the smoothing effect to the entire mesh in one action.

  • Added support for physical materials in immediate mode (Rigid Body node)

  • Improved internal automated tests for physical animation.

  • Expose FHitResult::Distance to Blueprint's Break/Make Nodes (Pull Request Contributed by LordNed)

  • Improved physics asset generation using the multi-convex hull primitive type. Multi-convex hull primitives can now be created from meshes containing vertices that are influenced by more than one bone.

  • Remove Box2D support

  • Exposed an inertia scale for body instances

  • Added ExternalForce to rigid body node for faking inertia while simulating in component space

  • Added RootBone simulation space to RigidBody node. This is useful for cases where we rotate the skeletal mesh component and counter rotate the root bone and do not want to affect simulated bodies' velocities.

  • The UPrimitiveComponent angular physics functions have been standardised to use consistent units. Functions suffixed with "InDegrees" use degrees, and functions suffixed with "InRadians" use radians. The existing functions have been deprecated in favour of their new versions.

Under the hood, the FBodyInstance angular physics functions now work entirely in radians. Any functions that previously used degrees have been deprecated.

  • Clothing optimization pass, mainly removing allocations and precaching some skin information. 10% Overall non-gamethread time reduction, gamethread sync completion task time halved.

  • Added ability to rename clothing assets after creation

  • Clothing LOD improvements - Added full pipeline for adding LODs to clothing assets in editor - Added methods for mapping parameters between masks on meshes with differing topology - Fixed a few UI bugs

  • Added single threaded PhysX tasks stats using "stat PhysXTasks"

  • Bug Fix: Removed the need for calling constructors for PhysX PxRaycastHit in the dynamic hit result buffer for sweeps/raycasts. Saves 30% of the cost of doing small raycasts.

  • Bug Fix: Fixed crashes in physics asset editor and skeletal mesh editor when the preview scene clears out the preview mesh while clothing is running

  • Bug Fix: Restricted painter processing to no longer attempt painting while in simulation previews in cloth paint mode.

  • Bug Fix: Fixed clothing gradient tool renderer not showing selected points when camera was moving

  • Bug Fix: Fixed cloth paint falloff to actually calculate falloff, and take brush strength into account.

  • Bug Fix: Fixed cloth paint gradient allowing invalid values

  • Bug Fix: Fixed crash shutting down editor with active cloth paint tab,.

  • Bug Fix: Fixed mismatch between paint values and view values for clothing tools

  • Bug Fix: Fixed skel surf particles being misplaced when clothing was active. And fixed particles spawning on disabled cloth proxy sections.

  • Bug Fix: Fixed physics substepping causing erratic simulation of simulated bodies that were attached to kinematic ones (eg. simulated ponytails). This was due to incorrect interpolation paths on the kinematic bodies, which caused the attached physical bodies to accumulate too much velocity each frame.

  • Bug Fix: Fixed clothing not resimulating after resetting physics asset to default in a details panel

  • Bug Fix: Fix crash in show collision

  • Bug Fix: Fixed clothing visualizations not drawing at correct orientation (Normals, Max Distances and Backstops)

  • Bug Fix: Internal application stability improvements to physics simulations.

  • Bug Fix: Fixed crash attempting to render clothing collisions extracted from a physics asset incompaticble with the acive mesh skeleton

  • Bug Fix: Fixed crash when deleting a selected clothing section and relaunching the skeletal mesh editor

  • Bug Fix: Fixed changing or reloading the current level causing certain physics debugging bounds not to be shown if collision visualisation is turned on.

  • Bug Fix: Fixed UPhysicsAsset::CalcAABB to properly handle scaled bones.

  • Bug Fix: Fixed "Apply Clothing" menu showing an invalid widget when there were no clothing assets.

  • Bug Fix: Fixed crash attempting to paint on a clothing object created by importing an incompatible APEX asset.

  • Bug Fix: Fixed clothing bounds calculation always including the component root.

  • Bug Fix: Fix bad bounds computation for immediate mode.

  • Bug Fix: Updated FRaycastHit::Distance Documentation (Contributed by LordNed)

  • Bug Fix: Change GetMaterialFromCollisionFaceIndex implementations to return null if face index is negative

  • Bug Fix: Fix incorrect bone mapping for rigid body node. (Only matters when first call to init has a different number of bodies, for example a different skin)

  • Bug Fix: Turn joint pre-processing on for immediate mode. This helps with some stability issues.

  • Bug Fix: Remove unused HACD library. We only use V-HACD now.

  • Bug Fix: Made it so that linear and angular velocity are properly computed for kinematic targets in immediate physics and rigid body node.

  • Bug Fix: Fixed bug with PhysX cooked data not taking into account complexity type of body setup.

  • Bug Fix: Fixed merge error in PhysX immediate mode as reported by NVIDIA

  • Bug Fix: Removed deprecated methods that were replaced by _AssumesLocked variations

  • Bug Fix: Imported new simple collision for Engine/Content/BasicShapes/Cylinder.uasset which is a single convex shape (rather than being 4 shapes as before).

  • Bug Fix: Fixed a few crashes in UVehicleWheel when spawned directly

  • Bug Fix: Improved the comment on UPhysicalMaterial::Friction

  • Bug Fix: Changed FBodyInstance::InstanceBodyIndex to int32, fixes incorrect body index being returned from traces if there are a large number within one component.

  • Bug Fix: Removing unnecessary conditional in WheeledVehicleMovementComponent.

  • Bug Fix: Removed duplicated forward declaration in VehicleAnimInstance.h

  • Bug Fix: Fixed Capsules where axis length (half-height - radius) < 1 were clamped to a new capsule with axis length of 1. Changed the clamp threshold to 1e-4 and changed FPhysXShapeAdaptor to use a Sphere instead when Radius >= HalfHeight.

    • This would cause sweeps using the capsule params to use a capsule of a different size, up to 1 UU different along the axis.

    • Moved hardcoded limits on FCollisionShape extents to a static value and refactored external code to reference that instead.

Collision Detection
  • Bug Fix: Fixed occasional crash while cooking collision in cook-on-the-fly server.

Physics Asset Editor
  • New: New Physics Asset Editor

  • Bug Fix: Fixed crash when regenerating large amounts of bodies

  • Bug Fix: Fixed crash when regenerating multi convex hulls from zero-vert bones

  • Bug Fix: Fixed physics assets not simulating when BlockAll was globally overridden

  • Bug Fix: Make sure the physics asset editor floor has collision, regardless of what BlockAll does

  • Bug Fix: Fixed physics asset shortcut not working correctly in certain circumstances

  • Bug Fix: Exposed LOD menu in PhAT

  • Bug Fix: Fixed tooltip for PhysicsType

  • Bug Fix: Improved UI feedback around bounds/in-game bounds in animation editor viewports

  • Bug Fix: Fixing undo/redo of bone modifications in Physics Asset Editor (and others)

  • Bug Fix: Fix for crash in physics asset editor after garbage collection

  • Bug Fix: Fix crash undo-ing primitive regeneration while simulation is in progress & stopping simulation in PhAT

  • Bug Fix: Prevented undo/redo breaking when moving both a constraint and a body at the same time in PhAT

  • Bug Fix: Re-added "Apply Physical Material To All" to PhAT. Also re-instated quick constraint setting options in the toolbar.

Rigid Bodies
  • Added per-axis inertia and parent dominance settings to physics assets

  • Bug Fix: Fixed crash deleting a destructible mesh while it was open in an editor with a sub-chunk selected

  • Bug Fix: Fixed crash when physics update causes other bodies to be destroyed (e.g falling out of world).

Platforms

  • Bug Fix: Fixed a bug where the Local Notification Delegate was not released when UPlatformGameInstance is being destroyed

All Mobile
  • Improvements to localization initialization time on application startup, which reduces overall boot time

  • Added GetDiskTotalAndFreeSpace implementation for IOS and Android

  • Added to UPL

    • sets bool to true if any entry in array of strings in ini matches the contains attribute

  • Allow addElement and addElements to only insert once with once="true" attribute in UPL

  • Bug Fix: Prevent UMobileInstalledContent methods from crashing when called on a created instance in an uncooked build (no installed manifest)

Android
  • New: Android camera plugin

  • New: Enabled Gradle by default and added button to accept Android SDK license to project settings

  • New: Updated Android improved virtual keyboard support; now works on more devices / keyboard types

  • New: Updated to Google Play Services 11.0.4 and GPG C++ v2.3

  • Android media player updates for Vulkan support

  • Added detection of Houdini (running on Intel Android CPU) for device profiles (SRC_UsingHoudini=true)

  • More informative Android SDK license requirements description in Android project settings and errors if attempting to launch or package without accepted agreement

  • Added to UPL to allow additions to the root-level build.gradle

  • Add 'sustained performance mode' support for API 24+ devices.

  • Add Android cpu stats (stat AndroidCPU) Displays core frequency and core utilization.

Android cpu stats update rate is governed by the CVar 'Android.CPUStatsUpdateRate'.

  • Allow variable expansion in addPermission, addFeature, and addLibrary UPL commands

  • Changes to use the VS2017 sandbox Android SDK if enabled (contributed by IanMatthewHuff)

  • Added new "Include AdMob support for ads" checkbox to Android project settings to disable inclusion of the AdMob SDK in the APK if you do not need ad support.

  • Only use external texture shader version override on shaders needing it

  • Bug Fix: Check for runtime permission to use Android camera in plugin

  • Bug Fix: Android camera plugin improvements

    • return correct capture device type (webcamfront/rear)

    • remove seek (not supported)

    • support track formats

    • better framerate selection

  • Bug Fix: Fixed playlist looping (send PlaybackEndReached event) in Android media player

  • Bug Fix: AndroidMedia: Fixed flicker issue

  • Bug Fix: Protect against null window during shutdown

  • Bug Fix: Don't add the APK as a build product for Android (.so is marked as Executable)

  • Bug Fix: Various improvements have been maid to the experimental Virtual Keyboard including:

    • Multiline is now disabled when not needed

    • Suggestions and autocorrect are now hidden

    • The Done and Back button behavior has been adjusted with Enter and Back key events returned to the UMG controls so they can implement appropriate behavior

    • If the keyboard is up and you click on the same control that has focus, it will hide the keyboard

  • Bug Fix: Fixed issue with trying to link ARMv7-only libovrplatformloader.so for non ARMv7 targets

  • Bug Fix: Filter out unneeded architectures from APK for Gradle builds

  • Bug Fix: Don't use V2 signing for Gear VR APKs

  • Bug Fix: Set online provider back to GooglePlay and remove forcing IAP permission (contributed by umerov1999)

  • Bug Fix: Fixed GoogleVR Gradle packaging

  • Bug Fix: Removed unneeded settings.gradle file since it is generated

  • Bug Fix: Include JAR files from libs in classes.dex with Gradle enabled

  • Bug Fix: Use absolute path for repositories for Gradle

  • Bug Fix: The Android experimental virtual keyboard now has a native edit box above the keyboard to receive the text and pass it to Slate/UMG. This improves support for non-English characters.

  • Bug Fix: Fixed tilt axis to be consistent between Android and iOS devices

  • Bug Fix: Use FMath::log2 instead of log2 to fix Android runtime dlopen failure on some devices

  • Bug Fix: Only recompile android_native_app_glue.c and UELinkerExceptions if necessary

  • Bug Fix: Clean up Gradle intermediates after packaging if on build machine (IsBuildMachine environment variable set to 1)

  • Bug Fix: Android external texture extension updates for compatibility (forcing ES2 or using ESSL3 if available)

  • Bug Fix: Fixed media player to allow disabling audio by setting track to INDEX_NONE (-1) before playing

  • Bug Fix: Fixes for Android media player and camera player

    • buffer samples copy proper bytecount

    • realloc sets new buffer ptr

    • refcount of Java buffers fixed

  • Bug Fix: Moved more of the Android link command arguments to response file to deal with command line limit on Windows. This fixes issues with having a large number of modules enabled.

  • Bug Fix: The Kindle Fire HD7 5th generation (GPU Mali 450) seems to have problems with threaded rendering, crashing when returning to the main thread. We have added a device profile [Android_Mali_4xx_KindleFire] to disable startup movies during initial loading which prevents the crash. This is the best workaround we have for this device at the moment.

  • Bug Fix: Fixed issue with Android password keyboard input

  • Bug Fix: Protect mediaplayer from entering wrong state if async prepare has not completed

  • Bug Fix: Corrected ordering of Android media player suspend and playbackendreached events

  • Bug Fix: Fixed issue with immersive mode enabled if volume buttons used even if disabled

  • Bug Fix: Fixed error returns from rungradle.bat and ant.bat

  • Bug Fix: Fixed issue where enabling the Shared Material Native Libraries caused packaging for Android to fail

  • Bug Fix: Fixed Android startup movies not always playing

  • Bug Fix: Fixed compile error in Android project generator on Linux

  • Bug Fix: Stops packaging if resulting OBB too large to use on device

  • Bug Fix: Added workaround to install scripts for copying distribution builds to Android/obb

  • Bug Fix: Only add Android NDK glue files to Launch module on first call to prevent unnecessary recompiles

  • Bug Fix: Properly pause and resume Android event listeners when app is paused / resumed. Prevents possible excess CPU use when a UE4 app is paused.

  • Bug Fix: Skip unneeded events on changing Android camera resolution or framerate

  • Bug Fix: Added OBB exceeds 2 GiB failure error code

  • Bug Fix: Fixed movie playback on Android devices when packaged for ES 3.1

  • Bug Fix: Fixed orientation change issue on Android Oreo

  • Bug Fix: Fixed text flicker during update of new virtual keyboard contents and fix crash on deleting selections

  • Bug Fix: Fixed shader compile errors that occurred at runtime on Galaxy S6 devices

  • Bug Fix: Fixed virtual keyboard setFilters crash

  • Bug Fix: Added missing TangoSDK to Android binaries needed for ARCore

  • Bug Fix: Don't show incorrect cursor location with improved Android virtual keyboard

  • Bug Fix: Deal with rapid changing of improved Android virtual keyboard state

  • Bug Fix: Fixed Android camera orientation for front camera on some devices

  • Bug Fix: Don't set GL_TEXTURE_MAX_LEVEL on external textures Added r.Android.OverrideExternalTextureSupport CVar to override external texture detection

  • Bug Fix: Reduced frequency of adb calls waiting for Android Launch On process to complete

  • Bug Fix: Updatef manifest configChanges for adActivity and only include if AdMob support enabled

  • Bug Fix: Fix Android camera orientation for rear camera on some devices

  • Bug Fix: Only use density configChanges in AndroidManifest if SDK API 24+ and minSDK 17+

  • Bug Fix: Fixed Android UPL plugin detection

HTML5
  • HTML5 3rd Party Libs - compiled with emscripten 1.37.19

  • HTML5 emscripten 1.37.19 Win64

  • Updated HTML5 to use the Emscripten 1.37.19 toolchain on Windows, OSX and Linux

  • HTML5 emscripten 1.37.19 Linux

  • HTML5 emscripten 1.37.19 OSX

  • WebAssembly is now enabled by default and ASM.js support has been sunsetted

  • Bug Fix: Fix a crash on HTML5 when rendering landscapes

  • Bug Fix: Pak file compression is now disabled by default; instead it's best to compress the content packages with gzip and use the browser's internal decompression after configuring your web server to include the header "Content-Encoding: gzip".

  • Bug Fix: Zen Garden now has its textures limited to 256x256 when packaging for HTML5 to make the content size more practical on HTML5 and fixing memory issues on Chrome.

  • Bug Fix: Fixed refraction on HTML5 that was caused by several issues with the shaders on WebGL2

  • Bug Fix: Removed the HTML5 PreLoadMap "feature"

  • Bug Fix: Fixed issue with HTML5 failing to show the game scene on Chrome on OSX. Even though canvas had been set with alpha:false, the scene was rendering as transparent.

  • Bug Fix: Fixed various issue with vehicle-based projects that failed launch on HTML5

iOS
  • Added IsRegisteredForRemoteNotifications to allow detection during program execution.

  • Added an option to enable/disable exceptions when compiling Objective C for iOS. This removes upto 6mb of unwind tables from the iOS executable of UE4.

  • Added an option to disable force inline when compiling for iOS. Use this in combination with build for size to reduce the size of the executable.

  • Improved Xcode project generation to be compatible with Xcode 9.

  • IOS 9 is now the minimum OS level supported from the editor. Older iOS version support can be enabled via a GitHub build by modifying the build and deploy tools.

  • The iOS signing process has been simplified when using the remote toolchain from PC. It is no longer necessary to to have any signing certificates or private keys installed on the remote Mac. It is now sufficient to have the certificates and keys installed on the PC and configured in the IOS section of the Project Settings.

  • Addition of asset catalogs for application icons on IOS 11. When utilizing Xcode 9, the build tools will now create and compile an asset catalog composed of the application icons. This catalog is required when uploading the application to the store. Users can still specify their icons in the IOS Project Settings as normal and the location of the those files has not changed. They are automatically copied in to the asset catalog at build time.

  • The editor now defaults to building 64-bit only executables for iOS. This change has been made to be compatible with iOS 11 and it's 64-bit only policy. Source users can still build 32-bit executables by updating the 32-bit build variables in their configuration files.

  • Added Info.plist entrees for required capabilities and camera usage messaging when ARKit usage is detected.

  • Added detection of new iOS devices: iPad Pro 10.5, iPad Pro 1.29 (2nd Gen), iPad 5th Gen, AppleTV 4K, iPhone 8, iPhone 8Plus, and iPhone X

  • Bug Fix: Fixed occasional hangs on startup when launching from a received remote notification.

  • Bug Fix: Fixed an issue where the start touch was not being stored for use when determining scroll delta.

  • Bug Fix: Fixed an issue where refraction was not rendering on tvOS

  • Bug Fix: Password protected iOS certificates are now properly installed after prompting the user to enter the password.

  • Bug Fix: Fix an issue where the orientations supported by the game were not being limited by the information in the Info.plist.

  • Bug Fix: Fix for ScreenSpaceReflections not working properly on iOS 11

  • Bug Fix: Fixed an issue where after restoring purchases user could no longer purchase anything (courtesy of nverenik). Fix for InApp purchase raw price not being initialized (courtesy of nverenik).

  • Bug Fix: The bForcePVRTC4 cooker option was previously ignored on iOS. It now correctly uses PVRTC4 for all textures when enabled.

  • Bug Fix: Fixed LAN multiplayer discovery on iOS devices over WiFi

  • Bug Fix: Fixed Xcode location detection in the editor. Non-Standard Xcode installations can now be properly detected and used by the editor and corresponding tools.

  • Bug Fix: Fixed an issue where code signing was failing when the user has specifically selected only a wildcard provision

Linux
  • Updated UE4 fork of SDL2 library to the latest trunk.

  • Added logic to SDL2 to select a specific EGL device for offscreen rendering.

  • Reduced size of editor binaries by making FPlatformMisc::DebugBreak() not inlined on Linux.

  • Eliminated SCW logspam on Linux.

  • Updated Linux's MCPP to include fix for long defines.

  • Switched UBT to the new clang 5.0.0-based toolchain.

  • Added initial high DPI support on Linux.

  • Added files to cross-build glslang on Windows.

  • New SDL-based audio mixer backend is now used on Linux by default.

  • Bug Fix: Rewrote Linux splash screen to avoid threading hazards that caused crashes.

  • Bug Fix: Fixed Linux editor crashing when capturing a movie.

  • Bug Fix: Fixed UnrealLightmass not being included in the installed build on Linux.

  • Bug Fix: Made FAnsiMalloc compatible with malloc()/free() on Linux so it can be used with ASan.

  • Bug Fix: Fixed name collision of GL func pointers between splash screen and RHI.

  • Bug Fix: Fixed save window prompt failing to be modal.

  • Bug Fix: Removed unnecessary symbols for MSVC visualizers on Linux/Mac.

  • Bug Fix: Fixed copy-paste issues due to buffer being associated with an intermittent window.

  • Bug Fix: Made SDL_SetWindowInputFocus() wait until window is viewable (pull request #2608 by Ereski).

  • Bug Fix: Fixed Engine and Project shortcuts not working in Linux dialogs.

  • Bug Fix: Fixed "Anim to Play" being inaccessible after import.

  • Bug Fix: Fixed UBT not doing full rebuild when system (e.g. kernel) headers have been updated.

  • Bug Fix: Fixed performance drop in Blueprint editor on Linux.

  • Bug Fix: Rebuilt CEF with fewer dependencies, fixing inability to start without libgobject installed.

  • Bug Fix: Fixed not using bundled GL headers during a native build on Linux.

  • Bug Fix: Removed FCustomStd* workaround from hlslcc (STL compat problems are gone due to bundled libc++).

  • Bug Fix: Fixed confusing messagebox message during headless run.

  • Bug Fix: Fixed tesselation in packaged Linux projects.

  • Bug Fix: Fixed crashes on AMD Mesa drivers due to name collision in libelf.

  • Bug Fix: Fixed regression in Linux PhysX (sweeps taking too long time).

  • Bug Fix: Fix spurious CMake configuration errors by specifying the compiler in CMakeLists.

  • Bug Fix: Fixed crash on some ARM platforms due to memory pools being too large.

  • Bug Fix: Made handling inability to load libGL user-friendlier (message box instead of hard assertion).

  • Bug Fix: Fixed another case where initialization failure was resulted in assertion failure instead of a clean exit with error message.

  • Bug Fix: Fixed memory corruption causing crash on Linux when editing geometry.

  • Bug Fix: Fixed crash handler crashing if editor's console output window is open.

  • Bug Fix: Removed IOS module on Linux, to prevent a crash and make compilation faster.

Mac
  • Add -enableasan / -enabletsan command line options to UnrealBuildTool, and bEnableAddressSanitizer / bEnableThreadSanitizer settings in BuildConfiguration.xml. Support for enabling these features via environment variables has been removed.

  • Made few small changes to UnrealBuildTool to make it faster when running on Mono

  • Added support for changing monitor's display mode on Mac in fullscreen mode. This greatly improves performance on Retina screens when playing in resolutions lower than native.

  • Updated minimum macOS requirement to 10.12.6

  • Bug Fix: Fixed a crash in MediaCompositing plugin

  • Bug Fix: Fixed thread safety issues in AVFMediaPlayer

  • Bug Fix: Fixed crash at exit caused by FDDCCleanup trying to use IFileManager.Get() after the file manager was destroyed

  • Bug Fix: Fixed a hang when building lighting using commandlet

  • Bug Fix: Fixed header search paths in Xcode project for paths containing space character

  • Bug Fix: Solved a number of issues related to window activation, for example being unable to rename items using Rename from the right-click menu and the editor not allowing to override already bound shortcuts.

  • Bug Fix: Fixed missing Window menu contents in Mac UnrealFrontend

  • Bug Fix: Fixed a rare crash at exit caused by an attempt to process Cocoa events after required parts of the engine were already shut down.

  • Bug Fix: Fixed issues with windows not activating on mouse up on Mac in some cases when clicking on draggable Slate widgets

  • Bug Fix: Fixed problems with Mac menu bar not updating in some situations, for example when opening an asset in new window or changing active window with Cmd+~

  • Bug Fix: Fixed a crash on startup that would occur if Steam was running in the background.

  • Bug Fix: Slate modal windows now behave correctly (menu disabling, etc.) on Mac

  • Bug Fix: Fixed crashes caused by an attempt to process window show and hide events after window was destroyed.

  • Bug Fix: Added code for detecting case-sensitive file system on Mac. We now inform users that we currently don't support running from case-sensitive volumes, then quit instead of the app crashing.

Windows
  • Fix race for intiialization of ThreadID variable on FRunnableThreadWin, and restore a previous check that was working around it.

  • Bug Fix: Fixed case sensitivity issue in FWindowsPlatformProcess::IsApplicationRunning.

Programming

  • New IPlatformFile::FindFiles and IPlatformFile::FindFilesRecursively are much more efficient than other methods for finding files in packaged games.

  • Windows CHM file is no longer included within the installed engine release, due to size limits of the format. A cross-platform compressed HTML archive is still available in the Engine/Documentation/Builds subfolder for offline viewing.

  • Added: a new RHI function to invalidate/clear cached state - RHIInvalidateCachedState(). Currently has implementation only for OpenGL. This could be used by plugin developers to inform RHI that current state has been changed outside of RHI.

  • Added t.DumpHitches.AllThreads so all threads are dumped when doing 'stat dumphitches'

  • Bug Fix: SavePackageHelper now always honors KeepObjectFlags

  • Bug Fix: Make UScriptStruct::ExportText const-correct

  • Bug Fix: Fixed compiling errors with clang 5.0-rc1 (only Linux editor has been tested).

  • Bug Fix: Fixed some places that were iterating over sets/maps using their element indices as if they were the sparse indices

  • Bug Fix: ULevelStreamingKismet::LoadLevelInstance function is now exposed to game code

Rendering

  • New: Remove rendering support code in MetalRHI for Mac OS X El Capitan (10.11) - MetalRHI now requires macOS Sierra (10.12) to function on Mac.

  • Extended ExternalTexture to support 2x3 transform (scale/rotation + offset)

  • Make all Metal shader platforms compiled with Metal version 1.2 or later compile such that half may be used, unless the material specifies full precision.

  • A sampler can now be shared amongst different textures in Vulkan

  • Added support for ddx_fine, ddy_fine, ddx_coarse, ddy_coarse to hlslcc

  • PR #3714: Fix typo in EOcclusionCombineMode (Contributed by Mumbles4)

  • Where available use Metal's new CaptureManager to provide additional capture options in Xcode's GPU frame capture tool to capture more than one frame at a time.

  • Added Render Target Pool Stats. Use "stat rendertargetpool" on the in-game console to view.

  • Updated Vulkan headers to SDK 1.0.57.0

  • Integrating the MIT-licensed mtlpp C++ Metal wrapper from Nikolay Aleksiev which will eventually replace previous Metal API wrappers in MetalRHI once it has been extended to support all the features required.

  • Support disabling V-Sync in MetalRHI on macOS 10.13+.

  • Added a command-line option "-MetalRuntimeDebugLevel=X" (where X is a number 0-8, defined in MetalContext.cpp) to specify the amount of runtime validation of Metal operations that MetalRHI will perform over and above Xcode's validation layer. For macOS level 5 and above will attempt to emit GPU instructions such that if a command-buffer fails the error report will indicate the last successfully completed debug-group.

  • HDR logic refactor - simplify enable/disable logic, particularly on console. This add a high level r.AllowHDR cvar to enable/disable HDR on a per-platform or per-title basis. (This is a breaking change, since it defaults to off.). By default, the user setting now default to true on Console. Instead, we rely on the OS to determine HDR capability

  • D3D12: Enable GPU validation if -d3d12gpuvalidation is passed on the commandline

  • Allow disabling of display V-Sync in Metal on macOS 10.13+ when running in true fullscreen mode (not windowed or windowed-fullscreen). This stops synchronizing frame presentation with the display, so can be slightly faster but will tear visibly as it does on all other platforms.

  • Bug Fix: Fix RHITransitionResources crash with more than 16 UAVs.

  • Bug Fix: Fix deterministic cooking issue in particle systems; always use a pseudo-random number stream when compiling a module.

  • Bug Fix: Fixed incorrect usage of OpenGL queries after deletion.

  • Bug Fix: Fixed hlslcc not working properly with newer compilers.

  • Bug Fix: Fixed: Texture streaming issues after world origin was rebased

  • Bug Fix: Avoid an intermittent crash in AVPlayer on macOS & iOS.

  • Bug Fix: Correctly implement ClipDistance for Metal as an array of floats as required by the Metal shading language and move the vertex-shader-layer clip-distance to index 2 to avoid any conflicts.

  • Bug Fix: Fix render when the GPU Skin Cache is enabled on Mac by switching the type of the input buffer from float to uint. This avoids bits being lost due to different handling of denorm floating point values between Metal drivers.

  • Bug Fix: When compiling Metal shaders without access to the native Metal compiler correctly set the debug-flag in the shader header and disallow archiving the shader into a Metal library which requires native bytecode compilation.

  • Bug Fix: Fixed a memory leak when using distance fields

  • Bug Fix: Fix distance field techniques on Vulkan.

  • Bug Fix: D3D12 fix for command list crash: Committed resources can not have aliasing barriers.

  • Bug Fix: Fix for a crash in RenderDoc when running a shipping application.

  • Bug Fix: Fix cascade preview viewport background color not changing

  • Bug Fix: Use less peak memory on Vulkan with staging buffers at boot time.

  • Bug Fix: Enable recompute tangents using skin cache on Vulkan.

  • Bug Fix: Memory optimization and leak fixes for recompute tangents using skin cache.

  • Bug Fix: Added a manually created Xcode project for glslang so that we include all the necessary code and can link properly.

  • Bug Fix: Fix Vulkan scissor causing text to not clip on editor while resizing.

  • Bug Fix: Fix Vulkan texture streaming

  • Bug Fix: Fix decals on Vulkan

  • Bug Fix: Temporarily disable GPU morph targets on Mac because they require implicit Buffer<> format conversion which isn't available in MetalRHI.

  • Bug Fix: Fix editor outline in Vulkan

  • Bug Fix: Make TonemapperConfBitmaskPC the proper size so we don't attempt to access uninitialized memory.

  • Bug Fix: PR #3875: Removed Duplicated "RHI" Module Dependency (Contributed by DavidNSilva)

  • Bug Fix: Fix generation of .metallib on local Macs and exclude .metallib files from the pak - they must always be loaded from disk.

  • Bug Fix: Do not store DDC data if a static mesh failed to build.

  • Bug Fix: Fixed divide by 0 crash when GPU timing frequency not available.

  • Bug Fix: Fix a LPV race condtion due to parallel RSM draw-call submission

  • Bug Fix: PR #2992: Fixing aspect ratio issue of SceneCapture2D rendering in "Ortho" camera mode (Contributed by monsieurgustav)

  • Bug Fix: Fixed an intermittent assert on startup where the AVFoundation movie player could initialize a video prior to the rendering thread being back online after resizing the window to go into full-screen.

  • Bug Fix: Fixed cloth rendering on Metal by changing the way FClothVertex is loaded. Some of the data in FClothVertex needs to be treated as uint data and loading it as floats was exposing a difference in behavior between some Metal drivers and Direct3D.

  • Bug Fix: Moved RHISupportsMSAA and add the necessary conditions for when it is available on Metal (AMD & Nvidia for macOS 10.13+, Mobile Renderer for iOS).

  • Bug Fix: Rework handling of various Metal intrinsics and implement a full fused-multiply-add optimization pass within hlslcc to ensure greater consistency of results between different Metal shaders motivated by changes to the behavior of Apple's Metal compiler.

  • Bug Fix: Fixed iOS builds picking up the Mac's Metal shader standard setting which caused the wrong shaders to be compiled.

  • Bug Fix: Fixed lighting in VR Forward rendering on Nvidia GPUs under macOS by changing how we load the ForwardLocalLightBuffer data to avoid a difference in behavior between some Metal drivers and Direct3D.

  • Bug Fix: Fixed an intermittent crash launching games into fullscreen on macOS caused by deleting the render targets before they should be and correcting specification of some render-target load-actions.

  • Bug Fix: Fixed Pixel Inspector not working on Mac by implementing the missing CopySubTextureRegion function in MetalRHI.

  • Bug Fix: Improve the handling of features that are restricted to certain Mac/iOS & Metal versions in Editor UI and the way the Editor handles the absence of the native Metal shader-compiler.

    • Disable half floats for Metal v1.0 & Metal v1.1 - too many shaders just don't compile anymore for no apparent reason - this will only get worse as the compiler stack advances.

    • Change the Editor code to ensure that cooking without access to the native Metal shader compiler does not pollute the DerivedDataCache for other users.

    • The global clip plane implies clip_distance support which on A8 devices requires iOS 10.

    • The Desktop Forward renderer for iOS requires Metal v1.2 and iOS 10.

  • Bug Fix: Rework the error reporting for remote shader compilation so that the correct error message is actually reported when the native Metal compiler is not available.

  • Bug Fix: Fix rendering of shaders that use World-Position-Offset on Metal platforms by extensive use of newer intrinsics.

  • Bug Fix: Change an assert in the Metal shader translator that fires whenever a float literal is NaN or an otherwise unhandled non-finite value to a compiler warning that can be debugged as NaN/INF literals will be incorrect on all platforms.

  • Bug Fix: Fix a crash when switching between normal and Mobile Preview rendering modes in the Editor on Mac.

  • Bug Fix: Fix the incorrect velocity & motion-blur rendering in the Desktop Forward renderer on A8 iOS devices (e.g. iPhone 6/6+), the Desktop Forward renderer is now minimally functional on these older iOS devices but will be slow as it is much more demanding than the Mobile Renderer.

  • Bug Fix: Fixed project thumbnails on Vulkan

  • Bug Fix: Fixed RHILockVertexBuffer on DX12 to work properly with and without RHI commandlist.

  • Bug Fix: Emit only one declaration for system provided shader variables for Metal as sometimes we end up with multiple specifications for some volumetric fog shaders.

  • Bug Fix: Protect against invalid copysubresource bounds. Protects against GPU crashes on some drivers.

  • Bug Fix: Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version but only for Vertex shaders.

  • Bug Fix: Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.

  • Bug Fix: Fix D3D12 validation error when GBV is enabled, courtesy of Sebastian Merry at Microsoft

  • Bug Fix: Avoid a Metal GPU driver bug by only emitting one clip-distance on Metal, when the global clip-plane is enabled this takes priority over all others as it is essential to function correctly, other uses are merely optimizations.

  • Bug Fix: Fixed outline in editor missing on Vulkan

  • Bug Fix: Rebuilt IntelISPCTexComp with Visual Studio 2015 to remove dependency on VS2013 redist.

  • Bug Fix: Precomputed visibility on components added through a Blueprint will now correctly be retained when reloading a level.

FX
  • Bug Fix: Prevent crashes when UNiagaraComponent::GetEffectDataInterface is called on a component with no effect asset set

  • Bug Fix: Fixed life-time fading on deferred decals.

Lighting
  • Disable r.GenerateLandscapeGIData by default, opt-in for kite demo. Projects that want to use heightfield GI need to opt-in to r.GenerateLandscapeGIData.

  • Added 'Render Unbuilt Preview Shadows in game' rendering project setting and r.Shadow.UnbuiltPreviewInGame console variable

  • Swarm hands out the most expensive tasks in roughly a round robin ordering among distribution agents. Lightmass processing of a single task is multithreaded, so ideally the most expensive tasks are evenly distributed among active agents. This has the biggest impact in small scenes with 10's of high resolution lightmaps, and with a distribution farm. Build time in one scene went from to 113s -> 47s.

  • Allow masked dynamic shadows to be cast by translucent materials, based on a threshold opacity value.

  • Volume materials on every component type except particle sprites now voxelize the mesh's Object space bounding box, allowing more control over the shape of fog added and better performance when adding ground density.

  • Bug Fix: Enable PCSS on Vulkan & Metal and enable capsule shadows on Vulkan

  • Bug Fix: Only use skylight OcclusionMaxDistance for the global distance field if it casts shadows

  • Bug Fix: Fixed shadow occlusion culling broken by shadowmap caching change.

  • Bug Fix: Fixed spotlight whole scene shadow occlusion queries using a radius 2x too long

  • Bug Fix: Fix for movable skylight shader missing on simple forward (low lighting quality mode)

  • Bug Fix: Fixed ObjectRadius in Volume domain materials

  • Bug Fix: Dynamic Indirect Occlusion from mesh distance fields is disabled when operating on a movable skylight, since Distance Field Ambient Occlusion fills that role

  • Bug Fix: Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes

  • Bug Fix: VolumetricScatteringIntensity is greyed out based on Mobility

Materials
  • Moved UTexture material notification code into separate function, so it can be used by derived classes.

  • Improved streaming support for AO textures and lighting scenarios. Improved resolution metrics in the texture editor. Added a new editor command "BuildMaterialTextureStreamingData" to refresh material texture streaming data.

  • Removed the 1945MB VRAM cap in DX11 and DX12 when running 64 bit builds. Non console platforms will now allocate non streaming texture outside the texture pool if there is enough free VRAM available. This improves the behavior and maintainability of low texture settings.

  • Bug Fix: Fixed some cases where material instances would be treated as masked instead of opaque as intended.

  • Bug Fix: Fixed behavior of custom material attribute display names and function names.

  • Bug Fix: Fixed an issue where some materials would overstream some textures.

  • Bug Fix: Fixed an issue where textures would stay at low resolution following a memory usage spike.

  • Bug Fix: Fixed an issue when building the DDC for composite textures where the texture sources would be missing.

  • Bug Fix: Fixed a case where parameters behind a static switch would be invisible in a material instance.

Mobile Rendering
  • Exposed "Use Full Precision" for UI materials, which can be used to improve precision at performance cost in UI pixel shaders on mobile devices.

  • Added support for Vulkan validation layers on Android. Only in Debug and Development configuration (requires r.Vulkan.EnableValidation=1)

  • Vertex Fog is disabled on Mobile by default. This saves a number of instruction in base pass shaders.

  • Bug Fix: Correct tracking of static mesh index memory.

  • Bug Fix: Fixed: Decals on mobile devices should not disappear when there is planar reflection in the view

  • Bug Fix: Fixed: Protostar in Vulkan mode crashes without error on Tegra K1 Nvidia Shield due to OOM - fixed r.MobileReduceLoadedMips has no effect - added r.MobileMaxLoadedMips to set a limit to a number of mips - reduced size of vulkan allocation pages on android

  • Bug Fix: Fixed a problem which could cause the Scene Depth material node to return 0 on some mobile devices.

  • Bug Fix: Fixed: Crash after Splash Screen on Android (ETC2) when Adding r.UseShaderCaching and r.UseShaderPredraw - Added r.SaveShaderCache command to save current cache on demand - Removed support for caching multiple platfroms at the same time, each platform now uses separate cache/file - Significantly reduced size of draw log on disk - Mobile platfroms support only basic caching, logging shaders and bound shader states without full gfx state

  • Bug Fix: Fixed: Usage of dynamic shadows leads to application crash on Galaxy S7 device (SM-G930V) when project packaged with Vulkan support.

  • Bug Fix: Fixed an issue where streaming in or out levels each with their own stationary directional lights could cause the lighting system to lose track of which lights are loaded and surfaces be lit incorrectly

  • Bug Fix: Fixed upside down triangle rendering with UCanvas::K2_DrawMaterialTriangle on OpenGL ES devices.

Optimizations
  • New: Removed render thread stalls and improved reactivity when streaming mips for 2D textures.

  • New project settings to globally disable/enable creation of depth-only and reversed index buffers.

  • Added: Async loading bytecode from shader library. Along with bytecode de-duplication shader library will now pre-load requested bytecode to ensure there are no disk access related hitches in game when creating shaders.

  • Cloth vertex buffers no longer generate dummy vertices, which reduces runtime memory usage of skeletal meshes with multiple sections of which only one has cloth.

  • Fixed lights calling InvalidateLightingCache on Destroy in game, causing a hitch

  • Fixed UWorld::DestroyActor in PIE calling InvalidateLightingCacheDetailed which can do a FlushRenderingCommands and cause a large hitch

  • Snap volumetric fog light function target resolution to a factor of 32 to avoid constant texture reallocation

  • Added SendAllEndOfFrameUpdates draw event to wrap skin cache events

  • When compiling shaders for Metal explicitly emit the early-fragment-test qualifier unless the fragment shader invokes discard() or explicitly writes a depth-output semantic, this should better match driver behavior on Direct3D.

  • Optimise the constant-propagation pass in hlslcc by using a hash-table to reduce the cost of looking up the existing constant assignment instructions.

  • Vulkan will not use staging memory for dynamic vertex/index buffers on devices with unified memory access

  • Implement support for the SV_DepthLessEqual semantic in Metal.

  • Optimizations to reduce MetalRHI CPU overheads:

    • Avoid reallocating memory by making the TArray of uniform buffers a static C-array instead.

    • Use count-trailing-zero's intrinsics to eliminate redundant iterations over the set of bound resources.

  • Small optimizations to MetalRHI primarily for iOS: - Only buffers less than a platform-specific threshold are uploaded via Metal's set*Bytes API to balance CPU overheads (on iOS this is 512 bytes, on Mac it is 4096 bytes). - Increase the minimum pool sizes for MTLBuffer's to reflect this. - Avoid redundantly rebinding uniform buffers in MetalRHI.

  • Rewrite of the Vulkan pipeline cache: Multiple files can now be read off projectdir/Build/ShaderCaches/Platform folders; cache files are now compressed with rates of up to 70-90% off the original size.

  • Bug Fix: Fixes for profilegpu on Vulkan

  • Bug Fix: Discard now gets called on BulkData on D3D11, D3D12 and Vulkan.

Postprocessing
  • Improve performance of bokeh depth of field.

Tools

  • New: Improved XGE shader compiler. - Added support for XGE interception interface, which allows asynchronous streaming of shader tasks into XGE, and eliminates the stalling/flushing found in the old system. The old system has been renamed "Xml interface". - Both systems are available and selectable based on r.XGEShaderCompile.Mode CVar. Overview of the new system: - New system uses an additional XGEControlWorker process to manage communication between the engine and XGE. This is simply a copy of ShaderCompileWorker.exe (the implementation is part of SCW, but XGE requires the two files to be separate, hence the duplicate). - When shader jobs arrive from the engine, the shader compiler thread spawns an instance of XGEControlWorker within an XGE context, and connects to it via named pipes. - Job command lines are fed to the control worker via the pipe, which the worker enqueues within XGE by issuing a CreateProcess call, which is intercepted. Job completion is reported back to the engine via the named pipes. - New system is preferred over the old one, and is enabled with "-xgeshadercompile" command line switch or "r.XGEShaderCompile" cvar. - The new system depends on the "XGEController" engine module. Support for which is based on the WITH_XGE_CONTROLLER #define, or -xgecontroller/-noxgecontroller command line options.

  • Added an option in the Texture browser to allow a texture to override the default compression quality. This has an effect for textures compressed as PVRTC or ASTC.

  • Bug Fix: Fixed a condition where cooking DLC would cook all maps even if specific maps were specified.

AutomationTool
  • Added support for pre-build and post-build steps when using MegaXGE.

  • Added validation against shipping files in restricted folders. Added a new SystemNonUFS type for staged files, which excludes files from being remapped or renamed by the platform layer. Replaced the DeplyomentContext.StageFiles() function with simpler overloads for particular use cases (options for remapping are replaced with the SystemNonUFS file type) Config entries in the [Staging] category in DefaultGame.ini file allow remapping one directory to another, so restricted content can be made public in packaged builds (Example syntax: +RemapDirectory=(From="Foo/NoRedist", To="Foo")) An error is output if any restricted folder names other than the output platform are in the staged output.

  • The -submit or -nosubmit arguments are only passed to child instances of UAT if they were specified on the original command line. BuildCookRun uses this flag to determine whether to submit, rather than just whether to allow submitting, so we shouldn't pass an inferred value.

  • Added a -SkipHeader parameter to the UpdateLocalVersion command, to allow updating version files without updating Version.h and improve link times on incremental builds.

  • During staging, we now create a manifest for each PAK file containing all the plugin descriptors in one place. Eliminates need to recurse through directories and read separate multiple files in serial at startup, and allows reading all plugin descriptors with one read. The "Mods" directory is excluded from the manifest, since these are intended to be installed separately by the user.

  • Removed the -ForceLocal command line option. Settings are now always determined automatically if not set via environment variables, independently of the -BuildMachine argument.

  • Simplified logic for detecting Perforce settings, using environment variables if they are set, otherwise falling back to detecting them. Removes special cases for build machines, and makes it simpler to set up UAT commands on builders outside Epic.

  • Packaging a plugin will now force include what you use to be enabled. Since plugins distributed on the marketplace will be moved into the engine folder, they need to be IWYU compatible.

  • Bug Fix: Fixed incorrect username in BuildGraph task. Should use the username from the Perforce environment, not assume the logged in user name is the same.

  • Bug Fix: Formatting in JSON output from C# tools now matches formatting used by the engine.

  • Bug Fix: When patching temporary files are now put in the correct directories. Thanks David Yerkess @ Milestone

  • Bug Fix: Fixed executable not being recompiled for a content-only project if a plugin which is enabled by default is disabled.

BuildGraph
  • Added an example script to package ShooterGame for any platforms.

  • Improved tracing for error messages. All errors are now propagated as exceptions, and are tagged with additional context information about the task currently being run. For example, throwing new AutomationException("Unable to write foo.txt") from SetVersionTask.Execute is now displayed in the log as: ERROR: Unable to write to foo.txt while executing at Engine\Build\InstalledEngineBuild.xml(91) (see D:\P4 UE4\Engine\Programs\AutomationTool\Saved\Logs\UAT_Log.txt for full exception trace)

  • Added support for nullable parameter types.

UnrealBuildTool
  • Added support for adaptive non-unity builds when working from a Git repository. The ISourceFileWorkingSet interface is now used to query files belonging to the working set, and has separate implementations for Perforce (PerforceSourceFileWorkingSet) and Git (GitSourceFileWorkingSet). The Git implementation is used if a .git directory is found in the directory containing the Engine folder, the directory containing the project file, or the parent directory of the project file, and spawns a "git status" process in the background to determine which files are untracked or staged. Several new settings are supported in BuildConfiguration.xml to allow modifying default behavior:

    <SourceFileWorkingSet> <Provider>Default</Provider> 
        <RepositoryPath></RepositoryPath> 
        <GitPath>git</GitPath> 
    </SourceFileWorkingSet>
  • Simplified how targets are cleaned. Delete all intermediate folders for a platform/configuration, and delete any build products matching the UE4 naming convention for that target, rather than relying on the current build configuration or list of previous build products. This will ensure that build products which are no longer being generated will also be cleaned.

  • A .version file is now created for every target built by UBT in the same JSON format as Engine/Build/Build.version. This allows monolithic targets to read a version number at runtime, unlike when it's embedded in a .modules file, and allows creating versioned client executables that will work with versioned servers when syncing through UnrealGameSync.

  • Use P/Invoke to determine number of physical processors on Windows rather than using WMI. Starting up WMIC adds 2.5 seconds to build times, and is not compatible with .NET core.

  • Added support for declaring custom pre-build steps and post-build steps from .target.cs files. Similarly to the custom build steps configurable from .uproject and .uplugin files, these specify commands which will be executed by the host platform's shell before or after a build. The following variables are expanded within the list of commands before execution: $(EngineDir), $(ProjectDir), $(TargetName), $(TargetPlatform), $(TargetConfiguration), $(TargetType), $(ProjectFile). Example usage: public class UnrealPakTarget : TargetRules { public UnrealPakTarget(TargetInfo Target) : base(Target) { Type = TargetType.Program; LinkType = TargetLinkType.Monolithic; LaunchModuleName = "UnrealPak"; if(HostPlatform == UnrealTargetPlatform.Win64) { PreBuildSteps.Add("echo Before building:"); PreBuildSteps.Add("echo This is $(TargetName) $(TargetConfiguration) $(TargetPlatform)"); PostBuildSteps.Add("echo After building!"); PostBuildSteps.Add("echo This is $(TargetName) $(TargetConfiguration) $(TargetPlatform)"); } } }

  • The user's preferred source code IDE selected in the editor is now used to generate project files.

  • Bug Fix: UnrealHeaderTool will now be re-run if the .build.cs file for a module has changed.

  • Bug Fix: Fixed incorrect MSBuild version occasionally being used when invoking UnrealBuildTool.

  • Bug Fix: Removed the dependency on the ShaderCompileWorker project when running with generating project files with the -useprecompiled argument.

  • Bug Fix: Fixed hot reload generating import libraries without DLLs. Now that they are produced by separate actions by default, it was removing DLLs from the action graph due to the bSkipLinkingWhenNothingToCompile setting.

  • Bug Fix: Fixed UBT stack size not being propagated through to the toolchain from the target settings.

  • Bug Fix: Files in output directories which match build products in other output directories are now deleted. Prevents slate binaries from being loaded when a module is moved.

  • Bug Fix: Fixed unchanged modules always being relinked with VS2017 15.3

UnrealGameSync
  • Added variables for stream and client name, and the ability to escape any variables for URIs using the syntax $(VariableName:URI).

  • Allow adding custom actions to the context menu for right clicking on a changelist. Actions are specified in the project's UnrealEngine.ini file, with the following syntax: +ContextMenu=(Label="This is the menu item", Execute="foo.exe", Arguments="bar") The standard set of variables for custom tools is expanded in each parameter (eg. $(ProjectDir), $(EditorConfig), etc...), plus the $(Change) variable.

  • Always sync the Enterprise folder if the selected .uproject file has the "Enterprise" flag set.

  • If working in a virtual stream, use the name of the first non-virtual ancestor for writing version files.

  • Added additional search paths for UGS config files, and fix a few cosmetic issues (inability to display ampersands in tools menu, showing changelist -1 when running a tool without syncing). Config files are now read from: Engine/Programs/UnrealGameSync/UnrealGameSync.ini Engine/Programs/UnrealGameSync/NotForLicensees/UnrealGameSync.ini If a project is selected: /Build/UnrealGameSync.ini /Build/NotForLicensees/UnrealGameSync.ini If the .uprojectdirs file is selected: Engine/Programs/UnrealGameSync/DefaultProject.ini Engine/Programs/UnrealGameSync/NotForLicensees/DefaultProject.ini

  • Project files are no longer generated when syncing precompiled binaries.

  • The user's server settings are now read by spawning P4.EXE from the directory containing the project being opened, so people can override the P4PORT setting on a per-workspace basis using a P4CONFIG file.

  • Added support for custom post-sync actions. These cannot be configured per-user, but are set by the project configuration file. Since they are always executed, they should be fast and reliable. Example additions to an UnrealGameSync.ini file: [Sync] +Step=(FileName="cmd.exe", Arguments="/C echo Change=$(Change), CodeChange=$(CodeChange), BranchDir=$(BranchDir)")

  • Added support for predefined categories of files to exclude from being synced. The "Sync Filter" dialog now shows a list of these categories as well as the custom view that was previously supported. Several built-in categories are defined, for various target platforms, documentation, and so on. Each category is identified by a GUID, and projects may add or modify existing categories through the /Build/UnrealGameSync.ini config file. Config file entries are formatted as follows: +SyncCategory=(UniqueId="{00000000-0000-0000-0000-000000000000}", Name="Name of this Category", Enable=true/false, Clear=true/false, Paths="/Path1/...;/Path2/...") All fields other than the UniqueId are optional. Specify Enable=false to prevent the filter from being applied or shown to the user. Specify Clear=true when modifying an existing category to clear the existing paths rather than append new paths. Specify the list of patterns to be filtered out separated by semicolons.

  • Bug Fix: Changed to use the default Perforce server port when opening P4V if there is not one set in the environment.

  • Bug Fix: Fix tab names setting not being correctly read back in from config file.

  • Bug Fix: Fixed build configuration not correctly being updated to reflect changes on other tabs.

  • Bug Fix: Fix directory separators not being normalized before filtering files for sync. If the workspace root directory has non-native separators (eg. D:/P4), they will be propagated to the file list.

  • Bug Fix: Fixed crash when switching streams to a stream that does not contain the current project file.

  • Bug Fix: Reparse points (symlinks) are no longer enumerated when recursively deleting directories. This could cause the contents of the linked directory to be deleted rather than the symlink itself, and can cause crashes if the symlink is to an outer directory.

UnrealVS
  • Bug Fix: Fixed setting the command line to empty not affecting the underlying property sheet.

  • Bug Fix: Fix single-file compilation for foreign projects, where the command line contains $(SolutionDir) and $(ProjectName) variables.

UI

  • Disabled the skeletal mesh's "Use async scene" property if the current project is not set to use an async scene, as this property will have no effect otherwise. A warning is shown on the property if the project does not currently use an async scene. A similar warning will be shown in the physics asset editor in the near future.

  • Disabled viewport post processing when in cloth painting mode on clothing assets, to make the paint colours more easily distinguishable.

  • Bug Fix: Stopped property context menus closing the whole window stack when an item is clicked

  • Bug Fix: Improve PhAT UI to stop showing convex bodies as editable, as they currently contain no editable properties.

  • Bug Fix: Fixed "Use Internal" button for Soundwave curves being too large.

  • Bug Fix: Fixed various dropdown menus in the cloth asset creation popup not hiding themselves when the input focus is lost.

  • Bug Fix: Fix for custom rows having their "is enabled" attribute stomped.

  • Bug Fix: Force low quality mode for background blurs by default on android

  • Bug Fix: Force low quality fallback mode on ES2 devices for slate blur widgets. This feature does not work on es2

  • Bug Fix: Prevent resizing when a context menu is open. This prevents a number of rare crashes when a window is resized when a child menu is open.

  • Bug Fix: Converted remaining uses of EKeyboardFocusCause to EFocusCause and properly deprecated it

  • Bug Fix: Fix issues with marking a widget Blueprint class as abstract

  • Bug Fix: Added a console variable to prevent touch events from sending multiple bogus mouse events. Disabled by default. Enabling this will prevent pen tablets from working but may be necessary for touch events to work in windows 7.

Slate
  • Added search to editable texts

    • This can be invoked by selecting some text and using Ctrl+(Shift+)F3 to begin a search, and then using (Shift+)F3 to move through the matches.

    • It can also be done in code by calling BeginSearch and AdvanceSearch on an editable text.

  • Added bApplyWidgetStyleToMenu to SMenuAnchor - if false, the popup is given a default FWidgetStyle when painted. This allows the menu to ignore the inherited tint and opacity, so a faded button can still summon a fully opaque menu.

  • Bug Fix: Added a lock around access to slate active timers to protect it against race conditions when accessed on the slate movie thread and the game thread

  • Bug Fix: Fixed issue where undocked tabs had no way to be made visible again after being hidden

UMG
  • OrionEditableTextBox added a max count so it has a upper limit of how many characters allowed to be entered.

  • Bug Fix: UMG: Apply latent actions like in movie scene sequence player.

  • Bug Fix: Scroll Widget Into View will now work for widgets not directly parented to a scroll box.

UMG

  • Reduce memory footprint of somd UMG/Slate classes including UWidget, UBorder, UUserWidget, SWidget, and SButton

XR

  • Debug stereo layer support. This adds an option to render the debug canvas to a stereo layer which greatly improves console and stat readability in an hmd.

  • Updated OpenVR SDK to 1.0.10.

  • Bug Fix: Editor primitives we not being handled correctly with ISR.

  • Bug Fix: Adding ISR and multiview support for custom depth. This fixes z-fighting that can occur between the custom depth pass and pre/base pass when the custom depth pass doesn't use ISR/multiview.

  • Bug Fix: PR #3997: Fix quad buffer stereo crash in Windows (Contributed by ayamashev)

VR
  • Added support for non-parallel projections for HMDs that have canted display panels

  • Split interface for handling custom render targets from IStereoRendering into its own interface and unified common code between different VR platforms into a single base implementation class.

  • Adding core VR controller re-centering delegate notification. Users can now use this delegate via the VRNotificationsComponent

  • Adding in support for the SteamVR Knuckles controllers

  • Code applying late updates has been unified across different VR platforms, reducing code duplication and unifying behavior.

  • Added in SteamVR visible area mesh support. Can be toggled with vr.SteamVR.UseVisibleAreaMesh

  • Updating SteamVR libraries to 1.10

  • Oculus changes for SI1.16 and SI1.17 Adds Vulkan and D3D12 improvements/fixes for VR, depth target allocation for VR plugins, Android thread naming and a number of new Oculus features.

  • Added Vulcan Extensions for OculusVR

  • UE-47210 VR Mode in-Editor Viewport Camera is misaligned with HMD camera -Added calculation of the point on the render target directly in front of your eyes based on the HMD's projection matrix. -This is used by cropping spectator screen modes to adjust the cropping used to favor putting the eye center point in the center of the spectator screen. Oculus is most noticable as its center point is about .45 out of 1 from the top, rather than 0.5. -I also found that we were not successfuly detecting the aspect ratio of the spectator screen in windowed mode. We were using the render target aspect ratio, which is constant. Now we pass down the window size to get the correct aspect ratio.

  • Updated library revision for GoogleVR

  • Bug Fix: Fixed SpectatorScreen Flickering Fixed Spectator screen: need frame delay before assigning dynamically created rendertarget to spectator texture Fixed Spectator Screen: crash if you release a render target which is assigned as the spectator texture -Now I pull the Texture2DRHI out of the UTexture every frame and pass it to the render thread via a rendercommand. This has us getting it after it is created, and using it until the end of the current renderframe. -Note: scene capture components crash if you release their render target, so point them away from it first. -Note: this still leaves the possibility of setting a texture who's resources do not yet exist, or which have not been rendered to yet as the spectator screen texture. The spectator screen will, by default display all black if it doesn't find a resource at all. For debugging one can switch that to all white or breakpoint it in GetFallbackRHITexture().

  • Bug Fix: Don't snap motion controllers to the origin when tracking is lost.

  • Bug Fix: Vive spectator flat rect expanded to match other platforms.

  • Bug Fix: PSVR Social Screen needs to go to 'mirroring' for hmd setup dialog because system dialogs are not visible in separate mode.

  • Bug Fix: Fixed a regression causing splash screens on Oculus to be forced to a 16:9 aspect ratio regardless of the texture size used.

  • Bug Fix: Fixed an issue with backwards compatibility, where the old XR module names (OculusRift, GearVR, etc.) still work with the command line and XR prioritization.

  • Bug Fix: Fixed a bug that would modify the camera view unwantedly outside of VR, when the camera's LockToHMD option was enabled.

  • Bug Fix: Fixed a crash that could occur when using a SteamVRChaperoneComponent on a XR platform other than SteamVR.

  • Bug Fix: Fixed a bug where the in-game camera view could become vertically locked after playing in VR preview.

  • Bug Fix: Fixed a bug with the Daydream controller model where the laser was rendering undersized.

  • Bug Fix: Fixed a bug with SteamVR on Mac where controller haptics would not fire.

  • Bug Fix: Fix for Daydream 2D transition on Android Fix for Cardboard on Samsung S8 devices when not set to native resolution

  • Bug Fix: Fixed a bug on Oculus, where the tracking space's origin was being ignored/reset on initialization.

UPGRADE NOTES

AI

  • Bug Fix: Fixed: bNavigationAutoUpdateEnabled was not always working when re-opening map in the Editor Fixed: Navigation Build was not always clearing nav-mesh tiles when bNavigationAutoUpdateEnabled is enabled Fixed: Streaming out a sub-level in the Editor was not always updating nav-mesh debug drawing

Animation

Animation Blueprint
  • USkeletalMeshComponet.bDisableAnimCurves is deprecated and converted to USkeletalMeshComponet.bAllowAnimCurveEvaluation. Note the meaning is reversed.

Automation

  • Moved functional testing automation commands to an exported helper.

Blueprints

  • Blueprint references to "Random Unit Vector in Cone" or "Random Unit Vector in Cone With Yaw and Pitch" will automatically be redirected, but function calls in code will not. See the Programmer Notes for technical instructions.

  • If your project's .uproject file contains an "AdditionalPluginDirectories" section with an entry listed as "Intermediate/Plugins", please remove that entry. If it is the only entry, it is safe to remove the entire section.

    • In 4.17 we automatically added this entry to the .uproject file (only if it was writable) when you changed the "BlueprintNativizationMethod" option to something besides "Disabled" in Project settings->Packaging in the Editor UI. In 4.18 we've since removed this feature, as we found that it was causing issues with switching between nativized and non-nativized build workflows. Note that if it's not removed, those issues may persist.

Most paths in the UE4 editor UI that cook and/or build the game now look to the "BlueprintNativizationMethod" option in Project settings->Packaging in the Editor UI in order to determine if Blueprint nativization should be enabled.

* This means that if you've set that option to something other than "Disabled" for your project, any time you (or someone else working on the same project who you share the config files with) does something that cooks and/or builds the game, it will now do so with Blueprint nativization enabled.

* This only applies to workflows that use "Cook by the book" mode. Blueprint nativization is not enabled with "Cook on the fly" mode, regardless of the "BlueprintNativizationMethod" setting.

* One exception is the "Launch on <Device>" command. This command performs a "Cook by the Book" within the Editor process itself, and Blueprint nativization also cannot be enabled for cooking in that mode either.

* Other situations that will currently always disable Blueprint nativization include when Cook on the Fly mode is used for launching a profile in the Project Launcher, and when a Blueprint-only project is launched through the Project Launcher using a binary (i.e. not built locally) version of the editor.

* In the Project Launcher, you can create a custom Launch profile to override the current setting by adding the following into the "Additional Cook Options" field for the "Cook by the Book" settings: "-ini:Game:[/Script/UnrealEd.ProjectPackagingSettings]:BlueprintNativizationMethod=<Disabled|Inclusive|Exclusive>", replacing the "<Disabled|Inclusive|Exclusive>" substring with one of those 3 available options.
  • Bug Fix: Fix create object nodes failing to remove orphaned pins when connections to the orphaned pin are removed.

Core

  • FTimespan: The %D string formatter (previously total number of days) is now the zero-padded days component of the time span. Time spans are now always exported and stringified with a leading plus or minus sign.

  • Modifying a TMap, TSet or TSparseArray while you are iterating over it with a ranged-for loop will now cause an assertion, matching the same behavior as TArray. If you need this functionality, you should change your loop to a traditional iterator loop:

  • Multiple MAX values will no longer be generated for UENUMs. Assets (including Blueprints) which refer to redundant MAX values will throw a warning about the missing value. These assets should be reexported to be saved with the new MAX value.

  • Any custom C# projects (UAT plugins for example) should add a reference to the DotNETCommon assembly

  • MoveTemp will no longer compile if passed an rvalue or a const lvalue. The code should either be fixed to not use const if possible, or the MoveTemp should be removed as it is redundant. Templates and macros can use MoveTempIfPossible when it's hard to tell if the argument is const - this follows the old behavior of MoveTemp.

  • Bug Fix: Any references to FCoreUObjectDelegates::PreGarbageCollect/PostGarbageCollect delegates should be replaced with calls to FCoreUObjectDelegates::GetPreGarbageCollectDelegate() and FCoreUObjectDelegates::GetPostGarbageCollectDelegate() respectively

  • Bug Fix: Fixed console output not working when using -log in a shipping build

Gameplay Framework

  • New: As part of the changes for cross-level actor references newly created Sequencer actor references are now SoftObjectPtrs, but older Sequences will have to be fixed up with "Rebind Possessable References" and resaved first.

  • Scale can now be specified on play particle effect anim notify and spawn emitter Blueprint nodes.

  • Remove advanced option CreateTemporaryCopiesOfLevels from the sequencer capture object, it has not worked properly in several versions.

  • Bug Fix: UWorld functions PerformGarbageCollectionAndCleanupActors, DelayGarbageCollection, SetTimeUntilNextGarbageCollection, GetTimeBetweenGarbageCollectionPasses, and ForceGarbageCollection have been deprecated. The equivalent functions on GEngine should be used instead.

Media Framework

  • BREAKING: MediaSoundWave assets were replaced with MediaSoundComponents

    • There is no automatic conversion (components require different workflow & user decisions)

    • Attach new MediaSoundComponents to Actors or UMG widgets

    • Existing MediaSoundWave assets must be deleted from Content directory on disk

  • BREAKING: MediaPlayer output settings were removed. Media assets now reference a MediaPlayer instead

  • NEW: MediaTexture and MediaSoundComponent have a setting for the Media Player to pull data from

  • NEW: MediaAssets module is now always loaded to prevent server-side BP problems

  • NEW: Material texture samplers now require the new Sampler Type "External"

  • NOTE: MediaOverlay assets were removed as a concept

    • We are currently reworking caption and subtitle support in UE4

Online

  • Any classes inheriting or making use of IOnlineTitleFile should be adjusted to take account of the new error string.

Physics

  • All UPrimitiveComponent and FBodyInstance deprecated functions will still work as they did before, but it's recommended that code using these functions is upgraded to call the newer ones. This should be as simple as following the instructions in the respective deprecation compiler warnings. Particular care should be taken when upgrading calls to FBodyInstance to ensure that the inputs are converted to the correct units expected by the new functions.

Platforms

iOS
  • Older project will need to open the editor and resave their IOS project settings .

Rendering

  • Projects requiring HDR support now need to set r.AllowHDR to 1 in their DefaultEngine.ini (or per-platform equivalents). Projects using HDR on consoles who want the feature to be off by default should modify DefaultGameUserSettings.ini to disable it.

Materials
  • Bug Fix: Fixed behavior of custom material attribute display names and function names - The intention was to allow a display name and a separate name for use in the HLSL but one was being lost. Projects relying on the old behavior may need to update local shader modifications.

Mobile Rendering
  • If your maps use Vertex Fog, Mobile preview and device will show on screen message: PROJECT HAS VERTEX FOG ON MOBILE DISABLED. Please open project settings and enable support for Vertex Fog in Mobile section.

  • Bug Fix: Vulkan will pre-allocate less memory on mobile devices

  • Bug Fix: Fixed: Shader cashing on Android. To enable shader caching use r.UseShaderCaching=1. Use r.SaveShaderCache command on device to save current cache to file, which then you can include into your game package.

Optimizations
  • Vulkan pipeline caches will need to be regenerated via the r.Vulkan.SavePipelineCache console command. Previous cache files are no longer compatible.

PROGRAMMING UPGRADE NOTES

AI

  • Bug Fix: Fixed a bug in GameplayTasks processing that could result in bloating of the UGameplayTasksComponent::KnownTasks array.

Animation

General
  • Bug Fix: FindUID no longer returns a pointer, any code calling it will need to be changed

Audio

  • New: To implement the source bus feature, we needed to split out volume attenuation vs distance attenuation. The bus audio needs to be mixed pre-distance-attenuation to avoid getting double-attenuated as the audio is output from the buses. This added some complexity with volume setting/getting in higher level code so if you were retrieving volume of playing sounds for a custom C++ feature, you may want to look at new volume getters and setters. To help with this, we made all volume setting and getting private to wave instances (FWaveInstance).

Blueprints

  • Functions that returned random unit vectors from within cones (whether this required a stream or not) have now been refactored into degree- and radian-based counterparts. The suffix "With yaw and pitch" has also been replaced with "Elliptical" for brevity.

Where a single half-angle used to be required to specify the cone, the new radian-based function should be substituted; however, where both yaw and pitch were provided, the new degree-based function should be used instead. For example:

* Calls to *RandomUnitVectorInConeFromStream()* should be replaced with **RandomUnitVectorInConeInRadiansFromStream()**.

* Calls to *RandomUnitVectorInConeWithYawAndPitch()* should be replaced with **RandomUnitVectorInEllipticalConeInDegrees()**.

From this point onward, the inconsistency in units between the elliptical and non-elliptical functions should be mitigated, as the degree or radian variants can now be used as appropriate.

  • If you have a custom build pipeline that relies on UAT BuildCookRun automation for cooking and/or building, note that in 4.18 it is no longer necessary to specify the -nativizeAssets flag to enable Blueprint nativization.

    • Instead, UAT now looks at the value of the "BlueprintNativizationMethod" setting in DefaultGame.ini. This can be set by the user in the Editor UI in the Project Settings->Packaging section. If that value does not exist in DefaultGame.ini, then the value is assumed to be "Disabled" (off).

    • You can override the setting by including the following on the UAT command line: "-ini:Game:[/Script/UnrealEd.ProjectPackagingSettings]:BlueprintNativizationMethod=", replacing the "" substring with one of those 3 available options.

    • Similarly, if your build pipeline calls UE4Editor.exe directly (for cooking) and/or UnrealBuildTool.exe directly (for building), the same holds true for those tools as well. You can also override the setting by including the same argument as noted above on each of their command lines, respectively. In that case, you'll need to ensure that both tools are specifying the same nativization method in their command lines.

Editor

  • New: To disable array reordering, use the metadata flag EditFixedOrder on the TArray.

  • Developers can now register a delegate with SlateApplication to tell when a window's DPI changes

  • The new port is set by default to 17777, which may conflict with projects that have hardcoded their ports when playing in editor.

Sequencer
  • New: UTexture::GetMaterialType is now const

Gameplay Framework

  • New: As part of the cross-level actor references change, several types and headers were renamed:

    • FStringAssetReference is now FSoftObjectPath

    • FStringClassReference is now FSoftClassPath

    • TAssetPtr is now TSoftObjectPtr

    • TAssetSubclassOf is now TSoftClassPtr

    • StringAssetReference.h/StringClassReference.h is now SoftObjectPath.h

    • AssetPtr.h is now SoftObjectPtr.h

Including the old headers will give compiler warnings. The old type names are not officially deprecated because many games will have a large number of them, but they should be fixed up as well.

  • ComponentToWorld can no longer be directly accessed; use GetComponentTransform() instead.

Networking

  • Messaging: If you use the common helper classes, replace "Messaging" with "MessagingCommon" in your Build.cs files and remove the "Helpers/" subdirectory from your include statements (unless you actually include header files from "Messaging", in which case you need to keep "Messaging" and add "MessagingCommon").

Online

  • IOnlineIdentity::GetPlatformUserIdFromUniqueNetId is now const

Android
  • This can be enabled via 'Android.EnableSustainedPerformanceMode' Cvar.

iOS
  • ObjC exceptions default to off, if they are required then set bForceEnableObjCExceptions = true in your ModuleRules.

  • To enable add the following line to your IOSRuntimeSettings config: bDisableForceInline=true

Rendering

Optimizations
  • New:

    • UTexture2D::RequestedMips was removed and should be replaced by GetNumRequestedMips()

    • UTexture2D::ResidentMips was removed and should be replaced by GetNumResidentMips()

    • UTexture2D::PendingMipChangeRequestStatus was removed and streaming status should be handled through HasPendingUpdate() and IsReadyForStreaming()

XR

VR
  • If you maintain a custom VR plugin that needs to allocate its own render targets, you now need to move the methods out of your IStereoRendering implementation into a IStereoRenderTargetManager implementation. You can reduce the amount of duplicate code by extending FXRRenderTargetManager instead of implementing the interface directly.

  • Bug Fix: A receipt based system was added to request an override of the social screen mode to mirroring so that system dialogs are visible on the social screen, or potentially for other reasons. HMDSetupDialog is the only current use of this system.

DEPRECATIONS

Core

  • Removed unused member variable (FArchiveAsync2::bKeepRestOfFilePrecached)

  • Removed FPackageFileSummary's CompressedChunks array as it was no longer being used by anything.

Physics

  • APEX Destuction has been moved to a plugin and is now disabled by default. To enable the plugin, use the Plugin Manager (Edit > Plugins > Physics).

Rendering

  • Deprecating support for the Editor running in Shader Model 4

    • This release we will be deprecating support for running the Editor while using Shader Model 4. This mainly affects users with only DirectX 10 capable graphics cards. Starting on the next release we will require a Shader Model 5 (DirectX 11/OpenGL4/Vulkan) capable card.

  • Deprecating support for the games running in Shader Model 4 for Open GL

    • This release we will be deprecating support for running the game while using Shader Model 4 on OpenGL for both Windows and Linux. Starting on the next release we will require a Shader Model 5 (OpenGL4) capable card.

Mobile Rendering
  • The Android OpenGL ES deferred renderer has been removed.

Tools

  • CrashReporter has been removed from the public UnrealEngine distribution until it can be adapted to a more scalable solution that is usable by subscribers and licensees.

UnrealBuildTool
  • Deprecated the BuildConfiguration and UEBuildConfiguration aliases from the ModuleRules class. These have been implemented as an alias ot the ReadOnlyTargetRules instance passed to the constructor for several engine versions.

Select Skin
Light
Dark

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见