UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

Unreal Engine最好的部分之一就是它对那些偏艺术的人来说是无障碍的。随着虚幻引擎4的首次发布,人们发现自己可以制作整个游戏,而不必触及C 。从那时起,人们一直在挑战蓝图的极限,Epic则通过更新扩展工具集来做出回应。

Unreal引擎中一个非常强大的部分是程序化网格(procedural mesh)组件,它接收数组输入并输出静态网格。

将程序化网格与渲染到纹理(render to texture)功能相结合,可以完全在引擎中程序化地创建纹理资源!

这很有用,因为:

  • 你可以准确地看到资产在构建时的外观。
  • 在构建资产时就可以在其环境中看到该资产。
  • 更新都是实时的。

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

这有大量的潜在应用,我一直在研究风格化的植被(Foliage)生成,对于传统建模工具而言这是一个痛苦的任务,而程序化网格则非常适合用于解决这个问题,因为游戏树主要由简单的形状(圆柱体和平面)组成,并且更多地是关于这些形状的正确放置和轻微变化,而不是它们各自的复杂性。

使用程序网格组件构建的一些树:

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

如果你有兴趣试用该工具,可以在此处下载

使用此工具时,我建议增加项目设置中的最大循环计数(Max Loop Count)。如果超过项目设置的最大循环计数,我们的几何图形将无法正确构建!

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

1、程序化创建三角形

让我们从简单的网格对象开始,渲染一个三角形。创建新的Actor蓝图并添加程序化网格组件。创建DrawTriangle函数,并将其插入到构造脚本中:

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

添加两个数组:

  • 向量数组,用来表示顶点
  • 整数数组,用来表示顶点数组的目标索引

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

在这里我们有三角形的三个顶点和创建该三角形所需的整数顺序。注意我们需要列出顶点的顺序,如果存储0,1,2,则三角形将会方向错误。

程序化网格组件输出到Create Mesh Section(创建网格截面)函数,并将上述数组链接到对应的输入中。

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

嘿!我们成功制作了一个三角形!

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

2、程序化创建平面

现在让我们更复杂一点,做一个平面。首先需要添加更多的数组。我们需要补充:

  • 法线向量数组
  • 切线结构向量数组
  • UV二维矢量数组

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

别担心,我们将用一些小技巧获得法线和切线!

请记住,就像以前一样,我们需要先清理数组数据。

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

然后创建Draw Quad函数,并添加两个嵌套循环,用来处理x 和 y的每个 值。

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

然后取当前的 x 和 y 值,乘以一个值(距离),并将其添加到向量数组中,最后将UV当前 x 和 y 值除以其总计(长度)以获得归一化值。

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

然后,我们可以使用Create Grid Mesh Triangles(创建网格三角形)功能自动生成指定数量的三角形。虽然以后无法使用它,但就目前而言,这是生成三角形数据网格的简单方法。

我们还需要法线和切线,这样我们就可以使用Calculate Tangents for Mesh(计算网格的切线)函数来得到结果。

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

下面是最终得到的完整函数,点击链接查看放大的视图:

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

下面是构造脚本:

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

结果:

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

3、程序化创建圆柱体

一旦有了网格,将形状从平面更改为圆柱体就是一件简单的事情:我们不再将定点与网格对齐,而是将它们缠绕在轴上。

取我们之前创建的 X 和 XLength 值,将它们相除以得到归一值,然后乘以 360,从而得出角度。我们希望围绕 z 轴旋转 x 轴,因此获取这些值并将它们插入,并通过与浮点数相乘来控制距离。

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

像这样将此新计算与原始的 x*float 交换,点击链接 查看大图。

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

现在我们的平面就变成了圆柱体!

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

如果我们取归一化的y或z值,并用1-x反转,则创建一个圆锥体!

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)

4、读取网格数据

我们需要的最后一个元素是读取网格数据。Get Section from Static Mesh(从静态网格体获取截面)函数可以从任何网格中获取数据并输出供我们使用。现在,我们可以对任何网格进行采样,对其进行修改,然后将其散布在表面上。

UE4程序化建模工具开发教程「植被建模」(ue4程序化植物)


现在,我们已经有了构建程序化内容所需的基础。在下一部分中,我们将介绍如何利用这些工具制作一个简单的树生成器。

5、程序化生成植被

在深入研究植被生成工具开发之前,我强烈建议你下载并尝试一下,否则我们将讨论的一些主题将非常抽象!你可能还会注意到一些未涵盖的对pivot painter的引用。这是我目前正在开发的额外功能,尚未完成!

树叶工具分为五个单独的蓝图:

1、父蓝图 Tree Parent

  • 保存将在所有子项之间共享的数据。
  • 树干、树枝和树叶蓝图均继承自它。

2、树干 Trunk

  • 继承自Tree Parent
  • 样条控制的网格
  • 只制作一个网格
  • 提供大量用户控制

3、树枝 Branch

  • 继承自Tree Parent
  • 沿表面或随机生成多个树枝
  • 用户控制仅限于随机变量范围
  • 可以相互叠加

4、树叶 Leaf

  • 继承自Tree Parent
  • 读取网格数组并沿树干/树枝或随机放置
  • 不能有子节点

5、合成器 Compositer

  • 以TreeParent数组为输入,将网格重建为单个资产
  • 检测并合并重复材质,以减少材质数量

你可能会想,为什么要这样做!?好吧,分解树有多种好处:

  • 在层次结构上进行更改时不必重绘整个网格
  • 快速分离和隐藏资产的元素
  • 删除部分而不会破坏整个树
  • 资源将组件化,因此可以将树的一部分复制粘贴到其他树上
  • 拆分随机种子生成,以便获得更多控制

所有这些元素结合在一起,让用户构建一个模块化的组件堆栈,这些组件"应该"允许他们制作任何类型的树!

6、父蓝图 – Tree Parent

为了避免重复工作,我们应该首先创建一个作为基础的父蓝图,其他蓝图需要继承父蓝图。这很有用,因为我们放入父蓝图中的任何数据都将在其后代蓝图中共享。例如,每个资产类型都需要一个材质引用和一组网格数组,以便将信息添加到父级,以便传播到其子级。