使用蓝图和渲染目标创建高度场绘制器

使用蓝图和渲染目标创建实时高度场绘制器的教程。

Choose your operating system:

Windows

macOS

Linux

HFP_Header_Image.png

提高和降低各种表面的能力可以实现各种有趣和独特的游戏元素。在接下来的教程中,我们将介绍如何使用蓝图和渲染目标来创建一个高度场绘制器,当玩家向一个对象射击时,该高度场绘制器会抬高对象的表面。为了实现这一点,我们将首先创建和设置一个新的游戏模式和HUD蓝图,这将允许用户与高度场绘制器互动。然后我们将创建和设置所需的渲染目标和材质。最后,我们将创建一个蓝图,将所有单独的部分连接在一起,由此生成一个可以提高对象表面的蓝图,它被应用到虚幻引擎4(UE4)内部。

1 - 项目设置

在开始之前,我们需要创建一些资源作为项目设置的一部分。

在开始为高度场绘制器创建和设置必要的Actor之前,我们首先需要创建和设置一个 游戏模式覆盖(Gamemode Override) 。在下面部分,我们将介绍如何在您的项目中实现这一点。

如果您使用的是 内容示例(Content Examples) 贴图,那么您可以跳过这一步,使用 我的游戏(MyGame) 游戏模式。该游戏模式位于 内容(Content) > 蓝图(Blueprints) > 我的游戏(MyGame) 下。

HFP_PS_00.png

创建新的游戏模式和HUD

为了看到十字准星,让用户知道他们在朝哪里射击,我们需要创建和设置新的游戏模式和HUD蓝图。在下面部分,我们将介绍如何完成所有这些设置,以便能使用高度场绘制器。

  1. 内容浏览器(Content Browser) 中右键单击,并在菜单中的 创建基础资源(Create Basic Asset) 部分中,单击 蓝图类(Blueprint Class) 选项。

    HFP_BP_Setup_00.png

  2. 选取父类(Pick Parent Class) 窗口中,单击 游戏模式(Game Mode) 选项,将新的游戏模式命名为`HighFieldPainterGameMode`。

    HFP_PS_01.png

  3. 再次在内容浏览器(Content Browser)中右键单击,弹出创建基础资源(Create Basic Asset)菜单,然后单击 蓝图类(Blueprint Class) 选项。

    HFP_BP_Setup_09.png

  4. 显示选取父类(Pick Parent Class)窗口时,展开 所有类(All Classes) 选项,并将 HUD 输入到搜索框中。查找 HUD 选项,找到后单击它,然后按 选择(Select) 按钮以创建它。

    HFP_PS_02.png

  5. 将新创建的HUD蓝图命名为`HeightFieldPainterHUD`,然后双击 **HeightFieldPainterGameMode** 蓝图打开它。

    HFP_PS_04.png

  6. 在 HeightFieldPainterGameMode 的 细节(Details) 面板的 类(Classes) 部分下,将 HUD类(HUD Class) 设置为刚创建的`HeightFieldPainterHUD`蓝图。

    HFP_PS_03.png

  7. 现在, 编译(Compile) 保存(Save) HeightFieldPainterGameMode蓝图,然后在内容浏览器中双击HeightFieldPainterHUD蓝图以打开它。

    HFP_PS_05.png

  8. 在HeightFieldPainterHUD蓝图内,转到 事件图表(Event Graph) 并将以下蓝图代码复制粘贴到图表中。

    Copy Node Graph

    HFP_PS_06.png

    别忘了编译(Compile)并保存(Save)您的蓝图,以便使用它。

    该蓝图代码告诉HUD绘制指定的材质,使该材质在游戏运行时会在玩家的屏幕上居中。要查看所有设置是否正确,按下 运行(Play) 按钮运行游戏,您现在应该在屏幕的中央看到一个十字准星(如下图所示)。

    HFP_PS_07.png

如果您没有在屏幕上看到十字准星,请检查确保 Draw Material 节点上的 材质(Material) 输入中已经输入了一些内容:

HFP_PS_08.png

现在已经创建了关卡和HUD,在下一部分中,我们将看看需要创建哪些资源以及如何设置它们。

2 - 必要的资源创建和设置

在创建高度场绘制器蓝图之前,我们需要在UE4内容浏览器中创建和设置以下资源类型。在下面部分,我们将介绍如何设置每个资源以及需要注意的任何特殊属性。

请注意以下内容并不特定于任何UE4项目类型。以下内容可以在任何使用UE4 4.13或更高版本的项目中完成。

  • 渲染目标(Render Target)

  • 材质(Material)

  • 蓝图(Blueprint) (基于Actor)

渲染目标创建和设置

  1. 内容浏览器(Content Browser) 中右键单击,并从显示的菜单中转到 创建高级资源(Create Advanced Asset) > 材质和纹理(Materials & Textures) ,然后选择 渲染目标(Render Target) 选项。

    HFP_RT_Creation_00.png

  2. 将新创建的渲染目标命名为`RT_Height_Filed_Painter`,然后按 **保存所有内容(Save All)** 按钮保存您的工作。

    HFP_RT_Creation_01.png

材质创建和设置

  1. 在内容浏览器(Content Browser)中右键单击,并从 创建基础资源(Create Basic Asset) 列表中选择 材质(Material) 选项以创建一个新材质,并将其命名为`MAT_HeighfieldPainter`。

    HFP_Material_Creation_00.png

  2. 在内容浏览器(Content Browser)中选择该 MAT_HeightfieldPainter 材质,然后右键单击它。从显示的菜单中,在 常见(Common) 部分下,选择 复制(Duplicate) 选项以创建该材质的副本,将其命名为`MAT_ForceSplat`。

    HFP_Material_Creation_01.png

  3. 右键单击MAT_HeighfieldPainter材质打开它,然后选择 主材质节点)Main Material Node) 。在 细节(Details) 面板中的 材质(Material) 部分下,设置以下参数。

    • 着色模型(Shading Model): 无光照(Unlit)

    HFP_Material_Creation_04.png

  4. MAT_HeighfieldPainter材质将使用 世界场景位置偏移(World Position Offset) 输入以增加其应用到的静态网格体顶点的Z高度。您可以将鼠标悬停在下面的图像上,然后单击 复制表达式图表(Copy Expression Graph) 选项,将提供的材质代码复制粘贴到`MAT_HeighfieldPainter`中,从而将该材质设置复制到您的材质中。

    Copy Expression Graph

    HFP_Material_Creation_05.png

    别忘了应用(Apply)并保存(Save)您的材质,以便使用它。

  5. 打开MAT_ForceSplat材质,然后选择 主材质节点(Main Material Node) 。在 细节(Details) 面板中的 材质(Material) 部分下,设置以下参数。

    • 混合模式(Blend Mode): Additive

    • 着色模型(Shading Model): 无光照(Unlit)

    • 允许Negative Emissive Color(Allow Negative Emissive Color): 勾选(Checked)

    HFP_Material_Creation_02.png

  6. 由于MAT_ForceSplat材质将作为我们的绘制笔刷来提高我们的高度场的表面,需要几个选项来允许您控制它的大小和强度。您可以将鼠标悬停在下面的图像上,然后单击 复制表达式图表(Copy Expression Graph) 选项,将提供的材质代码复制粘贴到MAT_ForceSplat中,从而将完成的材质复制到您的材质中。

    Copy Expression Graph

    HFP_Material_Creation_03.png

    完成后别忘了应用(Apply)并保存(Save)您的材质,以便使用它。

现在已经设置了所需的资源,在下一部分中,我们将了解如何创建一个蓝图,该蓝图将把所有资源链接在一起,以创建高度贴图绘制器。

3 - 蓝图设置

设置渲染目标和所需材质并准备就绪后,现在是时候使用蓝图把所有的东西整合起来了。在下面部分,我们将介绍如何设置高度场绘制器蓝图的所有不同部分。

蓝图创建和变量设置

  1. 在内容浏览器(Content Browser)中右键单击,并在菜单中的 创建基础资源(Create Basic Asset) 部分中,单击 蓝图类(Blueprint Class) 选项。

    HFP_BP_Setup_00.png

  2. 选取父类(Pick Parent Class) 窗口中,选择 Actor 并将其命名为`HeightFieldPainter`。

    HFP_BP_Setup_01.png

  3. 右键单击HeightFieldPainter蓝图打开它,然后单击 事件图表(Event Graph) 选项卡。打开事件图表(Event Graph)后,添加以下变量。

    HFP_BP_Setup_02.png

    变量名称

    变量类型

    默认值

    HeightfieldRT

    纹理渲染目标2D

    N/A

    PainterMaterialInstance

    动态材质实例

    N/A

    MouseDown

    布尔

    N/A

    ForceSplatMID

    动态材质实例

    N/A

    InteractionDistance

    浮点

    1000.0

    BrushSize

    浮点

    0.04

    BrushStrength

    浮点

    1.0

组件设置

组件(Components) 选项卡中,按 添加组件(Add Component) 按钮并将一个 静态网格体(Static Mesh) 组件添加到蓝图。添加静态网格组件(Static Mesh Component)之后,选择该静态网格组件(Static Mesh Component)并设置以下选项。

HFP_BP_Setup_06.png

部分

属性

所需资源

变换

移动性(Mobility)

N/A

Movable(可移动)

静态网格体

静态网格体(Static Mesh)

SM_Plane1000_512

N/A

材质

材质(Material)

HeightfieldPainterMaterial

N/A

碰撞

生成重叠事件(Generate Overlap Events)

N/A

勾选(Checked)

碰撞

碰撞预设(Collision Presets)

N/A

OverlapOnlyPawn

构造脚本设置

除了创建和分配所需的动态材质实例外,构造脚本还用于创建和分配2D渲染目标。如果还没有那样做,单击 构造脚本(Construction Script) 选项卡,然后将以下代码复制到蓝图构造脚本中。

Copy Node Graph

HFP_BP_Setup_03.png

Trace from Camera函数设置

实施此函数有两种方法。第一种方法需要一些数学知识,主要适用于平面或其他平整表面。第二种方法使用 Find Collisoin UV 节点,它需要使用更多内存,但是可以跨任何 静态网格组件(Static Mesh Component) 工作,无论其形状如何(UV接缝仍然会导致瑕疵)。您可以在下面选择实现方法。

选择实现方法

Method 1

Method 2

Trace from Camera函数将被用来确定静态网格体上应增加高度的位置。它通过将玩家摄像机中心的光线投射到世界场景中来确定这个位置。当这条射线与一个静态网格体相交时,相交位置就是要凸起的位置。要设置`Trace from Camera`函数,需要执行以下参数。

  1. 单击 函数(Functions) 选项卡上的小(白色)加号,创建一个新函数,并将其命名为 TraceFromCamera

    HFP_BP_Setup_04.png

  2. 打开TraceFromCamera函数,将鼠标悬停在下面的图像上,然后单击 复制表达式图表(Copy Expression Graph) 选项,选择代码,复制它,然后将其粘贴到TraceFromCamera函数中,从而将以下蓝图代码复制到您的蓝图中。

    Copy Node Graph

    HFP_BP_Setup_05.png

    别忘了编译(Compile)并保存(Save)您的蓝图,以便使用它。

事件图表设置

既然已经创建并设置了所有需要的部分,现在就可以将事件图表中的所有不同部分连接起来了。您可以将鼠标悬停在下面的图像上,然后单击 复制节点图表(Copy Node Graph) 选项,将提供的蓝图节点代码复制粘贴到您的高度场绘制器蓝图中,从而将完成的蓝图代码复制到您的蓝图中。

Copy Node Graph

HFP_BP_Setup_07.png

复制粘贴蓝图代码时,不会将 Event Begin Play 节点添加到图表中。确保添加Event Begin Play节点,并将其连接到 启用输入(Enable Input) 输入。

HFP_BP_Setup_08.png

现在所需的蓝图已经设置好了,在下一部分中,我们将讨论如何在UE4中使用高度贴图绘制器。

要使用此方法,您必须在编辑器中启用 支持来自命中结果的UV(Support UV from Hit Result) 功能。有关如何做到这一点的信息,请参阅 从追踪获取UV坐标

  1. 单击 函数(Functions) 选项卡上的小(白色)加号,创建一个新函数,并将其命名为 TraceFromCamera

    HFP_BP_Setup_04.png

  2. 打开TraceFromCamera函数,将鼠标悬停在下面的图像上,然后单击 复制表达式图表(Copy Expression Graph) 选项,选择代码,复制它,然后将其粘贴到TraceFromCamera函数中,从而将以下蓝图代码复制到您的蓝图中。

    Copy Node Graph

    HFP_BP_Setup_01.png

    别忘了编译(Compile)并保存(Save)您的蓝图,以便使用它。

事件图表设置

既然已经创建并设置了所有需要的部分,现在就可以将事件图表中的所有不同部分连接起来了。您可以将鼠标悬停在下面的图像上,然后单击 复制节点图表(Copy Node Graph) 选项,将提供的蓝图节点代码复制粘贴到您的高度场绘制器蓝图中,从而将完成的蓝图代码复制到您的蓝图中。

Copy Node Graph

HFP_BP_Setup_02.png

复制粘贴蓝图代码时,不会将 Event Begin Play 节点添加到图表中。确保添加Event Begin Play节点,并将其连接到 启用输入(Enable Input) 输入。

HFP_BP_Setup_08.png

现在所需的蓝图已经设置好了,在下一部分中,我们将讨论如何在UE4中使用高度贴图绘制器。

4 - 最终结果

现在,高度场绘制器蓝图所需的所有部分都已经设置好了,是时候看看高度场绘制器的实际操作了。在下面部分,我们将介绍如何在UE4项目中使用高度场绘制器。

使用高度场绘制器蓝图

  1. 在内容浏览器(Content Browser)中找到高度场绘制器蓝图,然后将其拖动到您的关卡中,根据关卡的需要确定其位置。

    HFP_BP_Use_00.png

  2. 按主工具栏上的 运行(Play) 按钮,然后引导您的玩家,使他们位于放置于关卡中的高度场绘制器蓝图的前方(或非常接近该高度场绘制器蓝图)。

    HFP_BP_Use_01.png

最终结果

若要提高表面位置的高度,使十字准星处于所需位置,请按住鼠标左键以提高静态网格体的高度。如果移动鼠标的时候一直按住鼠标左键,就会持续提高静态网格体的高度。如果全部正确设置完毕,您应该看到类似于以下视频的内容。

这只是使用蓝图和渲染目标操纵静态网格体顶点的方法之一,而创造的可能性几乎是无止境的。从创建可以使玩家和环境变形的影响效果,到允许玩家对他们所处的世界场景产生真实的影响,高度场绘制器蓝图可以适应许多不同的游戏角色和需求。

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消