5.4 飞机三维模型建立与导入

本节导航


本小节的例程源码路径:RflySimAPIs\\UE4MapSceneAPI\\VehicleModel 一个更详细的固定翼的建模例子可以参考文档:RflySimAPIs\UE4MapSceneAPI\MQ-9Reaper\MQ-9Reaper导入步骤.docx

5.4.1 获取飞机三维模型文件

  • 首先需要安装3Ds Max,这里我们安装的是3Ds Max 2020。点击上图快捷方式打开中文版3Ds Max,并点击菜单栏“自定义”-“单位设置”,将单位改成cm
  • 用3Ds Max打开一个.max格式的三维飞机模型文件,或者从CAD之类的软件导入一个三维模型,得到.max模型文件。这里可以去“RflySimAPIs\UE4MapSceneAPI\VehicleModel”打开我们给定的例程“DroneyeeX680.max”
  • 在3Ds max中选中所有组件,点击菜单栏“组”-“组”,就可以将所有组件弄成一个整体,这时候可以调整飞机的位置,姿态,轴的位置,轴的方向等。需要满足以下要求: 1)确保机头方向指向3Ds Max的x轴正方向,机顶指向z轴正方向(向上); 2)确保飞机的质心在3Ds Max的中心;3)确保模型中没有隐形(不显示的)组件,如果有需要删除
  • 选中上一步的飞机整体组合,点击菜单栏-“组”-“解组”即可解开组合。然后,将机身(除了四个螺旋桨)之外的组件合成一个组,每个螺旋桨单独组成一个组。这样就留下了五个组,分别是机身、四个螺旋桨

5.4.2 获取个组件坐标

  • 如下图,点击工具栏“移动”按钮,再点击选中机身或螺旋桨对象,就可以在下方状态栏中读取 对象的三维坐标(将坐标都输入为0就可以将对象挪到中心)
  • 点击机身就可以看到机身的三维坐标(x,y,z)\=[-0.449,- 0.363,0]
  • 右上螺旋桨[24.977, -24.439,11.222],左下螺旋桨[-25.99,22.528, 11.022], 左上螺旋桨[24.977, 24.693, 11.022],右下螺旋桨[-25.99, -22.274, 11.022]


5.4.3 获取螺旋桨相对机身坐标

  • 将各个螺旋桨的坐标减去机体的坐标,就可以得到各个螺旋桨相对机体中心的三维坐标。由于3Ds Max是采用前左上的右手坐标系,UE4采用前右上的左手坐标系,因此需要对y轴进行反向
  • 这样就得到了右上、左下、右下、左上的坐标序列为:[25.4260,24.0760,11.2220], [-25.5410,-22.8910,11.0220], [25.4260, -25.0560,11.0220], [-25.5410,21.9110,11.0220],这几个坐标值留着备用。然后,记录飞机质心到地面(机体最低端)的距离,这里大约取8cm
  • 将DroneyeeX680.max复制两份,分别命名为DroneyeeX680Body.max和DroneyeeX680Prop.max。在DroneyeeX680Body.max文件中移除四个螺旋桨,并将机身移动 到3Ds Max的坐标中心;在DroneyeeX680Prop.max中移除机体组件和三个螺旋桨,只留下一个,然后移动到3Ds max坐标中心

5.4.4 导出得到FBX模型文件

  • 分别点击3Ds Max的菜单-文件-导出-导出,按下图所示配置,导出得到 DroneyeeX680Body.FBX和DroneyeeX680Prop.FBX文件
  • 关键导出配置如下图所示。注:摄像机、动画、灯光都不要勾选

5.4.5 UE4中飞机模型导入

  • 任意打开一个UE4工程,例如打开前两节的MyProj工程
  • 在其Content新建一个文件夹(这里命名为DroneyeeX680),如下图进入该文件夹后,点击导入按钮,依次将DroneyeeX680Body.FBX和DroneyeeX680Prop.FBX导入进来
  • 注意:导入时记得勾选“Combine Mesh”选项,使得所有组件构成一个整体导入,否则会将机体分成N个部件

5.4.6 UE4中生成模型并导出

  • 由于我们的模型没有定义材质,因此导入进来是白色的,并不美观。需要双击DroneyeeX680Body组件,在其中对关键部件添加颜色材质,例如碳纤维的黑色。同时,复制一个DroneyeeX680Prop组件命名为DroneyeeX680Prop_2,将其材质设置为不用的颜色,以区分飞机的靠前的两个螺旋桨和靠后的两个螺旋桨
  • 在上图中点击“保存所有内容”,再点击UE4菜单栏-文件-打包项目-Windows-Windows 64(需要按生成地图的教程方法,启用光线追踪和禁用PAK打包),就可以生成可以识别的三维文件了。去生成文件路径 “WindowsNoEditor”-MyProj(项目名)-“Content”下,将整个“DroneyeeX680”目录复制出来备用

5.4.7 编写XML文件

  • 导出模型后,我们还需要编写XML文件来帮助RflySim3D识别螺旋桨位置、转动方向、材质等
  • XML文件格式可以参考文件“RflySimAPIs\UE4MapSceneAPI\VehicleModel\DroneyeeX680. xml”
  • 其标准语言格式为各种标签的组合,每个标签由两对<>符号围起来,在标签内部存放着字符串或数字信息。标签内部可以叠加子标签 XML语言格式
  • ClassID标签标示飞机构型,3在我们系统中表示四旋翼
  • DisplayOrder表示四旋翼可选模型列表中的排列优先级(越小排的越靠前),内置的机型优先级从1000开始标号,如果小于1000则会取代内置飞机,优先展示最新导入机型,模板中1015对应的是排名第4的飞机
  • Name标签标示在UE4中显示的飞机名字;Scale标签标示整机三维缩放的尺寸
  • AngEulerDeg表示飞机显示偏转一定角度(单位度),例如输入yaw=180,则飞机初始姿态会掉个头变成头朝后
  • body是机体主标签
  • isAnimationMesh标示是否为带动画的网格,这里一般都需要选0,除非对于一些自带动画的三维模型(例如,行走的人)
  • MeshPath标示机体的三维文件所在目录,其中/Game标示游戏内容目录,DroneyeeX680/DroneyeeX680Body标示刚才拷贝出的机身三维模型文件
  • MaterialPath标示材质的路径,如果UE4里面已经设置过材质这里可以不填,填上的话会用本材质叠加到飞机上
  • CenterHeightAboveGroundCm标示质心离地面高度,这里从3Ds max记录的是8
  • NumberHeigthAboveCenterCm标示飞机上的数字标号显示的高度
  • ActuatorList为作动器(螺旋桨、舵机、轮胎、软管刚体、转台)等外部活动(可定义)组件的列表
  • Actuator标签内为某一个作动器的具体参数
  • MeshPath三维模型路径,同body标签定义
  • MaterialPath材质路径同body标签定义
  • RelativePosToBodyCm表示该作动器(例如螺旋桨)的相对机体中心的位置,这里取第4.3节中记录的值
  • RelativeAngEulerToBodyDeg表示作动器的安装角度(单位度),通常给0即可,表示和导入UE4时的姿态相同,不需要再旋转了
  • RotationModeSpinOrDefect表示作动器运动模式,0表示旋转(输入为转动速度, 单位转每分),1表示偏转(输入为转动角度, 单位度),2表示静止物体,3表示平移(单位厘米)
  • RotationAxisVectorToBody旋转轴,这里多旋翼的螺旋桨是绕z轴旋转,如果是车辆则绕y轴旋转,如果是固定翼的螺旋桨则是绕x轴旋转。
  • OnboardCameras标签页是定义了一些观察的机载摄像头,从第2个摄像头开始,都是固连在机体上的,因此填写摄像头的安装角度和位置即可定义;第1个摄像头是一个跟随观察的视角,它不会跟随飞机俯仰滚转,但是会跟随飞机偏航

5.4.8 更多XML文件demo例程

  • 本平台的所有机型或障碍组件都是通过XML文件实现的
  • 可以访问安装目录下的“RflySim3D\RflySim3D\Plugins\Rfly3DSimPlugin\Content\XML”文件夹中查看.xml后缀文件,学习其他三维实体的导入方法。
  • 里面包含了车、固定翼、小球、发光灯、静止的人、运动的人、二维靶标等各种物体的模型例子,可供学习 :本文件夹的XML例子的MeshPath的路径都使用了/Rfly3DSimPlugin/,代表插件Content目录。使用时请替换为/Game/代表游戏主目录Content

5.4.9 显示导入模型

  • 将编写好的XML文件拷贝到4.6小节生成的DroneyeeX680文件夹(或者直接使用RflySimAPIs\UE4MapSceneAPI\VehicleModel\DroneyeeX680文件夹)中,再一起拷贝到RflySim3D\RflySim3D\Content目录
  • 打开CopterSim和RflySim3D,按下C键可以切换飞机样式,看看自己的飞机模型是否已经导入。
  • 注:XML中DisplayOrder数字小于1000就会超过内置模型排到最前边,变成默认显示飞机
  • 本视频观看地址: 优酷:https://v.youku.com/v\_show/id\_XNDcwNjA4NzIxMg==.html YouTube:https://youtu.be/mKUehJwqqsU

results matching ""

    No results matching ""