マルチビュー・レンダリング

マルチビューレンダリングとは、2Dテクスチャ配列のレイヤーに描画コールをインスタンス化することです。Qt では、特に Qt Quick 3D Xr を使用して構築された VR/AR アプリケーションに適しています。マルチビューレンダリングは、シーンのトラバーサル、レンダリングの準備、左右の目のコンテンツのレンダーパスの記録を別々に行う代わりに、1回のレンダーパスでの描画コールをテクスチャ配列のレイヤー0と1にインスタンス化することで、1回で済ませることができます。頂点シェーダは、ビューインデックスを示す特別な変数を使用し、それに基づいてビューごとの値を計算します。カメラマトリクスなど、ビューに依存するデータを含むユニフォームは、両目分用意する必要があります。マルチビューレンダリングは、システムに対するレンダラーの負荷を減らし、パフォーマンスの向上につながる可能性が期待されています。その代償として、レンダラーとシェーダーがビュー依存データとテクスチャ配列の適切な処理を意識する必要があります。

低レベルの概要

Qt アプリケーションの開発者は、Qt レンダリング スタックの低レベルでマルチビュー レンダリングがどのように有効になっているかを完全に理解する必要はありません。以下のリンクは、その詳細を知りたい開発者のために用意されています。

3D API におけるマルチビューのサポート

マルチビューレンダリングは、基礎となる 3D API が実行時にサポートしている場合にのみ利用できます。詳細については、適切な仕様とドキュメントを参照してください:

Qt のレンダリングハードウェアインタフェース(RHI)でのマルチビューサポート

Qt では、3D グラフィック API はQRhi クラスによって抽象化されています。Qt Quick と Qt Quick 3D は、すべてのアクセラレーションレンダリングにこのインフラストラクチャを使用しています。マルチビュー・レンダリングのサポートに関する低レベルの情報は、以下を参照してください:

Qt Quick - Quick 3D - Quick 3D XR スタックでのマルチビューサポート

Qt Quick のマルチビューサポート

Qt Quick はマルチビューに対応していますが、マルチビューレンダリングを単独で使用することはありません。マルチビューレンダリングのサポートは、2D要素が3Dシーンに埋め込まれている場合、Qt Quick 3Dとの組み合わせで重要になります。3Dシーンがマルチビュー・レンダー・ターゲットに出力されるときに2Dコンテンツを正しくレンダリングするには、2Dレンダラーとそのマテリアル(シェーダー)がマルチビュー・サポート用に準備されている必要があります。

Qt Quickの組み込みマテリアル(RectangleImageText など)は、すべてマルチビューに対応しているため、Qtベースのアプリケーションの開発者は、多くの場合、この点を考慮する必要はありません。

しかし、カスタムマテリアル (QSGMaterial,QSGMaterialShader) を開発したり、ShaderEffect 用のシェーダを書いたりする場合、その 2D コンテンツを Qt Quick 3D Xr アプリケーションの VR/AR シーン内で使用することを意図している場合は、カスタムコンテンツはマルチビューに対応していなければなりません。この詳細については、QSGMaterial::viewCount() を参照してください。

マルチビュー対応のシェーダを記述することは、Qt のシェーダ調整パイプラインによって可能になります。詳細はQSB マニュアルと Qt Shader Tools Build System Integrationのマルチビューのセクションを参照してください。

Qt Quick 3D におけるマルチビューのサポート

Qt Quick 3D Xr を使用しない、つまり VR/AR アプリケーションではない Qt Quick 3D アプリケーションは、現在マルチビューレンダリングを使用できません。しかし、Qt Quick 3D Xr は同じインフラストラクチャ上に構築されているため、3D レンダラーは完全にマルチビューに対応しています。ModelPrincipledMaterial などの標準の組み込み機能は、すべてマルチビューに対応しています。古いスタンドアロンエフェクトモジュールなど、一部の非推奨機能はマルチビューレンダリングに対応していない場合があります。

カスタムシェーダースニペットがCustomMaterialEffect に含まれている場合、マルチビューレンダリングが有効な Qt Quick 3D Xr アプリケーションで正しく機能するためには、アプリケーションが提供するシェーダコードをマルチビュー対応を考慮して記述する必要があります。その方法については、これらのタイプのドキュメントを参照してください。特に重要な特殊キーワードはVIEW_INDEX,INPUT,SCREEN_TEXTURE,DEPTH_TEXTURE,AO_TEXTURE です。

例えば、以下の後処理エフェクトはマルチビューに対応しています。これは、INPUTsampler2D ではなく、sampler2DArray の場合に用意されているからです:

void MAIN()
{
    vec4 c = texture(someTexture, TEXTURE_UV);
    // ...
#if QSHADER_VIEW_COUNT >= 2
    FRAGCOLOR = c * texture(INPUT, vec3(INPUT_UV, VIEW_INDEX));
#else
    FRAGCOLOR = c * texture(INPUT, INPUT_UV);
#endif
}

Qt Quick 3D Xr のマルチビューサポート

Qt Quick 3D Xr アプリケーションでは、マルチビューレンダリングはデフォルトで無効になっています。これは、最高の互換性を確保するためです。マルチビュー・レンダリングを有効にするには、XrViewmultiViewRenderingEnabledtrue に設定します。基礎となる 3D API がマルチビュー・レンダリングをサポートしていない場合、この設定は無効です。マルチビュー・レンダリングがサポートされているかどうかを確認するには、multiViewRenderingSupported プロパティをチェックします。

開発およびテスト目的では、環境変数によってマルチビュー・レンダリングを強制的に使用すると便利です。これは、QT_QUICK3D_XR_MULTIVIEW をゼロ以外の値に設定することで可能です。

マルチビュー・レンダリングが使用中かどうかを問い合わせるには(どのように有効化されたかにかかわらず)、同じmultiViewRenderingEnabled プロパティを使用します。マルチビュー・レンダリングを有効にできない場合、値は常に False のままになります。

一般に、VR/ARアプリケーションでは、開発段階でマルチビューモードでのレンダリングが期待どおりに動作することが確認されたら、XrView プロパティによって無条件にマルチビューレンダリングを有効にすることが推奨されます。マルチビューレンダリングは、GPU と特に CPU の負荷を軽減し、パフォーマンスを向上させることが期待されます。

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