案例教学 - 外部资源导入

主车模型导入流程

51Sim-One支持主车模型导入,应用于测试场景。 用户可导入简化渲染的低精度模型(适用于WebObserver)与高精度渲染的模型两种(适用于UEObserver),按需导入即可。 本教学包括4个部分: - 高精度主车模型制作及打包 - 低精度主车模型制作及打包 - 准备配置文件 - 使用自定义主车模型运行测试

高精度主车模型制作及打包

高精度主车模型主要用于UE Observer测试可视化渲染。

主车模型制作规范

Setp 1

大小:车辆模型在DCC软件中的尺寸应当是现实世界的真实大小。

Setp 2

朝向:车辆模型在DCC软件中应当是X轴朝前,Z轴朝上。

Setp 3

面数:整车包(含内饰)三角面控制在50万以内为佳。

Setp 4

UV: 模型的UV目前仅需制作一套即可,UV需充分展开且合理排布。

Setp 5

材质ID:在DCC软件中需对车辆的不同材质赋予不同的材质球,导入引擎后赋予引擎中 内置的材质球。

Setp 6

车辆模型处理好后,冻结车辆位置,缩放等基础属性。

主车模型绑定规范

创建骨骼(以maya为例)

Setp 1

将汽车的后轮中心位置与世界坐标原点X轴对齐。

对车辆模型进行拆分,保证方向盘,四个车轮都是单独的模型且规范命名

Setp 2

切到顶视图,创建骨点。按下图的骨骼创建命令,在世界原点鼠标点击创建,X健准确吸附,创建成功后按回车键结束。

重复上述命令,分别给前轮,后轮和方向盘创建骨骼。

Setp 3

针对方向盘的骨点的转向比较特殊,因为需额外处理方向盘的骨点朝向。 操作方法是在方向盘的骨点位置往方向盘的垂直方向加一根骨骼,这样方向盘位置的骨骼的朝向就正确了,然后把刚才创建的多余的那根骨骼再删除。

绑定模型

Setp 1

如图所示保证骨骼和模型一一对应。

Setp 2

在maya的绑定面板中找到蒙皮命令,并按要求设置。

选择硬绑定模式,在大纲中会选择车身模型Body和对应的骨骼BodyRoot,然后执行Apply命令。

这样车身的绑定就做好了,按照此类方法,一次前轮,后轮,方向盘进行绑定。

完成绑定后,导出FBX格式。

Setp 3

将FBX文件导入UE4引擎中。

制作动画

完成上述操作后,带有骨骼绑定的车辆模型已导入完成,但是车辆还缺少动画信息。接下来,将对车辆进行动画K帧。

制作车轮旋转动画

Setp 1

选中所有车轮骨骼,将动画设置在0-4帧的范围内。

Setp 2

在第0帧时,将旋转值设为0,执行K帧。

Setp 3

在第4帧时,将旋转值设为360,执行K帧。

Setp 4

这样就完成了第一段动画的制作,然后选中根骨骼,导出FBX,不用导出模型。FBX文件命名为:Ani_VEH_车辆模型名_MoveFWD

制作车轮左转弯动画

Setp 1

置动画帧范围为0-1区间。

Setp 2

将前面设定的前进动画帧清除掉,选中两个前车轮的骨点,在0帧处设定Z轴旋转30度的关键帧,确保车轮不会与轮眉穿插,执行然后K帧。

Setp 3

视图中选中方向盘骨点,配合车轮的旋转方向为方向盘设置关键帧。在第0帧处为X轴旋转设置60度的关键帧。

Setp 4

将其动画文件导出为FBX,仅导出骨骼,不导出模型。

Setp 5

命名为Ani_VEH_车辆模型名_DriftL

制作车轮右转弯动画

与制作车轮左转弯的动画方式一样,在第O帧的地方,将前轮的旋转值设为-30,执行K帧。将方向盘旋转值设为-60,执行K帧。同样保存文件,导出成FBX,只导骨骼,不导模型。 命名为:Ani_VEH_车辆模型名_DriftR

这样,我们就获得了左转,右转,前进(或后退)的三段动画了。接下来将这三段动画的骨骼文件FBX导入到UE引擎中进行动画融合。

在引擎中进行动画融合

Setp 1

三段动画文件导入到UE中。

Setp 2

击导入后的文件打开细节面板,测试车辆的轮胎动画是否正常。

Setp 3

检查动画信息有效后,进行动画融合。创建BlendSpace,注意命名和保存的位置(命名按此方式:Ani_模型名字_BS_MoveFWD)(和动画文件放在一起)

Setp 4

双击打开创建好的BlendSpace,设置AxisSettings中的参数(与截图中相同)。在Additive中指认向前行驶的动画文件,为基础动画。

Setp 5

别双击打开左右转弯的动画文件,将向前行驶的动画文件到Additive的相应位置。可实现转向的同时车轮转动。

Setp 6

双击打开BlendSpace文件,将左转、直行、右转三个文件拖到混合面板中的左、中、右位置上。拖动中间滑块可以实现动画(-1、0、1)的混合调用。

至此,已经完成模型的制作,骨骼的绑定,动画的制作,引擎中动画的融合了。

运用SimOneEditor打包pak文件

生成文件参考ModelSample文件夹内pakchunk10-WindowsNoEditor.pak文件。

Setp 1

将FBX格式模型导入SimOneEditor,导入完成后,应该有以下资产: - SkeletalMesh - Skeleton - PhysicsAsset以及相应的材质

Setp 2

双击打开打开/Game/SimOneMaps/L_SimOneEditor_AssetMap将SkeletalMesh直接拖放到场景中,完成添加

Setp 3

执行打包脚本,如果没有特殊打包需求,可以直接运行PackScene.bat 脚本执行打包,脚本位置路径:

\Simone_Editor\SimOneEditor\SimOne\PackScene.bat

打包完成后会生成pakchunk10-WindowsNoEditor.pak 文件,文件路径:

\Simone_Editor\SimOneEditor\SimOne\Output\WindowsNoEditor\SimOne\Content\Paks\pakchunk10-WindowsNoEditor.pak

Setp 4

拷贝第3步中生成的pak

文件到51Sim-One 工程的pak路径下 A: SimoneEditor 生成的pak文件路径:

\Simone_Editor\SimOneEditor\SimOne\Output\WindowsNoEditor\SimOne\Content\Paks\pakchunk10-WindowsNoEditor.pak B: 51Sim-One pak

B: 51Sim-One pak 路径

..\Unreal\SimOne\Content\Paks (不可含有中文)

将A路径下的pakchunk10-WindowsNoEditor.pak文件拷贝到B路径下 至此,在51Sim-One高精度渲染的主车模型已制作完毕。

低精度主车模型制作及打包

低精度主车模型主要用于主车编辑器与WebObserver测试可视化渲染。

低精度主车模型制作规范

Setp 1

比例大小:车辆模型尺寸应当符合现实世界的真实大小。

Setp 2

轴向坐标:车辆模型在DCC软件中应当是X轴朝前,Z轴朝上,轮胎下缘应放置在地平面之上且模型中心点坐标应放在后轮中心点下缘如

Setp 3

面数:整车三角面控制在2万以内为佳(保持外观剪影圆润,结构清晰)。内饰及看不见的面全部删除,保持单面。注意法线方向,保持模型干净整洁,杜绝非法面,0边面,多面共边等。

Setp 4

UV: 模型的UV目前仅需制作1UV即可,UV需充分展开且合理排布。注意材质ID相接的UV需要断开,可以重叠。

Setp 5

材质ID:1个材质球。UV匹配共用贴图如(图3)根据车辆本身的材质分别给予相对应的UV位置。

Setp 6

车辆模型处理好后,清除历史信息,FreezeTransformations,重命名。

Setp 7 导出格式:OBJ。为了减小文件体积,不必要的信息都不要携带 如

准备配置文件

高精度模型配置文件

生成文件参考ModelSample文件夹内MainVehicle_Asset_template.json文件。

配置文件指定导入高精度模型数组与资产调用路径。配置该文件后拷贝至

\release-dev\Unreal\Engine\Settings\

Setp 1

CustomVehicles:自定义车辆模型数组,可以配置添加多个导入的主车模型,注意该模型是在Simone_Editor 中制作的UE4 资产。

Setp 2 数组对象字段说明 1. ModelName: 模型名称,需要和manifest.json配置文件中的model字段完全一致,依靠该字段索引资产。 2. TargetSkeletonPath:模型骨骼资产路径,此骨架资产为第一步FBX 模型导入到Simone_Editor 中的骨架资产,以BenzSL500 车辆模型为例:

右键该资产 Copy Reference,可以粘贴资产路径

Skeleton'/Game/SimOneAssets/MainCarAsset/TemplateCar1/SK_VEH_BenzSL500_Skeleton.SK_VEH_BenzSL500_Skeleton'
注意取单引号中间的/Game/SimOneAssets/MainCarAsset/TemplateCar1/SK_VEH_BenzSL500_Skeleton.SK_VEH_BenzSL500_Skeleton骨架资产路径 填写到TargetSkeletonPath 字段中。
  1. TargetSkeletalMeshPath: 模型SkeletalMesh资产路径,此骨架资产为第一步FBX 模型导入到Simone_Editor 中的SkeletalMesh资产,以BenzSL500 车辆模型为例:

至此,高精度模型资产及配置文件已通过上述步骤拷贝到了51Sim-One。

低精度模型配置文件

重要

生成文件已包含在SimOneEditorSimOneCar文件夹内ego.zip内的manifest.json。

根据步骤制作低精度模型manifest.json文件,该文件包含以下内容如

name: web页面显示的模型名称,用户可自定义

model: 辆模型名,需与高精度模型配置文件中ModelName保持一致

brand: 车辆品牌名

reduced_obj: WebObserver 需要的主车简模文件

refined_obj: 主车编辑器需要的模型文件

texture: WebObserver 需要的主车简模贴图文件

thumbnail: web页面显示的主车模型ICON 图标

dimensions: 主车长宽高 尺寸

准备配置文件压缩包

重要

生成文件参考SimOneEditorSimOneCar文件夹内ego.zip。

此步骤是模型导入51Sim-One前的最后一步准备工作,将资产配置清单、低精度模型、模型缩略图、贴图等文件打包成ego.zip文件。 如下图示意

使用自定义主车模型运行测试

将模型导入51Sim-One

若需启用UE observer渲染,则请确保高精度模型的pak文件及配置文件已拷贝到指定路径。

Setp 1

启动51Sim-One,进入资源库,选择主车模型文件夹点击导入。

Setp 2

导入配置文件包

Setp 3

导入完成后主车模型文件夹如。

配置主车

Setp 1

在资源库选择主车预设文件夹,点击加号新建一辆主车预设,右键重命名为Test

Setp 2

双击该主车预设图标进入主车编辑器。

Setp 3

选择主车资源库-主车模型文件夹,可看见导入的模型,拖拽至视窗完成模型替换。

Setp 4

按需配置动力学、传感器、主控制器。

Setp 5

点击保存,至此,配置主车已完成。

运行测试

打开51Sim-One测试案例库,选择测试案例,点击运行,选择主车类型为Test即可。

查看UE Observer(高精度模型)
查看Web Observer(低精度模型)

外部场景导入流程

Step1 初始化安装

51Sim-One定制化UE引擎(基于UE4.25.3),其中,Engine目录为UE引擎51Sim-One定制化版本;
51Sim-One目录为用户场景编辑项目,打包后用于挂载;SetupEngine.bat为初始化引擎,首次使用时运行SetupEngine.bat 安装依赖包并注册引擎。

Step2 功能简介

打开SimOneEditor下的SimOne.uproject,自动编译该项目;Editor启动时编译Shader,视电脑配置需要等待一段时间。
Editor打开后默认为L_SimOneEditor_Template场景模板地图,只包含一个用于临时照明的天气子关卡。
默认提供三个插件:
  1. RoadEditor用于导入OpenDrive自动化建路;

  2. FbxExporter用于导出场景所有碰撞体到Fbx文件,PhysXSerializer.exe可转换Fbx到PhysX场景;

  3. SimOneSegmentationChecker用于检查场景物理材质设置是否正确。

Step3 地图简介

Editor打开后, 在/Game/SimOneMaps下可以找到一些预置的Maps,主要包括:

  1. L_SimOneEditor_AssetMap, 可用于挂载一些公共的资源到51Sim-One中,比如主车;

  2. L_SimOneEditor_Sample_01和L_SimOneEditor_Sample_02,SimOneEditor示例,可用于快速测试;

  3. L_SimOneEditor_Template, 空地图模板,复制该模板可用于创建其他的地图。

Step4 导入OpenDRIVE地图到Sim-One中

打开51Sim-One,如下图打开资源库(标1),打开地图文件夹,选择自定义地图(标2),点击导入(标3)。

选择对应的OpenDRIVE文件并导入(这里为SimOneEditor安装目录下的SimOne/OpenDRIVE/sample_01.xodr),
当OpenDRIVE导入成功后,会生成OpenDRIVE的ID(这里为47ee5553-31fd-48c1-8140-42b5480ebfb6), 此ID将用于和美术地图进行对应。

Step5 添加美术地图

以添加一个与Step4匹配的美术地图为例, 复制L_SimOneEditor_Template,创建关卡名为47ee5553-31fd-48c1-8140-42b5480ebfb6,双击打开该关卡。
使用File->OpenDrive Exchange->Load From OpenDrive File, 通过RoadEditor把OpenDrive(选取您需要的地图的xodr文件,这里为sample_01.xodr)转换为UE中的对象。

Step6 场景编辑

接下来可以在场景中按照自己需要添加一些静态资源了。在/Game/SimOneAssets/StaticActor下有一些预置静态资源,可放入场景中。放入完毕后保存关卡。

Step7 关于碰撞效果

如关心主车与场景的碰撞效果,则需要如下步骤,具体可参考SimOne/Plugins/PhysXSerializer/README:
1. 使用File→Export Collision导出场景为Fbx文件 2. 再使用SimOne/Plugins/PhysXSerializer/bin/Win/PhysXSerialzier.exe转换Fbx为PhysX场景文件 3. 把生成好的PhysX场景文件复制到51Sim-One发布包的Web/db/physx_scene目录下

Step8 添加新地图打包支持

编辑保存好的场景需要打包才能进一步使用。
打开SimOneEditor/SimOne下的Config/DefaultGame.ini,在其中添加新地图打包支持:
+MapsToCook=(FilePath=“/Game/SimOneMaps/47ee5553-31fd-48c1-8140-42b5480ebfb6”)
+PrimaryAssetRules=(PrimaryAssetId=“Map:/Game/SimOneMaps/L_SimOneEditor_Sample_02”,Rules=(Priority=10,ChunkId=10,bApplyRecursively=True,CookRule=AlwaysCook))

Step9 打包pak文件

运行SimOneEditor/SimOne下的PackScene.bat,打包pak文件,结果位于SimOneEditor/SimOne/Output/WindowsNoEditor/SimOne/Content/Paks下。
pakchunk10-WindowsNoEditor.pak里包含了新加的地图,要将这一pak文件拷贝至simone安装目录下的/Unreal/SimOne/Content/Paks文件夹中去。
注意:场景打包需要安装Visual Studio 2017支持

在SimOne中新建对应以上地图的案例, 即可成功挂载该美术场景。