添加新车
这个教程详细介绍了如何向 Carla 添加新的车辆。教程分为两个部分,一个用于四轮车辆,另一个用于两轮车辆。教程概述了建模车辆时必须满足的基本要求,以确保车辆在 Carla 中运行良好,并提供了在将车辆导入虚幻引擎后所需的配置说明。
重要
本教程仅适用于使用源代码构建并有权访问虚幻引擎编辑器的用户。
添加 4 轮车辆
添加到 Carla 的车辆需要使用可在 此处 找到的通用基础骨架。此链接将下载一个名为 VehicleSkeleton.rar
的文件夹,其中包含两种不同格式的基本框架,一种为 ASCII,另一种为二进制。您使用的格式取决于您的 3D 建模软件要求。
骨架骨骼的位置可以更改,但任何其他操作(例如旋转、添加新骨骼或更改当前层次结构)都会导致错误。
绑定并建模车辆
本节详细介绍了车辆建模阶段的最低要求,以确保其可以在 Carla 中成功使用。该过程包括将骨架正确绑定到车辆的底座和车轮、创建物理资源和光线投射传感器网格,以及导出为正确的格式。
1. 导入基础骨架。
将基础骨架导入您首选的三维建模软件中。常见的编辑器包括 Maya 和 Blender。
2. 绑定骨骼。
根据下面的命名法将骨骼绑定到车辆网格的相应部分。确保轮子的骨骼在网格内居中。
- 左前轮:
Wheel_Front_Left
- 右前轮:
Wheel_Front_Right
- 左后轮:
Wheel_Rear_Left
- 右后轮:
Wheel_Rear_Right
- 网格的其余部分:
VehicleBase
警告
不要对骨骼名称或层次结构进行任何更改,也不要添加任何新骨骼。
3. 为您的车辆建模。
车辆应拥有大约 50,000 - 100,000 个 tris。我们使用实际汽车的尺寸和比例来建模车辆。
我们建议您将车辆分为以下材质:
- Bodywork: 车辆的金属部分。该材质已更改为虚幻引擎材质。可以添加徽标和细节,但为了可见,必须使用虚幻引擎编辑器中的 Alpha 通道将它们绘制为不同的颜色。
- Glass_Ext: 一层玻璃,可以从车辆外部看到内部。
- Glass_Int: 一层玻璃,允许从车辆内部到外部的可见性。
- Lights: 头灯、指示灯等。
- LightGlass_Ext: 一层玻璃,允许从外部到内部的灯光可见性。
- LightGlass_Int: 一层玻璃,允许从内部到外部看到光。
- LicensePlate: 29x12 厘米的矩形平面。您可以使用 Carla 提供的
.fbx
以获得最佳结果,请在 此处 下载。纹理将在虚幻引擎中自动分配。- Interior: 任何其他不适合上述部分的细节都可以进入 内饰.
材料(Material)应使用格式 M_CarPart_CarName
命名,例如 M_Bodywork_Mustang
。
纹理(Textures)应使用格式 T_CarPart_CarName
命名,例如 T_Bodywork_Mustang
。纹理的大小应为 2048x2048。
虚幻引擎会自动创建(Level of Details, LOD),但您也可以在 3D 编辑器中手动创建它们。Tri 计数如下:
- LOD 0: 100,000 tris
- LOD 1: 80,000 tris
- LOD 2: 60,000 tris
- LOD 3: 30,000 tris
4. 创建物理资源网格。
物理资源网格是一个附加网格,允许虚幻引擎计算车辆的物理特性。它应该尽可能简单,减少多边形数量,并且应该覆盖除车轮之外的整个车辆。请参阅下图的示例。
物理资源网格应导出为单独的.fbx
文件。最终文件应满足以下要求:
- 有一个基础网格。这应该是物理资源网格的副本。它应该与原始车辆具有相同的名称。
- 物理资源网格体必须使用格式
UCX_<vehicle_name>_<number_of_mesh>
命名, 否则虚幻引擎将无法识别。 - 网格不得超出原始模型的边界。
- 网格应与原始模型具有相同的位置。
将最终 .fbx
网格导出为名为 SMC_<vehicle_name>.fbx
的文件。
5. 为光线投射传感器创建网格。
光线投射传感器网格设置将由光线投射传感器(RADAR、LiDAR 和 Semantic LiDAR)检测到的车辆形状。该网格应该具有比物理资产网格稍微更明确的几何形状,以提高传感器模拟的真实感,但出于性能原因,不如汽车网格那么详细。
创建光线投射传感器网格时请考虑以下几点:
- 网格应覆盖车辆的各个方面,包括车轮、后视镜和格栅。
- 轮子应为不超过 16 圈的圆柱体。
- 如果需要,可以将各种网格连接在一起。
- 网格不得超出原始模型的边界。
- 网格应该与原始网格具有相同的位置。
将最终网格导出名为 SM_sc_<vehicle_name>.fbx
的 .fbx
文件。
5. 导出车辆网格。
选择所有主要车辆网格和骨架底座并导出为.fbx
。
导入并配置车辆
本节详细介绍了将车辆导入虚幻引擎以在 Carla 中使用的过程。在虚幻引擎编辑器中执行这些步骤。
1. 创建车辆文件夹。
在 Content/Carla/Static/Vehicles/4Wheeled
里创建一个名为 <vehicle_name>
的新文件夹。
2. 导入 .fbx
。
在新的车辆文件夹中,通过在Content Browser中右键单击并选择 导入到 Game/Carla/Static/Vehicles/4Wheeled/<vehicle_name> 来导入主车辆骨架.fbx
。
在弹出的对话框中:
- 将导入内容类型 Import Content Type 设置为
Geometry and Skinning Weights
。 - 将 Normal Import Method 设置为
Import Normals
。 - (可选)将Material Import Method设置为
Do not create materials
。取消选中Import Textures以避免虚幻引擎创建默认材质。
骨架网格体将与两个新文件<vehicle_name>_PhysicsAssets
and <vehicle_name>_Skeleton
一起出现。
将其余.fbx
文件与主车辆骨架.fbx
文件分开导入。
3. 设置物理资源网格。
- 从内容浏览器Content Browser
<vehicle_name>_PhysicsAssets
。- Skeleton Tree面板中右键单击
Vehicle_Base
的网格体,然后转到Copy Collision from StaticMesh。- 搜索并选择您的
SMC_<vehicle_name>
文件。您应该会看到物理资源网格的轮廓出现在视口中。- 从
Vehicle_Base
中删除默认的胶囊形状。- 选择所有轮子:
- 转到Tools面板并将“基元类型Primitive Type”更改为
Sphere
。- 转到详细信息Details面板并将物理类型Physics Type更改为
Kinematic
。- 将线性阻尼Linear Damping设置为
0
。这将消除车轮上的任何额外摩擦。- 为所有网格启用Simulation Generates Hit Event。
- 单击Re-generate Bodies。
- 将车轮球体调整至车轮尺寸。
- 保存并关闭窗口。
4. 创建动画蓝图。
- 在内容浏览器Content Browser中,右键单击车辆文件夹并选择Animation -> Animation Blueprint。
- 在父类Parent Class中搜索并选择
VehicleAnimInstance
。- 在目标骨架Target Skeleton中搜索并选择
<vehicle_name>_Skeleton
。- 按OK并将蓝图重命名为
AnimBP_<vehicle_name>
。
5. 配置动画蓝图。
为了简化配置动画蓝图的过程,我们将从本地 Carla 车辆复制现有的动画蓝图:
- 转到
Content/Carla/Static/Vehicle
并选择任何 Carla 车辆文件夹。打开其动画蓝图。- 在My Blueprint面板中,双击AnimGraph。您将看到图表出现在视口中。
- 单击并拖动以选择Mesh Space Ref Pose、Wheel Handler和Component To Local组件。右键单击并选择复制。
- 返回您自己的车辆动画蓝图并将复制的内容粘贴到图形区域中。
- 单击Component To Local组件中的站立人物并将其拖动到Output Pose中的人物,以将组件连接在一起。
- 单击左上角的Compile。您现在应该看到一条脉动的线流过整个序列。
- 保存并关闭窗口。
6. 准备车辆和车轮蓝图。
- 在内容浏览器Content Browser中,转到
Content/Carla/Blueprints/Vehicles
并创建一个新文件夹<vehicle_name>
。- 在该文件夹内,右键单击并转到Blueprint Class。在弹出窗口中打开All Classes部分。
- 搜索
BaseVehiclePawn
并按Select。- 将文件重命名为
BP_<vehicle_name>
。- 转到
Carla/Blueprints/Vehicles
中任何本地 Carla 车辆的文件夹。从内容浏览器Content Browser中,将四轮蓝图复制到您自己车辆的蓝图文件夹中。重命名文件以将旧车辆名称替换为您自己的车辆名称。
7. 配置轮子蓝图。
- 在车辆蓝图文件夹中,打开所有四个车轮蓝图。
- 在Class Defaults面板中,将 Collision Mesh 设置为
Wheel_Shape
。省略此步骤将导致车辆车轮陷入地面。- 根据您的车辆规格调整车轮形状半径、宽度、质量和阻尼率的值。
- 将轮胎配置Tire Config设置为
CommonTireConfig
。- 在前轮上根据您的喜好设置转向角度 Steer Angle(默认为
70
)。取消选中Affected by Handbrake 。- 在后轮上将转向角度 Steer Angle 设置为
0
。检查 Affected by Handbrake。- 设置悬架值时,您可以使用 此处 的值作为指导。
- 编译并保存。
8. 配置车辆蓝图。
- 从内容浏览器 Content Browser 中,打开您的
BP_<vehicle_name>
。- 在 Components 面板中,选择 Mesh (VehicleMesh) (Inherited) 。
- 在 Details 面板中,转到 Skeletal Mesh 并搜索并选择车辆的基础骨架文件(位于
Carla/Static/Vehicles/4Wheeled/<vehicle_name>
文件夹中)。- 转到 Details 面板中的 Anim Class。搜索并选择您的
AnimBP_<vehicle_name>
文件。- 在 Components 面板中,选择 Custom Collision (Inherited) 。
- 在 Details 面板中选择 Static Mesh 并搜索您的
SM_sc_<vehicle_name>
光线投射传感器网格体。- 在 Components 面板中,选择 VehicleMovement (MovementComp) (Inherited) 。
- 在 Details 面板中,搜索
wheel
。您将找到每个轮子的设置。对于每一个,单击 Wheel Class 并搜索与正确车轮位置相对应的BP_<vehicle_name>_<wheel_name>
文件。
如果您的车辆有任何与基础网格分开的附加网格(门、灯等):
- 将它们拖到Components面板中的 Mesh (VehicleMesh) (Inherited) 层次结构中。
- 选择层次结构中的额外网格并在Details面板中搜索
Collision
。- 将碰撞预设 Collision Presets 设置为
NoCollision
。- 选择层次结构中的任何灯光网格。在 Details 面板中搜索
Tag
并添加标签emissive
。
单击 Save 并 Compile 。
- 我们还可以自定义车辆的车牌。
9. 将车辆添加到蓝图库中。.
- 在
Content/Carla/Blueprint/Vehicle
中,打开VehicleFactory
文件。- 在 Generate Definitions 选项卡中,双击 Vehicles 。
- 在 Details 面板中,展开 Default Value 部分并向车辆数组添加一个新元素。
- 填写您车辆的 Make 和 Model 。
- 使用您的
BP_<vehicle_name>
文件填写 Class 值。- (可选)为车辆提供一组推荐颜色。
- 编译并保存。
10. 测试车辆。
启动 Carla,打开终端 PythonAPI/examples
并运行以下命令:
python3 manual_control.py --filter <model_name> # The make or model defined in step 9
笔记
即使您在品牌和型号中使用了大写字符,它们在传递给过滤器时也需要转换为小写字符。
添加 N 轮车辆
添加 N 轮车辆遵循与上述 4 轮车辆相同的导入管道,但有几个步骤不同。
5. 配置 N 轮车辆的动画蓝图
搜索 BaseVehiclePawnNW
并按 Select。
6. 准备车辆和车轮蓝图
转到 Carla/Blueprints/Vehicles 中所有本地 Carla 车辆的文件夹。从内容浏览器中,将四轮蓝图复制到您自己车辆的蓝图文件夹中。重命名文件以将旧车辆名称替换为您自己的车辆名称。
复制四个轮子,然后再次复制其他轮子。如果是 6 轮车辆,您将需要 6 个不同的车轮:FLW、FRW、MLW、MRW、RLW、RRW。
7. 配置轮子蓝图
对于 4 轮车辆,请遵循上述第 7 节。 N 轮车辆的主要区别在于手刹和转向参数的影响。在某些车辆(例如长轴距卡车)中,前 2 对车轮将进行转向,其中一组可能比其他车轮转向更多。最后面的一对可能会受到手刹的影响,具体情况取决于您正在建模的车辆。
8. 配置车辆蓝图
在“详细信息”面板中,搜索wheel
。您将找到每个轮子的设置。对于每一个,单击车轮类别并搜索 BP_
这是正确的,但只是为了指定,在 N 轮车辆的情况下,您需要设置所有车轮。这是 6 轮车辆的示例:
最后,一个额外的考虑因素是设置差速器。对于 4 轮车辆,我们有不同的差速器预设(限滑、开放 4W 等),但对于 N 轮车辆,您需要选择要在哪些车轮上应用扭矩。本例中我们选择只有中后轮有扭矩,前轮没有扭矩,您可以指定其他配置。这些数字将与本文上方的图像相同(例如,0 将是左前轮,如上所述)。
所有其他参数,如发动机、变速箱、转向曲线,均与四轮车辆相同。
添加 2 轮车辆
添加 2 轮车辆与添加 4 轮车辆类似,但由于动画的复杂性,您需要设置额外的骨骼来引导驾驶员的动画。这 是两轮车辆参考骨架的链接。
与 4 轮车辆一样,将模型朝向正“x”,每个骨骼轴朝向正 x,z 轴朝上。
Bone Setup:
- Bike_Rig: # 网格的原点。将其放置在场景的0点
- BikeBody: # 模型身体的中心。
- Pedals: # 如果车辆是自行车,将脚踏板绑在这块骨头上,就会随着自行车的加速度而旋转。
- RightPedal: # 如果车辆是自行车,则设置驾驶员的脚部位置并与脚踏板一起旋转。
- LeftPedal: # ^
- RearWheel: # 车辆后轮
- Handler: # 与车辆的前轮一起旋转,将车辆操纵器固定在其上。
- HandlerMidBone: # 定位在前轮骨架上,以确定操纵器与车轮的方向
- HandlerRight: # 设置驾驶员的手的位置,无需将其绑定到任何东西。
- HandlerLeft: # ^
- Frontwheel: # 车辆的前轮。
- RightHelperRotator: # 这四块额外的骨头是为一个过时的系统提供的,该系统通过使用传统的隐形车轮使自行车稳定
- RightHelprWheel: # ^
- LeftHelperRotator: # ^
- LeftHelperWheel: # ^
- Seat: # 设置驾驶员髋骨的位置。无需将其绑在任何东西上,只需小心放置即可。
1. 将 fbx 作为 Skelletal Mesh 导入到其自己的 Content/Carla/Static/Vehicles/2Wheeled
文件夹中。导入时,选择“General2WheeledVehicleSkeleton”作为骨架,应自动创建并链接物理资源。
2. 调整物理资源。删除自动创建的框并向 BikeBody
骨骼添加框,尝试尽可能匹配形状,确保启用生成命中事件。为每个轮子添加一个球体并将其“物理类型”设置为“运动学”。
3. 创建 Content/Blueprints/Vehicles/<vehicle-model>
文件夹
4. 在该文件夹内创建两个派生自“VehicleWheel”类的蓝图类。调用 <vehicle-model>_FrontWheel
和 <vehicle-model>_RearWheel
。将其 "Shape Radius" 设置为与网格轮半径完全匹配(小心,半径不是直径)。将其“轮胎配置”设置为“CommonTireConfig”。在前轮上取消选中“受手刹影响”,在后轮上将“转向角”设置为零。
5. 在同一文件夹内创建一个派生 Base2WheeledVehicle
的蓝图类,并调用它 <vehicle-model>
。打开它进行编辑,选择组件“Mesh”,将“Skeletal Mesh”和“Anim Class”设置为相应的。然后选择 VehicleBounds 组件并设置大小以覆盖车辆区域(如上图所示)。
6. 选择组件“VehicleMovement”,在“Vehicle Setup”下展开“Wheel Setups”,设置各个车轮。
- 0: 轮类=
<vehicle-model>_FrontWheel
, 骨骼名称=FrontWheel
- 1: 轮类=
<vehicle-model>_FrontWheel
, 骨骼名称=FrontWheel
- 2: 轮类=
<vehicle-model>_RearWheel
, 骨骼名称=RearWheel
- 3: 轮类=
<vehicle-model>_RearWheel
, 骨骼名称=RearWheel
(您会注意到,我们基本上在每个骨骼中放置了两个轮子。unreal 提供的车辆类别不支持车轮编号不同于 4 的车辆,因此我们必须让它相信车辆具有4个轮子)
7. 选择变量 "is bike" ,如果您的型号是自行车,则勾选它。这将激活踏板旋转。如果您要安装摩托车,请不要标记。
8. 找到变量 back Rotation 并将其设置为更合适的位置,更好地选择组件 SkeletalMesh(驱动程序)并将其沿 x 轴移动,直到其位于座椅位置。
9. 测试一下,进入CarlaGameMode蓝图并将“Default Pawn Class”更改为新创建的自行车蓝图。