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

マルチビューレンダリングとは、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 QuickQt Quick 3D は、すべてのアクセラレーテッドレンダリングにこのインフラストラクチャを使用しています。マルチビュー・レンダリングのサポートに関する低レベルの情報は、以下を参照してください:

Qt Quick - Quick 3D - Quick 3D XR スタックにおけるマルチビューサポート

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

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

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

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

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

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

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

カスタムシェーダースニペットがCustomMaterial またはEffect に含まれる場合、マルチビューレンダリングを有効にした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のマルチビューサポート

マルチビューレンダリングは、基盤となるグラフィックスAPIがサポートしている限り、デフォルトで有効になっています。これは、可能な限り最高のパフォーマンスを保証するためです。マルチビュー・レンダリングがサポートされているかどうかを確認するには、multiViewRenderingSupported プロパティをチェックします。

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

マルチビュー・レンダリングが有効かどうかを調べるには、multiViewRenderingEnabled プロパティを使用します。マルチビュー・レンダリングを有効にできない場合、値は常に False のままになります。

一般的に、VR/ARアプリケーションでは、マルチビューレンダリングがサポートされている場合は有効にしておき、問題が発生した場合やテスト目的でのみ無効にすることを推奨します。マルチビューレンダリングは、GPUと特にCPUの負荷を軽減し、パフォーマンスを向上させることが期待されています。

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