一、在Blender中将模型导出为FBX格式。
(一)导出前应进行的前置操作:
1.对模型应用位置、旋转和缩放。选中模型后,按Ctrl+A,选择应用全部。
2.正确为模型创建UV展开、材质及贴图。纹理会导入应用于不同材质ID的图像。建议使用.png或压缩图像格式。
3.对模型添加三角化修改器,并应用。
4.要导出为FBX格式,必须在Blender中安装并启用FBX导出插件。在默认安装Blender时,FBX format默认未启用。如果没有导出为FBX的选项,请按照以下步骤确保已启用插件:
1)选择编辑>偏好设置>插件。
2)搜索fbx。
3)现在应该可以看到该附加组件,选择其名称旁边的复选框将其启用。
(二)接下来,按照以下步骤导出为FBX:
1.选择文件>导出> FBX (.fbx)。
2.在右侧框中,将路径模式切换为复制,并确认选中后方‘内嵌纹理’图标,将向前设置为Y向前,将向上设置为Z向上。对于动画,确保选中动画选项卡。
3.选择导出FBX按钮。
二、使用Balsam 资产导入工具处理Blender导出的FBX模型。
Balsam工具是一款命令行应用程序,是Qt Quick 3D资产调节管道的一部分。其目的是将在Maya、3ds Max或Blender等数字内容创建工具中创建的资产转换为高效的运行时格式,以便在Qt Quick 3D中使用。在应用程序中直接引用交换格式是不可能的,也是不合理的,因为在资产内容可用于实时渲染之前,需要大量资源对其进行解析和调节。相反,交换格式可以通过Balsam工具转换为QML组件和资源(如几何图形和纹理)。
有balsamui工具,可通过窗口界面操作
使用方法
balsam [options] sourceFilename
使用示例
要转换testModel.fbx文件中的3D资产,可使用以下命令:
balsam testModel.fbx
这将生成以下文件:
- meshes/testModel.mesh
- maps/textureData.png
- TestModel.qml
这里介绍UI工具的使用。
1.在QT安装目录下找到balsamui程序并打开,具体路径如Qt\6.8.1\mingw_64\bin。
2.在上方Input files输入框中,点击Browse,选择你要转换的fbx文件,在下方Output folder部分,点击Browse选择你要保存生成的文件的路径。
3.点击最上方Settings,有很多3D Scence的设置,根据需要勾选,工具默认会勾选一些必要的选项。与之相对应的命令行工具选项具体含义如下表,请自行对照。
4.点击Input界面最下方的Convert即可。
5.在Qt Quick 3D项目中,通过添加现有文件功能,将生成的qml文件、maps文件夹、meshes文件夹添加进入工程。
6.在Qt Quick 3D项目中使用该QML组件:
import QtQuick3D
TestModel{
id: modelInstance
}
命令行工具选项含义
选项 | 含义 |
--outputPath, -o <outputPath> | 设置生成文件的位置。默认为当前目录。 |
--calculateTangentSpace | 计算导入网格的切线和位角。 |
--dropNormals | 删除所有网格所有面的法线。 |
--fbxPreservePivots | 保留 FBX 资产创建的额外枢轴节点(可创建较深的节点层次结构) |
--findDegenerates | 此步骤会搜索所有网格中的退化基元,并将其转换为适当的线或点。 |
--findInstances | 此步骤会搜索重复的网格,并将其替换为对第一个网格的引用。 |
--findInvalidData | 此步骤会搜索所有网格中的无效数据,如归零的法线矢量或无效的 UV 坐标,并删除/修复它们。这样做的目的是消除一些常见的输出错误。 |
--fixInfacingNormals | 尝试确定哪些网格的法线矢量朝内,并将其反转。 |
--generateLightmapUV | 执行光贴图UV展开并为网格生成额外的UV通道。这些UV数据将用于光贴图制作和运行时的光贴图。 |
--generateMeshLevelsOfDetail | 在可能的情况下,通过自动简化源网格来创建网格细节等级。 |
--generateMipMaps | 强制所有导入的纹理组件生成 mip 贴图,以进行 mip 贴图纹理过滤 |
--generateNormals | 为所有网格的所有面生成法线。 |
--generateSmoothNormals | 为网格中的所有顶点生成平滑法线。 |
--globalScale | 此步骤将对模型进行全局缩放。 |
--globalScaleValue <value> | 全局缩放因子由--globalScale使用。 |
--improveCacheLocality | 重新排列三角形,以提高顶点缓存的位置性。 |
--joinIdenticalVertices | 识别并连接所有导入网格中的相同顶点数据集。 |
--optimizeGraph | 优化场景层次结构的后处理步骤。 |
--optimizeMeshes | 减少网格数量的后处理步骤。 |
--preTransformVertices | 移除节点图,并使用节点的局部变换矩阵对所有顶点进行预变换。 |
--recalculateLodNormals | 必要时为生成的网格细节级别计算新的法线。 |
--recalculateLodNormalsMergeAngle <value> | 为"生成网格"的细节级别重新计算法线时,考虑法线平滑/合并的最大角度(度)。 |
--recalculateLodNormalsSplitAngle <value> | 为"生成网格"的详细程度重新计算法线时,考虑法线分割的最大角度(度)。 |
--removeComponentAnimations | 删除网格中的动画组件。 |
--removeComponentBoneWeights | 删除网格中的骨骼权重。 |
--removeComponentColors | 删除网格中的颜色组件。 |
--removeComponentNormals | 删除网格的法线分量。 |
--removeComponentTangentsAndBitangents | 删除网格上的切线和位切线分量。 |
--removeComponentTextures | 删除网格中的任何内嵌纹理组件。 |
--removeComponentUVs | 删除网格中的 UV 组件。 |
--removeRedundantMaterials | 搜索多余/未引用的材料并删除它们。 |
--splitLargeMeshes | 将大网格分割成更小的子网格。 |
--transformUVCoordinates | 此步骤应用每个纹理的UV变换,并将其烘焙为独立的纹理坐标通道。 |
--useBinaryKeyframes | 将关键帧数据记录为二进制文件 |
--useFloatJointIndices | 为GLES 2.0存储浮点数形式的联合索引。 |