NSDT工具推荐Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割

样条曲线(Spline)非常适合利用线性资源塑造非线性世界空间,而不必 消耗艺术家宝贵的时间来测量和缩放静态弯曲对象以适应精确的设置,同时也可以避免资源库被相似的对象过载。

本文所介绍的样条网格(Spline)是可计算样条与静态网格的结合,支持初始网格的大方差变换。样条网格的流行用途包括构建河流、道路、绳索、电缆甚至围栏。在这篇文章中,我们将使用样条网格创建隧道。

1、理解样条曲线

那么样条网格在UE4中的工作原理是什么?

让我们先看看UE4中的样条曲线组件到底是什么。Spline本质上是一条具有两个端点的线,可以在样条的起点和终点之间添加更多点,这就是可以用样条表示形状的原因。添加的点越多,可以具有的形状变化就越多。

基于此概念,我们添加一个样条网格组件,该组件将静态网格应用于样条曲线(取决于有多少个点),并沿线方向排列网格。从添加样条网格开始,我们有 2 个点,分别构成样条的起点和终点,以及一个网格对象。当我们在起点和终点之间添加另一个点时,蓝图实际上会添加第二个网格,使用 3 个点作为网格的起点和终点,使用在蓝图中标识的前向矢量。下图说明了样条曲线、样条点和样条网格是如何协同工作的:

所以说隧道片段沿着X轴"向前"移动,样条网格组件的前向矢量将位于 X 方向。如果改用 Y 轴作为前向矢量,则网格将并排缩放和复制,而不是扩展隧道本身的长度。

这可能有点令人困惑,但看下UE4中的脚本和蓝图,就会容易理解。

2、开始

我们首先需要的是一个隧道片段资源,它将被用作静态网格体。由于本教程更多地用于脚本编写,而较少用于艺术,因此我不会在示例网格上花费大量时间。这是下载 fbx 的链接。

导入隧道网格时,请务必取消选中Auto-Generate Collisions(自动生成碰撞),因为生成的 fbx 文件包含碰撞。导入网格后,在内容浏览器中单击鼠标右键,然后在Create Basic Asset(创建基本资源)下,单击蓝图类。在"选取父类"窗口中,选择"使用者"。将蓝图 actor 命名为"BP_Cave"或类似名称。

双击新的蓝图Actor,将弹出蓝图编辑器。我们要做的第一件事是单击Add Component(添加组件),然后搜索Spline Component(样条组件)。导航到构造脚本,现在开始构建控制样条曲线的脚本。

此处突出显示的脚本的第一部分设置了在样条点中添加的重复行为。

此处突出显示的脚本的下一部分,设置了沿样条线点创建一个或多个网格,以及当样条线超过 2 个点时沿样条线连接多个网格的端点。

在我们继续脚本的最后一部分之前,需要设置正在生成的网格以及网格的前向矢量。在本例中,我们将使用 X 轴作为前向矢量。注意,将网格设置为可移动也很重要,因为在放置/变形过程中,其形状将在一定程度上发生变化。

这是脚本的最后一部分:

这将设置一个或多个网格的起点和终点。要访问此节点,需要在Add Spline Mesh Component节点上拖出返回值。

构造脚本就是这样!现在,可以将蓝图拖到关卡编辑器中并进行操作。当你第一次把它放进去时,前两点可能很接近,而且看起来不仅仅是前两点。

这是因为每个点还有一个切线,可用于控制每个样条点之间曲线的强度。如果查看第一个图,会注意到网格看起来是直的,但样条线是弯曲的,这是由于样条点在自动曲线上的点之间近似于它们的形状,而不是线性的。

要移动样条点,请选择该点,而不是切线,然后四处移动它,将开始看到网格变形发生。将终点移离起点将拉出网格并将其拉伸以沿样条点位置延伸。

可以右键单击起点和终点之间的样条线,然后沿样条添加一个点,然后该样条曲线将网格拆分为两个实例,使用该样条点的位置沿第一个网格组件向前矢量设置结束位置,沿第二个网格组件向前矢量设置开始位置。

除了缩放/倾斜网格外,还可能沿样条路径使其变形,但这种变形的直线或曲线程度取决于网格的折点数量。如果使用的立方体网格除了形成立方体形状所需的顶点之外没有其他额外的顶点,则变形将非常刚性和尖锐,但是如果您有一个具有多个额外顶点的细分立方体网格,则会发生更多弯曲,平滑的变形,因为额外的顶点将发挥更多作用:

这个版本的网格没有被细分,所以只有必需的顶点存在,导致网格之间出现尖角。

此版本的网格被细分,因此每个网格上都会发生更多的曲率变形,用于近似沿样条的下一个网格上即将到来的方向变化。

好了,我们已成功创建了样条网格蓝图!

3、关于样条网格的警告

虽然样条线本身在创建动态形状的组件方面非常有帮助,但仍然需要在艺术方面做一些工作,特别是在使样条网格模块化和无缝方面,至少是端到端的。这种网格特别容易在两端保持规律性,但是分成更有机的形状(如隧道),你需要小心使东西匹配。此外,通过细分或任何其他形式添加额外顶点来添加曲率时,将这些修饰符也添加到碰撞网格中也很重要。如果不这样做,可能会发现自己的网格弯曲和近似方向变化比碰撞更多,从而导致剪切等错误。


原文链接:UE4: Understanding Splines. A tutorial

BimAnt翻译整理,转载请标明出处