Balsam 资产导入工具

Balsam 工具是一个命令行应用程序,是Qt Quick 3D 资产调节管道的一部分。其目的是将在Maya3ds MaxBlender等数字内容创建工具中创建的资产转换为高效的运行时格式,以便在Qt Quick 3D 中使用。在应用程序中直接引用交换格式是不可能的,也是不合理的,因为需要大量资源来解析和调节资产内容,然后才能用于实时渲染。相反,交换格式可以通过 Balsam 工具转换为 QML 组件以及几何图形和纹理等资源。

使用方法

balsam [options] sourceFilename

使用示例

要将testModel.fbx 文件中的 3D 资产转换为balsam ,可使用以下命令:

balsam testModel.fbx

这将生成以下文件:

  • meshes/testModel.mesh
  • TestModel.qml

然后可在Qt Quick 3D 项目中使用该 QML 组件:

import QtQuick3D

TestModel {
   id: modelInstance
}

支持的 3D 资产类型

  • 波阵面 (.obj)
  • COLLADA (.dae)
  • FBX (.fbx)
  • STL (.stl)
  • PLY (.ply)
  • GLTF2 (.gltf, .glb)

支持的某些格式还允许嵌入或引用纹理资产。只要 Qt 也支持这些资产,我们就同样支持它们。

基于图像的照明烘焙

Balsam 还支持从 .hdr 文件生成预过滤的立方体贴图图像。指定一个扩展名为 .hdr 的文件作为输入,会生成一个扩展名为 .ktx 的同名文件。然后,应用程序就可以发送生成的 .ktx 文件,并从与SceneEnvironment::lightProbe 相关联的Texture 中引用该文件。这就避免了基于图像的照明所需的高成本运行时处理。更多详情,请参阅预生成 IBL 立方体地图

支持的选项

下表列出了balsam 在转换资产文件时可识别的命令行选项:

注: 对于每个布尔选项,都可以使用--disable-<option-name>

选项选项
--outputPath, -o <outputPath>设置生成文件的位置。默认为当前目录。
--calculateTangentSpace计算导入网格的切线和位角。
--joinIdenticalVertices识别并连接所有导入网格中的相同顶点数据集。
--generateNormals为所有网格的所有面生成法线。
--generateSmoothNormals为网格中的所有顶点生成平滑法线。
--splitLargeMeshes将大网格分割成更小的子网格。
--preTransformVertices移除节点图,并使用节点的局部变换矩阵对所有顶点进行预变换。
--improveCacheLocality重新排列三角形,以提高顶点缓存的位置性。
--removeRedundantMaterials搜索多余/未引用的材料并删除它们。
--fixInfacingNormals尝试确定哪些网格的法线矢量朝内,并将其反转。
--findDegenerates此步骤会搜索所有网格中的退化基元,并将它们转换为适当的线或点。
--findInvalidData此步骤会搜索所有网格中的无效数据,如归零的法线矢量或无效的 UV 坐标,并删除/修复它们。这样做的目的是消除一些常见的输出错误。
--transformUVCoordinates此步骤应用每个纹理的 UV 变换,并将其烘焙为独立的纹理坐标通道。
--findInstances此步骤会搜索重复的网格,并将其替换为对第一个网格的引用。
--optimizeMeshes减少网格数量的后处理步骤。
--optimizeGraph优化场景层次结构的后处理步骤。
--useFloatJointIndices为 GLES 2.0 存储浮点数形式的联合索引。
--globalScale此步骤将对模型进行全局缩放。
--globalScaleValue <value>全局缩放因子由--globalScale 使用。
--dropNormals删除所有网格所有面的法线。
--removeComponentNormals删除网格的法线分量。
--removeComponentTangentsAndBitangents删除网格上的切线和位切线分量。
--removeComponentColors删除网格中的颜色组件。
--removeComponentUVs删除网格中的 UV 组件。
--removeComponentBoneWeights删除网格中的骨骼权重。
--removeComponentAnimations删除网格中的动画组件。
--removeComponentTextures删除网格中的任何内嵌纹理组件。
--fbxPreservePivots保留 FBX 资产创建的额外枢轴节点(可创建较深的节点层次结构)
--generateMipMaps强制所有导入的纹理组件生成 mip 贴图,以进行 mip 贴图纹理过滤
--useBinaryKeyframes将关键帧数据记录为二进制文件
--generateLightmapUV执行光贴图 UV 展开并为网格生成额外的 UV 通道。这些 UV 数据将用于光贴图制作和运行时的光贴图
--generateMeshLevelsOfDetail在可能的情况下,通过自动简化源网格来创建网格细节等级。
--recalculateLodNormals必要时为生成的网格细节级别计算新的法线。
--recalculateLodNormalsMergeAngle <value>为 "生成网格 "的细节级别重新计算法线时,考虑法线平滑/合并的最大角度(度)。
--recalculateLodNormalsSplitAngle <value>为 "生成网格 "的详细程度重新计算法线时,考虑法线分割的最大角度(度)。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.