虚幻引擎 4.6 版本信息

虚幻引擎4.6进行了诸多光照和材质方面的改进,支持捕获和回放网络演示,并对动画工作流程进行了重大更新,其中包括了根骨骼运动混合以及多动画剪辑支持! 全新的移动平台预览渲染模式让您可以编辑您的场景,使之呈现和移动平台相同的效果。 我们已极大地增强了使用虚幻运动图像的UI创建,并且您现在可以马上将可互动的UI控件放置到三维场景中。 我们还继续对4.6版本的移动平台和主机平台进行了改进,并加入了数以百计的其它功能和bug修复。

此次发布包括了88项重大变更,它们都是由虚幻引擎的杰出开发者社区提交的。 在此,我们谨向以下贡献者们表达我们诚挚的谢意:

Alex Silkin (alexSilkin), alwei, Allegorithmic, Artem V. Navrotskiy (bozaro), Cengiz Terzibas (yaakuro), Flenzine, Gigantoad, Rama (EverNewJoy), Joel Riendeau (joelriendeau), Jakub Stasiak (jstasiak), Joe Hegarty (JoeHegarty), Marat Radchenko (slonopotamus), Michael Kösel (TheCodez), Michelle12188, Marcin Polaczyk (mpolaczyk), MyDigitalLife, mordentral, KazumasaOhashi, leobenaducci, Lukasz (iniside), Nicholas Hughes (piinecone), Sebastian Köcke (byte3), Salamanderrake, Stephen Whittle (stephenwhittle), Tomas Jedlicka (jedlickat), Rick Yorgason (Skrapion), Kyle Rocha (kylawl)

主要新功能

试验性功能: 三维虚幻运动图像UI

您现在可以附加UI控件到组件中,然后在三维场景中显示它们!

3DumgUI01.png

  • 为使用此功能,请直接添加新“Widget Component”(控件组件)到您的actor并为其分配一个控件资源。 这项功能仍为实验性功能,但我们正在不断改善它,而且会很快添加更多功能。

  • 您的UI将被渲染到离屏对象,然后映射到附着于您actor的三维方形上。 同时也支持输入,所以如果您的游戏显示鼠标指针,用户将可以点击按钮并进行其它互动。

  • 您可以为您在控件组件详细信息视图中的三维控件配置渲染设置。 请不要忘记设置“Draw Size”(描画尺寸)-- 它控制了UI将被渲染到的渲染对象的大小。

3DumgUI02.png

来自自发光材质的静态光照

自发光材质现在可以直接照亮周围的物体!

StaticLightingfromEmissiveMaterials.png

在Mobility(移动性)设置为“Static”(静态)的情况下,您可以通过启用阴影投射组件的新“Use Emissive For Static Lighting”(使用对静态光照的自发光)选项来打开这项功能。 在启用后,Lightmass会从自发光贴图源中生成烘焙的直接光照。

  • 注意: 这是一个自发光光照的快速但功能有限的版本。 只计算直接光照,但编译时间不受影响。 最好能用于具有其它光源的场景中。

植被的静态光照

植被对象和实例化网格物体现在支持预计算光照和阴影! 这样可以对具有固定或静态光照的场景进行非常高效的渲染。

StaticLightingonFoliage.png

对于中等大小的关卡来说,静态光源较为合适,但对于大型关卡来说,在编译时间或内存需求方面就不够用了。 请您一定要对需要进行多次实例化处理的网格物体使用非常小的光照贴图分辨率。

录制演示(网络回放捕获)

这个功能让您可以保存您游戏过程的“instant replay”(实时回放)! 它会捕获您游戏的网络动态载入内容到一个“demo”(演示)文件夹,这样您可以稍后回放或与他人共享。 您甚至可以使用时间调整来快速进行放慢或快进您的游戏。

DemoRecording.png

对于任何启用了网络功能的虚幻引擎游戏来说,演示录制都会自动运行。

  • 如需开始录制,请使用控制台命令“DemoRec <replay name>

  • 如需回放之前录制的游戏内容,请使用控制台命令“DemoPlay <replay name>

  • 您可以尝试使用一下慢动作和快进功能! 请使用控制台命令“Demo.TimeDilation <multiplier>”。 举例来说,如您需要以半速来回放,请使用“Demo.TimeDilation 0.5”。

  • ShooterGame(射击游戏)示例已经更新了内置的支持,以供您使用游戏内菜单的新“Demos”(演示)来浏览保存的回放内容。 试试看! (请注意您仍然需要首先使用“DemoRec”来保存一段回放内容。)

试验性功能: 在编辑器中预览移动平台内容

您现在可以在编辑器视口中直接预览移动设备上的场景内容! 着色器会模拟OpenGL ES2移动平台的外观和功能集,并且您可以无缝地来回进行切换。

MobilePreviewInEditor.png

  • 您需要在编辑器参数设置的实验性设置中启用 Feature Level Preview (特色关卡预览)。

  • 在主编辑器工具条中,请点击Settings(设置) -> Feature Level Preview (特色关卡预览) -> ES2。

试验性功能: 网络浏览器UI控件

您可以使用新网络浏览器UI控件在您的游戏或编辑器工具内存放网页。

WebBrowserUIwidget.png

  • 您可以使用Slate的新网络浏览器控件(SWebBrowser) 来方便地浏览互动网页并将其作为您UI的一部分进行显示。 这项技术是使用植入的Chromium网站框架(CEF3)来驱动的。 此功能目前为实验性功能,而且仅支持Windows平台。

蓝图中动态载入在线会话

虚幻引擎现在支持通过蓝图脚本来主持、发现和加入在线会话!

SteamOnlineSessions.png

  • 我们添加了新蓝图节点,以供您主持、加入、离开并搜寻在线会话,其中包括了Steam(动态载入)和局域网(LAN)会话。

  • 以下为新节点:

    • 创建会话: 主持一个可让用户在网络上发现的会话。

    • 搜寻会话: 搜寻网络以查找可供加入的会话。

    • 加入会话: 加入在Find Sessions(搜寻会话)部分发现的会话。

    • 销毁会话: 离开一个之前创建或加入的会话。

新材质系统功能

具有许多贴图的材质
  • 通过使用新‘共享’贴图采样程序,材质现在可以使用最多128张唯一贴图。 您可以通过设置SamplerSource属性来在TextureSample节点上对此进行设置。 之前,您最多仅能使用13张贴图。

MaterialsWithManyTextures.png

  • 对于诸如地形、高质量角色材质以及更为高级的提前着色材质的分层材质来说,这确实是一项非常重要的改进。

  • DirectX 11以及主机平台支持一次128张贴图,但是OpenGL渲染路径(Windows或Mac平台)仍被限制为每个材质13张贴图。 如果超过这个限制,那么OpenGL的着色器就无法编译。

标量和向量参数默认值的实时预览
  • 您现在可以变更任意标量和向量参数的默认值,并在所有的三维视口中立即查看结果。

  • 这对于应用层的材质函数尤为有用,正如您所看到的,这会对场景中所有使用该函数的材质上的层进行调整。 您也可以点击鼠标右键来快速转换常量为参数以方便调整,然后在您完成时把它们转换回来。

暴露来自材质函数的参数
  • 现在我们支持在函数中的材质实例参数。 这使得暴露参数到材质实例中变得很容易。 这使得函数的功能与材质相同,相同的节点图表也可用于两者之一。 唯一的例外是函数输入和输出节点,它们只能用于函数。

  • 请注意,材质内的参数是根据名称来设置的,所以如果您有两个名称为'wetness'的参数由该材质在不同的函数中进行引用,它们将都被材质实例中的相同值覆盖。 如果您需要特意这样使用,这样做是没问题的,但是如果您不想共享参数,请您起一个唯一的名称。

动画: 播放多个动画剪辑

到目前为止,您一次只能在骨架网格物体上播放一个动画剪辑。 现在您可以播放任意数量的动画剪辑了!

以下是关于其运行原理的内容:

  • 动画现在被分组。 您可以在每组播放单个动画剪辑。 您是不是想要同时播放另一个动画剪辑? 您可以直接创建一个新组。

  • 我们把插槽和组的创建集中到了Persona中的新‘Anim Slot Manager’(动画插槽管理器)选项卡中(请参阅下方)。

  • 现在有了新下拉式UI以供您选择有效插槽。 您不再需要手动输入动画插槽的名称。

  • 在播放网络根骨骼运动的动画图像时,您仍被限制为一次使用一个动画剪辑。

  • 新的动画剪辑资源和插槽节点在一开始会有单个 'Default Slot' (默认插槽),这样它们就立即可用了。

动画插槽管理器

  • ‘Anim Slot Manager’(动画插槽管理器)可供您管理插槽和组的名称。 它显示了层次结构视图,让您可以做出变更。

AnimSlotManager01.png

  • 组和插槽被保存在骨架资源中,所以来自同一族的AnimBlueprints和AnimMontages都使用相同的设置。

  • 方便的‘Save’(保存)按钮被添加到了管理器中,这样当您做出变更时,您不必再受编辑器提示您保存骨架资源的困扰了。

  • 当您点击插槽名称时,关联菜单将可以让您将其移动到不同的组中:

AnimSlotManager02.png

在动画剪辑轨迹中编辑插槽

此处是动画剪辑编辑器的视图。 请注意轨迹右侧的Combo Box(组合框)。 它将会列出该轨迹的所有可用插槽。

EditingSlotsonMontageTracks01.png

如果您需要创建新插槽或新组的名称,Magnifying Glass(放大镜)将可以带您进入Anim Slot Manager(动画插槽管理器):

EditingSlotsonMontageTracks02.png

顶部状态栏将告知您动画剪辑所从属的组。 这是根据首个Track’s Slot(轨迹插槽)来确定的。

EditingSlotsonMontageTracks03.png

如果您有多个插槽,状态栏也将会告知您在设置上是否存在任何问题。 举例来说,如果您混合并匹配属于不同组的插槽,这时将会出现警告提示,而且您可以将鼠标悬停在该位置以查看关于该问题的更多信息。

EditingSlotsonMontageTracks04.png

在动画蓝图中编辑插槽

  • 在AnimGraph(动画图表)中,“Slot”(插槽)节点将会显示其插槽名称和组名称:

EditingSlotsinAnimationBlueprints01.png

  • 在选择节点后,您在详细信息面板中可以看到和Montage Track(动画剪辑轨迹)视图出现的相同选项:

EditingSlotsinAnimationBlueprints02.png

  • 在此处,您可以使用组合框来选取存在的插槽名称和放大镜,从而打开动画插槽管理器。

  • 其他注意事项:

    • 它具有向上的兼容性,能与先前的设置兼容。 除了您现存的插槽成为‘Default Group’(默认组)的一部分外,您不会看到任何改变。

    • ‘Anim Slot Manager’ (动画插槽管理器)尚不能让您重命名或删除插槽/组,这个功能将在稍后进行添加。

    • 动画剪辑蓝图和C++ API已经进行了增强,可以将动画剪辑资源作为参考。 这样您就可以同时控制不同动画剪辑的播放。 举例来说,您可以查看一下更新的“Set Play Rate”(设置播放速率)函数。

来自任意位置的根运动

虚幻引擎现在支持从多个动画中混合根运动!

  • 我们添加了不同模式,以处理具有动画蓝图的根运动。 您可以通过Anim Blueprint Editor(动画蓝图编辑器)的"Root Motion Mode"(根运动模式)下拉框来设置此模式。 如果需要动态操作,您也可以在运行时使用代码来修改此设置。

RootMotion01.png

  • 选项如下所示:

    • No Root Motion Extraction(无根运动提取) -不对根运动做修改(应用于根骨骼)。

    • Ignore Root Motion(忽略根运动) - 根运动被提取(并从根骨骼中移除),但不应用于角色。

    • Root Motion from Everything(来自任意位置的根运动) - 处理根骨骼运动的新方式(解释内容位于下方)。

    • Root Motion from Montages Only (仅来自于动画剪辑的根骨骼) - 这是初始的根骨骼操作(以及所有新蓝图的默认值)。

设置资源上的根运动:

RootMotion02.png

  • 在您的动画序列中存在新的“Enable Root Motion”(启用根运动)设置。 这将会替换旧有的位于AnimMontage内的 "Enable Root Motion Translation" (启用根运动平移)和"Enable Root Motion Rotation"(启用根运动旋转)选项(它们会在载入时被自动更新)。

  • 注意: AnimMontage的初始设置将仍会存在,并且尚未被标识为废弃。 是特意设置的,因为这样可以帮助我们正确地将其传递到动画序列中。 您不再能从Persona编辑它们,而且您不应再编写读取/写入它们的代码。

来自任意位置的根运动 :

  • 每个对最终角色姿势形成影响的动画资源(序列、混合空间、动画剪辑等)都提取了其根运动(如其被设置为包含根运动)。 每个提取的根运动都会基于其对姿势形成影响的源资源的权重来进行混合。

RootMotion03.png

  • 例如: 在以上图表中, Jog_Loop_Fwd_RMJog_Loop_Right_RM 的根运动都会与0.5的权重进行混合。 此例中的结果动画是一个按斜角向前和向右跑动穿过地图的角色。

  • 注意: 初始系统(现在被标记为"Root Motion from Montages Only") 在设计时仅考虑了网络游戏,所以其功能受到了更多的限制。 由于"Root Motion from Everything" (来自任意位置的根运动)被设计为完全不受限制,我们推荐仅将其用于动画不通过网络进行复制的游戏中。

动画: “Humanoid Rig”(类人骨架)快速选择

  • 我们在Persona中添加了一项新功能,您可以选择引擎中内置的 Humanoid Rig(类人骨架) 。 这个骨架广泛地用于虚幻引擎Marketplace的动画中。

HumanoidRigQuickSelect.png

蓝图编辑器菜单

我们重新设计了蓝图编辑器的右击菜单,以提供更为准确和相关的结果。

BlueprintEditorMenus01.png

  • 和以前一样,从节点拖曳可以显示具有直接针对该类型节点的节点的关联菜单。 您可以使用蓝图编辑器的偏好设置的新选项来配置此功能:

BlueprintEditorMenus02.png

更大的三维世界

单个世界的最大尺寸被增大到大约 20公里 的直径。 另外,我们现在支持三维世界的原点变换(而不仅是二维变换。)

  • 这是由C++代码中的‘WORLD_MAX’常量定义的。 它是按照4的因数来增加的(自大约5公里开始)。

  • 记住,您可以通过使用虚幻引擎的 World Composition(世界构成)功能来连接多个世界,从而创建您需要的任意大的世界!

更快的打包和烘焙速度

在编辑器内对内容进行打包或烘焙从未如此之快!

  • 当您在编辑器内烘焙时,您不再需要调用新流程。 这表示在编辑器中载入的资源可以直接从内存烘焙,这样极大的加快了处理速度。

  • 这个功能默认启用,但是如果需要,您可以使用“Disable Cook in Editor”(禁用编辑器内烘焙)偏好设置切换回旧系统。

导航网格物体动态载入

虚幻引擎现在可以在运行时在内存或从内存中动态载入预计算的导航数据部分。

  • 您可以把静态导航网格物体数据保存在不同的子关卡中,引擎将会动态载入此数据和关卡。

  • 默认情况下,与导航体积相交的导航网格物体的任意部分都将被保存在该体积所放置位置处的同一子关卡中。

虚幻引擎C++编程

简化的类声明

  • 您现在可以为您的类定义和使用"普通"C++构造函数。 您现在还可以使用无参数的构造函数!

  • 您不再需要为您的属性提供分类,以将它们暴露给编辑器或蓝图。 您现在将获得默认的分类。

  • FPostContructInitializeProperties被废弃。 它被FObjectInitializer取代,而且您仅需要在实际需要使用它时再指定。

  • "GENERATED_BODY"不再会重设您的保护等级为"public"(公共)。 它将会保留您的设置。

  • 请使用新的 "GENERATED_BODY"修饰符而不是"GENERATED_UCLASS_BODY"。 它启用了许多新改进!

简化的转换

  • 您可以使用改进的Cast()函数来很方便地在虚幻类中转换。 您甚至可以在接口和类中转换。 如您需要,我们还支持使用dynamic_cast在虚幻类型间转换。

其它C++改进

  • 新增对具有代理的C++ 11 lambdas的支持(请阅下文),以及对新TFunction类的支持(精简lambda封装)。

  • 我们已经不再使用TSubobjectPtr。 它让人很难搞懂而且用起来很奇怪。 请您现在使用指向子对象的普通指针!

  • 如您在源文件中仅有结构体和枚举,我们不再需要合成"dummy" UObjects。

UI: 游戏控制器支持

您现在可以使用手柄在UI元素间查看!

  • 默认情况下,您可以使用箭头按键、方向键或左摇杆来浏览。 您也可以使用Tab或Shift+Tab。 您可以在Slate和虚幻运动图像中这样操作。

  • 我们把“Keyboard Focus”(键盘聚焦)和“Controller Focus”(控制器聚焦)统一到“User Focus”(用户聚焦内容)中。 改变user focus(用户聚焦内容)将会影响该用户的所有控制器和键盘设置。

UI: 复合字体

Slate和UMG现在支持字体族和复合字体。 这样您可以创建实际由多个子字体所组成的字体,而且每个字体都可以用于不同的字符范围。 这对于显示本地化的文本很有帮助。

字体资源

  • 字体资源类型进行了更新,已支持植入复合字体及其相关TTF或OTF字体文件数据。

  • 字体资源现在支持两种缓存方式;"Runtime" 是全新的复合字体方式,或"Offline" ,它是旧有的预计算字体图集的方式。 您现在可以在字体编辑器中方便地切换两者,这样您可以简单地转换已存在的字体资源,而不必替换它们。

  • 现在创建新字体资源将会默认创建空白的复合字体,而且您也可以通过导入TTF或OTF文件到内容浏览器中来创建复合字体资源。

字体编辑器

  • 字体编辑器已经进行了更新,以供您创建复合字体资源。

FontEditor.png

  • 复合字体将总是包含默认的字体族,而且也可以包含任意数量的应用于给定范围的字符的子字体族。 每个字体族本身都由可基于字体风格来进行命名的任意数量字体来组成的。

  • 在运行时,我们基于该字符范围内的字体族中的可用字体来为每个字符选取最为合适的字体。

  • 正如您在上方预览中可见的,日语文本位于日语字体族的字符范围内,因此它是使用思源黑体(Source Han Sans)字族而非Roboto字族来进行描画的。 在普通、粗体和雅黑字体中,子字体族中的字体是根据名称匹配来选择的,但是对粗斜体字体来说,其会基于默认字体的属性来进行匹配(它会自动选择粗体日语,因为字体包含了粗体属性,并且它是最佳匹配)。

虚幻运动图像(UMG)中的字体

  • 让您可以从硬盘中指定TTF或OTF文件的UMG中的旧接口已经被移除,我们将其替换为资源选择器,它可以让您选择复合字体资源,并随后从默认字体族中选取字体。

FontsInUMG01.png FontsInUMG02.png

  • 您已存的基于字体设置的文件将不会丢失,但是此后您必须使用具有UMG的字体资源。

  • UMG当前仅支持"Runtime"缓存的字体资源。

Slate中的字体

  • 任何在基于C++的Slate风格集中的已存字体代码将仍可正常运行,但您可能需要考虑更新您的字体风格集,以使用复合字体。

  • 当您处理C++ Slate代码中的复合字体时,我们推荐您使用FStandaloneCompositeFont而非字体资源。

  • 这是因为Slate风格集中包含的字体对象在垃圾回收器中不可见。 直接使用字体资源将需要您自己保持外部引用,使用类似于FGCObject的对象。

Canvas中的字体

  • Canvas同时支持字体资源缓存的两种类型,但这是为了改善一些工具的本地化支持。

  • 我们不推荐对新游戏的UI使用Canvas,我们建议使用UMG

学习资源

编辑器内帮助
  • 修复了在骨架编辑器教程内的窗口问题。

API 文档
  • 新: 添加对统计数据系统的基础文档。

  • 修复射弹移动substepping(次步进)的注释。

  • 修复Pawn::PossessedBy()的注释。

  • 改善ACharacter::Landed() / OnLanded()的文档,表明此移动模式在此时仍在"下落",并指出备选的OnMovementModeChanged()事件。

  • 添加FString文档的链接。 记录的ESearchCase, ESearchDir。

  • 添加或修复多个框架类的类描述。

  • 添加了对FNavAgentProperties和FMovementProperties的注释/文档 。

  • 对FVector, FVector2D改进文档。

  • 对ENetMode, EVariableReplication添加/改进注释,并链接到在线文档页面。

  • 清除Object.h中的注释(核心对象模块的骨架定义)。

    • 添加链接到实际的源文件。 多次的智能提示/VA将会使您获得不怎么有帮助的骨架文件,而不是实际的源文件。

  • FTransform类注释扩展为包含了如何应用和组成变换的描述。 对KismetMathLibrary::ComposeTransforms()也作了类似的变更。

  • 四元数据文档,解释了在乘法中的组成顺序。

版本信息

Animation

  • New: Animation Preview Mesh

    • You can use context menu in Persona’s Asset Browser to select a specific mesh to preview the asset

    • This is useful when you have many different meshes per skeleton, but you only want to preview a set of assets with a specific mesh

  • New: Improved Animation Record Feature. Now you can click Record to capture animations up to ten minutes long. Press stop when you’re finished recording.

  • New: Added the option to specify an import-time transform to apply to static meshes, skeletal meshes and animations.

  • New: Added new check box for toggling display of skeleton retargeting options in Persona

  • New: Persona now automatically selects recently newly added sockets in the viewport.

  • New: When opening a derived animation blueprint the asset override editor will open automatically.

  • New: Relative and proportional linking added to elements in a montage to keep them linked to the segment they relate to.

  • New: Trigger weight threshold for notifies exposed in details panel.

  • New: Changed "Layered Blend per Bone" node to start with 2 pose pins by default and added an "Add Pin" button

  • Changed 'Create' menu names of Blendspaces to be consistent with other parts of the editor.

  • No longer leave extra space at the end of anim segments in open montages making the animation freeze after a reimport.

  • Fixed crash on "Reset All" in Rig Asset

  • Fixed crash when saving retarget base pose when cloth exists.

  • Fixed retargeting crash when multiple meshes exists per skeleton.

  • Fix for compression data in animations being missing if the skeleton GUID did not match the cached GUID in the animation.

  • Fix for issue where skeleton would get dirtied on load when opening in Persona (was caused by the setting of the preview mesh).

  • Fix Montage root motion preview in Persona.

  • Fixed an issue with retargeting when bones are missing.

  • StateMachine : Fixed an issue with entry state is always active in the first frame. Now it should activate appropriate state.

  • Fixed AnimNotify State crash when Blueprint derived AnimNotify is being compiled.

  • Fixed display of slot name on a slot node (Would show none even when a slot name had been selected)

  • Fixed a crash when retargeting skeleton that has different order with target skeleton

  • Fixed animation retargeting crash when preview mesh is missing.

  • Fixed a crash in AnimationBlueprints when a transform bone node in parent space was used on a root bone.

  • Fixed potential quaternion normalization assert on long bone chains when using Mesh Space blend per weight.

Audio

  • New: Added config setting to control audio volume when app is unfocused

  • Fixed issue where interior volume would pop to target value instead of ramping in over time.

Automation

  • New: The map performance in editor test will now wait for the shaders to finish compiling before capturing the data.

  • New: Added support for parsing non-versioned build numbers to FEngineVersionSupport.FromString

    • To allow for these non-versioned build numbers to be parsed, pass bAllowNoVersion=true as a parameter (optional, defaults to false)

    • Non-versioned build numbers consist of a branch name and changelist number in the form ++depot+UE4-ProductName-CL-12345678

  • New: Added -archivemetadata option to BuildCookRun to copy build.properties files to archived build destination. Useful for tracking what changelist was used to make a build.

  • Internationalization smoke tests are disabled as a work around to the editor appearing in Japanese when an unsupported culture is selected for the editor UI.

  • Fixed an issue that was causing BuildCookRun automation to default the cultures to stage to English despite configuration.

  • Staging a culture now properly stages the necessary parent cultures.

  • Fixed a duplicated comment in the code.

  • Refactored the map editor performance test so that it's more efficiently grabbing and storing the editor performance data.

Blueprints

  • New: Switching between Component and Graph modes will reselect previously selected items in the modes.

  • New: Can replace missing property nodes with local variables by right clicking.

  • New: More detailed and accurate compiler profiling results. Also added an option to the Blueprint editor preferences for turning on additional details in the Compiler Results tab. Turning this on will result in a detailed, hierarchical summary of event timings for the Blueprint that was just compiled.

  • New: Blueprint variables now have to be marked public/editable to be accessible from other blueprints

  • New: Orthographic view options have been added to the Blueprint editor preview in Components mode.

OrthoViewBlueprintEditor.png

  • New: Added an error tolerance input to "Equal" function node for vector/rotator types.

    ErrorTolerance.png

    • This pin defaults to a small epsilon value that helps to ensure equality when values don't exactly match due to floating-point precision errors that can arise during processing.

  • New: Boolean select nodes now display True/False for their pins.

  • New: Added keywords to Set/GetActorLocation, AddActorWorld/LocalOffset and AddLocal/WorldOffset.

  • New: Exposed text-related functions on TextRenderActor

  • New: Double clicking on variable get/set nodes that have a rep notify graph will jump to the graph.

  • New: Renaming SaveCachedPose nodes will now automatically update any UseCachedPose nodes referencing it.

  • New: Can right click on any get/set variable node to replace with another variable.

  • New: Object pin connections will now auto-generate a conversion node when going into a class input pin.

  • New: Can double click on Blueprint compiler error logs to jump to the offending node.

  • New: “AutoCreateRef” is handled in UK2Node_CallFunction::ExpandNode. The additional variable is created in local scope.

  • New: New Blueprint compiler option to jump to error-producing nodes (on compile).

  • New: Added new events that GameInstance Blueprints can handle: NetworkError and TravelError.

    • You can use these events to gracefully handle these errors, for example, by displaying a custom message to the user.

  • New: Interface message nodes can now be used for pure/const functions.

  • New: Can now use cast nodes to convert from an interface pin to an explicit object type.

  • New: New save-on-compile option that will automatically save Blueprints as you work on them.

  • New: GetAllActorsOfClass nodes now change their output type according to the class you pick.

  • New: Can now create blueprints from vert-painted meshes in the world (painted vertex data is copied over).

  • New: Reinstance Only When Necessary:

    • Added mechanism to distinguish if instances of recompiled BPGC must be reinstanced or not during recompilation (e.g. adding a new function or variable)

    • When not needed, we skip reinstancing after compilation, which cuts out significant time from the compilation process

  • New: For the new blueprint menu system, user can now specify a node's category/name/tooltip directly in GetMenuActions().

  • New: New Blueprint editor preference setting that can be used to toggle on/off the "Target" of the Blueprint context menu.

  • New: Can now toggle cast nodes to have execution pins or not (allows casts to be used in anim graphs). NOTE: the cast could still fail and return an invalid object.

  • New: Users can now hook into the Blueprint editor and provide their own hot-key commands (through FBlueprintEditorModule::GetsSharedBlueprintEditorCommands).

  • Reduced the wastage on the graph clipping guard band from half the size of the graph each edge to quarter. This is intended to make the clipping more aggressive ideally with no visual difference to make it more performant.

  • Minor fix to prevent the documentation tooltip from moving when you try to click on a link in composite nodes.

  • Fix for issue with namelist values not syncing first value to the pin. If the initial value does not match the pin value, the pin value gets synchronized to the value displayed in the UI.

  • Curve graph min and max are now preserved during blueprint changing/saving.

  • Math Expression graphs are now read only.

  • Fixed crash when compiling Animation Blueprint while animation Property Matrix was open.

  • Pins can no longer be added/removed from boolean select nodes.

  • Crash fix for placing math expression nodes in macro graphs

  • Actor Blueprints will correctly open the first time in Components Mode and subsequently in Defaults if data only

  • Propagation of default rotation transform values during live editing.

  • Prevent copy/duplicate of component nodes not marked as BlueprintSpawnable.

  • Excessive compile times due to chained child classes during reinstancing.

  • Do not allow unsafe functions to be placed in a construction script.

  • Removed a redundant node construction pass on Blueprint graph panel updates. Cuts panel update time roughly in half.

  • Don't mark Blueprint packages dirty on streaming async loads.

  • Added a delegate to hook up any nodes that require to be notified when input action or axis mappings change, so they can refresh the Blueprint action database

  • Moved the error message for Array functions to the bottom of the node.

  • Any latent action nodes derived from BaseAsyncTask are now supported in macros.

  • We now support making FText an exposed on spawn parameter.

  • The default output pin on switch nodes now shows as an exec pin, not an output pin

  • UEdGraphSchema_K2::GetFriendlySignitureName spelling corrected to be GetFriendlySignatureName

  • Cleanup tooltips for blueprint nodes whose comments contain @param entries

  • Added some clipping for connections in blueprints in an attempt to address performance issues on large graphs.

  • Changed some Blueprint compiler errors to make them more understandable.

  • Fixed erroneous "Failed to load Super / Parent" linker warnings when recompiling Blueprints on load

  • Blueprint nodes in the "online" category will now use the correct online subsystem instance corresponding to the Play In Editor window in which they run.

  • Changed logic for hiding the target pin on a pure node to take into account the compatibility of the BP and the function, allowing pure functions on an incompatible target to be callable when dropped from the palette

  • Adjust style of 'parent class' hyperlink and add some more padding between it and the search box

  • SpawnActorFromClass uses the original tooltips for properties marked "ExposeOnSpawn".

  • Only copy the "advanced view" state of pins when reconstructing nodes if users can edit the advanced state. Otherwise changes to metadata advanced pin state don't get propagated.

  • Crash when modifying data layout of instanced UserDefinedStruct

  • Crash while compiling blueprint after editing construction script

  • Crash occurs when making a new blueprint after deleting one with the same name.

  • Crash when duplicating BP based on object, with single member variable of struct type.

  • UberGraphPersistentFrame code can be disabled by setting USE_UBER_GRAPH_PERSISTENT_FRAME define false. The UberGraphPersistentFrame is used for skipping reinstancing when the class has not structurally changed.

  • UserDefinedStruct - properties won't be (unnecessarily) reloaded by linker

  • Static Function have WorldContext parameter only when it's necessary

  • ExpandNode functions don't check if it's called during full compilation. The function should be called only when necessary.

  • Fix for a rare crash that would happen when compiling a Blueprint with a ChildActorComponent.

  • Can no longer create a BSP Brush Blueprints.

  • Can no longer reference BSP Brushes in level blueprints.

  • Fix for crash cooking maps with blueprints that change atmosphere parameters in the construction script

  • Fix for crash that would occur when a node type was deleted from code (and there were Blueprints that used that node).

  • Fix for a crash that would occur when the member referenced by a CallOnMember node was deleted.

  • Fix for crash that involved variable/function nodes not being able to find the referenced variable/function.

Core

  • New: Lambda support in delegates and slate

    • Delegates gain CreateLambda and BindLambda.

    • Slate gains Attribute_Lambda and Event_Lambda.

    • Supports variable capture, but avoid capturing TSharedRef/Ptr as you can easily cause reference loops.

  • New: TFunction and TFunctionRef.

    • TFunction acts like std::function, allowing lambdas to be passed around and owned.

    • TFunctionRef acts like a non-owning std::function, and should only be used for efficiently passing lambdas to non-template functions which only want to invoke the lambda at the call site, not take ownership of it.

  • New: New debugger visualizer for TOptional.

  • New: If you have two projects with the same name in engine directory tree UBT will warn you about it.

  • New: Added ability to use long package names with the -map flag when cooking.

  • New: There is a new feature that is calling StartupModule method during engine initialization. To use it just set bIsAutoStartupModule = true in module rules constructor.

  • New: Added option to limit number of jobs to UBT.

  • Added module generated include directory to ShouldExportClassesForModule in UHT.

  • New: Added script integration helpers to UObject system.

  • Documented TArray methods.

  • New: Now WIDECHAR FString and FName classes don't create temporary objects during comparison with ANSI char.

  • New: Added FMath::GetReflectionVector(Direction, SurfaceNormal) for calculation of ray bouncing.

  • New: Now the category isn't required for UPROPERTIES. If not present it is set to class name it was defined.

  • New: Splitted out DB access classes to separate module and added SQLiteSupport module which allows you to easy integrate SQLite into Engine.

  • New: GameName redirects can be added dynamically.

  • New: A Pak file can now be constructed with UnrealPak.exe by specifying a directory to build.

  • New: Can now specify to compress or encrypt all files in a Pak file when running UnrealPak.exe via the commandline.

  • New: FPakFile can now be initialized from an existing Archive rather than only by filename.

  • New: Plugins can have config files now.

  • New: Efficient construction and appending of TArrays of different types.

    • A TArray of one type can now be constructed from or appended to a TArray of another type, if the types are assignable.

    • The implementation will do the copy as efficiently as it can work out, e.g. appending a TArray to a TArray will memcpy the elements.

    • The new TIsBitwiseConstrictuble trait can specialized for your types if the types can be memcpy'd in this way.

  • New: Stats

    • Added better mechanism for flushing the stats messages, should reduce the amount of the stat packets, will also reduce the memory usage, improve performance, will happen only once per frame

  • New: Stats

    • Added command 'stat toggledebug' - toggles tracking the most memory expensive stats

  • New: Moved STAT_FindObject(Fast) to STATGROUP_ObjectVerbose which is disabled by default, should improve memory usage.

  • New: Added explicit flush for stats after startup the rendering thread to improve memory usage

  • New: New console commands

    • Added a command "Obj MemSub -class=[classname] -cull=[no of kb]" that prints memory stats for all objects of the specified class, this is inclusive stats, includes all subobjects.

    • Added an option " -class=[classname]" to "Obj Mem" command, which tries to narrow results to the specified class.

  • New: Internationalization data presets can now be selected from a limited number of presets in order to minimize the amount of ICU data packaged for products.

  • New: Added preallocating memory to TMaps

  • New: Moved STAT_FindObject(Fast) to STATGROUP_ObjectVerbose which is disabled by default, should improve memory usage

  • New: Implemented GetAllocationSize() for FMallocAnsi

  • New: Variadic template implementations of C++ delegates

  • Deprecated TArray::FindMatch as it was doing the same as TArray::IndexOfByPredicate.

  • UHT was generating bad function declarations while passed by const reference parameters.

  • Fixed a use-after-free bug in FInternationalization.

  • Change module load order to ensure that SlateRHIRenderer can shutdown without crashing.

  • Added more transparency what set a console variable the last time (cvar name in the console shows it)

  • Changed console variable Set() behavior: Each Set should specify a priority, order no longer matters if the priority is higher (solved a lot of corner cases), might need some iterations.

  • UE4 project Win32 editor builds was still allowed by UBT, which is not supported. Fixed.

  • Fix retrieving the host name from the workspace and infinite loop when discovering unspecified Perforce setting.

  • Fix for static initialization order of debug visualizer delegates

  • Fixed non-safe threading calls to the SlowTask system which was causing cooker crashes.

  • Fix for available sessions not getting updated in UFE due to FDateTime::UTCNow / FDateTime::Now mismatch

  • Generated code fix for UFunctions which take enum classes as parameters.

  • Better error message when using an IInterface* is used as a property, suggesting the use of TScriptInterface instead.

  • Operator new/delete overrides added for platforms supporting noexcept().

  • Fixed crash caused by ICU break iterators persisting beyond ICU shutdown

  • Fixed a mistake in an error message pointing the user to the wrong ini file.

  • Fix HeaderParser so it no longer removes valid uses of "", " ", etc from within comments when generating tooltips. Only asterisks from the beginning of lines following only whitespace are removed.

    • For example: "A * B" within a java-doc comment used to become "A B".

  • Added version of LerpStable() that works with floats, not just doubles as before.

  • Performance: only add prerequisite to tick function if that function itself can tick.

  • Fixed stats crash on iOS

  • Added missing SendSeekMessage to the Seek for the writable FStreamingNetworkFileHandle.

  • Fixed converting stats to csv

  • SetStoredValue/GetStoredValue uses platform specific implementation (fixed regression)

  • Stats - Fixed a crash when the verbose group contains non-cycle stats, also fixes an issue with the missing data

  • Fixed an issue with copying tick function references

  • UObject

    • Made code thread-safe when TRACK_BULKDATA_USE is set to 1

  • Text localization resources can now be loaded from directories using hyphenated culture names, rather than only those using underscores.

  • ICU memory usage has been greatly improved by caching data files once when needed.

  • Localization data now falls back on parent culture data based on language, script, and region combinations.

    • Language_Script_Region, Language_Region, Language_Script, Language

  • Localization data for Simplified Chinese has been renamed from "zh-Hans-CN" to "zh-CN" to conform to conventions.

  • The DLL search paths now include all game, plugin and engine folders. Module DLLs in different output folders can now implictly link against each other without requiring a specific startup order.

  • Fixed bad comments regarding SIZE_T

  • Fixed issue in parsing DEPRECATED macro by UHT when deprecating classes and structs.

  • Fixed unnecessary full rebuilds on case insensitive file systems.

  • Fixed syntax error in TMultiMap::MultiFindPointer.

  • Moved delegates referencing UObjects from FCoreDelegates to FCoreUObjectDelegates.

  • Disabled deprecation warnings in all code generated by UnrealHeaderTool

  • Fixed minor TBasePlayerControllerIterator code inconsistency

  • Removed various unused C++ macros from header files

  • Speed up to UnrealPak when scanning files added to a pak file.

  • New: Use perfect forwarding for task graph, plus some lambda work for shadow rendering.

  • ICU data has been relocated from Content/Localization to Content/Internationalization.

  • Test builds now have asserts enabled if shipping builds also have them enabled.

  • Improve error message when running UnrealHeaderTool fails (showing a human-readable version of the error code)

  • Removed unused bChangesTopology member from FPropertyChangedEvent and removed most uses, in preparation for deprecating the three-argument constructor

Editor and Tools

  • New: Expand Action/Axis mappings when clicking + buttons to add a new one

  • New: Output Log window now saves what you typed in between sessions (like the in-game console did)

  • New: Added a new “2D Pixels” Texture Group, intended for non-scaled, non-mipmapped, non-filtered textures in 2D Games.

  • New: You can now create new assets right from the Asset Picker that appears when choosing an asset to use. The menu combo box now contains "New asset" entries where appropriate.

  • New: The main “Window” menu has been reorganized for improved usability!

    • Sectioned and labeled based on the current editor

    • Experimental tools have their own section

    • Undo History has been moved to the Edit menu

  • New: The context menus in Content Browser have been reorganized for improved usability!

    • The "Details" option has been replaced with an "Edit" option for all assets

    • Source Control options have moved to a sub-menu to reduce size

    • Less common asset actions have been moved to a sub-menu

    • Imported assets all have options for reimporting, locating, and opening the original source. These work even when multiple imported assets of different types are selected.

  • New: Mesh merging tool supports mirrored meshes

  • New: Component visualizers can now override DrawVisualizationHUD to do 2D visualizations as well.

  • New: Class Viewer (and Picker) will now display UMG, Blutility, and GameplayAbility Blueprints (both loaded and unloaded)

  • New: Experimental iterative cooking: Including support for ini changes and DDC version changes invalidating cooked content. (Added “-iterate” command-line option for editor)

  • New: Packaged games on Windows now include an executable in the root directory which will install any missing prerequisites before running the game.

    • Content-only games can now customize their application icon using the packaging settings dialog in the editor.

  • New: UE4 prerequisites installers now support Windows XP, Windows Vista, and 32bit Windows 7.

  • New: Project settings now have the option to mark a project for chunk generation when packaging. Supports PS4 PlayGo, Xbox Streaming Install, etc.

  • New: Adding a curve linear color struct that can be added as a property and edited in details panel.

    • Integrated from PR #529 by inside

  • New: Added pre-compile event for editor tools.

    • Added callback in Persona to clean up running blueprint notify states before a recompile.

  • New: PkgInfo -export -simple now supports sorting.

  • Multi-Line text properties: Enter now commits the change. Shift+Enter is required to enter a new line.

  • FBX import error for rigid meshes updated to show correct parameter

  • Added back the current file display to the FBX import UI

  • Re-added ability to import only animation from a skeletal mesh FBX file

  • Fixed auto-wrapped text in the tutorials list never growing again if it was shrunk

  • Made the Super Search appear as an overlay rather than be its own window to address an issue where the active IME context was being deactivated

  • Cook on the fly stability fixes and performance improvements.

  • FLevelEditorViewportClient::GetWorld now returns the correct World when in Simulate mode.

  • The x64 UE4 Prerequisites installer will now install vcomp100.dll

  • UE4 Prerequisites 64bit installer will now warn users when run on a 32bit OS

  • UE4 64bit prerequisites installer will now install vcomp100.dll

  • UE4 prerequisites installers will now check for Windows Installer v4.5

  • Fixed an issue where the level save-as functionality would fail to delete the asset you are saving over.

  • The Asset registry no longer prematurely reports that it is done discovering assets.

  • Fixed a bug preventing one Play In Editor instance from traveling to a new map when connecting to a host in another Play In Editor instance.

  • Fixed a bug that was causing different Play In Editor instances to use the same online subsystem instance.

  • Fix loctext key collision that broke mobility combo button tooltips

  • Fix typo in MapCheck_Message_SimulatePhyNoSimpleCollision message

  • Fixed a crash typing in the output log when a PIE window is open

  • Fixed keyboard focus issues in the editor when a modal window is open

  • Fixed importing SpeedTree files attempting to generate lightmap UV's instead of using the ones from the SpeedTree file

  • Fixed alpha values not appearing by default in the color picker

  • Fixed the download link for Visual Studio 2013

  • Fixed a crash when deleting level assets from the content browser

  • Fixed the FTransform details panel customization swapping roll and yaw values.

  • Fixed the Auto-Generate Lightmap UVs setting in the FBX importer being ignored

  • Fixed a crash when blueprints attempt to recompile and refresh a details panel when the details panel is in the middle of an operation

  • Fixed the startup movie player keeping Slate widgets alive when no movie was playing

  • Fixed orthographic viewports defaulting to lit

  • Added proper material picker to BSP surfaces

  • Optimisation for setting unique actor names on multiple objects

  • Fixed some maps not being properly included in the packaging process

  • Fixed issue with roles command line not being passed to the game when executing the game via UAT

  • Fixed initial map not being set correctly when utilizing the Launch On or Cook in Editor features

  • Fixed multi-second hitch on BSP operations when map has navigation system enabled

  • Fixed case where foliage could be painted with a wrong scale

  • Fixed an editor crash caused by handling the key down event while some parts of the editor are already initialized, but GEditor is still NULL.

  • UnrealSwarm during pushing files to the client machine treated optional files as required and this caused errors sometimes. Fixed.

  • Fixed "Failed to find object 'Class None'." warning during some tutorials.

  • Various improvements to make the editor network usability easier to understand

  • PIE client/server window position/size tries to remain within the confines of the desktop area

  • Multiprocess PIE(viewport) client can now connect to a server.

  • Fixed Behavior Tree Editor crashing on selecting a service node

  • DataTable - UObjects are handled properly while reconstructing.

  • MallocProfiler2: Added support for files larger than 4.0GB

  • UnrealBuildTool is automatically built when generating project files using the shell extensions for the first time.

  • Change the CycleTransformGizmoCoordSystem default key equivalent on Mac OS X to Ctrl+~ as Cmd+~ is already used by OS X for window cycling.

  • The texture compression type, TC_EditorIcon now appears as TC_UserInterface2D

  • UFactory::ValidGameNames removed.

  • Exposed ProjectHasCodeFiles, GenerateBasicSourceCode, GetCurrentProjectModules and DetermineModuleIncludePath from GameProjectGenerationModule.

  • Improved feedback when an internationalization archive fails to load during localization resource generation.

Landscape
  • New: Landscape holes are now supported on mobile platforms (OpenGL ES2)

  • New: We now support importing height maps that don’t match the landscape dimensions. (It will be padded/clipped to fit automatically)

  • Fixed missing Foliage and Landscape tooltips

  • Fixed foliage tool crashes when using the reapply tool with Z offset and fixed erase density and reapply density features.

  • Fixed cases where World Composition map doesn't work properly when traveled to from another map while in Play mode

  • Fixed an ensure warning when using the foliage mode select tool on an InstancedStaticMesh created in a blueprint.

  • Fixed spline component bounds for the case of having no splines (was world 0,0,0 before)

  • Fixed Landscape Ramp tool corruption if the bounds of the ramp go outside the landscape bounds

  • Fixed "Dragging 'New Landscape' Rotation Z slider does not update real-time"

Material Editor
  • New: The “Custom” material node now works with TextureObject (removed old “Custom Texture” node as it's no longer needed.)

  • Make sure materials created from textures don't end up with overlapping expressions

  • Prevent Const material parameter values from crashing

Persona
  • Section bars no longer move small amounts when the user clicks near them.

  • Fixed issue causing Persona hover previews to not update, showing a still frame from the animation.

Scene Outliner
  • Fixed scene outliner actor counter not reporting accurate actor counts

Static Mesh Editor
  • New: Creating new static mesh collision enables collision view (if not already enabled)

Source Control
  • Fix a memory corruption bug when using source control to revert assets.

  • On Mac OS X you can actually open the File > Connect to source control... dialog while a modal window is open, which should also be modal otherwise it won't display.

UI
  • New: UMG: Designer now supports multi selection

  • New: UMG: You can now open a Widget directly by double-clicking its entry in the Palette view

  • New: UMG: Added "Edit Blueprint" to right click menus for custom widgets throughout the UI

  • New: UMG: You can now provide a helpful description for a Widget Blueprint in its Blueprint Properties. This will show up as the tooltip for the widget in the Content Browser and Palette.

  • New: Added the ability to toggle text wrapping in a UMG multi-line text block. Auto-wrap is enabled by default.

  • New: Icons for the various play in editor models have been updated to a more consistent style.

  • New: Added a tooltip to show multi-line descriptions in the source control history.

  • New: Adding a Play Sound function to User Widgets.

  • New: Added a missing setting on a matinee actor to allow the game HUD to be hidden.

  • Fixed not being able to animate some Slate color properties in UMG UI editor.

  • Fixed Auto-Key working in UMG when no animation has been created.

  • Fixed not being able to save UMG widget blueprints in when a widget was used with an animation.

  • Fixed aliasing on UMG selection highlights.

  • Fixed UMG widgets clipping outside of viewports.

  • Fix for By the book not working in simple profiles.

  • Updated icons for the various play in editor modes. additional update.

  • Missing class icons in some windows will use the "default" object icon again

  • Project Launcher UI is now robust enough to handle variant list corruption.

  • Fix for launched game sessions not showing up in the session manager.

  • Changed the default configuration for new launch profiles to be development.

  • Making all the getters/setters on UWidget use "GetCachedWidget" instead of messing with "MyWidget" directly.

  • Making Sort work on TPanelChildren.

  • Fixed crash on destruction of Slate material brush

  • Converted SWidget::RenderTransform into a TOptional for performance reasons.

  • Fixed not being able to exit immersive mode once entering it.

  • Fixed issue where Cultures to Stage in Project Packaging Settings would sometimes not save to file when changed.

Framework

  • New: Expose ParticleSystemComponent OnSystemFinished delegate to blueprints

  • ULevelBase has been eliminated.

  • New: Added support for tutorials to be able to focus on some tabs in asset editors.

  • New: Added code to pass VertexColor in material CanvasTileItem to rendering code so this parameter can be used with materials rendered using CanvasTileItem

  • New: GameViewportClient::Tick is now virtual

  • New: UGameUserSettings::ApplyNonResolutionSettings is now virtual.

  • New: All AZERTY keys can now be represented by EKeys and bound to action/axis mappings, directly to input components, and through blueprint interfaces.

    • EKeys::Underscore and Quote now map to the keys where the underscore or quote is the unshifted value (as on an AZERTY keyboard), Hyphen and Apostrophe respectively should be used instead.

  • New: UPrimitiveComponent::SetCullDistance is now callable from blueprints as Set Max Draw Distance

  • New: GameMode properties MinRespawnDelay, NumPlayers, NumTravellingPlayers, NumSpectators, and NumBots made blueprint readable. MinRespawnDelay also editable from GameMode defaults.

  • New: GameInstance initialization and shutdown improvements

    • Make UGameInstance::Init execute for both PIE and Standalone

    • Redirect current UGameInstance::Init to ::InitializeStandalone and ::InitPie to InitializePIE, both of which are now non-virtual.

    • Added UGameInstance::Shutdown to allow execution of behaviour on shut down of the game instance (analogous to EndPlay for EndPlayInEditor and Quit on Actors)

    • Expose blueprint implementable events for Init and Shutdown.

  • New: Added reference bone pose overrides to FSkeletalMeshMerge.

    • FSkeletalMeshMerge::DoMerge() now takes an optional array of FPoseOverride structures.

    • FPoseOverride specifies the bone to override in the merged mesh with the corresponding bone in a specified source mesh.

    • This allows more flexibility in building the merged skeleton from source meshes with differing reference skeletons.

  • New: Added ENGINE_API to ACameraActor, allowing it to be derived from in game projects.

  • New: Added Vector functions: ProjectOnToNormal(), VectorPlaneProject()

  • New: Change ProjectileMovementComponent::ComputeMoveDelta() to use ComputeVelocity() rather than ComputeAcceleration() to update the position.

    • This allows custom implementations of changes in velocity to directly affect the simulation, without the need to also compute the acceleration.

  • New: Exposed various flipbook asset methods to Blueprints.

  • New: Added map check warning for sprite and flipbook components that use non two sided materials.

  • New: Improved comments/tooltips for BreakHitResult in the editor. Add 'Time' value to the output.

  • New: Add static FName for "DefaultProjectile" collision profile.

  • New: Added constructor for FWalkableSlopeOverride that takes both editable properties.

  • New: Added SetWalkableSlopeOverride() to PrimitiveComponent and FBodyInstance to make it easier to set up overrides, and to be able to change it at runtime in blueprints.

  • New: Better AirControl support, allowing movement towards potentially unwalkable surfaces but still restricting boost so you can't wall climb.

    • This allows players to dodge towards vertical walls more effectively, and also steer laterally down unwalkable slopes rather than taking away all air control in these cases.

    • HandleSlopeBoosting() now prevents upward boosts no matter the incoming velocity. We used to only limit it if moving upwards, but you can deflect upwards when moving horizontally or downward, which bypassed that check.

    • HandleSlopeBoosting() used to send the player straight down if hitting the side of a step. This has been removed since this is now checked in falling movement.

  • New: AITestSuite module has been created to facilitate unit-testing-like testing of AI code.

  • New: ProjectileMovementComponent: friction when bouncing has a new optional behavior. Fixed sliding/rolling code and exposed more related variables.

    • New projectile friction mode when bouncing modifies friction based on the normal force from impact (higher when perpendicular, lower when glancing). Enable 'bBounceAngleAffectsFriction' to turn on this new behavior.

    • Default friction behavior when bouncing remains the same as before.

    • Added 'bIsSliding' to indicate if the projectile is sliding/rolling, and fixed behavior with multiple impacts between frames. Fixes friction behaving inconsistently depending on the framerate.

  • New: Fixes to projectile movement uses of friction, and improvements to behavior when sliding along a surface, to remove variance under different timesteps and to apply consistent friction.

    • Sliding movement now considers the acceleration (in any direction, not just gravity) and handles it in a new function: HandleSliding().

    • Friction is applied correctly when movement is parallel to and impacting a surface ("sliding").

  • New: Add enum controlling MovementComponent plane constraint / axis-locking behavior. Modes are: custom, X, Y, Z, and an option to use the global physics axis setting.

    • The option to use the global physics setting makes it easier to keep multiple blueprints using the same plane constraints.

  • New: Fixed FVector::Parallel() and added FVector::Orthogonal().

    • Add FVector::Orthogonal() for determining if two normals are orthogonal / perpendicular within a tolerance.

    • FVector::Coplanar() now takes a threshold for controlling the parallel test.

    • Add THRESH_NORMALS_ARE_ORTHOGONAL for orthogonality test.

    • Rename THRESH_VECTORS_ARE_PARALLEL to THRESH_NORMALS_ARE_PARALLEL, and change the meaning to the cosine of the angle we compare to.

    • Fix FVector::Parallel() reporting false for parallel vectors pointing in opposite directions. Use FVector::Coincident() if you care about the direction.

  • New: Improvements to Blackboards's Blueprint interface

    • GetBlackboardValueAsRotator and SetBlackboardValueAsRotator have been exposed

    • A single function for clearing Blackboard's key value has been added

  • New: Vehicles can now perform RVO avoidance

  • New: Fixed updating bounds of NavRelevantComponents after moving owning actor in editor

  • Fixed broken camera rotation when ending pie. Camera should now remain where it was at time of ending.

  • Added code to fixup incorrect \'s in Documentation actor link field.

  • Added code to replace \ with ./ in documentation actor links

  • Revised code that checks validity of links in a documentation actor.

  • Fixed clicking on Document links in documentation actor opening 2 pages

  • Fix a use-after-free bug in USkeletalMeshComponent.

  • HitBox hit tests now work correctly on laptops with touchscreens.

  • Changed 'FGameplayAbilityTargetData_SingleTargetHit::GetEndPoint()' to return 'HitResult.Location' instead of 'HitResult.ImpactPoint'.

  • Fixed 'FGameplayAbilityTargetData_ActorArray::GetOrigin()' to return the correct rotation.

  • 'GameplayAbilityTargetActor' now checks the ability's Avatar when deciding it's net relevancy.

  • Blueprint added components that have native defined subcomponents are now properly registered during reconstruction.

  • World teardown now occurs in GameEngine::PreExit instead of HandleExitCommand.

    • SlateApplication shutdown now occurs after Engine and App PreExit

  • Don't display events that are not valid for Emitters in blueprint context menus.

  • Fixed calculation in DrawDebugCylinder flagged on UDN which was doing float math with integers which resulted in incorrect behavior.

  • Don't call SetIsReplicated in constructor, just set bIsReplicates directly

  • SSpinBox no longer teleports the cursor to a random position on the screen.

  • Fixed mouse input being a frame late.

  • Synthetic slate mouse moves no longer caused erroneous tool tips to appear.

  • Fixed issues (particularly on Mac) seen when moving mouse out of the viewport while holding left mouse button down when using the mouse as touch.

  • Fixed issue where the mobility of parent/child actors could end up out of sync with one another.

  • Actor ReplicatedComponents array is now properly updated and kept in sync with OwnedComponents

  • Correct issues with calling order of cleanup functions for components

    • BeginDestroy calls ExecuteUnregisterEvents before OnComponentDestroyed

    • UninitializeComponent now gets called from DestroyComponent

    • InitializeComponent will be called by RegisterComponentWithWorld if its Owner Actor is initialized

    • SceneComponent now overrides OnComponentDestroyed instead of DestroyComponent to do ScopedMovementStack and Detachment ensuring UninitializeComponent is consistently called before UnregisterComponent

  • Fixed actors with native root component moving to 0,0,0 when undoing a transaction when it also has certain types of blueprint added components

  • Fixed issues where GetMousePosition returned true when mouse was outside the viewport.

  • FSkeletalMeshMerge will now merge vertex colors, if vertex colors are used in one more of of the source meshes.

  • Fixed memory leak in FPhysicsScene2D

  • Removed incorrect bWillEverBeLit=false in 2D sprite render scene proxies

  • Fixed path following in CharacterMovementComponent, so that it turns more quickly and considers current velocity when trying to reach destination speed.

    • Restored "bRequestedMoveUseAcceleration" which can be set to false to disable acceleration and use requested pathfinding velocity directly (instant turning).

  • APlayerController::PostProcessInput() uses IsLookInputIgnored() virtual rather than reading IgnoreLookInput variable directly.

  • Fixes to projectile movement uses of friction, and improvements to behavior when sliding along a surface, to remove variance under different timesteps and to apply consistent friction.

    • Sliding movement now considers the acceleration (in any direction, not just gravity) and handles it in a new function: HandleSliding().

    • Friction is applied correctly when movement is parallel to and impacting a surface ("sliding").

  • MovementComponent auto registration of tick function moved to OnRegister() rather than InitializeComponent().

  • ProjectileMovementComponent velocity initialization moved to OnRegister() from InitializeComponent().

  • Avoid updating the PhysicsVolume in MovementComponent::SetUpdatedComponent() if executing during registration, it will occur as part of UpdateOverlaps() in registration anyway.

  • CharacterMovementComponent::SetUpdatedComponent() makes sure the OnComponentBeginOverlap delegate is added uniquely.

  • Fixed AHUD::GetCoordinateOffset() returning uninitialized FVector2D when there is no local player.

  • CharacterMovement StepUp() function aborts if forward movement results in no net change in position.

    • Step downs are also limited to step up height when not walking.

    • Fixes flying Characters moving down when impacting vertical surfaces, even if movement direction was slightly upward.

    • Also reduces the worst-case number of sweeps in character movement (previously occurred when pushing into corners).

  • Removed redundant GetWorld() call in SceneComponent::GetPhysicsVolume()

  • Fixed MovementComponent::ComputeSlideVector() calculating incorrect deflection vector when the plane constraint is enabled.

    • Rather than projecting the final result onto the movement plane, the normal should first be projected onto the plane and normalized.

    • This fixes cases where collision with geometry angled outside the movement plane would stop movement, rather than deflect it.

  • Don't recalculate Character velocity when falling if there was a teleport (usually adjustment out of penetration).

  • Improve Pawn physics penetration handling when overlapping more than one object/surface.

  • Use a combined MTD result to get an adjustment that moves out of both objects.

  • MovementComponent::TwoWallAdjust() uses ComputeSlideVector() rather than an explicit vector projection.

    • Extra call to HandleSlopeBoosting() removed in CharacterMovementComponent::PhysFalling() since it's handled by TwoWallAdjust()'s call to ComputeSlideVector() now.

  • Tweak to air control limit code, to allow pushing in to vertical surfaces so you still get the hit event. Angle surfaces that normally restrict air control still get the event due to contacts caused by gravity.

  • Fix SceneComponent::MoveComponent() so it always fills in the out HitResult no matter the control path.

  • FHitResult default constructor initializes 'Time' variable to 1.0.

  • Added 'bBlockingHit' boolean to BreakHitResult.

  • New: Add hit result to all Actor and SceneComponent transform functions, for both C++ and Blueprints.

    • Blueprints now have a way to get the hit result of swept movement to be able to implement more complex movement without the need for C++ code.

  • CharacterMovement Falling doesn't need to check air control before the first move, since deflection uses the non-air control velocity to deflect.

  • Fixed crash in CharacterMovementComponent if setting UpdatedComponent to NULL.

  • MovementComponent::SetUpdatedComponent avoids changing physics volume and trying to unbind delegate (causing ensure) if object is pending kill.

  • Fix UpdateOverlaps() call in DetachFromParent() causing incorrect notification when called from AttachTo() and the object does not maintain world position.

  • Allow Actor.InitialLifeSpan to be edited on instances (EditAnywhere instead of EditDefaultsOnly).

  • Projectiles now behave correctly when the plane constraint is enabled.

    • Added UMovementComponent::ConstrainNormalToPlane(), which normalizes the vector after constraining its direction.

  • Fixed some BT nodes not being exposed as AIMODULE_API

  • Minor change to some of AI functions' signature, pointers changed to references where a null value is invalid

  • Removed hard reference to AAIController from APawn

  • A fix to wrong condition being checked to determine if navigation needs to be build

  • New: Exposed UE4's Recast integration header files (moved to public directories)

  • Renamed GetBlackboard functions available in BT nodes to GetOwnersBlackboard.

  • Fixed debug labels drawn by NavigationTestingActor being drawn for items outside of camera's frustum

  • Fixed navmesh's raycast not properly handling queries starting outside of navmesh. Made those result as "blocked".

  • Marked SpawnAIFromClass BP node as unsafe for usage in Construction Script (because it is!)

  • Collision Profile: Fixed so that it doesn't accept Trace Type as an Object Type for profile.

  • Fixed issue when ChildActorComponent produces "Mobility spam log" when it is inherited.

  • Special navigation area for too low spaces is now removed after applying static modifiers

  • Fixed navmesh update on geometry brush (BSP) changes

  • Fixed FPS drop on rebuilding navmesh

  • Added original key code to keyboard events and exposed AreCapsLocked from input events.

  • Major internal change to the way navmesh tiles generation is organized. No changes should be visible from user point of view.

  • AReverbVolume has been renamed to AAudioVolume.

  • FComponentInstanceDataBase no longer stored using TSharedPtr

  • FInputChord::RelationshipType renamed FInputChord::ERelationshipType

  • UDEPRECATED_SaveGameSummary deleted

  • Push To Talk removed from default Debug Exec Bindings

  • Unused UWorld::bDebugStepExecution removed.

  • Changed templates that have projectiles to use a DefaultProjectile collision preset which now exists in engine.

  • Improved documentation in GameViewportClient header.

  • FSoundParseParameters moved out of AudioComponent.h and in to ActiveSound.h

  • FKeyDetails now uses TAttribute instead of both a FName member and a Delegate member that returns a FName.

  • Slate event-routing is now more systematic, enabling better event tracking and debugging features in the future.

  • Slate event routing implementation is now more systematic, enabling better event logging and debugging in the future.

  • Spawning an Actor into a world that is being torn down is now prevented and a warning issued.

  • Media: Fixed a memory leak in the Windows media player plug-in

  • Media: Fixed incorrect handling of relative movie file paths

  • Fixed case where FlushLevelStreaming was not flushing state of all levels

  • Added documentation to Hud.h file and split some structs and such into their own files.

  • UPROPERTY removed from internal state boolean in UActorComponent

  • Validate that no components that are not owned by an Actor are added to its OwnedComponents array.

  • AController::IsInState() is now const.

  • Consolidate all CharacterMovementComponent::PhysFalling acceleration handling into GetFallingLateralAcceleration().

  • ProjectileMovementComponent.MaxSimulationIterations is no longer an advanced display property, in line with the other related settings (MaxSimulationTimeStep, bForceSubStepping).

  • Deprecated CharacterMovementComponent::AdjustUpperHemisphereImpact() and UpperImpactNormalScale.

  • Cleaned up CharacterMovementComponent to use new deprecation enable/disable macros instead of all the compiler-specific pragmas in-line.

Networking

  • New: Sockets: Added API for specifying send and receive buffer sizes on UDP/TCP socket builders

  • New: Allow game code to detect when a network demo has started playing.

  • New: Add ability to slow and speedup network demo playback speed.

  • New: Added ability to control the demo record rate.

  • New: Adding Native NetSerialize support to FastArrayReplication path.

  • Made MulticastSocket creation optional (for platforms that don't support multicast)

  • Prevent crash when resetting achievements on those platforms that require a valid FUniqueNetId to do so.

  • Fixed crash when exiting multi-client Play-In-Editor after failing to connect to a server.

  • Fixed an issue when async networking loading was turned off, and a package was not fully loaded, would cause issues.

  • Fixed constructors in FVector_NetQuantize10, FVector_NetQuantize100 and FVector_NetQuantizeNormal.

  • Fixed a crash that could occur if a garbage collected objects and replication.

  • Fixed an issue that could cause some properties not to get replicated when an actor goes dormant.

  • Fixed the behavior of ESocketReceiveFlags::WaitAll on Windows.

Online

  • Avoid out of bounds crash due to functions not checking against the correct max value for local talkers

    • Integrated from PR #495 by alexSilkin

  • Fixed bugs in OnlineSubsystemNull

    • LAN sessions created by OnlineSubsystemNull will now advertise the actual port used by the net driver.

    • This makes testing multiplayer with multiple instances on the same computer easier since each instance will advertise a different port when hosting a session.

  • Fixed a bug where LAN sessions created by OnlineSubsystemNull would not advertise as soon as they are created.

Physics

  • New: Exposed the "GetCenterOfMass” function to Blueprints

  • New: Added center of mass visualization

  • New: Destructible components now use the async scene automatically (if the scene is enabled)

  • New: Added the option to turn sub-stepping off for async scene.

  • New: Added new physics stats and named events to help profile physx performance.

  • New: Added mass override to easily set mass without worrying about density values.

  • New: Destruction no longer needs to generate hit events to simulate impact damage.

  • New: Expose ragdoll simulation on dedicated server as project setting

  • Avoid heap allocation in single sweep and raycast queries when collision analyzer isn't enabled.

  • Fix collision on instance indices >128 on movable InstancedStaticMeshComponents

  • Improve depenetration vector when overlapping trimesh and heightfields.

    • Previously we tried using the supplied impact normal when face index was valid, but this meant we could be inside an edge and try to move along the normal, rather than away from the edge.

    • Now we just use MTD with an inflated test to get the depentration vector.

  • Improved Physics Blending Issue

    • This fixes issue when root bone isn't identity.

    • This fixes when physics asset root bone isn't mesh's root bone

    • Cleaned up code so that we don't use static variable but local variables

Platforms

  • New: Added ability to use r.MobileContentScaleFactor of 0, which means to use full native resolution on iOS and Android. This is the best way to get the native resolution (1920x1080) on the iPhone 6+, instead of the full virtual resolution (2208x1242) which would just get scaled down.

  • New: Fixed a crash with ICU trying to localize an error before loading ICU data (when using -filehostip in particular)

  • New: First round of merging fixes from Shootergame certification pass. Many fixes to OSS systems.

  • Changed FLightmassProcessor::BeginRun() to always use Development builds of UnrealLightmass on Mac and Linux, same as it does on Windows.

  • Fixed AVI extension in Windows AVIWriter

  • Cancel Http Request for Android, IOS and Linux now cleans up the request objects as expected.

  • Exclude staged build directories from filelist processing when using cookonthefly. Can speed up cookonthefly boot times.

  • Fixed CreateGuid to create correctly unique Guids on all platforms. Previously on platforms other than microsoft and apple platforms it could create identical Guids if called frequently.

Android
  • New: First pass at google play store IAP added. Further changes are incoming.

  • New: Improve Android device detection logic to detect unauthorized devices and query SDK and release versions, displaying the OS version in the device manager

  • New: Several Android toolchain updates:

    • Updated to support Android 5.0 (SDK 21 and NDK 21) - however we default to NDK 19 since compiling with NDK 21 headers generates code that will not run on devices before 5.0).

    • Implemented incremental APK generation to reduce the time spent in the final .apk file generation (when compiling or packaging).

    • Also added the ability to easily add more Java libraries without needing to update UnrealBuildTool code (just put your lib in \Build\Android\JavaLibs like we have google now in Engine\Build\Android\Java\JavaLibs)

    • Changed the APK generation code to hide the spammy output and show more useful stage progression.

  • Improve Android logging to break up log messages at newlines to deal with buffer limit.

  • Corrected JNI call (AndroidThunkCpp_IsMusicActive) to use CallBooleanMethod.

  • Removed a negative delta time fatal error (occurs on some Android devices).

  • Fixed an issue where you couldn't cancel Google Play sign-in in some cases

  • Fixed errors when building games for Android in "for distribution" mode

  • Fixed looping and playback issues with Android ADPCM samples

iOS
  • New: You can now specify the minimum iOS version supported by the game as well as the which devices are supported. These settings are located in the iOS section of the Project Settings.

  • New: The mobile provision and signing certificate can now be specified via the iOS Project Settings. Selecting the Install Provision or Install Certificate buttons will install the selected item.

  • New: Enabled C++11 support on iOS

  • New: Facebook SDK for iOS upgraded to 3.16

  • New: iOS and Mac Media Player added. This allows users to stream movies to slate textures in game.

  • New: Added support for iPhone6/6+ resolutions

  • New: Added Metal support for Tappy Chicken (reduced battery usage if nothing else!)

  • New: Added an on-screen message for when you run a Metal-only app on a device that doesn't support Metal (which the App Store should disallow, but it's still possible to get it on a non-Metal device)

  • New: Shipping and Test configurations for iOS now include the arm64 executable. This will be a requirement for putting apps on the app store in February, so we wanted to give users time to get used to the increased sizes.

  • New: IPhonePackager is now used on a Mac to detect provisions and signing-certificates. This starts the process of unifying the code path for both PC and Mac workflows.

  • New: Added an iOS framepacer which allows users to specify how often they sync rendering with the iOS frame ticker.

  • New: Receipts are now returned as part of the In-App Purchase payload for IOS.

  • New: Added Copy Repository functionality to iOS deploy stage of UFE.

  • New: The additional commandline args files in UFE can now be used to specify a commandline for launch on device when selecting Copy Repository as the deploy method.

  • Fixed an issue with xcode project generation when a sample had been renamed from the launcher. This was causing an invalid scheme to be generated and causing code signing issues.

  • Fix for crash when utilizing landscape mode on iOS devices.

  • Properly parse UTC times from the mobile provision files so we can accurately detect valid provisions.

  • Updated IPhonePackager to provide a better message when the bundle identifier of the mobile provision that is installed doesn't match the bundle identifier of the game it is being installed for.

  • Stat Macro renamed to avoid a mismatch with one from apples core animation api.

  • dSYM files can now be generated when deploying to iOS from Xcode.

HTML5
  • New: Added methods to allow stack walking in HTML5.

  • New: Update Emscripten SDK to 1.25

  • New: Enabled ICU (International Components for Unicode) for HTML5.

  • Fixes for Launch On for HTML5 and Chrome.

  • Fixed key repeat not working in HTML5.

  • Python exe used by HTML5 is now read from emscripten config file. When missing environment variable PYTHON is used, if empty then PATH is searched.

Linux
  • New: Implemented transparent windows

  • Core 3.2 GL profile is now sufficient for running Linux tools (previously compatibility features were used)

  • Fix for not being able to start modular dedicated server due to (bogus) version mismatch of its modules.

  • Fix for multiple instances of a dedicated server stomping on each other's logs

  • Fix linking to libraries located in paths with spaces.

  • Added some missing platform specific functionality for Linux.

  • Fix for connectivity issues on Debian due to its 127.0.1.1 address hack.

  • Added (unsupported) third-party libraries for Linux on ARM.

  • Added files needed to compile for Linux on ARM (unsupported)

  • UBT will refuse to use clang 3.4 and gcc.

Mac
  • New: Fully implement support for Mac OS X's fullscreen mode.

    • Fullscreen mode on OS X now allows you to specify the resolution rather than always taking the displays current resolution.

  • New: Added support for customizing splash screen and icons for Mac in project preferences

  • New: Added support for GameStop version of Xbox 360 controller on Mac

  • New: Native look of window close/miniaturize/zoom buttons on OS X 10.10 Yosemite

  • Disable OpenGL workarounds no longer required on Yosemite, though they will still be used on Mavericks.

    • Combined depth-stencil clears & depth-fetch-during-depth-test now work on AMD 7xx0 & Dxx0 GPUs.

    • On Intel cards we no longer need to flush changes to the blend state, significantly improving performance on those GPUs.

  • Fix broken skeletal mesh rendering on Nvidia cards under Yosemite.

    • This rebinds the SRV whenever the underlying buffer is modified which should not have a performance impact.

  • Fix crash reporting under Yosemite due to a bad interaction between our operator-new override & a system library.

  • Amend launching processes on OS X to report failures rather than crashing.

  • Stop titled windows on Mac OS X wandering down the screen when repeatedly entering & exiting fullscreen mode.

  • Fix crash on taking high-res screenshots on OS X.

  • Invert keydown/keyup message handling order on Mac OS X so that Slate gets the chance to process the message before the OS.

  • Ensures that viewports always get key-down & key-up pairs & that we don't accidentally activate menu key-equivalents.

  • Fix the Window menu on Mac OS X not being properly populated.

  • Rewrite separate game thread event dispatching on Mac OS X to use a custom run-loop source and avoid several potential deadlock risks.

  • Fix OS X system modal dialog input by setting a flag in MacApplication to indicate that a system modal dialog is active.

  • Rather than cancelling OS quit requests on OS X and then quitting behind Cocoa's back, use the proper deferral mechanism so that we have Cocoa wait for the separate game thread to exit before it tears the application down.

  • UE4 applications shouldn't cancel shutdown, restart or logout requests anymore.

  • Stop windows from reappearing on OS X after they've been closed.

  • Properly escape the command-line arguments when launching games for Play-as-Client so that they open in the correct display mode.

  • On OS X when a UE4 application loses focus push modal windows down to the normal window level, restore them on gaining focus, so that they don't float over other applications.

  • Fix reporting of crashed application name on OS X when launching the editor without a project and ensure's causing hangs in crashed applications.

  • Fix some faulty FMacWindow event order assumptions to ensure correct behaviour when opening windows.

  • Copy the crash video if there is one into the crash report folder on OS X.

  • Fixed some issues with windows rearranging their order on editor deactivation.

  • Fixed handling of text dragged to editor widgets from other apps.

  • Fixed menu and tooltip animation issues caused by setting their initial position incorrectly.

  • Fixed a problem with Window menu contents not updating when enabling or disabling items in editor's experimental settings.

  • Fixed a problem with editor freezing when opening menus from menu bar.

  • Fixed a problem with source control login dialog showing behind other windows.

  • Matinee will now save movies with correct .mov extension instead of .avi

  • Fixed a crash in tutorial editor's widget picker.

  • Use Less CPU when in Background editor option will now reduce CPU usage after fast switching to different user.

  • Fixed some issues with sub-menus not populating correctly.

  • BINARY: Don't activate the Launcher on Mac when the editor starts if it's already running, but hidden.

  • Fixed a freeze on quitting the editor with Cmd+W on Mac.

  • Pressing W/E keys while using trackpad no longer changes active widget mode in editor's viewport.

  • Fixed a problem with openFile: spawning another process if called with invalid params.

  • Updated engine code to compile correctly with OS X 10.10 SDK, added SDK detection to MacToolChain.

  • Specify explicit window levels for the different types of window in the editor on OS X, so that modal/tooltip/menu windows are on top, then parented or utility windows, then normal windows at the bottom.

Playstation 4
  • New: Initial support for SN-DBS distributed build system. Will be used for compiling for PS4 if SN-DBS is installed and Incredibuild isn't available/enabled.

  • New: Added BC4 texture support.

  • New: Added PS4 compatible .natvis for Visual Studio debug visualizers. Copy Extras\VisualStudioDebugging\PS4UE4.natvis to SCE\orbis-debugger

  • New: Project Settings for PS4 (in the editor) now exposes various compile time options for each project. RazorCPU support, GPU Debugger support, etc.

  • Fix for FWeakObjectPtr visualizer not working due to .natvis not supporting multiple types in one visualizer

  • Fix for random on screen corruption when GBufferFormat is set to high precision.

  • Final round of fixes from the Shootergame certification pass. Fixes various issues with async tasks from OSS calls.

  • Fix bug causing corrupt dynamic cubemap reflection captures.

  • Fixes a UFE crash when powering off the PS4 running the launched build from UFE.

  • Fixes VSI detection and project generation on system which only have VS2013 installed.

  • Fix potential GPU hangs on PS4 when command buffer exceeds 4MB.

  • Fix incorrect array slice / mip based clears for non-cmask 2d textures.

Xbox One
  • New: Geometry shaders now use on-chip memory. This saves bandwidth and speeds up the GPU when geometry shaders are used.

  • Fixed a memory leak in the DirectX state cache.

  • Remove dependency on June 2010 DirectX install for Xbox One builds.

  • Removed non-breaking spaces from some code so that it can be compiled on Japanese Windows.

  • Removed use of SHAPE for the XAudio2 device used by the movie streamer, as it was interfering with third party audio.

  • Fixed a memory leak in the DirectX state cache.

  • Fixed a potential use-after-free when creating Live sessions.

  • Fixed a potential crash when attempting to join a Live session after the host has disconnected.

  • Fixed some potential crashes in the Live online subsystem due to uncaught exceptions.

Rendering

  • New: Scene captures that update every frame now benefit from occlusion queries

  • New: Added “Self Shadow Only” setting to components (e.g. for 1st person self shadowing weapon without casting a shadow onto the world)

  • New: You can now configure Ambient Occlusion’s static amount in your project settings for better performance when not using baked lighting

  • New: Improved visual quality of Subsurface Scattering (less artifacts on half res upsample, more crisp non subsurface)

  • New: Added 'r.ProfileGPU.Root', which can be used to filter the hierarchy to a specified root

  • New: RHI.MaximumFrameLatency for setting the number of frames that can be queued for render on DX11

  • New: “Visualize HDR” view mode now shows Histogram bucket as color

  • New: New project setting that exposes D-Buffer requirements for your game

  • New: Added support for setting show flags for Scene Capture actors. Now it is possible to disable things like dynamic shadowing or translucency for Scene Captures, and this can be adjusted individually for different Scene Capture actors.

  • New: Added a new CVar in the scalability ini r.EmitterSpawnRateScale. This is applied as a global scale on the spawn rate of all emitters that have bApplyGlobalSpawnRateScale set to true in their spawn module. bApplyGlobalSpawnRateScale defaults to true.

  • New: Distance Field AO optimizations

    • Objects with no distance field representation (character) no longer receive DFAO, that was causing a huge amount of interpolation cost

    • Background is stenciled out from interpolation splat pass

    • Surface cache resources are allocated based on worst case of the current resolution, saves memory and prevents overflow

  • New: Skylight captures are now also updated when reflection captures are updated.

  • New: GPU emitters now support event spawning.

  • New: Added an updatable texture to easily allow writing to textures every frame.

  • New: Forward LifeTime parameter to LineBatcher when drawing Cylinders

  • New: SlopeMask: material function used to mask the slope of a mesh, useful for terrain texturing and adding snow to the top of objects.

  • New: MatLayerBlend_OverrideOpacity: Material layer function to override opacity

  • New: MatLayerBlend_ModulateSpecular: Material layer function to modulate specularity attribute.

  • New: VectorDisplacement: Added material function for using vector displacements rendered in xNormal

  • New: SplineThicken: added new input for overriding the UVs used to generate the round normal. This is useful for having multiple cylinders on one sheet when doing hair.

  • New: Added support for ddx/ddy functions on Metal shaders

  • New: Fixed issue where changes to UPrimitiveComponent::bRenderInMainPass had no effect. Replaced property with SetRenderInMainPass function.

  • New: Added cvar override 'r.SceneCaptureResizeMethod' to prevent scene capture render targets from being clamped in game mode.

  • New: SetOcclusionTint and SetMinOcclusion BP functions for skylight components

    • SetCastShadows is now accessible to skylight components

  • New: De-emphasized connectors in the material editor are drawn much brighter, increases visibility with comment backgrounds

  • New: MatLayerBlend_TenLayerBlend: This is a node that should make working with material layers more straight forward. This is a fixed function node that supports blending of a maximum of 10 layers. If you do not use a layer input or mask the compiler will optimize it out.

  • New: Added OcclusionTint, MinOcclusion to sky light for DFAO artistic controls

  • New: Renamed new cvars, now 'r.Shaders.Optimize' and 'r.Shaders.KeepDebugInfo'

  • New: added filtered option to the SceneTextures for PostprocessInput0..6, doesn't work on OpenGL yet

  • New: exposing new PostProcessMaterial location to replace the tonemapper, this is the base for upcoming postprocess changes

  • New: D-buffer approach for decals exposed as a project setting.

  • Allowed setting null textures in OpenGLRHI to match D3D & fixed a number of crash bugs.

  • Avoid accessing a destructed RHI in OpenGLTexture & SlateRHIResourceManager to prevent crashes on shutdown.

  • Fix for GSystemResolution not being setup in time for some objects being created resulting in UTextureRenderTarget2D's having a size of 0,0.

  • Flowmap material function: added support for disabling mip map adjustment, this allows the function to be used in world position offset or displacement.

  • Fixed corruption on particles.

  • Fixed objects not rendered in the main pass still affecting motion blur.

  • Fixed scene captures on mobile projects.

  • Black lightmaps are now tossed even when a skylight is absent.

  • Fixed translucent subsurface lighting.

  • Fixed editor primitive depth testing with GetDynamicMeshElements.

  • Disabled DFAO interpolation depth testing due to artifacts Fixed skylight crash when building lighting with no specified cubemap.

  • Fixed rare GPU hang from DFAO.

  • Fixed Screenspace Subsurface Scattering when used in splitscreen.

  • Improved subsurface profile quality (fewer artifacts due to the half resolution upsample)

  • Fixed the case where a single float was provided as the subsurface color in a material

  • Lightmass material properties are clamped to valid ranges before exporting, prevents light explosions with photon mapping

  • Material inputs are clamped to valid ranges at the source. Adds a few ALUs but improves cross-platform compatibility and consistency.

  • Fixed DiffuseColor input still being used when exporting translucent materials to lightmass

  • Optimized the histogram shader, especially for AMD GPUs and high resolutions

  • Fog inscattering exponent is no longer clamped to 1

  • Shadow passes are now implemented properly with GetDynamicMeshElements

    • Previously was reusing meshes from the main view, but meshes in the shadow view might not be visible from the main view

  • Fixed a bug that made normal mapped mesh particles not work properly with scaling the meshes.

  • Minor parallel rendering fixes. Improved constructors for Xbox RHI. delete comments and cruft. Turn off parallel shadows. Flush before reflection capture on all platforms.

  • Fixed stencil clear bug for shadows and parallel rendering

  • Fixed togglerhithread

  • Fixed shader recompilation

  • Minor parallel rendering fixes; make sure bypass is latched right away for RHI thread and don't clear stencil on PS4 if we don't have a write address

  • Fixed a bug that made mesh emitters continue to render in wireframe after switching to wireframe and back.

  • Parallel rendering - fixed two serious race conditions on the PS4 and XB1 that resulted in GPU hangs etc

  • OpacityMask and Masked materials now work correctly when using material attributes.

  • Added UFunction redirects for SetIntensity in Light and SkyLight components. This function was previously named SetBrightness.

  • Fixed windowed fullscreen modes so that you can specify resolutions less than the native desktop without causing the window to appear incorrectly in the corner of the screen

  • Fixes for several crashes when using the null RHI

  • Fixed a gamma correction issue in mobile preview modes where slate items would be rendered incorrectly

  • Changed FPrimitiveSceneProxy::GetScene() to return a reference rather than a pointer

  • Fixed bug where velocity map rendering was not working correctly with RHI Thread. This was causing motion blur to be exagerated.

  • Fixed improper use of BUF_VOLATILE in the skincache. The lifetime of a BUF_VOLATILE is a single frame.

  • Fixed UTextureDynamic2D to have a useful static creation function.

  • Significant particle optimization from Pull Request #284

  • Fixed a few problems with PSA_Velocity and PSA_AwayFromCenter in conjunction with use of the initial rotation module.

  • Added geometry and current time to ISlateViewport Tick function

  • Hid irrelevant collision-related properties from Billboard and MaterialBillboard components

  • XboxOne In-progress work on deferred contexts

  • Remove xbox from PC version of split d3d11rhi

  • Parallel rendering - turned on RHI thread by default for platforms that support it

  • Split Xbox RHI off. Deffered contexts for XB1, parallel velocity rendering fixed and reenabled.RHIThread on by default on platforms that support it.

  • Updated world aligned material functions to use shared texture samplers.

  • GitHub pull request #68, simple interface for third party occlusion solutions

  • Removed DEC_* macros from drawing events

  • Fixed crash when launching certain projects either in editor or game.

  • Removed r.UseDiffuseSpecularMaterialInput (not usually used, and prevented some GBuffer optimizations)

  • Fixed objects not rendering in the main pass still affect motion blur

  • Fixed the 1 pixel black border which can show up in screenshots when certain post process effects are enabled

  • Improved streaming strategy for textures using their component’s mobility settings

  • Persistent level is always registered for texture streaming in the Editor. Landscape correctly registers all dependent textures for streaming.

  • Fixed TexelFactor calculation for landscape heightmap texture. Improves heightmap texture streaming

  • Metal now supports Shader Resource View parameters

  • Metal now running as feature level ES 3.1

  • Moved around some cross-compile source files

  • Replaced hlslcc*.exe with CrossCompilerTool.exe

  • OpenGL backend for the shader cross-compiler now resides on ShaderFormatOpenGL

  • Metal backend for the shader cross-compiler now resides on MetalShaderFormat

  • Metal shader back-end does not use the GLSL back-end anymore; added FramebufferFetchMRT() intrinsic.

  • GRHIFeatureLevel is deprecated.

更新信息

C++ API Changes

  • UMaterialExpressionTextureSample and UMaterialExpressionTextureSampleParameter's ConstMipValue value, and UMaterialExpressionIf's ConstAEqualsB value were previously used verbatim. Now they are processed by the compiler, so check these values first if you notice any oddities in a material.

  • After switching to using the new “GENERATED_BODY” macro there can be redefinition compiler errors. To fix that you have to either:

    • Declare the FObjectInitializer constructor in header file, or

    • Delete definition of FObjectInitializer constructor from source file (if it does nothing more than default constructor).

    • You may need also to change protection level as GENERATED_BODY() macro will preserve spotted protection level, while old macro was always setting to public.

  • You may have to rename the class in your code to avoid deprecation warnings.

  • All SCOPED*DRAW_EVENT* functions now omit the event color

  • Changes to the API of GetBoneLocation and GetBoneQuaternion

  • All Montage API now takes an optional Montage pointer to control different Montage assets at the same time.

  • ULevelBase has been eliminated, however, all things should have been inheriting/referencing ULevel anyways.

  • Existing usages of AReverbVolume in C++ will need to be changed to AAudioVolume

  • Changed GetBoneLocation, GetBoneQuaternion to use bone space enum instead of ints

  • AnimMontage's bEnableRootMotionTranslation and bEnableRootMotionRotation have been combined and moved to bEnableRootMotion on AnimSequence's. The values still exist on AnimMontages but should not be used.

    • UAnimMontage::Advance now takes a flag to specify whether root motion should be blended or not

    • UAnimSequence::ResetRootBoneForRootMotion now takes the value for ERootMotionRootLock::Type RootMotionRootLock directly instead of the owning FAnimExtractContext

  • Any API which refers to a delegate will now have a different decorated linker symbol.

    • Any code which referred to internal delegate implementation types, e.g. TBaseDelegate_NoParams, will no longer compile and should be replaced with the equivalent DECLARE_* macro.

  • RemoveFromViewport is now deprecated, use RemoveFromParent.

  • InterfaceCast has been deprecated - Cast or dynamic_cast should be used instead.

  • CopyConstructItems and RelocateItems have been deprecated.

    • Their use should be replaced with ConstructItems and RelocateConstructItems, which support construction/relocation between different types.

  • FAnimNotifyEvent StartTime deprecated - Replaced with methods GetTime() and SetTime()

    • FBranchingPoint DisplayTime deprecated - Replaced with methods GetTime() and SetTime()

    • FCompositeSection DisplayTime deprecated - Replaced with methods GetTime() and SetTime()

  • API changes (must be changed):

    • FViewport::CaptureJoystickInput(bool Capture) renamed to FViewport::SetUserFocus(bool bFocus)

      • EKeyboardFocusCause renamed to EFocusCause

      • FKeyboardFocusEvent renamed to FFocusEvent

      • FKeyboardEvent renamed to FKeyEvent

      • SWidget::OnKeyboardFocusReceived(...) use SWidget::OnFocusReceived(...)

      • SWidget::OnKeyboardFocusLost(...) use SWidget::OnFocusLost(...)

      • SWidget::OnKeyboardFocusChanging(...) use SWidget::OnFocusChanging(...)

      • SWidget::OnControllerButtonPressed(...) now routed through SWidget::OnKeyDown(...)

  • UGameInstance::InitPIE has been removed and UGameInstance::Init will be called for PIE as well as for standalone.

  • This upgrade also includes minor changes to the IHeadMountedDisplayInterface. If you've used this interface, please upgrade your implementation to conform to the new function signatures.

  • Removed GVolumeMultiplier and added an equivalent to FApp to contain the code to load the unfocused volume multiplier from config.

  • FPrimitiveSceneProxy::GetScene() now returns a reference to the FScene. Lots of code assumes the existance of a scene, so this cements this. Added a check() that the scene is valid when creating the proxy.

  • Instead of including Media.h, please include the interface header files that you actually use, i.e. IMediaPlayer.h and/or IMediaTrack.h

  • ApplyRequestedMove() has had params reordered and changed; it now includes Friction and Braking, and has all the "out" params at the end.

  • Some variables and functions have either been removed or renamed:

    • Removed hacky bGravityEnabled flag from various velocity and acceleration functions.

    • Deprecated old CalculateVelocity() method, renamed to ComputeVelocity() to align with the other functions in the class.

  • Deprecated CharacterMovementComponent::AdjustUpperHemisphereImpact() and UpperImpactNormalScale.

    • Implementations of AdjustUpperHemisphereImpact() should override ComputeSlideVector() instead.

  • Renamed THRESH_VECTORS_ARE_PARALLEL to THRESH_NORMALS_ARE_PARALLEL, and change the meaning to the cosine of the angle we compare to.

    • Old tolerance was very fuzzy (11.4 degrees), new tolerance is about 1 degree.

  • Modified FindAirControlImpact() to distinguish between current and lookahead time, and to take velocity and gravity. However, this function might be deprecated as it is not currently used.

  • Removed hacky bGravityEnabled flag from various velocity and acceleration functions.

    • Deprecated old CalculateVelocity() method, renamed to ComputeVelocity() to align with the other functions in the class.

  • Some CharacterMovementComponent functions related to air control have been changed to allow more flexibility:

    • GetAirControl() now returns a FVector rather than float, to allow air control code to act non-uniformly (ie different laterally versus forward) if desired.

    • GetFallingLateralAcceleration()/GetAirControl() no longer do the sweep test forward in time to determine if air control should be limited.

    • LimitAirControl() now returns a FVector rather than float. The behavior is now to allow acceleration parallel to the surface in the horizontal plane, or away from the surface altogether.

    • LimitAirControl() may be called multiple times during a falling movement update.

  • Users may need to update their AI API function calls.

  • Unused parameters removed from FConfigFile::CombineFromBuffer and ProcessInputFileContents

  • FConfigFile::ProcessInputFileContents marked CORE_API so as to be callable from other modules

  • FAES marked CORE_API so as to be usable from other modules

  • All UK2Node GetMenuEntries() functions are deprecated/unused, and have been replaced by GetMenuActions().

  • Required Emscripten SDK version is now 1.25. version 1.22 will no longer work.

  • Depending on the console variable use you might see a behavior change (watch out for errors in the log). Console variable Set() now needs to specify the priority.

  • This shouldn't have been use by any project other than Fortnite.

  • Instead of ISettingsEditorModule::GetRef() use FModuleManager::GetModuleChecked("SettingsModule"). Instead of including SettingsEditor.h include the interface headers you actually use.

  • Instead of ISettingsModule::Get() use FModuleManager::GetModulePtr("Settings"). Instead of using FSettingsSectionDelegates assign delegates directly through the new ISettingsSection methods.

  • SWidget::RenderTransform is now a TOptional.

  • FWorkspaceMenuStructure::AssetEditorCategory has been removed and FWorkflowTabFactory::TabIcon is now an FSlateIcon (was previously an FSlateBrush) To fix the category, use FAssetEditorToolkit::LocalWorkspaceCategory and set it using FTabManager::AddLocalWorkspaceMenuItem() To fix the tab icon, simply use the same icon and style to create an FSlateIcon instead of an FSlateBrush Any editor in the engine can be looked to for reference on these changes.

Blueprints

  • Existing "Equal" nodes for vector/rotator types will be assigned an error tolerance value of "0.0" on load in order to preserve previous behavior that may have been dependent on exact equality.

    • New placements of "Equal" nodes for vector/rotator types will default to the new error tolerance value, and will thus have a "NearlyEquals" type of behavior by default.

  • Users that implement their own UK2Nodes will have to port from GetMenuEntries(), and implement GetMenuActions()/GetMenuCategory()/GetNodeTitle(ENodeTitleType::MenuTitle)/GetTooltipText()/GetSignature() to see their nodes properly presented in the new Blueprint menus.

Core

  • Any non-engine libraries which take or return delegates should be recompiled against the latest engine code to ensure they import/export the correct symbols.

  • Variadic delegates will allow binding to arbitrary numbers of arguments or functions with arbitrary arity, but the non-variadic version of delegates - still used by VS2012 - has the same limits as before if you still target that compiler.

    • Bound function arity limit == 8, bound argument limit == 4.

  • Manual construction of FPropertyChangedEvent instances should use the one-argument or two-argument form (construction of this type is unlikely to occur in game code though).

  • For projects targeting languages other than English, update the Internationalization Preset settings in Project Packaging Settings in order to maintain support for you desired cultures.

Framework

  • May need to include ActiveSound.h instead of AudioComponent.h if reference FSoundParseParameters

  • Added OnFinishedPointerInput(), which gets called after event processing and before GEngine->Tick(). SViewport and FSceneViewport now uses this function instead of ProcessInput() to accumulate high-precision mouse events.

  • Any C++ usages of EKeys::Underscore and EKeys::Quote will no longer work as expected and should be switched to EKeys::Hyphen and EKeys::Apostrophe respectively.

  • Functions Applying and Getting ComponentInstanceData now take/return FComponentInstanceDataBase* instead of a TSharedPtr

  • Any dynamically created components that were explicitly calling InitializeComponent should no longer do so as it is handled via RegisterComponent and will now assert due to InitializeComponent being called multiple times.

  • Use FVector::Coincident() if you care about the direction, for cases where FVector::Paralllel() was previously being used.

  • Function name will be updated automagically, but resaving BT assets is recommended.

Landscape

  • Landscape code has been moved out of the Engine module and into its own module.

Oculus Rift

  • The engine has been upgraded to use the 0.4.3 SDK from Oculus. Please upgrade your runtime installation by downloading the 0.4.3 runtimes from https://developer.oculus.com

Physics

  • This greatly improves performance. If you have destructible components that interact with the player and you are using an async scene you will need to manually set them to be in the sync scene

  • This is now off by default as destruction rarely needs this and it greatly improves performance.

Rendering

  • A reminder that DrawDynamicElements in subclasses of FPrimitiveSceneProxy will be deprecated in 4.7 and replaced with GetDynamicMeshElements.

  • hlslcc*.exe is now replaced by CrossCompilerTool.exe in the Engine binaries folder

  • Any code that is directly setting bRenderInMainPass must instead call SetRenderInMainPass( value ).

  • Any usage of GRHIFeatureLevel must be replaced with access to world or view's FeatureLevel property.

  • r.UseDiffuseSpecularMaterialInput has been removed allowing us to better optimize the g-buffer layout

  • The CustomTexture node has been removed completely and any materials that were using CustomTexture with some of the workarounds that worked in some previous versions will need to be modified.

    • A Custom node will now accept a connection from a TextureObject or TextureObjectParameter node instead.

    • If you add a parameter to your Custom node named "MyTex" and connect a TextureObject node, an extra sampler parameter named "MyTexSampler" will be available inside the Custom node's HLSL.

    • You can sample the texture with an HLSL expression such as "Texture2DSample(MyTex,MyTexSampler,UV);"

其他

  • You may experience failure for some old bindings depending on how they were setup. Ensure your bindings are Pure, and the return types match.

已知问题

  • Cannot create events in the AnimBP EventGraph for new Anim Notifies.

    • Workaround for this issue is to reopen the editor.