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

原文|《Unreal Engine 4 Tutorial: Creating Interactive Grass in Unreal Engine 4》
作者|Tommy Tran Aug 10 2018 | 翻译 开发游戏的老王
阅读时长|20分钟 内容难度|中级

本教程将会介绍如何使用Scene Capture和粒子实现可交互的草地。

一直以来,游戏中的草地经常使用地面上的纹理来表现,而不是独立渲染每一根草。但是,随着硬件的性能不断提高,我们已经有能力渲染草了。比如著名的《地平线:黎明时分》以及《塞尔达传说:荒野之息》。在游戏中不仅玩家可以穿越草地,更重要的是草会和玩家发生交互。

更幸运的是,实现这样一个系统并不困难。在本教程中我们就会学习如何实现它!本文将会介绍:

  • 使用Scene Capture和粒子系统(Particle System)创建向量场(Vector Field)
  • 使用向量场使草弯曲

注意:本教程假定读者已经掌握了Unreal Engine的基本用法。

注意:本教程渲染目标系列教程四部曲之一:

开始吧

译者注: 本教程提供了范例工程,如果需要可以到原文网站免费注册并下载

解压范例工程,在InteractiveGrassStarter文件夹中打开InteractiveGrass.uproject。我们可以看到一小片草场,以及笔者创建的一个窗口小部件来显示Scene Capture的渲染目标。

在这里插入图片描述

阅读本文之前,请确保已经完成了如下前导教程,因为一些讲述过的内容本文将不再赘述:
Unreal Engine 4 渲染目标(Render Target)教程 之 实现雪地足迹(上)
Unreal Engine 4 渲染目标(Render Target)教程 之 实现雪地足迹(中)
Unreal Engine 4 渲染目标(Render Target)教程 之 实现雪地足迹(下)

注意,本文还会使用Scene Capture以及投影。为了节省时间,笔者已经用蓝图设置了Scene Capture,其方法也和雪地足迹教程中的差不多。

首先,我们来看看如何创建可交互的草。最常见的方法就是将角色的位置发送给草的材质,然后用一个球形遮罩让指定半径范围内的草弯曲(本方法简称球形法)。

这种方法是不错的,但它的扩展性不好。如果我们要添加多个可以和草交互的角色,那么对于每个角色,都必须添加其位置和球形遮罩到草的材质中。其实,有一种扩展性更好的方法,那就是向量场(vector field)

什么是向量场(Vector Field)

向量场其实就是一个简单的纹理,它的每一个像素都代表着方向。如果你以前用过流程图作业图(flow map),它们都是一回事。不同的是,这次我们是使用**世界位置偏移量(World Position Offset )**引脚移动顶点,而不是移动UV。与球形法不同的是,材质只需要对向量场采样一次以获得弯曲方向。

接下来看看如何个把方向存储到纹理中。请看下面这个网格:

在这里插入图片描述

假设红色的点就是我们要移动的对象。如果把它移动到右下角,应该用什么向量表示本次移动?没错,就是 (1, 1)!也许你也知道,其实我们还可以用颜色来表示向量,这就是我们在纹理中存储向量的方法。咱们把向量值填入虚幻的颜色拾取器看看得到什么颜色。

在这里插入图片描述

如你所见,方向值**(1, 1)**返回黄色。这意味着如果我们想让草向XY的正方向弯曲,我们使用这个颜色就可以了。现在,我们看一下所有向量对应的颜色。

在这里插入图片描述

右下脚的象限看起来非常不错,因为它在两个轴向都有梯度。这意味着我们可以把该象限内的任何向量存储为颜色(因为这个象限内任何的向量值正好等于它的颜色值)。

但是其它三个象限就不行了,要么只有一个轴有梯度要么干脆一个都没有。这意味着多个向量会共用一个颜色。比如:向量 (-1, 1) 和 (0, 1)的颜色是相同的。

之所以另外三个象限不能找到和向量值一一对应的颜色,是因为颜色颜色分量的取值范围是0到1,而这三个象限使用的是该范围之外的负值。

解决改问题的方法就是将每个向量(包括所有四个象限)重新映射使其值在0到1之间。我们可以让向量乘以0.5再加上0.5。下图就是重映射后的效果:

在这里插入图片描述

现在每个向量都拥有了一一对应的颜色。如果我们需要使用它,仅需要将它重新映射会-1到1的区间即可了。下面是重映射以后几个颜色以及它们所代表的方向:

  • (0, 0): - X和+ Y
  • (0.5, 0.5): 无移动
  • (0, 1): - X和- Y
  • (1, 0): + X和- Y

接下来,咱们看看如何在虚幻中创建向量场。

创建向量场

和上一教程中的雪地足迹不同,我们无须捕获物体的形状,取而代之的是,我们将直接使用“笔刷”在渲染目标上绘制。所谓笔刷就是自定义向量场的图片。这种笔刷我称之为方向笔刷(direction brushes)

我们并非使用蓝图向渲染目标绘制,而是使用粒子(particles)。粒子将显示方向笔刷并从角色所在位置发射。要实现向量场,我们只需使用scene capture并捕获粒子。这个方法的好处在于很容易创建拖尾(trail),并且允许我们方便地控制诸如拖尾时长以及大小等参数。粒子还会产生半持久化(semi-persistent)的拖尾,因为它们在角色离开并再进入所在区域后依然存在。

译者注: 雪地足迹一文中提到的半持久化方法就体现在这里了。

下面有几个可供选择的方向笔刷,以及它们在草坪上产生的效果。注意:下面的例子中粒子是不可见的。

在这里插入图片描述
现在,我们来实现可以显示方向笔刷的材质吧。

创建方向材质

有两种方法创建方向笔刷:

  1. 数学法:本方法中我们在材质中直接定义方向和形状。优点就是无须额外的软件并且对于简单图形非常方便。
  2. 转换法线贴图法:本方法中我们需要为期望的方向和形状创建一个法线贴图,然后把法线贴图转换成向量场。转换方法就是将蓝色通道去掉就可以了。优点是可以非常轻松地实现复杂的形状。比如下面这个形状,就很难直接用上面的数学法实现。

在这里插入图片描述

本教程中,我们会使用数学法创建向量场。在Materials文件夹打开M_Direction。注意将材质的光照模型设为无光照(Unlit)。这一点非常重要,因为这样 scene capture才能够在无光照影响的情况下捕获粒子。

简单起见,我们将实现一个材质,它会使草向远离粒子的中心的方向倒下。请按下图连接节点:

在这里插入图片描述

接下来我们要做重映射,按下图高亮所示连接节点:

在这里插入图片描述
接下来,构造一个圆形。按下图高亮所示连接节点:

在这里插入图片描述
RadialGradientExponential是圆的大小和边缘硬度。将它乘以Particle Color将允许我们控制粒子在粒子系统中的不透明度(opacity)。我们将会在下面的部分详细介绍这一点。

下图就是笔刷的样式:

在这里插入图片描述

点击Apply并关闭材质。现在材质已经实现完毕,接下来该用粒子系统实现拖尾了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值