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

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

文章目录

  • 开始吧
  • 什么是向量场(Vector Field)
  • 创建向量场
  • 创建方向材质

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

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

  • 使用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并关闭材质。现在材质已经实现完毕,接下来该用粒子系统实现拖尾了。

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

  1. Unreal Engine 4 渲染目标(Render Target)教程 之 使用渲染目标绘制(下)

    本文是<Unreal Engine 4 渲染目标(Render Target)教程之 使用渲染目标绘制>的下半部分,上半部分请见<Unreal Engine 4 渲染目标(Rende ...

  2. Unreal Engine 4 渲染目标(Render Target)教程 之 实现雪地足迹(下)

    本文是<Unreal Engine 4 渲染目标(Render Target)教程 之 实现雪地足迹>的第三部分 第一部分请见<Unreal Engine 4 渲染目标(Render ...

  3. Unreal Engine 4 渲染目标(Render Target)教程之 使用渲染目标绘制(上)

    原文|<Unreal Engine 4 Tutorial: Painting With Render Targets> 作者|Tommy Tran Jun 18 2018 | 翻译 开发游 ...

  4. Unreal Engine 4 渲染目标(Render Target)教程 之 实现雪地足迹(上)

    原文|<Unreal Engine 4 Tutorial: Creating Snow Trails in Unreal Engine 4> 作者|Tommy Tran Jun 3 201 ...

  5. 【学习笔记】Unreal Engine 4 虚幻引擎蓝图中级教程物理碰撞教程

    教程链接:Unreal Engine 4 虚幻引擎蓝图中级教程物理碰撞 想共享的小伙伴可以E-mail我:lxbcolorgalaxy@qq.com 目录 第一章 常见的物理现象及分析 1蓝图模板中的 ...

  6. ArcGIS Maps SDK for Unreal Engine通过UI方式显示地图教程

    前言 一个 UE 项目,可以包括多个关卡(level),关卡可以在菜单栏中新建(文件->新建关卡). 使用快捷键 Ctrl+S 可以保存当前关卡,你可以保存到上面提到的演示文件放置的位置,你可以 ...

  7. Unreal Engine 4(UE4)下载教程

    首先登陆到UE官方网站https://www.unrealengine.com  下载EpicGamesLauncherInstaller-2.1.3-2533468.msi文件 按照提示进行安装 如 ...

  8. 什么是渲染目标(render target) 渲染到纹理(Render To Texture, RTT)详解

    渲染到纹理(Render To Texture, RTT)详解 RTT是现在很多特效里面都会用到的一项很基本的技术,实现起来很简单,也很重要.但是让人不解的是网上搜索了半天只找到很少的文章说这个事儿, ...

  9. UNREAL ENGINE 4.13 正式发布!

    这次的版本带来了数百个虚幻引擎 4 的更新,包括来自 GitHub 的社区成员们提交的 145 个改进!感谢所有为虚幻引擎 4 添砖加瓦贡献的人们: alk3ovation, Allegorithmi ...

最新文章

  1. 今天写的一个GetProcAddress
  2. 解析 http 请求 header 错误_详解http报文(2)-web容器是如何解析http报文的
  3. matlab 计算大型距离方阵,distance matrix
  4. cuda nvprof 输出结果的理解和优化空间
  5. [翻译] 初看 ASP.NET Core 3.0 即将到来的变化
  6. java ftp 假死_FTPClient下载文件,程序假死问题
  7. artcam 9.0英文版本下载_Win10安装paddlepaddle-gpu的python版本
  8. 学会这4个表达「万能公式」,下次向领导汇报时不再语无伦次
  9. SVN server
  10. 可用和平精英画质助手iApp源码+全开源
  11. 3串口多串口双串口以及2串口UART转WiFi多跳通讯实现二
  12. 误删除vmdk文件恢复办法
  13. 数据驱动进化优化(data-driven evolutionary optimization)
  14. php excel 公式,excel基本公式
  15. python运行出现OSError: [WinError 87] 参数错误。
  16. iPhone预计移除SIM卡槽,用户需通过eSIM激活网络
  17. vue中PC端使用高德地图 -- 实现搜索定位、地址标记、弹窗显示定位详情
  18. C#读取shp多边形文件
  19. 方法:判断一个点是否在一个立方体中
  20. RIASEC World-of-Work Map 职业测评

热门文章

  1. 审慎 合宜与慈善三种学派的分类与核心思想
  2. JVM笔记 - Java 虚拟机关于 Synchronized 实现以及锁实现的总结
  3. [Eigen中文文档] 归约、访问者和广播
  4. Jmeter性能测试报告导出
  5. 利用命令行实现图片转换等操作--ImageMagick
  6. 微信小程序 使用三元运算符动态渲染布局
  7. git cherry-pick 的时候出现git cherry-pick xxx  fatal: bad object xxx
  8. 2022医院三基考试加血提分每日一练及答案
  9. app播放无声音乐实现app后台运行
  10. linux 云主机 管理软件,常用6款云服务器管理软件(上)