Qt Quick 3D Detailstufe
Detailstufe (LoD)
Der Begriff „Detailstufe (LoD)“ bezieht sich auf die Technik, bei der je nach Entfernung zur Kamera unterschiedliche Versionen eines 3D-Modells verwendet werden. Ziel dabei ist es, die Ressourcennutzung zu optimieren, indem einfachere Versionen des Modells verwendet werden, wenn es weit entfernt ist oder nur einen kleinen Teil des Bildschirms einnimmt, während detailliertere Versionen zum Einsatz kommen, wenn es näher ist oder einen größeren Teil des Bildschirmraums einnimmt. Dieser Ansatz ermöglicht eine effiziente Nutzung der GPU-Ressourcen bei gleichbleibender visueller Wiedergabetreue.
Qt Quick 3D bietet sowohl ein automatisches als auch ein explizites Detaillierungsgrad-System. Das automatische System basiert auf der Verwendung eines einzigen Meshes, in dessen Mesh-Datei mehrere Detaillierungsgrade gespeichert sind. Das explizite System basiert auf der Verwendung einer „ LodManager “-Komponente, um die verschiedenen Detaillierungsgrade als untergeordnete Modelle festzulegen.
Automatische Detailstufe
Die primäre Methode zur Nutzung der automatischen Detailebenenunterstützung ist der Import von Inhalten mit dem „Balsam Asset Import Tool“. Durch die Verwendung des Flags „ --generateMeshLevelsOfDetail “ beim Importieren von Assets generiert das Tool, sofern möglich, Detailebenen für jedes Mesh. Dies geschieht durch den Versuch, die Geometrie des ursprünglichen Meshs zu vereinfachen, wobei die allgemeinen Merkmale erhalten bleiben. Das Ergebnis sind zusätzliche Geometrie sowie neue Indexwerte für jede weitere Detailstufe und ein Entfernungsfaktor, anhand dessen bestimmt wird, welches Mesh für eine bestimmte Rendergröße verwendet wird. Dieser Entfernungsfaktor hängt mit der Entfernung des gerenderten Objekts zur Kamera zusammen, doch am wichtigsten ist ein gutes Verhältnis von Geometrie pro Pixel. Diese Daten werden in die .mesh-Datei geschrieben und bei Verwendung durch ein Modell automatisch herangezogen.

Ein Nachteil des automatischen Systems – und der Grund, warum es standardmäßig nicht aktiviert ist – besteht darin, dass bei der Reduzierung der Geometrie möglicherweise visuelle Artefakte entstehen können. Der verwendete Algorithmus zur Geometrievereinfachung versucht, die Merkmale des Modells zu erhalten, doch in manchen Fällen kann es erforderlich sein, die Normalen des Meshes neu zu berechnen, um das beabsichtigte visuelle Erscheinungsbild beizubehalten. Dies kann durch die Verwendung des Flags „ --recalculateLodNormals “ beim Importieren des Assets erfolgen. Der Prozess der Normalberechnung lässt sich weiter verfeinern, indem Eulerwinkelwerte an die Argumente „ --recalculateLodNormalsMergeAngle “ und „ --recalculateLodNormalsSplitAngle “ übergeben werden, um den Winkel zu steuern, bei dem Normalen jeweils zusammengeführt oder geteilt werden.
Der Hauptvorteil des automatischen Systems besteht darin, dass es einfach zu verwenden ist, sobald das Asset mit den entsprechenden Einstellungen importiert wurde. Für die Nutzung des automatischen Systems ist kein zusätzlicher Code erforderlich, und alle Modelle, die auf die generierten Mesh-Dateien mit Detailebenen-Geometrie verweisen, wählen automatisch die geeignete Geometrie aus, je nachdem, wie viele Pixel das Modell auf dem Bildschirm einnimmt.
Es ist möglich, das Verhalten der automatischen Auswahl der Detailstufe entweder unter „ global level “ oder unter „ per-model level “ anzupassen, indem die Eigenschaft „ levelOfDetailBias “ von „ Camera “ oder „ Model “ verwendet wird. Der Standardwert von 1,0 für jede dieser „Bias“-Eigenschaften bedeutet, dass dem vom automatischen System berechneten Wert vertraut wird. Dieser Wert stellt eine Abweichung vom Idealwert dar, sodass ein Wert kleiner als 1,0 eine noch kleinere gerenderte Größe erfordert, bevor auf eine geringere Detailstufe umgeschaltet wird. Werte über 1,0 führen dazu, dass niedrigere Detailstufen früher verwendet werden. Ein Wert von 0,0 deaktiviert die Verwendung von Detailstufen vollständig und verwendet stets die ursprüngliche Mesh-Geometrie.
Das automatische System ist nicht so flexibel wie das explizite System. Beispielsweise verwendet das automatische System immer dasselbe Material für alle Detailstufen, was möglicherweise nicht immer wünschenswert ist. Ein weiterer potenzieller Nachteil ist, dass es keinen Übergang zwischen den verschiedenen Detailstufen gibt, was bei automatischen Detailstufen zwar idealerweise nicht erforderlich sein sollte, für bestimmte Anwendungsfälle jedoch wünschenswert sein kann.
Explizite Detailstufen
Das explizite Detaillierungsgrad-System ist flexibler als das automatische System, erfordert jedoch mehr Aufwand bei der Verwendung. Das explizite System basiert auf der Verwendung einer „ LodManager “-Komponente, um die verschiedenen Detailebenen als untergeordnete „ Model “-Komponenten festzulegen. Alle untergeordneten Elemente der „ LodManager “, die Instanzen von „Model“ sind, gelten als Detailebene. Dies ist sehr leistungsstark, da jede Detailebene ein vollständig benutzerdefiniertes Modell mit eigenen Geometrien und Materialien sein kann.
Die „ LodManager “-Komponente verfügt außerdem über die Eigenschaft „ distances “, mit der festgelegt wird, welche untergeordnete „ Model “-Komponente verwendet werden soll. Der „ LodManager “-Knoten wechselt zur nächsten untergeordneten „ Model “-Komponente, sobald sich die Kamera der jeweiligen Entfernungsgrenze nähert. Mit der Eigenschaft „ fadeDistance “ lässt sich festlegen, bei welcher Entfernung der Überblendungsübergang an den Entfernungsgrenzen beginnt und endet.
Dies ist ein Beispiel für die Verwendung des expliziten Detailstufensystems:

Im genannten Beispiel wird die Eigenschaft „ LodManager “ verwendet, um für jede Detailstufe der Marmorbüste explizit unterschiedliche Mesh-Dateien festzulegen.
LodManager {
camera: camera
distances: [100, 140, 180]
fadeDistance: 10
Model {
scale: Qt.vector3d(100, 100, 100);
source: "meshes/marble_bust_01_LOD_0.mesh"
materials: [ marbleMaterial ]
}
Model {
scale: Qt.vector3d(100, 100, 100);
source: "meshes/marble_bust_01_LOD_1.mesh"
materials: [ marbleMaterial ]
}
Model {
scale: Qt.vector3d(100, 100, 100);
source: "meshes/marble_bust_01_LOD_2.mesh"
materials: [ marbleMaterial ]
}
Model {
scale: Qt.vector3d(100, 100, 100);
source: "meshes/marble_bust_01_LOD_3.mesh"
materials: [ marbleMaterial ]
}
}Für diesen Code ist hier ein Diagramm der Definition dargestellt, das verdeutlicht, wie die Abstandsliste verwendet wird, um die Grenzen zwischen den verschiedenen Detailstufen festzulegen, sowie die Eigenschaft „fadeDistance“, die zur Definition des Überblendungsübergangs dient.

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