Qt シェーダツールの概要

Qt Shader Toolsモジュールは、Khronos SPIR-VのWebサイトで説明されているSPIR-Vオープンソースエコシステムをベースにしています。SPIR-Vへのコンパイルにはglslangが使用され、翻訳と反映はSPIRV-Crossを介して行われます。

Qtアプリケーションやライブラリでシェーダーコードを一度だけ記述するために、すべてのシェーダーは単一の言語で記述され、それがSPIR-Vにコンパイルされることが期待されています。このシェーディング言語は、現時点ではVulkan互換のGLSLです。これは、OpenGLスタイルのGLSL Qt 5.xが期待するものとは異なります。違いの概要についてはGL_KHR_vulkan_glslspecificationを参照してください。

GLSL、HLSL、Metal Shading Languageなどの他のシェーディング言語のソースコードは、SPIR-Vバイトコードをリフレクション情報(入力、出力、シェーダーリソース)とともに翻訳して生成されます。特にGLSLについては、複数のバリアント、つまりGLSL ES 100、GLSL ES 300、GLSL 120および150といった異なるGLSLバージョンに適したソースコードも生成されます。これは、シリアライズ可能なQShader コンテナオブジェクトにまとめられ、通常は.qsb ファイルとしてディスクに保存されます。Qt Rendering Hardware Interface は、QShader インスタンスを直接消費し、実行時に使用するグラフィックス API に最適なシェーダーソースまたはバイトコードを選択します。QShader オブジェクトは通常、アプリケーションに同梱されている.qsb ファイル、または Qt Resource System の Qt 自身からデシリアライズされます。

プラットフォームによっては、シェーダーのソースコードを SPIR-V に似た中間フォーマットにコンパイルするオプションを提供しています。これには、プラットフォーム固有のツールを実行する必要があります。Direct 3D の場合、qsb ツールは、HLSL ソースコードが生成されると、Windows SDK から fxc ツールを呼び出すオプションを提供します。このツールは、HLSL ソースコードをfxc で生成されたDXBC バイナリに置き換えます。これは、コンパイルの第一段階(HLSLソースからDXBCへのコンパイル) をアプリケーション自身で行う必要がなくなるため、アプリケーションのランタイムパフォー マンスにプラスの効果をもたらす可能性がある。macOS と iOS については、XCode SDK が同様のツールを提供しています。このアプローチの欠点は、これらのツールの実行がそれぞれのプラットフォーム上でしかできないことだ。アプリケーションのビルド時にシェーダーコンディショニングを行うことで、暗黙のうちにターゲッ トプラットフォームと、どのプラットフォーム固有のツールを呼び出すことができるかについての必要 な知識が得られるため、qsb の CMake 統合と組み合わせて使用するのが最適です。

次の図は、qsb ツールを呼び出す間に起こるステップを説明しています:

Qt シェーダー・コンディショニング・システムの主なコンポーネントは次のとおりです:

  • qsb コマンドラインツール
  • qsb ツールの CMake インテグレーション
  • QShader ( モジュールの一部)QtGui
  • QShaderBaker (このモジュールの一部、 ツールに相当するライブラリ)qsb

Qt Quick の典型的な使用例

アプリケーション開発者は通常、以下のいずれかを持つ Qt Quick のシーンでカスタムシェーダーコードを扱います:

  • ShaderEffect 項目
  • QQuickItem シーングラフノードと、 をサブクラス化することによって構築されたカスタムマテリアルを組み合わせて使用するサブクラス。QSGMaterial

例えば、次の QML スニペットを考えてみましょう:

ShaderEffect {
    width: 100; height: 100
    fragmentShader: "myeffect.frag.qsb"
}

ここで、fragmentShader のURLは、.qml ファイルの場所から相対的に、.qsb ファイルを参照しています。アプリケーションは、.qml ファイルの隣にmyeffect.frag.qsb を配置します。そのファイルをVulkanスタイルのGLSLソースから生成するには(それ自体はアプリケーションと一緒に出荷する必要はありません)、アプリケーションは直接またはCMake経由でqsb ツールを使用する必要があります。

Qt Quick 3D での典型的な使い方

Qt Quick 3D では、Shader Tools モジュールを直接使用して、実行時にシェーダーのコンディショニングを行います。また、Qt Quick 3Dは、シェーダーコンパイラーや他のツールに実行時に依存することが理想的でない場合に備えて、ビルド時にマテリアルのシェーダーを事前に生成するソリューションを提供します。いずれの場合も、qsb ツールは Qt Quick 3D 独自のフレームワークとツールによってカプセル化されているため、開発者が直接作業する必要はありません。

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。