本页内容

Balsam 资产导入工具

Balsam 工具是Qt Quick 3D 资产预处理管道中的一部分。其目的是将使用Maya、3ds Max 或Blender等数字内容创作工具创建的资产,转换为适用于Qt Quick 3D 的高效运行时格式。 在应用程序中直接引用交换格式既不可行,也没有实际意义,因为在资产内容可用于实时渲染之前,需要消耗大量资源来解析和处理其内容。相反,可以通过Balsam工具将交换格式转换为QML组件以及几何体和纹理等资源。

Balsam 命令行工具

要通过命令行运行 Balsam,请按以下方式调用balsam 可执行文件:

balsam [options] sourceFilename

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

balsam testModel.fbx

这将生成以下文件:

  • meshes/testModel.mesh
  • TestModel.qml

随后可通过使用相应的 QML 组件,在Qt Quick 3D 项目中使用这些文件:

import QtQuick3D

TestModel {
   id: modelInstance
}

注意:生成的网格文件名取决于 源文件(本例中为 FBX 文件)中定义的网格名称,可能与testModel.mesh 不同。

Balsam 用户界面

Balsam 还提供了一个名为balsamui 的图形用户界面(GUI)前端,该前端随balsam 可执行文件一同发布。在balsamui 中,您可以选择输入文件和输出目录,而balsam 可执行文件的命令行选项会被映射到交互式控件上:

Balsam UI 应用程序的屏幕截图。

支持的 3D 资源类型

  • Wavefront (.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贴图
--useBinaryKeyframes将关键帧数据记录为二进制文件
--generateLightmapUV执行光照贴图 UV 展开,并为网格生成一个额外的 UV 通道。此 UV 数据随后将由光照贴图烘焙器使用,并在运行时光照贴图过程中使用。
--generateMeshLevelsOfDetail在可能的情况下,通过自动简化源网格来创建网格细节级别(LOD)。
--recalculateLodNormals在必要时为生成的多级细节网格计算新的法线。
--recalculateLodNormalsMergeAngle <value>在为生成的网格细节级别重新计算法线时,法线平滑/合并所考虑的最大角度(单位:度)。
--recalculateLodNormalsSplitAngle <value>为生成的网格细节级别重新计算法线时,法线拆分所考虑的最大角度(单位:度)。

© 2026 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.