August 31, 2015

虚幻引擎 4.9 版本已发布!

作者 Alexander Paschall

本发布版本包含了129个重大修改,这些修改由虚幻引擎的令人赞叹的社区开发者提交而来。感谢这些开发者对虚幻引擎4.9的贡献:

Andrew Zhilin (zoon), Artem V. Navrotskiy (bozaro), Artyom Sovetnikov, Ben Rog-Wilhelm(zorbathut), Ben Wiklund (bwiklund), Black Phoenix (PheonixBlack), Błażej Szczygieł (zaps166), Brad Grantham (bradgrantham), Brent Scriver (FineRedMist), Cengiz Terzibas (yaakuro), chipgw, Christian Radich (yoyohobo665), Christopher P. Yarger (cpyarger), Clay Chai (chaiyuntian), Cliff Jolly (ExpiredPopsicle), Dave Newson (dave-newson), Derek van Vliet (derekvanvliet), Dorgon Chang (dorgonman), ewirch, Felix Laurie von Massenbach (erbridge), Gabriel Hare (GabrielHare), gatools, Hakki Ozturk (ozturkhakki), HueyPark, JaredTherriault, Jason Spangler (Stormwind99), Javier Osset (Xaklse), Jeff Rous (JeffRous), JohnAlcatraz, Kitatus Studios (KitatusStudios), Konstantin Nosov (gildor2), korypostma, Lee Berger (MrCrowbar), Maarten Scholl (maartenscholl), Marat Radchenko (slonopotamus), marynate, Matthias Huerbe (MatzeOGH), Maxim (maxpestun), Michael Allar (Allar), Michael3DX, MiniTurtle, Moritz Wundke (moritz-wundke), Nako Sung (nakosung), Nari Demura (demuyan), Nastenko Michael (deM-on), Nathan Stocks (CleanCut), Niels Huylebroeck (red15), Pablo Zurita (pzurita), Patrick Flanagan (valtrain), Pedja Lubomirovic (3dluvr), Philipp Smorygo (fsmorygo), Pierdek, Piotr Bąk (Pierdek), Quadtree, Rajko Stojadinovik (rajkosto), Rama (EverNewJoy), Rem (rveilleux), rlefebvre, Robert Khalikov (nbjk667), Russ Treadwell (trdwll), Salamanderrake, Sebastian Witkowski (witkowski-seb), Sébastien Rombauts (Srombauts), Simon Taylor (simontaylor81), Stephen Whittle (stephenwhittle), szyszq, TK-Master, Tobias Mollstam (mollstam), Tomasz Sterna (smokku), user37337, Victor Xie (FTPiano), Vladimir Ivanov (ArCorvus), Will Stahl (merlin91), yamashi, Zhi Kang Shao (zkshao)

主要功能

对移动设备的增强支持

我们正致力于极大地改进对移动平台的支持,并且这个版本包含了诸多令人激动的渲染特性以帮助您创建领先的移动平台游戏。新功能包括了高效的动态阴影、可移动光源和贴花。在未来我们会对移动平台和HTML5渲染质量进行持续改进。在这个版本中,我们已经改进了iOS的应用程序内购买功能,并且我们还添加了对CloudKit的远程推送通知和支持。对于安卓平台,我们添加了OpenGL ES 3.1、沉浸模式支持、异步音频压缩以及更佳的方向特性。现在我们还加入了NVIDIA AndroidWorks,这样您可以更方便地在您的设备上设置和运行它。虚幻引擎4现在还创造性地加入了对iOS平台的智能模糊分析插件!您还可以把诸多针对移动设备的新功能用于您的HTML5游戏。

image alt text

新增内容: 针对移动设备的动态角色阴影

现在移动设备上支持来自定向光源的动态调制的角色阴影!

image alt text

  • 即时您的场景是带静态光照的,您也可以使用动态调制的阴影。

  • 要想起用该功能,请在定向光源上打开“Cast Modulated Shadows(投射调制的阴影)”选项!

新增内容: 针对移动平台的动态点光源

现在,移动设备和HTML5平台上支持动态点光源!

image_2.gif

  • 这可以用于提高生命周期较短的特效,比如爆炸、射弹、粒子特效等。

  • 对每个光照对象最高支持四个动态点光源。

  • 注意: 还不支持点光源的动态阴影投射。

新增内容: 移动设备上的贴花

现在,移动平台渲染器支持Decal(贴花)!

image alt text

  • 支持半透明的、叠加的及调制的混合模式。

  • 注意: 当前在移动设备和网络上仅支持不带光照的贴花。

新增内容: 主要的虚拟现实内容更新

Steam VR (HTC Vive)

虚幻引擎的SteamVR插件包含了许多主要更新,可以更方便并以更加高效的方式来使用虚幻引擎。

image alt text

SteamVR改进的内容包括: 

  • 修复了在4.8 Preview 2+版本中出现的延时问题

  • 提供了对标准运动控制器抽象类的支持,这样两个Vive控制器都能找到同一玩家

  • C++项目现在由插件API进行支持

  • 多种改进和bug修复

Gear VR更新到Mobile SDK 0.6.0版本

这个版本修复了多个Gear VR的主要渲染bug以及在0.5.0版本中出现的问题,以及一些硬件兼容性问题。

image alt text

新增内容: 支持虚拟现实运动控制器

现在,虚幻引擎4通过一个通用的抽象层支持Motion Controllers(运动控制器)!

image alt text

这意味着像Vive SteamVR 控制器, Sony Move等都可以通过一个通用的接口可用。 通过使用运动控制器按键抽象类,现在可以将输入按钮的按下及触发处理发送给多个控制器的单个玩家。 另外,您可以通过简单地给您的角色添加一个Motion Controller(运动控制器)组件,来简单地给您的项目添加运动跟踪,这将自动更新附加到角色上的任何东西来遵循您的控制器的位置!目前支持 HTC Vive控制器,不久后将支持更多类型的控制器。我推荐所有的运动控制器插件都移入到该新系统中,以便它们可以成为设备无关接口的一部分。

新增内容: 实验性DirectX 12支持

现在推出了对DirectX 12作为一项实验性内容的支持!如果您正在使用Windows 10,您可以通过使用命令行的"-DX12"来运行引擎以试用这项功能。

image alt text

微软的工程师们添加了对UE4的DirectX 12支持,我们和他们一起配合来整合变更内容到4.9版本中。这项功能仍为新功能,并且是试验性的。DirectX 12提供了更为底层的渲染API,它更为高效,而且可以跨多线程来对渲染命令进行并行提交,这是一项由控制台的渲染API所激发的功能。之后,我们会继续改进对DirectX 12的支持,并且我们会寻找新的方法来在即将推出的引擎新版本中使用新的API。

新增内容: 应用网格物体距离场的全景粒子碰撞

距离场GPU粒子碰撞允许粒子有效地同整个场景进行碰撞。

image alt text

可用于 同表面发生碰撞的火花.

image alt text

这可以用于各种特效,比如 在表面上积聚的雪,

image alt text

  • GPU粒子发射器上的碰撞模块具有一个新的属性 'Collision Mode(碰撞模式)' 您可以在这里指定'Distance Field(距离场)。'

    image alt text

  • 为了使粒子发生碰撞,我们需要有一个碰撞表面,这可以从距离场中高效地提取出来。 距离场的一个单独样本给出到最近碰撞表面的距离。 计算距离场的梯度提供到那个表面的方向和表面法线。 将这些放在一起给出了碰撞表面。

  • 使用这种方法的粒子碰撞比现有的Scene Depth(景深)碰撞更可靠,它仅同您同屏幕上的内容碰撞,限制它使其生命周期较短。 然而,全局距离场分辨率很低,所以粒子将穿过薄的对象,尖角会变成圆角。

  • 同所有距离场功能一样,这个功能需要在Rendering Project(渲染对象)设置中启用 'Generate Mesh Distance Fields(生成网格物体距离场)'距离场粒子碰撞是一个Shader Model 5功能,在不支持SM5的硬件上,粒子将再次使用景深碰撞作为替换。

  • 距离场粒子碰撞非常高效 - 它同景深碰撞的性能消耗差不多。

新增内容: 层次化LOD快速预览和群集

Hierarchical Level-of-Detail (层次化细节层次)(HLOD)是在4.8版本中引入的一个系统,它可以把您关卡中的许多对象压缩到屏幕上看起来很小的几个对象。这样您可以在近距离查看对象时获得更高的质量,并在关卡中获得更好的总体性能表现。我们对4.9版本的HLOD进行了改进,并将持续在未来的版本中进行此类改进。

快速HLOD预览

为了快速在Hierarchical LOD(层次化LOD)版本上进行迭代,现在您可以使用Preview HLOD(预览层次化LOD)选项。这将仅使用Actor边界的可视化表示及其自身没有融合及创建HLOD网格物体的对象创建HLODActor。它们的边界根据为特定Hierarchical LOD(层次化LOD)级别的LODSystem(LOD系统)设置内设置的DrawDistance (描画距离)进行渲染。

image alt text

该图片展示了弹入到视图中的第一个和第二个层次化的LOD级别,这清晰地指出了这些级别如何聚集,而不必经历融合及创建层次化LOD网格物体的耗时过程。注意,这只是该预览系统的初步实现,随着时间推移,可能会进行修改及改进。

自定义LOD群集 (HLOD体积)

为了对 Hierarchical LOD(层次化LOD)的群集过程有更多的粒度控制,现在您可以放置Hierarchical LODVolume(层次化的LOD体积),它将为它包含的Actor创建一个群集。有了这个功能,就允许用户手动地定义关卡中的哪个区域及哪些对象应该群集到一起。

image alt text

新增内容: "Arch Vis" 角色控制

新增的"ArchVisCharacter” 插件添加了可用于建筑可视化应用的立即可用的控制的角色类。旨在于提供在真实世界范围内的舒适和自然的控制,并启用更平滑的视频和在线演示。

image alt text

您可以直接将ArchVisCharacter绑定为Pawn类,或者您也可以从中创建自定义蓝图以随意调整移动设置。

新增内容: 控件深度排序

屏幕空间中的控件组件(Widget Components)现在会根据距离观察者的距离自动分类,以确保最近的屏幕控件控件组件总是位于其他组件的上面。

image alt text

通过这样,共享的图层控件可以根据到相机的距离适当地分类所有控件组件。之前它是基于手动的 ZOrder,或者添加到视口中的先后顺序分类的。

新增内容: 区域阴影 (用于固定光源)

之前,固定光源总是生成具有均匀半影尺寸的尖锐阴影。 现在,Lightmass光线追踪允许它们生成固定光源的区域阴影!

image alt text

开启"Use Area Shadows for Stationary Light"(使用固定光源的区域阴影)选项来使用此功能。'Light Source Angle'(光源角度)(或点光源的'Source Radius'(光源半径))控制了这些阴影的柔和度。

image alt text

性能表现详细信息:

  • 均匀半影阴影在处理低分辨率光照贴图时仍然具有较好的效果,所以这些仍然是默认设置。 之前,均匀半影尺寸是使用一个隐蔽的项目设置控制的,但现在,它由'Light Source Angle(光源角度)'属性控制,就像区域阴影一样。 将光源角度变为二倍大小将获得两倍柔和度的阴影,以此类推。

  • 对于仅受到单一固定光源通道影响的地图区域(也就是,一个固定定向光源),也有一个新的优化。 它们的阴影贴图将被烘培到一个单独的通道贴图中,而不是4个通道贴图中,仅占用1/4的内存消耗。

新增内容: 环境遮挡材质蒙板

新的环境遮挡材质蒙板功能允许您在材质中访问Lightmass计算的环境遮挡,这对于程序化贴图是有用的,比如在它累积的区域添加老化效果及灰尘。

image alt text

以上的屏幕截图使用环境遮挡蒙板来自动混合泥土层到环境中的角落位置。

要想使用该功能,您需要启用WorldSettings(世界设置)->Lightmass settings(Lightmass设置)下的 'Use Ambient Occlusion(使用环境遮挡)' 和'Generate Ambient Occlusion Material Mask(生成环境遮挡材质蒙板)' 这两项,然后构建光照。 其它的类似MaxOcclusionDistance(最大遮挡距离)这样的环境遮挡控制可以用于调整外观效果。(请确保设置直接及间接环境遮挡部分(Indirect Occlusion Fraction )为0,以便这个环境遮挡不会应用到实际的关卡光照上。)

image alt text

然后,在您的材质中,您可以将该环境遮挡作为具有PrecomputedAOMask节点的0-1的蒙板访问。PrecomputedAOMask节点将在遮挡的区域中提供1,在其他地方提供0。

image alt text

性能表现详细信息:

  • 使用PrecomputedAOMask节点是一种标准的贴图查找方式。启用该功能会对每个光照贴图的贴图像素添加半个字节,而默认的使用方式是每个光照贴图的贴图像素使用大约4个字节。

  • 您可以使用‘ListTextures'控制台命令来查看AOMaterialMask所使用的贴图内存。

新增内容: 网格物体距离场材质

这项功能让您的材质可以方便地确定到空间中任意点的立体处的距离。最近的有两个新的节点,用于访问材质编辑器中的全局距离场属性。

image alt text

DistanceToNearestSurface返回一个带符号距离,以世界空间单位为单位。注意,不透明网格物体表面上的距离将总是接近于0。 DistanceToNearestSurface 可以用于使得特效避开遮挡者:

虚幻引擎4用户Roel Bartstra已经发现了该功能的一些有趣应用 - - 一个是 获得软体效果, 另一个是 创建自动避开表面的流程图

同所有距离场功能一样,这个功能需要在Rendering Project(渲染对象)设置中启用'Generate Mesh Distance Fields'(生成网格物体距离场) 。 距离场材质访问是一个Shader Model 5功能。 使用FeatureLevelSwitch 材质节点提供针对Shader Model 4硬件的回滚应用。

新增内容: 改进的距离场环境遮挡

环境遮挡在物体周围提供了由天空所照亮的柔和阴影,这在阴暗的光照环境下尤为重要,一般来说,在没有预计算光照的情况下,很难以高质量进行渲染。距离场环境遮挡解决了这个问题,创建了完全动态的游戏,在其中,时间和环境可以随时变更。我们在提升4.9版本技术的质量和性能表现方面付出了巨大努力,并且我们相信,这对于中等配置的电脑和和PS4级别的硬件来说,现在这是一个可以发布的功能,在一般游戏场景中,总体GPU消耗低于4ms!

之前的方法进行自适应采样,所以尽管平面做较少的工作,但这仍然会在干净的场景中导致大量的污点。

image alt text

现在,环境遮挡的计算速度已经足够快,可以摆脱自适应采样,所以遮挡更加平滑。

image alt text

需要注意的是,新方法需要较长的历史过滤器,这可能会导致重影,尤其是当阴影投射者移动时。 希望这个问题以后会有所改进。

性能

距离场环境遮挡处理速度更快,以至于它可以在中等配置的PC及PS4上运行。 现在,它也具有更可靠的性能消耗,以至于几乎是常量,性能消耗略微依赖于对象的密度。

在具有一个静态相机和基本上全是平面的情况下,新方法快1.6倍。在具有植被和快速移动相机的复杂场景中,这种新方法速度快5.5倍。完整游戏场景在PS4上距离场环境遮挡的性能消耗是3.7毫秒。

技术细节

主要优化是使用一个全局距离场,该距离场随着相机转动。 这通过将所有常见的基于每个对象的距离场域组合到几个以相机为中心的体积贴图(称为clipmap(剪辑贴图))中来创建。 仅需要更新新的可视化区域或者那些受到场景修改影响的区域,这样合成就不会有太多性能消耗。

剪辑贴图(clipmap)的贴图像素尺寸的可视化效果 - 每个剪辑贴图具有一种不同的颜色

image alt text

全局距离场的分辨率比对象距离场低,所以它可以用于任何处理。 当计算天空遮挡的锥形追踪时,对象距离场在被遮挡的点附近采样,而具更快速度的全局距离场则在更远的地方采样。

这是光线追踪全局距离场和对象距离场的可视化展示。 全局距离场中的表面变得有斑点,并且薄的对象消失。

image alt text

新增内容:内容浏览器高级搜索

现在,当在内容浏览器中执行搜索时您可以使用高级搜索语法。虚幻引擎4被用于许多大型项目中,包括了一些包含了数百名开发者的团队,以及具有成百上千资源的内容库!这些新的搜索功能改进了工作流程,从而让您可以在任意大小的项目中搜寻内容。

image alt text

这增强了现有的简单搜索语法,通过提供一种从资源元数据及以下特殊按键中匹配 键->值对的方法:

  • Name(名称) - 和资源名称进行比较。

  • Path(路径) - 同资源路径进行比较。

  • Class(类) (别名: 类型) - 同资源类进行比较。

  • Collection(收藏夹) (别名: 标签) - 同包含该资源的任何收藏家的名称比较。

新增内容: 收藏夹改进

这个版本包含了许多对集合的变更内容,这样就可以辅助您在游戏中的资源管理,诸如资源嵌套、智能化集合以及标记功能。

嵌套收藏夹
  • 您的资源集合现在可以整理到层次结构中。

    image alt text

  • 您可以通过从给定的集合关联菜单中选择"New…"(新建)选项来创建子集合。或者,您也可以通过拖放来进行父项操作。

    image alt text

动态收藏夹
  • 动态收藏夹利用高级内容浏览器搜索语法的功能,允许您创建及共享收藏夹过滤器。

    image alt text

  • 您能够使用内容浏览器文本搜索所做的任何操作都可以被保存为一个动态收藏夹,包括引用其他收藏夹(静态收藏夹和动态收藏夹)。

  • 您可以使用内容浏览器文本筛选器右侧的"Save"按钮来创建动态集合。

    image alt text

快速资源管理
  • 现在,静态收藏夹通过快速资源管理复选框提供了一种向多个收藏夹添加资源的快速简便方法。

    image alt text

  • 您可以在集合视图中或通过其它途径,诸如点击与任意选择资源的关联菜单进行来使用。

    image alt text

改进了稳定性
  • 现在,收藏夹将自动地遵循它们包含的任何重定向器,这会避免当资源被重命名或移动时看上去似乎从收藏夹中消失的情形。另外,现在当通过内容浏览器修复(并彻底移除)重定向器时会考虑收藏夹。

改进的状态报告
  • 现在,每个收藏夹在其列目右侧有一个小的状态指示符,该指示符的颜色会根据收藏夹的当前状态变化而改变。每种颜色的含义如下:

    • 红色 - 该集合处于某种不佳或只读状态。请参阅工具提示以了解如何解决此问题。

    • 橙色 - 这个集合没有与源控制同步到最新版本。

    • 蓝色 - 该集合具有本地未保存的变更内容。如果保存或自动检查内容出问题,或者如果集合有重定向器,则可能发生该问题。

    • 绿色 - 该集合非空且为最新。

    • 灰色 - 该集合为空且为最新。

改进的资源工具提示信息
  • 现在,一个给定对象的静态收藏夹可以在内容浏览器中显示为工具提示信息的一部分。

    image alt text

新增内容: 插件创建向导

现在可以很方便地为虚幻引擎4创建新的C++插件!请查看新的插件向导。

image alt text

  • 现在通过插件浏览器(您可以从窗口菜单中访问它),您可以创建新插件!

  • 您将可以给新的插件起名,并从多个已存插件类型中进行选择(空白型、工具条型、独立窗口型)。

  • 这样将可以为您的插件创建所有的初始文件,以供您编译并载入到编辑器中

新增内容: 增强的曲线编辑器

我们对曲线编辑器进行了诸多改进,使之能更方便地控制曲线关键帧和切线。

image alt text

  • 鼠标中键现在也可以移动选择的关键帧或选择的切线

  • 现在添加了对选择和控制多个切线的支持

  • 现在可以使用control键(切换)和shift键(添加到已存控制项)来进行选择

  • 按住shift不放将可以限制在一条轴的移动

  • 浏览:按住alt加鼠标中键来平移视图,按住alt加鼠标右键来缩放视图

  • 新切线显示选项:总是显示切线,对选定点显示切线,永不显示切线

  • 新的曲线的预处理无限外推选项

  • 让添加关键帧变得更容易预测

    • 仅在只有一条曲线可供编辑时,才使用鼠标来添加关键帧

    • 当多个曲线可用时,点击曲线将会在该曲线上添加关键帧内联,而快速点击曲线将会添加关键帧到所有的曲线

    • 变更菜单项目的文本,来更清楚地显示所要进行的操作

新增内容: 蓝图中的多个返回节点

现在,一个函数可以有多个返回节点。一旦执行到“返回”处,函数执行将终止。这可以用于从蓝图函数中提早返回,或者进行分支及返回不同的值。

image alt text

新增内容: 在蓝图中构建自定义对象

在蓝图中,现在您可以生成不纯正的对象类型(不仅是actor/组件)。ConstructObjectFromClass 节点获取一个类,并创建一个那种类型的对象,和SpawnActorFromClass 类似(除了类型不是actor)。

image alt text

  • "Outer" 输入将作为新对象的拥有者,它控制了创建物体的生命周期。

  • 对于actor类,您可以继续使用类节点的Spawn Actor。对于控件来说,请使用Create Widget(创建控件)节点。在未来的版本中,我们可能会继续组合这些不同的功能。

新增内容: 蓝图类默认值

在蓝图中,现在可以通过新的"Get Class Defaults(获取类默认值)"节点来访问类的默认值。 当应用仅包含数据的蓝图时这可能是有帮助的,这允许您访问这些蓝图的值,而不必创建一个实例。

image alt text

  • 为了防止输入引脚太多变得不便处理,请使用节点的详细信息来 显示/隐藏 特定的默认值。

新增内容: 关卡蓝图通信

现在关卡蓝图可以通过接口通信。它们可以像类蓝图那样使用及实现接口函数。当把一个接口添加到一个类蓝图中后,便可以通过接口消息节点进行调用(使用用一个动态载入关卡作为目标)。

image alt text

  • 使用"Get Streaming Level"(获得动态载入关卡)节点来获得要通信的关卡。

    • 因为您必须使用"Get Streaming Level" (获得动态载入关卡)来指向一个特定关卡,所以这将仅对子关卡有效。

新增内容: 优化的数学表达式

我们优化了Math Expression(数学表达式)节点,以便它比常规节点性能更好。现在,同使用一系列的 操作符/函数 节点表示的同样表达式相比,使用Math Expression(数学表达式)节点的速度大约快2倍。

image alt text

新增内容: 蓝图资源ID

有两种新的数据类型暴露给了蓝图: “Asset ID(资源ID)” 和“Class Asset ID(类资源ID)”。Asset ID代表一个已加载的或未加载的资源,可以使用“Resolve Asset(解析资源)”节点将其解析为一个对象。 如果该资源没有加载,那么“Resolve Asset(解析资源)”节点将返回一个无效的对象。 您可以使用“Load Asset(加载资源)”节点加载该资源。 类似地,“Class Asset ID”将解析为一个类,并可以使用“Load Asset Class(加载资源类)”节点进行加载。

image alt text

新增内容: 蒙太奇元素定时界面

我们向蒙太奇编辑器添加另一个新的界面,以便当动画在运行时帮助您控制激活蒙太奇事件的顺序。

image alt text

新增内容: 非线性动画混合

现在,我们支持动画姿势及变换之间的很多不同混合函数!

image alt text

以前,仅支持线性或三次方混合。 现在您可以从很多不同的混合函数中进行选择:线性、立方体、埃尔米特立方体、正弦曲线、二次方程、圆形、指数和自定义函数。对大多数类型来说,您可以分别控制是否使用曲线的“入”和“出”。

“Custom(自定义)” 选项要求有一个“Curve Float(浮点型曲线)”资源。 当创建一个资源后,您可以在详细信息面板中将它分配给相关节点:

image alt text

image alt text

这将允许您指出您想执行的任何混合。将会正规化并缩放曲线长度,使其满足指定的混合时间,任何超出范围0-1的值都会进行区间限定以适应(这个限制后续可能会提升,请留意) 如果没有指定自定义曲线,那么系统将回退到线性混合。

image alt text

新增内容: 骨骼驱动的动画控制器

骨骼驱动器允许您根据Driver(驱动)骨骼的组件的运动调整Driven(被驱动)骨骼的一个或多个组件。这对于附加了附件的角色很有用!您可以防止在动画中的几何体交叉问题,即使在进行了很多混合时也是如此。

image alt text

在这个示例中,手榴弹骨骼没有创作的动画,正在作为thigh_r骨骼的函数在两个坐标轴上驱动。任何动画混合最终都可以很好地运作,而不需要手动调整,因为它们是实时计算的。

您也可以使用一个乘法器直接取入驱动器值,将其重新映射到一个范围,或者使用一个曲线资源来驱动运动。使用曲线通常是最好的方法,因为它允许您自然地低定义响应,交互式地调整点/切线,从而实时看到改变。

以下是骨骼驱动的动画控制器的新设置:

image alt text

新增内容: 动画变换规则

这个版本包含了对动画混合树的改进,尤其是对变换规则的原理进行了改进。

更好地处理动画资源覆盖

现在,变换规则中类似Time Remaining(剩余时间)这样的节点将正确地对由于Child Animation Blueprints(子动画蓝图)中的覆盖动画而导致的动画长度改变做出响应。 这意味着每个子动画蓝图中变换规则所引用的动画不必再是同样长度。

引用最相关的动画层

为了使得状态机更加容易维护,现在您可以使用一个新的getter类,它将从源状态中选择权重最高的动画,而不是指向一个未来可能改变的特定动画。 现在以下节点可用:

image alt text

自定义混合图表改进

现在,在Custom Blend(自定义混合)图表中暴露了一些额外信息,以使得它们不仅仅用于一次性的自定义变换动画。 以下节点提供了关于相应变换节点及 源/目标状态的信息,现在可以在自定义混合图表中使用:

image alt text

您也可以使用引用资源层的getter方法,就像在变换规则中一样。

新增内容: 动画曲线计算修改

Animation Curve Evaluation(动画曲线计算)以前发生在动画的更新阶段,而现在移动到了计算阶段。这将带来以下一些好处。

  • 曲线的权重通过混合权重进行了适当的计算。

    • Cache Nodes(缓存节点)

    • Additive Nodes(叠加节点): Additive (叠加)节点将像动画骨骼变换所做的那样将基础姿势的叠加型曲线数据的间隔叠加到当前姿势上。

    • Layered Node(分层节点): 使得它正常工作略微有点复杂,因为您不知道哪条曲线正在影响哪部分关节。现在,它确实提供了如何混合曲线的选项。

      • Max Weight(最大权重) : 它从混合姿势中选择曲线的最大权重

      • Normalize by Weight(按权重正规化) : 它将所有曲线的所有混合姿势的权重加在一起,并正规化为1

      • Blend by Weight(按权重混合): 它仅是求和 (权重 * 曲线值)

image alt text

  • 如果您正在使用并行计算,那么曲线计算已经移动为多线程。

  • 最终,这允许我们创建一个可以从骨骼变换驱动曲线的节点,反之亦然。

  • 但是,如果您有需要一条没有计算的曲线(如果您正在更新但是不计算),那么您将不会获得最新数据。曲线数据现在当作骨骼变换对待,而不是像以前那样当做通知对待。

新增内容: 支持动画资源元数据

现在,我们支持可以添加到动画资源中的元数据。元数据是从UAnimMetaData衍生而来的可以应用于蓝图的类,然后您可以将这些元数据添加到动画资源中(动画序列、动画蒙太奇、动画合成及混合空间)。

image alt text

您可以通过调用GetMetaData(),或者通过使用动画剪辑的GetSectionMetaData()来对C++中的动画资源的数据进行查询。

新增内容: 音频质量等级

我们添加了一项新功能,可以让音频设计师能够管理音频的内存使用和(某种程度的)性能表现,以用于低端机器/设备。

您可以在项目设置的音频部分中找到可用的音频质量等级。每种质量等级在目前可以指定由音频设备(一些平台,主要是安卓平台,仍会把该值限制为较低的值)所创建的最大数量的音频通道。

image alt text

在音频中,您可以放置一个质量等级的声音节点,它会对项目设置中定义的每个质量等级提供输入引脚,并且仅执行连接到活动质量等级的分支。这可以用于降低载入的变化的数量,或用于指定降低保真度的wave文件。

image alt text

当您在游玩独立的游戏时,您可以通过游戏的用户设置来指定质量等级,而且仅该质量等级所需的声音波形文件会被载入到内存中。默认值可以通过GameUserSettings.ini文件来基于每局游戏或平台进行设置,并且游戏可以通过其设置UI来设置其值。当前,游戏需要进行重启才能让质量变更生效。

如需在编辑器中播放,您可以指定通过关卡编辑器播放设置所使用的质量等级。变更这个值将会在播放对话激活时运行,并且新的音效会使用当前的质量等级。

新增内容: 自定义衰减曲线

现在,您可以为衰减音效定义您自己的自定义曲线,而不是简单地限制于在算法中构建。

在衰减设置中,设置Distance Algorithm(距离算法)为 ATTENUATION_Custom,您将看到自定义曲线部分出现。 然后,您可以从内容浏览器中指定一个外部曲线资源或直接在详细信息面板中自己直接定义一条自定义曲线。

image alt text

新增内容: 更新间隔

现在,您可以指定一个执行更新函数的时间间隔,从而允许您减少每帧执行更新函数带来的性能消耗,而不需要使用过多复杂的计时器。

这个功能通过Actor和组件默认属性暴露给最终用户,对于程序员,该项可以在C++中进行设置,和其他的更新函数属性类似。

image alt text

需要注意的几个实现细节:

  • 所有Tick(更新)函数执行它们注册的第一帧,然后在下次更新之前此点处等待一段更新时间间隔。

  • 修改一个已经正在更新的更新函数的时间间隔,直到下一个预计更新发生之前时间间隔将不会改变。如果您想让修改立即生效,那么您应该禁用该更新,修改此间隔,然后重新启用更新。

  • 当Tick函数规划下一次更新时,它将通过为任何超时运行提供一个信用,尽可能地接近指定时间间隔进行更新。 比如,如果一个函数指定为每秒发生一次,此刻更新函数执行自上次一次更新已经有1.1秒,那么等到另外0.9秒过去时再规划发生另一次更新。 然而,在一帧中一个更新函数不会执行一次以上,即便在该帧中出现了多个时间间隔。

  • 不管更新时间间隔如何,更新函数的DeltaTime将仍然同样有效。 它不是自上一次该函数更新的时间,但它永远是正在处理的帧的delta时间。

  • Actor的Custom Time Dilation (自定义时间扩张)不会应用到 Tick Interval(更新时间间隔)上。 无论单独的Actor是否有其自己的 Tick Interval,该更新发送的频率将仍然保持不变,那个Time Dilation仅应用于传入到更新函数的DeltaTime。

新增内容: Actor侵犯检测

侵犯检测也变得更为强大并且可以在更多情况下运行。我们添加了一些新的自定义选项以供检测运行。

image alt text

当生成actor时,"bNoCollisionFail"(在蓝图中"即便碰撞也生成")选项已经被重构并扩展为支持4个选项,以表示如何处理产生点处的碰撞:

  • 无论如何都在那里生成。

  • 如果可能则在适当位置处生成,否则就无论如何都在那里生成。

  • 仅当在附近找到适当位置时生成,其他情况都不生成。

  • 不生成它。

退出蓝图将自动更新来选择正确的对应选择。一些代码已经废弃,且将需要手动更新。

Actor类有一个新的暴露给蓝图的成员SpawnCollisionHandlingMethod,它控制默认如何处理生成碰撞。该项可以通过SpawnActor节点或函数调用上的设置进行覆盖。

侵犯检测功能也变得更强大,可以在更多情形中工作。对于具有MovementComponent(运动组件)的actor,则假设更新的组件为主要的碰撞形状,且是用于进行侵犯测试的唯一组件。对于其他actor,所有具有适当碰撞测试的组件都会被检测。请注意,这可能会导致某些actor在更新后无法生成的情况 -- 如果发生这种情况,请仔细检查您的碰撞设置、处理方法及生成变换。

新增内容: 后期处理混合

后期处理"Blendables"(可混合对象)被用于在不同的状态间转换后期处理特效。我们对这个系统进行了一些改进。

您现在可以对每个可混合对象设置混合权重值。这个混合权重可以在蓝图或C++代码运行时进行修改,这样您就可以使用后期处理转换进行一些有趣的操作了。

您现在还可以在后期处理体积内立即指定后期处理设置“inline”,或者您也可以选择创建可在多个物体间共享的单独可混合资源!

image alt text

image alt text

同时,我们还让您可以更方便地定义自定义可混合设置。您不再需要修改引擎的内置PostProcessSettings结构,而只需使用设置来定义新的结构,诸如上方的Light Propagation Volume Blendable(光照传递体积可混合)设置。

最后,以下是一个关于如何使用蓝图来在运行时对可混合对象编辑其混合权重值的示例:

image alt text

新增内容: 动态资源缓存

一些游戏需要对资源的本地拷贝的存储进行支持,这个功能可能没有与游戏一起发布。举例来说,如果您具有许多程序化创建的资源,或来自于服务器的资源(比如广告图形)。新的动态资源缓存是一个通用的资源缓存系统,可以用来在可配置的资源块中持续地存储生成的数据。

image alt text

它有以下特性:

  • 多个存储器,单独地存储用户准备的资源类型,比如CharacterImage(角色图片)缓存和 AdvertisementImage(广告图片)缓存。

  • 每个存储器独立的配置大小。

  • 资源版本化,使得当资源在资源变为废弃时重新构建缓存项。

  • 同步及异步缓存查询。

  • 当缓存增长到大于指定大小时,旧的缓存项将会从中删除。

新增内容: 体积贴花(试验性功能!)

三维函数场渲染是描述几何体的另一种方法,它能够更好地解决一些很难的渲染问题(阴影、布尔操作、平滑处理、环境遮挡、光线跟踪、变形)。我们在引擎中的各种地方已经使用了2d及3d距离函数(字体、光照贴图、距离场阴影/环境遮挡)。全新的Volume Decals(体积贴花)允许将一个距离函数(由材质函数定义)作为不透明对象渲染到GBuffer中。输出到GBuffer中意味着我们会获得延迟渲染的所有光照功能(环境遮挡、屏幕空间发射、光照、景深、阴影接收)。下图中的碗显示了一个体积贴花。

image alt text

创建对象(请参照下图,按从左到右的顺序)

  • 使用到贴花中心的距离和贴图投射定义一个球体

  • 在另一个球体中定义一个球体,取二者中最大的(布尔求交)

  • 移动球体来调整形状

  • 添加另一个球体,并修改材质(布尔减)

  • 再次调整形状

image alt text

这展示了如何定义球体的距离函数:

image alt text

该功能尚未完成(缺失阴影投射和间接光照,性能、质量、法线贴图支持),它在GPU上性能消耗总是较大(每个像素的距离函数可能要计算上百次)。我们将进一步改进它(材质函数、阴影投射、文档...),但是可能永远也不会达到实时使用所需要的速度。

新增内容: 虚幻引擎4文档标签,版本及技能级别

  • 现在,文档页面包含了技能级别、引擎版本、类别标签,这些信息显示在页面的顶部及底部,使您可以找到匹配标签的其他页面。

    image alt text

  • 添加了通过技能级别 和/或 引擎版本过滤网站地图的功能。现在网站地图可以展开为树状结构。当过滤时,树状结构将会展开以显示匹配项,不匹配项将呈现为灰掉状态。

    image alt text

  • 同时,现在页面上的技能级别、引擎版本及标签会链接到网站地图,并且可以自动过滤它。 点击一个标签将会过滤网站地图仅显示具有那个标签的页面。

    image alt text

  • 到教程的链接(指南、快速指南的等)显示了那个指南的技能级别和引擎版本:

    image alt text

新建和更新的虚幻引擎4文档

新增内容: 异步实时音频解压缩

支持实时的基于ogg-vorbis的音频解压缩的平台(PC、 Xbox One、 Mac、 Android)现在会在可能的情况下执行异步解压缩以防止影响主游戏线程的运行。

新增内容: 功能包和模板的共享资源

现在支持在模板和功能包中的共享资源。这是通过让模板和功能包指定其它包含的功能包来完成的。这表示,现在对所有模板都可用的资源仅存在一次。这还意味着,我们不再需要对在蓝图和模板的C++版本间共享的资源进行复制。

支持多个目标平台,这样不同的资源可以共存于移动平台和桌面平台的一个模板或功能包中。举例来说,这样当您需要一个平台上的更低细节的模型而非另一个资源时,这就很好用了。

新增内容: 改进