Language:
Page Info
Skill Level:
Engine Version:
Share
此中文页面内容对应的英文页面有后续更新,如需浏览最新文档可切换至英文页面浏览。

如何创建双横臂悬挂载具

前言

此项目和教程由社区网友 Xenome 热心提供并授权在此发布。

感谢 Xenome!


此教程将讲述高级载具模板的细节。完成教程后,您将对其理论有良好的理解,并掌握创建和调配的方法。主要焦点在悬挂上。

此载具模板中使用的所有 FBX 资源均可 于此处下载 。在可读写 FBX 文件的模型包中,您可对原始文件进行分析并对自己的设计进行试验。

开始之前您需要知晓,双横臂悬挂的设置方法比标准虚幻引擎 4 载具复杂许多。如您尚未成功设置标准虚幻引擎 4 载具,强烈建议您先完成此设置再继续学习本文档。在 Epic 的 YouTube 页面上有许多优秀的标准操作教学视频 点击此处链接

在您观看这些视频并成功设置基础载具后,即可继续此处的双横臂悬架设计学习。开始先学习一些基础理论。

模拟轮子与后悬挂连杆结构

设置载具运动组件并为其指定轮子后,轮子的垂直运动由载具动画蓝图中的 WheelHandler 节点进行更新。在每一帧中,处理器将沿局部 Z 轴上下移动轮子模拟悬挂效果,确保轮子在必要时着地。

另外,WheelHandler 还使轮子沿其 Y 轴旋转,由模拟引擎和变速箱的旋转速度所决定。除此之外,它可使轮子沿其 Z 轴转向,由当前的转向角度所决定。

默认的垂直悬挂运动由 VehicleWheel-derived 类中的 Suspension Max RaiseDrop 设置锁定。它是绝对的直线运动,如下图所示:

simwheeldefaultmovement.gif

WheelHandler 生成的标准垂直运动

虽然并非完全真实,但事实上这种类型的悬挂模拟可用于大多数载具,因为通常无法看到悬挂臂和其他组件,如弹簧和减震。拥有整体车架的车辆模型均可使用此悬挂。

开放式车架载具(如越野大脚车或方程式赛车)的运动部件均清晰可见,悬挂直线垂直运动就存在问题了,因为现实世界中的悬挂设计均不会出现此类运动方式。

为获得更加真实的效果,我们需要的是沿载具车架上一些固定枢轴点进行旋转的运动方式:

realwheelmovement.gif

典型的垂直和侧方运动

为解决这个小小的难题,我们可以首先假定轮子管理拥有两种不同类型:第一类是由 WheelHandler 控制的模拟轮子节点、第二类是在车辆行驶中对我们看到的轮子进行渲染。之后我们便可将 WheelHandler 返回的数据传输给其余的悬挂设置,以获取预期效果。

简单而言,看见的轮子和模拟的轮子事实上可能是完全不同的两个物体,模拟的轮子甚至可能为不可见。

在 VehicleWheel 类中定义的轮子参数可以明确地指定 碰撞网格体半径宽度。这些规格不必符合载具骨骼网格体中的真实几何体,因此无需为网格体中的模拟轮子节点附着任意真实几何体。此外可在载具蓝图的轮子设置部分指定额外的轮子偏差,因此轮子的枢轴点无需与可见轮子网格体的几何中心对齐。

以上便是创建拥有机械真实感悬挂的见解。

骨骼节点的作用

在继续之前,我们需要了解两个对设置至关重要的动画蓝图节点。之前已经谈到了必备的 WheelHandler 节点,此外还有对这类绑定十分重要的强大工具:CopyBoneLookAt 节点。它们均可在动画蓝图编辑器的 Skeletal Control 类目下找到,它们和其他应用程序(如 Maya)中标准位置、旋转和瞄准约束执行的任务相同。

Copy Bone

正如其名称所表达的那样,CopyBone 节点能将转变数据从一个骨骼(来源)复制到另一个骨骼(目标)。

node_copybone.png

CopyBone 动画蓝图节点与其默认设置。

这意味着 WheelHandler 更新模拟轮子的转变后,我们可以(举例而言)只抓取其生成的旋转数值并应用到可见的轮子上。基本步骤将处理轮子的旋转和转向(这是我们需要的数据),同时避免获取平移(位置)数据(这是我们不需要的数据)。

Look At

LookAt 节点可旋转任意特定骨骼,使其中一个铰轴最后对准另一个骨骼:

node_lookat.png

LookAt 动画蓝图节点与其默认设置。

它提供了一个对设置十分有用的方法,确保悬挂系统的所有组件均保持向正确方向更新,由模拟轮子当前位置直接或间接决定。需要做的只是确保有 LookAt 节点瞄准的骨骼存在。它将用于动画蓝图中的多个骨骼。

安装总览

简要重述:针对载具的四个轮子,我们将使用一个不可见的轮子让 WheelHandler 进行管理,在游戏中实际渲染另一个可见的轮子。前者为单个的骨骼/连接点,不含带权重的网格体部分;而后者是在模型包中创建并添加到载具模型的任意轮状网格体。之后,将载具模型导入 UE4 进行最终设置。

为确保一切正常工作,悬挂的关键部分将从其他骨骼复制所需的转变数据,或通过观看模型中设置的目标对定向进行调整。

构建模型

理论部分到此为止,现在开始构建这个演示载具。在主建模应用程序中打开 Assets/FBX/vehicle_proto_S2.9.fbx 文件可以看到模型的构建方式。

此教程载具原型悬挂铰接的设计如下图所示:

keycomponents.png

载具原型右前悬挂的特写。添加颜色便于辨识 - 他们并未指派到 FBX 文件中的材质上。

关键组件是上下摇臂(黄色)、中心立轴(红色)、以及轮毂(蓝色)。两个摇臂以各自的六角螺栓(上图右侧)为中心旋转。

所有组件的中心点靠近下摇臂上的绿色螺栓。那是模拟轮子连接点 PhysWheel_[loc] 最初所在的位置。中心立轴、轮毂、和可见轮子的枢轴点也位于此处。

每个组件均拥有严格的职责和转变范围。摇臂只围绕其前方的轴进行旋转。中心立轴跟随下摇臂前端的位置,但将永久保持垂直状态,不会相对载具旋转。轮毂只围绕其垂直轴旋转,对转向作出响应。可见状态的轮子从模拟轮子复制旋转,并获取下摇臂前端的位置。一切组件皆紧密地结合在一起。

在复杂的铰接结构中,须对层级和更新顺序了如指掌。在此特例中,下摇臂旋转时必须带动一个子网格体(下方的绿色螺栓)。中心立轴随后需要此子网格体,以利用 CopyBone 节点将自己正确放置。而上摇臂需获取中心立轴子网格体的更新位置(上方绿色螺栓附近),以获得使用 LookAt 节点进行瞄准的目标。因此可以了解到使不同组件按正确顺序更新的重要性,否则悬挂部分的显示较之其他部分的运动存在延迟。

所有的每帧更新均由动画蓝图处理。

在 DCC(数字内容创建)应用程序中建模时,只需要注意层级和组件枢轴点的准确位置和定向。对由 LookAt 节点更新旋转的组件而言,可感知定向尤为重要。

在设计这类机械系统时,使用模型包提供的约束可能会有所帮助。在导入时约束将不跟随 FBX 文件进入 UE4,但如果在建模时能设置一些基础运动,则能更轻松地找到需要执行的方法。需要注意的是让各种组件按其既定的方式进行移动,并避免部件之间的穿插。但请不要使用动画蓝图中无法重新创建的约束。

虚幻引擎 4 中的设置

我们一起来看看如何在虚幻引擎中设置这个演示。在编辑器中加载项目文件,然后打开载具的动画蓝图。注意多数操作均应用了四次,每个轮子各一次。

驾驶载具时,动画蓝图中将出现以下情况:

首先,WheelHandler 更新模拟轮子(PhysWheel 骨骼)的位置和旋转。可见状态的轮子(VisWheel骨骼)从PhysWheels` 复制旋转并更新自身的旋转:

animBP_1.png

Copy Rotation 跟随 WheelHandler 到可见的轮子上。

这将获得一个视觉上无误的旋转和转向,但轮子将不会改变位置。这将在之后的步骤中单独处理。

接下来,下摇臂(ArmLower 骨骼)瞄准 PhysWheel 的位置。载具右边的摇臂使用 Y 轴作为朝向目标轴,左边的摇臂则使用的是负 Y 轴。

animBP_2.png

ArmLower 骨骼朝向 PhysWheel 的位置。

可在动画蓝图编辑器的 3D 窗口中预览 LookAt 节点的结果:所选 LookAt 节点的当前目标被标记为一个红色叉号。将预览视口设为线框模式更便于分辨。

ArmLower 骨骼旋转匹配其 LookAt 目标时,它带来了一个名为 POS_Hub 的子组件。它在下一步中利用 CopyBone 节点正确放置中心立轴。该节点只抓取 POS_Hub 骨骼的平移:

animBP_3.png

设置中心立轴位置。

稍后将使用相同方法将轮毂和 VisWheel 设置到相同位置。

下一步对上摇臂(ArmUpper 骨骼)进行调整,使其对准其相应的目标(LAT_ArmUp 骨骼)。这些目标是之前步骤中更新的中心立轴骨骼的子项,这些子项已被放置在正确的位置。

animBP_4.png

为上摇臂确定方向。

设置轮毂的位置后,需要单独在前轮毂上进行一些操作,使转向引起沿 Z 轴的旋转。它由对准 LAT_Hub 骨骼(此骨骼为前方 PhysWheels 的子项)的 LookAt 节点处理:

animBP_5.png

设置轮毂位置和转向角度。

最后,设置 VisWheel 位置匹配 POS_Hub 骨骼后,需确保减震的上部对准下方的减震架(ShockMount_Low);下方减震骨骼跟随同一个减震架的位置,而此减震架是上摇臂的一个子项:

animBP_6.png

放置可见的轮子,并调整减震组件。

PhAT

原型的物理资源设置和标准载具模板基本相同,只存在几点不同。最明显的区别是天线周围有许多小球状形体,而更重要的区别是载具主车架周围的自定义碰撞形态。

phat_1.png

PhAT 中的碰撞形体。

此模型的根组件实际为一个连接点,因此用于创建细节碰撞体积的几何体并不存在。导入一个配备 UCX 网格体(Assets/FBX/vehicle_collision_S2.9.fbx)的单独静态网格体,创建主形体体积。

phat_2.png

单独导入带碰撞的静态网格体资源。

无法在 PhAT 进行完整处理。第一部是在选择的 3D 模型包中创建碰撞资源(从主体网格体本身开始为佳)。然后将碰撞模型作为标准静态网格体,和 UCX 碰撞一起导入 UE4。此操作完成后,我们即可在 PhAT 中将此碰撞数据简单复制到载具的根节点。在 PhAT hierarchy 面板中的现有形体上 单击右键 将出现此选项。如目标骨骼上尚未指定形体,可先添加一个类似于长菱形的形体并投入使用。随后添加自定义碰撞后即可删除长菱形。

phat_3.png

菜单最底部“Advanced”中的 Copy collision 选项。

天线设置

虽然天线不是双横臂悬挂,但它仍能影响载具的整体操控。 最简单的解决方案当然是天线完全为刚性、不受物理影响。但此模板将为我们展示如何 设置一个随载具行驶移动而对载具本身移动无负面影响的天线。

在此模板中,从 Antenna1 开始直到顶端 Antenna10 的每个天线骨骼已设有一个球状形体。 此球状形体的半径与天线网格体本身的半径接近匹配。将形体的 Enable Gravity 属性关闭,确保天线只需 物理系统的少许消耗即可保持直立状态。形体底部的质量标度设为 16,越往上形体质量越小。上一层形体的质量标度设为 下一层的 50%,以此类推,从下到上的数值序列为 16、8、4、2、1、0.5、0.25、0.12、0.06、0.03。这样的设置将使底部较重, 顶部较轻,而两端之间存在流畅的梯度。

phat_antenna_1.png

应用到这些形体的约束在线和角方面均被完全锁定。此骨骼链相对较长,因此加速度将使朝向出现细微变化。 加速度是二者的结合:上文所述用于获得稳定模拟的质量标度设置,以及真实的轻微摆动。

为确保极限加速状态下模拟不会破坏,所有的天线约束均要求勾选 Enable ProjectionAngular Tolerance 数值设为 1.0, 形体的 Position Solver Iteration Count 的数值增加至 16。

phat_antenna_2.png

最后需要禁用天线形体和载具形体其他部分之间的内部碰撞,防止不必要的消耗。如需简单完成此操作, 只需从 hierarchy 面板中选择形体的所有骨骼,然后在 PhAT 工具栏中点击 Collision Off 按钮。

phat_antenna_3.png

自行操作

通晓设置方法后,现在可以开始构建您自己的模型,替代原型。以下指示将助您较为轻松地执行操作。

首先要保持命名和层级与原型相同。此操作将确保动画蓝图可在不同骨骼网格体上被重新指派和重新使用,而无需进行任何修改。这将为您节约大量时间。可对所有网格体重新建模并移动到不同位置。须确保所有资源对齐。为模型添加更多网格体节点并无难度,只需保证它不对关键悬挂组件的整体层级构成干扰即可。

载具根应被放置在整体空间中 0,0,0 的坐标上,且不能以任何方式旋转。将根设为一个简单的连接物可确保 FBX 导出和导入出现的问题较少,尤其在使用软边界组件(如变形减震网格体)时。

如模型包允许,将 Z 轴设为向上轴。无论如何皆假定 X 为向前的轴,即使选择的应用中 Y 为向前的轴。

在建模应用程序中,轮子网格体应该接触地面/网格。确保模型单独组件的枢轴点位于旋转的中心,且旋转已归零。明显的例外是避震,需要使根和顶部连接点朝向对方所在的方向。除非作用明确,否则不要使用 1,1,1 之外的缩放比例,也不要冻结变形或其他相同的功能。

导入选项

下列导入选项(之前用于原型载具)是良好的自定义模型导入指南:

import_options.png

原型载具使用的导入选项。

以上便是如何构建高级载具的内容。祝您好运!