您当前的位置: 首页 >  ar

开发游戏的老王

暂无认证

  • 4浏览

    0关注

    803博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unreal Engine 4 渲染目标(Render Target)教程 之 可交互的草地(下)

开发游戏的老王 发布时间:2021-04-06 21:08:10 ,浏览量:4

本文是《Unreal Engine 4 渲染目标(Render Target)教程 之 可交互的草地》的下半部分,上半部分请见《Unreal Engine 4 渲染目标(Render Target)教程 之 可交互的草地(上)》 作者|Tommy Tran Aug 10 2018 | 翻译 开发游戏的老王

文章目录
      • 实现拖尾粒子系统
      • 添加粒子系统
      • 捕获粒子
      • 使用Show-Only List
      • 折草
      • 遮罩

实现拖尾粒子系统

在ParticleSystems文件夹中打开PS_GrassTrail。时间的关系,笔者已经创建好了我们所需的所有模块。

在这里插入图片描述

解释一下各个模块对拖尾的影响:

  • Spawn: 产生率影响拖尾的平滑度,如果你发现拖尾看起来生硬有顿感,那么就把Spawn调大点。本文使用其默认值20。
  • Lifetime: 艹回到其默认状态的时长。
  • Initial Size: 拖尾的大小。
  • Color Over Life: 因为我们在材质中使用了例子颜色(Particle Color),所以可以在这里控制不透明度(opacity)。同时也可以调整透明度曲线(alpha curve)来控制拖尾的渐变(fade)。例如,我们可以使用线性渐变来渐入/渐出。本教程我们就使用默认的线性渐变。
  • Lock Axis: 确保粒子朝向scene capture。
  • Initial Rotation: 确保粒子朝向正确的轴向(后面会详细解释)。

首先,我们要设置材质。选择Required模块并将Material设为M_Direction,顺便将**(排序模式)Sort Mode设为PSORTMODE Age Newest First**。

在这里插入图片描述

这种排序模式能够确保新生粒子将渲染在老的粒子之上。如果不这样做,老粒子就会代替新粒子影响草地。

接下来设置拖尾的生命周期。选择Lifetime模块,并将Constant设为5.这意味着拖尾将在5秒钟后消失。

在这里插入图片描述

现在,我们需要确保粒子面朝scene capture。因为本教程中scene capture是自顶向下捕获的,所以粒子要朝向Z轴的正方向。只要选择Lock Axis模块把Lock Axis Flags设为Z就可以了。

在这里插入图片描述

最后,我们要设置粒子的旋转。目前,笔刷的颜色(译者注:颜色即方向)并未和粒子的方向对齐。这是因为,在默认情况下粒子系统会自带一个90度的旋转。要解决这个问题,我们得选择Initial Rotation模块然后将Constant设为**-0.25**。这实际上是把粒子逆时针回转90度。

在这里插入图片描述

粒子系统部分就完工了。

接下来,我们要把粒子系统添加到我们想创建拖尾的地方。本例中,我们把它添加到角色(player character)上。

添加粒子系统

在Characters\Mannequin文件夹中打开BP_Mannequin。然后创建Partice System组件并更名为GrassParticles。

在这里插入图片描述

接下来,我们要设置粒子系统。在细节面板中将Particles\Template设为PS_GrassTrail。

在这里插入图片描述 如果玩家在游戏中能看到拖尾,会很奇怪,所以最好通过开启Rendering\Owner No See将它设为对于玩家不可见。

在这里插入图片描述

点击Compile然后按下Play。注意此时粒子系统从玩家的摄像机中消失了,但是在渲染目标中依然可见。

在这里插入图片描述

当前,scene capture被设为捕获一切。显然这样不好,因为只有粒子才会影响草。在下一个部分我们将学习如何只捕获粒子。

捕获粒子

如果我们现在就捕获粒子,那么草在没有粒子的地方会得到一些非预期的弯曲。这是因为渲染目标的底色是黑色的,而黑色代表的移动方向是XY轴的负方向(重映射后),从而导致了弯曲。为了让没有粒子的地方不发生弯曲,我们要让渲染目标的底色为**(0.5, 0.5, 0)**。一种简单的实现方法就是创建一个巨大的平面,并将它放到角色身上。

首先,我们为背景创建一个材质。回到资源管理窗口,打开Materials\M_Background。然后为Emissive Color设定一个常量值 (0.5, 0.5, 0) 。

在这里插入图片描述

注意:和粒子材质一样,任何我们要捕获的材质都应该设为unlit。

点击Apply然后关闭材质。回到BP_Mannequin新建一个Plane组件并命名为Background。

在这里插入图片描述

接下来,设置如下属性:

  • Location: (0, 0, -5000),设得足够低,这样就不会遮挡任何粒子了。
  • Scale: (100, 100, 1),放到足够到,以至于覆盖掉整个捕获区域。
  • Material: M_Background。

在这里插入图片描述 和粒子系统一样,如果玩家看到这个大黄板会很奇怪,所以开启Rendering\Owner No See把它隐藏起来。

在这里插入图片描述 这样,背景就完工了,现在可以捕获粒子了。我们可以把粒子系统添加到scene capture的show-only list中这是一个scene capture将会忽略的组件列表。

使用Show-Only List

在添加Show-Only List之前,我们需要获取所有能够影响草地的角色。一种实现方法就是使用标签(tag)。标签就是可以指定给角色和组件的简单字符串。我们可以使用Get All Actors With Tag节点来获取所有带着某个标签的角色。

因为玩家角色将会影响草地,所以要给它添加标签,本例中为其添加标签GrassAffector。

在这里插入图片描述 因为Show-Only List仅接受组件,所以我们也需要为那些会影响草地的组件添加标签。分别为GrassParticles组件和Background组件添加标签GrassAffector。

然后把所有可影响草地的组件全部添加到Show-Only List中。点击Compile并关闭BP_Mannequin。然后,打开Blueprints\BP_Capture。为Event BeginPlay事件添加如下高亮节点。

在这里插入图片描述

这段代码将会遍历所有带有GrassAffector标签的角色,然后检查它们是否有GrassAffector标签的组件,如果有则将它们添加到show-only list。

接下来,我们要告诉scene capture使用 show-only list。选择SceneCapture组件,在细节面板上找到Scene Capture属性区。将Primitive Render Mode设为Use ShowOnly List。

在这里插入图片描述

点击Compile关闭蓝图。点击Play,我们将看到渲染目标现在仅捕获粒子以及黄色的背景。

在这里插入图片描述

下一个部分,就是我们期待已久的实现折草效果了。

折草

首先我们要把渲染目标投影到草地上。在Materials文件夹中打开M_Grass。然后创建下面的节点,请确保纹理设为RT_Capture。

在这里插入图片描述

因为我们已经把颜色重映射到了0到1的范围,我们需要再把它重映射回-1到1的范围: 在这里插入图片描述

现在我们已经得到了折草的方向(下文简称:折向),还需要把草向这个方向旋转。幸运的是,RotateAboutAxis节点就可以做这件事。创建一个吧。

在这里插入图片描述

让我们从NormalizedRotationAxis引脚开始。正如其名,这是顶点旋转所围绕的轴。要计算这个轴向,我们只需要让折向和**(0, 0, -1)**做向量积运算:

在这里插入图片描述

接下来处理RotationAngle,这个引脚是顶点绕轴旋转的角度。默认情况下,接受0到1区间的值。其中0代表0度;1代表360度。我们通过折向的长度乘以最大旋转角度获得旋转角度。

在这里插入图片描述 乘以值为0.2的醉倒旋转意味着最大旋转角度为72度(即0.2*360)。

计算轴心点(PivotPoint)需要点技巧,因为草的网格模型包含多个草叶子。这就意味着我们无法使用Object Position节点了,那样的话每个草叶子都会返回相同的点。

本教程中我们近似地找到一个轴心点。计算方法就是简单地从顶部向下移动某个偏移量。

在这里插入图片描述 通过添加如下节点,实现上述计算:

在这里插入图片描述 本教程中,草大约是80个单位高度,所以我把PivotOffset也设成这个值。

接下来,我们需要两个遮罩。第一个用于确保草的根部不要移动;第二个要确保在捕获区域以外的草不要被向量场影响。

遮罩

本例中,我已经为草设置了顶点色(vertex colors),底部是黑色顶部是白色。

在这里插入图片描述 将RotateAboutAxis和Vertex Color节点相乘,就可以确保根部不会旋转了。

在这里插入图片描述 将前面的结果乘以如下高亮节点,就能够确保范围之外的草不受向量场影响。

在这里插入图片描述

点击Apply并关闭材质。然后点击Play,在草原里尽情奔跑吧!

在这里插入图片描述

关注
打赏
1656935939
查看更多评论
立即登录/注册

微信扫码登录

0.0405s