Balsam-Asset-Import-Tool
Das Balsam-Tool ist eine Anwendung, die Teil der Asset-Aufbereitungspipeline von „ Qt Quick 3D “ ist. Es dient dazu, Assets, die in Tools zur Erstellung digitaler Inhalte wie Maya, 3ds Max oder Blender erstellt wurden, in ein effizientes Laufzeitformat für die Verwendung mit „ Qt Quick 3D “ zu konvertieren. Es ist weder möglich noch sinnvoll, in Anwendungen direkt auf die Austauschformate zu verweisen, da eine große Menge an Ressourcen benötigt wird, um den Inhalt des Assets zu analysieren und aufzubereiten, bevor es für das Echtzeit-Rendering verwendet werden kann. Stattdessen können die Austauschformate über das Balsam-Tool in QML-Komponenten und Ressourcen wie Geometrie und Texturen konvertiert werden.
Balsam-Befehlszeilentool
Um Balsam über die Befehlszeile auszuführen, rufen Sie die ausführbare Datei „ balsam “ wie folgt auf:
balsam [options] sourceFilenameUm ein 3D-Asset aus der Datei „ testModel.fbx “ mit „ balsam “ zu konvertieren, würde folgender Befehl verwendet werden:
balsam testModel.fbxDadurch würden die folgenden Dateien generiert:
meshes/testModel.meshTestModel.qml
Diese können dann in einem „ Qt Quick 3D “-Projekt mithilfe dieser QML-Komponente verwendet werden:
import QtQuick3D
TestModel {
id: modelInstance
}Hinweis: Der Dateinamedes generierten Meshes hängt von den in der Quelldatei (in diesem Beispiel der FBX-Datei) definierten Mesh-Namen ab und kann von „ testModel.mesh “ abweichen.
Balsam-Benutzeroberfläche
Es gibt außerdem eine grafische Benutzeroberfläche für Balsam namens „ balsamui “, die zusammen mit der ausführbaren Datei „ balsam “ ausgeliefert wird. In „ balsamui “ können Sie Ihre Eingabedateien und das Ausgabeverzeichnis auswählen, und die Befehlszeilenoptionen der ausführbaren Datei „ balsam “ werden interaktiven Elementen zugeordnet:

Unterstützte 3D-Asset-Typen
- Wavefront (.obj)
- COLLADA (.dae)
- FBX (.fbx)
- STL (.stl)
- PLY (.ply)
- GLTF2 (.gltf, .glb)
Einige der unterstützten Formate ermöglichen zudem entweder die Einbettung oder die Referenzierung von Textur-Assets. Diese Assets werden ebenfalls unterstützt, sofern Qt sie ebenfalls unterstützt.
Baking für bildbasierte Beleuchtung
Balsam unterstützt zudem die Erstellung eines vorgefilterten Cubemap-Bildes aus .hdr-Dateien. Wird eine Datei mit der Endung .hdr als Eingabe angegeben, wird eine Datei mit demselben Namen, jedoch mit der Endung .ktx, erzeugt. Die Anwendung kann dann die resultierende .ktx-Datei ausliefern und über die mit „ SceneEnvironment::lightProbe “ verknüpfte „ Texture “ darauf verweisen. Dadurch wird die aufwändige Laufzeitverarbeitung vermieden, die für die bildbasierte Beleuchtung erforderlich ist. Weitere Details finden Sie unter „Vorabgenerierung der IBL-Cubemap “.
Unterstützte Optionen
Die folgende Tabelle listet die Befehlszeilenoptionen auf, die von balsam bei der Konvertierung von Asset-Dateien erkannt werden:
Hinweis: Für jede boolesche Option kann „ --disable-<option-name> “ verwendet werden.
| Option | Beschreibung |
|---|---|
--outputPath, -o <outputPath> | Legt den Speicherort für die generierten Dateien fest. Standardmäßig ist dies das aktuelle Verzeichnis. |
--calculateTangentSpace | Berechnet die Tangenten und Bitangenten für die importierten Netze. |
--joinIdenticalVertices | Identifiziert und vereint identische Scheitelpunktdatensätze innerhalb aller importierten Netze. |
--generateNormals | Erzeugt Normalen für alle Flächen aller Netze. |
--generateSmoothNormals | Erzeugt geglättete Normalen für alle Scheitelpunkte im Netz. |
--splitLargeMeshes | Teilt große Netze in kleinere Teilnetze auf. |
--preTransformVertices | Entfernt den Knotengrafen und transformiert alle Scheitelpunkte vorab mit den lokalen Transformationsmatrizen ihrer Knoten. |
--improveCacheLocality | Ordnet Dreiecke neu an, um die Lokalität des Scheitelpunkt-Caches zu verbessern. |
--removeRedundantMaterials | Sucht nach redundanten/nicht referenzierten Materialien und entfernt diese. |
--fixInfacingNormals | Versucht zu ermitteln, welche Meshes nach innen gerichtete Normalenvektoren aufweisen, und kehrt diese um. |
--findDegenerates | Dieser Schritt durchsucht alle Meshes nach entarteten Primitiven und wandelt sie in korrekte Linien oder Punkte um. |
--findInvalidData | Dieser Schritt durchsucht alle Meshes nach ungültigen Daten, wie z. B. auf Null gesetzten Normalenvektoren oder ungültigen UV-Koordinaten, und entfernt bzw. korrigiert diese. Damit sollen einige häufige Exporterfehler beseitigt werden. |
--transformUVCoordinates | In diesem Schritt werden texturspezifische UV-Transformationen angewendet und in eigenständige Texturkoordinatenkanäle eingebrannt. |
--findInstances | Dieser Schritt sucht nach doppelten Meshes und ersetzt sie durch Verweise auf das erste Mesh. |
--optimizeMeshes | Ein Nachbearbeitungsschritt zur Reduzierung der Anzahl der Meshes. |
--optimizeGraph | Ein Nachbearbeitungsschritt zur Optimierung der Szenenhierarchie. |
--useFloatJointIndices | Speichert Gelenkindizes als Gleitkommazahlen für GLES 2.0. |
--globalScale | Dieser Schritt führt eine globale Skalierung des Modells durch. |
--globalScaleValue <value> | Globaler Skalierungsfaktor, der von „ --globalScale “ verwendet wird. |
--dropNormals | Entfernt Normalen für alle Flächen aller Polygonnetze. |
--removeComponentNormals | Entfernt die Normalkomponente aus den Polygonnetzen. |
--removeComponentTangentsAndBitangents | Entfernt Tangenten- und Bitangentenkomponenten aus den Meshes. |
--removeComponentColors | Entfernt alle Farbkomponenten aus den Polygonnetzen. |
--removeComponentUVs | Entfernt alle UV-Komponenten aus den Meshes. |
--removeComponentBoneWeights | Entfernt alle Knochengewichte aus den Meshes. |
--removeComponentAnimations | Entfernt alle Animationskomponenten aus den Meshes. |
--removeComponentTextures | Entfernt alle eingebetteten Texturkomponenten aus Meshes. |
--fbxPreservePivots | Behält zusätzliche Pivot-Knoten bei, die von FBX-Assets erstellt wurden (kann tiefe Knotenhierarchien erzeugen) |
--generateMipMaps | Erzwingt, dass alle importierten Texturkomponenten Mip-Maps für die Mip-Map-Texturfilterung generieren |
--useBinaryKeyframes | Zeichnet Keyframe-Daten als Binärdateien auf |
--generateLightmapUV | Führt das UV-Unwrapping von Lightmaps durch und generiert einen zusätzlichen UV-Kanal für die Meshes. Diese UV-Daten werden anschließend vom Lightmap-Baker und beim Lightmapping zur Laufzeit verwendet. |
--generateMeshLevelsOfDetail | Erstellt nach Möglichkeit Mesh-Detailstufen (Levels of Detail), indem das Quell-Mesh automatisch vereinfacht wird. |
--recalculateLodNormals | Berechnet bei Bedarf neue Normalen für generierte Mesh-Detailstufen. |
--recalculateLodNormalsMergeAngle <value> | Maximaler Winkel in Grad, der bei der Neuberechnung von Normalen für generierte Mesh-Detailstufen bei der Normalen-Glättung/-Zusammenführung berücksichtigt werden soll. |
--recalculateLodNormalsSplitAngle <value> | Maximaler Winkel in Grad, der bei der Neuberechnung von Normalen für generierte Mesh-Detailstufen für die Normalen-Aufteilung berücksichtigt werden soll. |
© 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.