Auf dieser Seite

Persistentes Caching von Shadern mit Qt Quick 3D

Shadern und 3D-Materialien

Das Rendern eines 3D-Objekts mit einem Material erfolgt mithilfe eines Vertex- und eines Fragment-Shaders.

Folgendes geschieht zur Laufzeit, wenn ein Material während der Lebensdauer einer 3D-Szene zum ersten Mal auftritt:

  • Die Shader-Quelltexte werden generiert.
  • Die Shader werden durch die Standard-Qt-Shader-Pipeline geleitet. Das Ergebnis ist eine zwischengespeicherte Bytecode-Version des Shaders (SPIR-V), eine Reihe von Quellcode-Varianten für andere 3D-APIs (GLSL für OpenGL, HLSL für Direct3D usw.) sowie zusätzliche Metadaten.
  • Wenn die 3D-Engine eine „ graphics pipeline “ erstellt, wird eine für die verwendete 3D-API geeignete Bytecode- oder Quellcode-Variante ausgewählt, und anschließend führt die zugrunde liegende 3D-API wahrscheinlich eine Kompilierung in einer zweiten Phase durch, die auf den tatsächlichen GPU-Befehlssatz abzielt.

All dies zusammen kann einen hohen Rechenaufwand bedeuten. Um dies bei nachfolgenden Ausführungen der Anwendung zu vermeiden, werden zwei persistente, festplattenbasierte Caches eingesetzt.

Low-Level-Cache

Qt Quick 3D baut auf „ Qt Quick “ und dem Szenengraphen auf. Für die persistente, festplattenbasierte Zwischenspeicherung von OpenGL-Programm-Binärdateien, Vulkan-Pipelines usw. wird dieselbe Infrastruktur verwendet.

Eine ausführliche Erläuterung hierzu finden Sie unter „ QQuickGraphicsConfiguration#Pipeline Cache Save and Load “.

Standardmäßig ist der Shader-Festplatten-Cache aktiviert. Das bedeutet, dass Qt auch dann, wenn die Plattform oder die 3D-API-Implementierung kein eigenes persistentes Caching kompilierter Shader durchführt, die OpenGL-Programm-Binärdateien oder ähnliche Assets speichern kann, die während der Lebensdauer eines „ QQuickWindow “ gesammelt werden. Das Schreiben der Daten auf die Festplatte erfolgt beim Schließen des Fensters, und sie werden beim nächsten Start der Anwendung wieder geladen. Auf diese Weise kann die Erstellung von Grafik-Pipelines erheblich beschleunigt werden, wenn die Shader bereits bei früheren Ausführungen der Anwendung verwendet wurden.

Auch die Shader für 3D-Materialien und Nachbearbeitungseffekte sind daran beteiligt.

Material-Shader-Cache

Im Gegensatz zu „ Qt Quick “ stützt sich „ Qt Quick 3D “ derzeit auf die Laufzeitgenerierung der Shader-Quelltexte für 3D-Materialien und -Effekte. Eine Ausnahme bildet die Verwendung des Shadergen-Tools; diese Funktion ist jedoch experimentell und wird derzeit nicht für den produktiven Einsatz empfohlen.

Das Generieren der Shader-Quelltexte und das anschließende Durchführen der Kompilierung und Transpilierung der ersten Phase (Details siehe „ Shader Tools “ ) kann ein rechenintensiver Vorgang sein. Bei 2D-Materialien und -Effekten erfolgt dies in der Regel zur Build-Zeit, während dies für 3D derzeit keine Option ist.

Daher verwendet „ Qt Quick 3D “ einen weiteren festplattenbasierten Cache. Dieser speichert die Assets für die generierten 3D-Materialien und -Effekte.

Das bedeutet, dass in Kombination mit dem Low-Level-Cache eine 3D-Szene mit einem Material, das bereits bei früheren Ausführungen der Anwendung verwendet wurde, bei erneuter Verwendung in nachfolgenden Ausführungen nicht zu einem ressourcenintensiven, blockierenden Vorgang führt.

Hinweis: Genau wie beim Low-Level-Shader- und Pipeline-Cache erfordert dies ein beschreibbares Dateisystem und dass die Plattform über „ QStandardPaths “ einen beschreibbaren Cache-Speicherort bereitstellt.

Das Anwendungsattribut ` Qt::AA_DisableShaderDiskCache ` und die entsprechende Umgebungsvariable gelten auch für den Material-Shader-Cache. Wenn diese gesetzt sind, werden sowohl der Low-Level-Cache von Qt als auch der Material-Cache von ` Qt Quick 3D` deaktiviert.

Hinweis: Das Tool „ qml “ setzt dieses Attribut standardmäßig. Übergeben Sie das Befehlszeilenargument „ --enable-shader-cache “, um ein Verhalten zu erzielen, das mit eigenständigen Qt-Anwendungen identisch ist.

Aktivieren Sie die Protokollierungskategorie „ qt.quick3d.cache “, um zur Laufzeit Informationen zum 3D-Material-Cache auszugeben.

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