Auf dieser Seite

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] sourceFilename

Um ein 3D-Asset aus der Datei „ testModel.fbx “ mit „ balsam “ zu konvertieren, würde folgender Befehl verwendet werden:

balsam testModel.fbx

Dadurch würden die folgenden Dateien generiert:

  • meshes/testModel.mesh
  • TestModel.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:

Ein Screenshot der Balsam-UI-Anwendung.

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.

OptionBeschreibung
--outputPath, -o <outputPath>Legt den Speicherort für die generierten Dateien fest. Standardmäßig ist dies das aktuelle Verzeichnis.
--calculateTangentSpaceBerechnet die Tangenten und Bitangenten für die importierten Netze.
--joinIdenticalVerticesIdentifiziert und vereint identische Scheitelpunktdatensätze innerhalb aller importierten Netze.
--generateNormalsErzeugt Normalen für alle Flächen aller Netze.
--generateSmoothNormalsErzeugt geglättete Normalen für alle Scheitelpunkte im Netz.
--splitLargeMeshesTeilt große Netze in kleinere Teilnetze auf.
--preTransformVerticesEntfernt den Knotengrafen und transformiert alle Scheitelpunkte vorab mit den lokalen Transformationsmatrizen ihrer Knoten.
--improveCacheLocalityOrdnet Dreiecke neu an, um die Lokalität des Scheitelpunkt-Caches zu verbessern.
--removeRedundantMaterialsSucht nach redundanten/nicht referenzierten Materialien und entfernt diese.
--fixInfacingNormalsVersucht zu ermitteln, welche Meshes nach innen gerichtete Normalenvektoren aufweisen, und kehrt diese um.
--findDegeneratesDieser Schritt durchsucht alle Meshes nach entarteten Primitiven und wandelt sie in korrekte Linien oder Punkte um.
--findInvalidDataDieser 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.
--transformUVCoordinatesIn diesem Schritt werden texturspezifische UV-Transformationen angewendet und in eigenständige Texturkoordinatenkanäle eingebrannt.
--findInstancesDieser Schritt sucht nach doppelten Meshes und ersetzt sie durch Verweise auf das erste Mesh.
--optimizeMeshesEin Nachbearbeitungsschritt zur Reduzierung der Anzahl der Meshes.
--optimizeGraphEin Nachbearbeitungsschritt zur Optimierung der Szenenhierarchie.
--useFloatJointIndicesSpeichert Gelenkindizes als Gleitkommazahlen für GLES 2.0.
--globalScaleDieser Schritt führt eine globale Skalierung des Modells durch.
--globalScaleValue <value>Globaler Skalierungsfaktor, der von „ --globalScale “ verwendet wird.
--dropNormalsEntfernt Normalen für alle Flächen aller Polygonnetze.
--removeComponentNormalsEntfernt die Normalkomponente aus den Polygonnetzen.
--removeComponentTangentsAndBitangentsEntfernt Tangenten- und Bitangentenkomponenten aus den Meshes.
--removeComponentColorsEntfernt alle Farbkomponenten aus den Polygonnetzen.
--removeComponentUVsEntfernt alle UV-Komponenten aus den Meshes.
--removeComponentBoneWeightsEntfernt alle Knochengewichte aus den Meshes.
--removeComponentAnimationsEntfernt alle Animationskomponenten aus den Meshes.
--removeComponentTexturesEntfernt alle eingebetteten Texturkomponenten aus Meshes.
--fbxPreservePivotsBehält zusätzliche Pivot-Knoten bei, die von FBX-Assets erstellt wurden (kann tiefe Knotenhierarchien erzeugen)
--generateMipMapsErzwingt, dass alle importierten Texturkomponenten Mip-Maps für die Mip-Map-Texturfilterung generieren
--useBinaryKeyframesZeichnet Keyframe-Daten als Binärdateien auf
--generateLightmapUVFü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.
--generateMeshLevelsOfDetailErstellt nach Möglichkeit Mesh-Detailstufen (Levels of Detail), indem das Quell-Mesh automatisch vereinfacht wird.
--recalculateLodNormalsBerechnet 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.