该文章出自https://www.youtube.com/watch?v=_BIZ3FOcLNs,由Chris Murphy演讲。为了分类,笔者稍微调整了一下顺序。
首先我们要介绍的第一个奇妙工具是环境光照混合器(Env. Light Mixer),我们可以在窗口选项卡中找到它。
这个工具可以帮助我们在新建关卡时快速的创建一个关卡中所需的基本光照对象,比如Sky Atmosphere、Directional Light等。特别是我们需要新建一个测试用的关卡时,这个工具会非常方便,它能让我们在7秒内设置好所有所需的光照。
这个工具还能读取当前关卡中所有的光照对象,并且像列表一样将光照对象以及它的参数列出来方便调整。
方块格子(Cube Grid)是一个隐藏在建模模式(Modeling Mode)里的功能,它能用一个个Cube单位帮助我们快速搭建关卡的灰盒场景,具体可以在这里找到。
我们可以按住Ctrl拉方块、拉斜坡什么的。这个工具其实还有几个快捷键,在编辑器搜索Cube Grid就可以找到,记住这些快捷键可以更有效率地搭建灰盒场景。
我们可以为已有的Actor添加样条线,或者为已有的样条线组件画线,比如水插件中的河流等。有了这个工具之后就不用在样条线组件中一个一个点样条点调整了,虽然说还是需要花点时间画线。
地形侵蚀(Landmass Erosion)工具可以在EngineData/Plugins/Landmass/Landscape/BlueprintBrushes/Brushes找到,这个工具可以模拟水侵蚀,为地形画上需要的纹理。
运行时虚拟纹理(Runtime Virtual Texture)应该在地编中比较常见,它常用于将景观模型与地形混合,达到一个平滑过渡的效果。这个纹理的作用是让网格体知道自己底下的地形纹理是什么样的,然后让自己也变成那样的纹理,达到混合效果。除了颜色的混合之外,我们还可以混合法线,让模型与地形之间的接缝光照更加自然。
正常情况下,我们会直接使用地形UV制作材质,但是我们可以加一个Texture Variation Node来让地形纹理看起来更乱而不是像普通UV平铺一样。这个节点是基于UV修改的,所以实际上用起来不会消耗太多性能。
我们可以使用地形物理材质节点给地形设置相对应的物理材质,这样我们只需要在地形上绘制相对应的材质,就能得到其对应的物理材质,用在Gameplay逻辑中。
使用官方水插件的小伙伴可以在项目设置中调整水插件Actor的一些默认参数。
我们其实可以调节单层水面的VSM过滤设置,通过r.Water.SingleLayer.ShadersSupportVSMFiltering=1和r.Water.SingleLayer.VSMFiltering=1即可打开这个功能,并且让水面上的虚拟阴影更加平滑自然。
这个功能其实早在UE3便有了,只是在UE4中被移除了,但是在UE5.4中,它又被重新加回来了。我们可以在光照模式中找到。
这个可以在这里找到。
我们经常会遇到,在超级亮的户外望向房子内的环境时,只能看到一片黑,而局部曝光将可以很好地解决这个问题。它能够将高通与低通的曝光混合在一起,得到一个像这样的Mask并自动应用,使得暗处细节也能够清晰可见。这些设置可以在后期处理体积中的局部曝光(Local Exposure)选项卡中找到。
相信很多人都用过世界分区了,而这个位置体积(Location Volume)是用来让我们的团队更好地进行开放世界合作构建的。我们只需要把这个Actor放在世界中,重命名然后调整范围,就可以在大世界地图中决定是否加载它。这个可以很方便且直观地在开放世界中定义地点,方便团队中的其他成员知道这块叫什么,是谁负责的等等。
1.14 大头针(Pin)
在内容浏览器里,我们其实可以用正则搜索资产,而且还可以根据资产的元数据进行筛选。比如下图的过滤器将筛选出没有启用Nanite并且三角面大于5000的静态网格体资产。如果我们不确定能有哪些元数据供我们使用,可以将鼠标指针悬停在资产上,看看哪些元数据是可以用的。
这个内置的版本控制更改列表可以让我们在进行团队开发时,只Commit我们想要的东西,并让其他修改的东西不参与版本控制。
除了对比蓝图以外,我们还可以对比其他资产。
我们在对比蓝图版本的时候,可以逐一检查差异的地方。除此之外,这个工具还可以锁定镜头(下图中的锁按钮),让我们在检查蓝图的时候同步移动两个视口的镜头位置。
我们可以读取某一次更改列表,并且读取蓝图与上一个版本的差异。
我们可以在虚幻引擎中启用Data Validation插件,新建一个EditorValidatorBase类就可以在上面写我们要检查的规则了。注意!如果新建的是蓝图类,需要重启编辑器后,这个规则才会生效。这个工具可以将不合规的原因显示在消息日志窗口中,可以帮助我们提醒团队中的成员该如何正确编辑资产,哪些不应该提交等等。
三、Nanite
3.1 Nanite表面细分
Nanite的表面细分在引擎中默认是关闭的,我们可以通过两条CVar指令帮助我们开启这个功能(在DefaultEngine.ini中,在[/Script/Engine.RendererSettings]后添加r.Nanite.AllowTessellation=1和r.Nanite.Tessellation=1这两串命令即可)
我们可以为地形启用Nanite,虽然说地形三角面是自动生成的,质量上相较于之前的没什么太多变化,但是在性能上有所优化,因为Nanite可以帮助我们优化远处的三角面并且还可以剔除掉不可见的三角面,让渲染更有效率。
Nanite地形也可以启用表面细分,这就意味着我们可以在地形上绘制出超级丰富的细节,比如一些裂缝和坑坑洼洼的小洞等。
我们可以利用Nanite样条线网格体去弯曲某一些模型,但是在一些面数较低的模型上使用样条线网格体的话,在拉伸的时候有时会看起来很奇怪。所以我们在静态网格体描述中引入了一个参数叫Max Edge Length Factor,通过调整这个参数避免奇怪的拉伸出现。
如果我们的树叶使用了Nanite,可以打开这个Preserve Area参数,保证树叶在一个较远的距离观察时不会消失。
3.6 Nanite世界位置偏移控制(World Position Offset Control)
这个可以让我们知道哪些Nanite的设置太消耗性能了,用于提醒我们检查这些资产的Nanite相关设置。
这个视图可以让你像铁血战士一样,看到这些物体在Nanite中重叠绘制的热力图,如果某些区域过红了,就需要检查这里的物体重叠问题了。
还有另一个相似的视图是VSM Nanite Overdraw视图。如果我们的虚拟阴影纹理相关的时间过长,可以在这个视图中可以看到虚拟阴影纹理的过度绘制程度,尝试找出问题所在。
我们可以给材质设置不同的逻辑,比如当网格体启用了Nanite时,我们运行这些逻辑运算,当网格体没启用Nanite时,我们运行普通情况下的逻辑。我们还可以在材质中找到“不允许Nanite(Disallow Nanite)”选框,勾选这个之后,材质应用上的网格体将不会启用Nanite。
我们可以将关卡内的一部分Actor转换成关卡实例,这样我们就可以在关卡中复用这些Actor了。除了可以优化Nanite的性能之外,现在我们可以不再需要在蓝图里搞网格体簇了。并且我们还可以在编辑器内直接访问这些关卡实例,实时修改,其他复用的实例也会对应地做出更改。
在关卡编辑时,我们会有一些数据层,数据层通常是用来管理Actor是否出现的。当这个关卡变成实例后,我们可以在这个关卡实例Actor中调整显示的Actor,就是下图红框中显示的。这个功能的好处就是,我们不再需要在蓝图中做这些事情了,现在可以在关卡内有很多种变体的关卡实例,使得关卡更易管理、更多样。
我们可以将关卡实例中的Actor分离开,方便使用。
4.4 关卡实例展示关卡
我们可以将Level Instance转换成PCG Data Asset,帮助我们在PCG中复用这些关卡实例。比如我们可以调整其中的一些参数,让关卡实例内的某些Actor随机出现,或者树木直立放置,或者某些Actor随机旋转等等。
5.2 PCG地形层数据采样(Sample Landscape Layer Data in PCG)
利用子PCG图表,我们可以实现根据表面的情况放置对应大小的网格体。比如下图,我们可以先尝试放置大的物体;如果表面太陡峭,就放弃大物体,转而放置小一级的物体;如果更陡峭,就再放更小的物体,以此类推。
我们可以在PCG图表中读取场景中水插件的样条线数据。
我们可以根据不同的流送距离在Runtime时动态放置网格体。比如下图这个例子,树将会在大的Grid中放置,石头将会在小的Grid中放置。并且还会根据各自的流送距离决定流入流出。在之后的引擎更新中,PCG将会支持静态与运行时相结合的网格体放置模式。
我们可以使用这个插件为制作的各种PCG生态做衰减或者混合,让整体的地图更加自然。如果您有在开发类似于这样的系统,也可以尝试一下这个插件,因为它实际上就是各种PCG分层叠加在一起,也是很容易读懂的。如果决定还是使用自己开发的系统,不妨从这个插件中获取一些想法与概念,加入到自己的系统中。
我们可以为自己的项目自定义交换框架,这个小工具可以帮助我们自定义导入所需的预设设置,并且还可以自定义导入行为。比如我们在武器文件夹中导入资产时,会弹出小窗口,询问我们这个武器对应的动画蓝图是什么之类的。
这个工具可以帮助我们自己编写程序化网格体逻辑,比如自适应的藤蔓、自动布尔运算的物体等。
6.3 可编写工具模式(Scriptable Tools Modes)
我们可以使用这个插件,自己制作一个工具箱。在这个工具箱中加入各种预先设定好脚本的按钮,这些工具会位于视图窗口的左侧。
6.5 数据流(Data Flow)
这个插件创建出来的MIDI序列可以用在MetaSound中,在使用相同的MIDI序列的情况下,切换不同的乐器,发挥音乐的无限可能。
我们可以使用Soundscape插件,在场景中的某些区域随机位置生成音效。
这个功能可以帮助我们通过某些骨骼的情况决定动画放在混合空间中的特定坐标值上。有时候我们会以为一个动画的脚速度是200,就会手动设定到200,但是现在这个功能将会自动识别动画实际脚的速度,然后放置在对应的坐标值上。
8.2 物理控制组件(Physics Control Component)
我们可以通过数据通道向Niagara传入命中数据,在命中位置发射粒子,而不需要在命中时再生成一次Niagara系统。
Niagara以粒子效果而闻名,但是它也可以用来处理Render Target。在制作风场、草地互动以及水交互中都可以使用Niagara处理Render Target来实现。
Niagara粒子系统可以运行并记录缓存,这样的话在下一次播放时,就能流畅地播放同样的高质量粒子效果。
我们在制作材质时常常与选色器打交道,而选色器其实可以保存主题色。这个主题色的配置可以提交给团队使用,这样在团队协作时就不会设置错颜色了。
我们可以制作覆层材质应用在角色上,以达到某种视觉效果。
使用这个插件,我们可以迭代后期处理材质。比如我们用后期处理材质制作了描边效果,之后我们读取上一个后期处理输出(描边效果),在后期处理材质中进行计算,将描边模糊处理,再进行最终输出。
这个在5.4中新加入的功能可以让我们对UMG加入一些类似于后期处理效果的影响,比如波浪效果或者录像带效果。
Texture Graph还处于早期阶段,但是我们还是可以利用这个工具去制作类似于Substance Designer那样的程序化纹理。
这个工具可以在窗口(Windows)下找到,可以帮助我们快速调整控制台参数,并且能看到这个参数最后被谁修改了。
11.2 ABTest
11.3 控制台指令描述
我们可以创建自己的作弊管理器类,去注册一些控制台指令,实现一些测试用的作弊事件,帮助我们更方便地测试游戏。
如果我们打算把蓝图转换为C++,这个工具可以帮助我们快速地创建C++头文件所需的代码。
对于正在使用Gameplay Ability System的开发者来说,这个一定不陌生,但是如果您之前并没有接触过游戏标签,那一定得试一试。我们可以对某个Actor所持有的Gameplay Tags做查询,如果符合自定义的查询逻辑,就执行某些事件。
我们可以用-leet模式启动虚幻引擎,引擎就会以一种叫做Leet的语言显示字符。奇怪的知识增加了!
近期焦点
扫描下方二维码,关注后点击菜单栏按钮“更多内容”并选择“联系我们”获得更多虚幻引擎的授权合作方式和技术支持。
长按屏幕选择“识别二维码”关注虚幻引擎
“虚幻引擎”微信公众账号是Epic Games旗下Unreal Engine的中文官方微信频道,在这里我们与大家一起分享关于虚幻引擎的开发经验与最新活动。