シェーダーの永続キャッシュQt Quick 3D
シェーダーと3Dマテリアル
3Dオブジェクトをマテリアルでレンダリングするには、頂点シェーダとフラグメントシェーダが必要です。
3Dシーンのライフタイム中に初めてマテリアルに遭遇すると、実行時に次のことが起こります:
- シェーダーのソーステキストが生成されます。
- シェーダのソーステキストが生成され、シェーダは標準の Qt シェーダパイプラインに送られます。その結果、シェーダーの中間バイトコードバージョン(SPIR-V)、他の3D API(OpenGL用のGLSL、Direct3D用のHLSLなど)用の多数のソースコードバリアント、および追加のメタデータが生成されます。
- 3D エンジンがgraphics pipeline を作成するとき、使用される 3D API に適したバイトコードまたはソースバリアントが選択され、その後、基礎となる 3D API が実際の GPU 命令セットをターゲットとする第 2 段階のコンパイルを実行する可能性があります。
これらすべてを合わせると、コストのかかる作業となります。アプリケーションの後続の実行でこれを回避するために、2つの永続的なディスクベースのキャッシュが採用されています。
低レベルキャッシュ
Qt Quick 3D は、Qt Quick とシーングラフの上に構築されます。OpenGLプログラム・バイナリやVulkanパイプラインなどの永続的なディスクベースのキャッシュに関しては、同じインフラストラクチャが使用されます。
これに関する詳細な議論はQQuickGraphicsConfiguration#Pipeline Cache Save and Load を参照してください。
デフォルトでは、シェーダーのディスクキャッシュは有効になっています。つまり、プラットフォームや 3D API 実装がコンパイルされたシェーダの永続的なキャッシュを行わない場合でも、Qt は OpenGL プログラムバイナリや、QQuickWindow のライフタイム中に収集された同様のアセットを保存することができます。ディスクへのデータの書き込みはウィンドウが閉じられたときに行われ、アプリケーションの次の実行時に再読み込みされます。このようにして、シェーダーがアプリケーションの以前の実行中に遭遇した場合、グラフィックスパイプラインの作成が大幅に高速化される可能性があります。
3Dマテリアルとポストプロセッシングエフェクトのシェーダもこれに参加します。
マテリアルシェーダーキャッシュ
Qt Quick とは異なり、Qt Quick 3D は現在、3D マテリアルとエフェクトのシェーダー・ソース・テキストのランタイム生成に依存しています。この例外は、Shadergen Tool を使用する場合ですが、この機能は実験的なものであり、現時点ではプロダクションでの使用は推奨されていません。
シェーダソーステキストを生成し、第一段階のコンパイルとトランスパイル(詳細はQtShader Toolsを参照)を実行することは、高価な処理になる可能性があります。2D マテリアルとエフェクトの場合、これは通常ビルド時に行われますが、3D の場合、現在のところそのようなオプションはありません。
そのため、Qt Quick 3D は別のディスクベースのキャッシュを採用しています。これは、生成された3Dマテリアルとエフェクトのアセットを保存します。
つまり、低レベル・キャッシュと組み合わせることで、アプリケーションの以前の実行中に遭遇したマテリアルを持つ3Dシーンが、その後の実行で再び遭遇したときに、高価なブロック操作につながることはありません。
注意: 低レベルシェーダとパイプラインキャッシュと同様に、これは書き込み可能な ファイルシステムを必要とし、プラットフォームはQStandardPaths を介して書き込み可 能なキャッシュロケーションを提供します。
アプリケーション属性Qt::AA_DisableShaderDiskCache と対応する環境変数は、マテリアルシェーダーキャッシュにも適用されます。設定すると、Qt のローレベルとQt Quick 3D のマテリアル・キャッシュの両方が無効になります。
注意: qml ツールはデフォルトでこの属性を設定します。--enable-shader-cache コマンドライン引数を渡すと、スタンドアロンの Qt アプリケーションと同じ動作になります。
© 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.