Multiview-Rendering

Multiview-Rendering bezieht sich auf die Instanzierung von Zeichenaufrufen in Schichten eines 2D-Textur-Arrays. In Qt ist es vor allem für VR/AR-Anwendungen relevant, die mit Qt Quick 3D Xr erstellt wurden. Anstatt die Szene unabhängig voneinander zu durchqueren, das Rendering vorzubereiten und den Inhalt des linken und rechten Auges aufzuzeichnen, ermöglicht das Multiview-Rendering dies in einem Durchgang, wobei die Zeichenaufrufe in einem einzigen Rendering-Durchgang in die Ebenen 0 und 1 eines Textur-Arrays instanziert werden. Der Vertex-Shader verwendet eine spezielle Variable, die den View-Index angibt, und berechnet darauf basierend die Werte pro View. Uniformen, die ansichtsabhängige Daten enthalten, wie z. B. Kameramatrizen, müssen für beide Augen bereitgestellt werden. Es wird erwartet, dass das Multiview-Rendering die Belastung des Systems durch den Renderer verringert, was zu einer besseren Leistung führen kann. Dies geschieht jedoch auf Kosten der Notwendigkeit, den Renderer und die Shader auf die Arbeit mit ansichtsabhängigen Daten und Texturarrays vorzubereiten.

Low-Level-Übersicht

Qt-Anwendungsentwickler müssen nicht unbedingt ein vollständiges Verständnis dafür haben, wie Multiview-Rendering auf den unteren Ebenen des Qt-Rendering-Stacks aktiviert wird. Die folgenden Links sind für Entwickler gedacht, die sich mehr mit den Details unter der Haube befassen möchten.

Multiview-Unterstützung in 3D-APIs

Multiview-Rendering ist nur verfügbar, wenn die zugrunde liegende 3D-API es zur Laufzeit unterstützt. Einzelheiten finden Sie in den entsprechenden Spezifikationen und Dokumentationen:

Multiview-Unterstützung in Qt's Rendering Hardware Interface (RHI)

In Qt werden die 3D-Grafik-APIs durch die Klasse QRhi abstrahiert. Qt Quick und Qt Quick 3D verwenden diese Infrastruktur für ihr gesamtes beschleunigtes Rendering. Im Folgenden finden Sie weitere Low-Level-Informationen zur Unterstützung von Multiview-Rendering:

Multiview-Unterstützung im Qt Quick - Quick 3D - Quick 3D XR Stack

Multiview-Unterstützung in Qt Quick

Qt Quick ist Multiview-fähig, verwendet aber niemals Multiview-Rendering für sich selbst. Die Unterstützung von Multiview-Rendering wird in Kombination mit Qt Quick 3D wichtig, wenn 2D-Elemente in die 3D-Szene eingebettet werden. Um den 2D-Inhalt korrekt zu rendern, wenn die 3D-Szene an ein Multiview-Rendering-Ziel ausgegeben wird, müssen der 2D-Renderer und seine Materialien (Shader) für die Multiview-Unterstützung vorbereitet sein.

Entwickler von Qt-basierten Anwendungen müssen dies in vielen Fällen nicht berücksichtigen, da die integrierten Materialien von Qt Quick, auf denen Elemente wie Rectangle, Image oder Text aufbauen, alle multiview-kompatibel sind.

Wenn Sie jedoch eigene Materialien entwickeln (QSGMaterial, QSGMaterialShader) oder Shader für ShaderEffect schreiben und beabsichtigen, diese 2D-Inhalte in einer VR/AR-Szene in einer Qt Quick 3D Xr-Anwendung zu verwenden, müssen die eigenen Inhalte multiview-fähig sein. siehe QSGMaterial::viewCount() für weitere Informationen.

Das Schreiben von Multiview-fähigen Shadern wird durch die Shader-Konditionierungspipeline von Qt ermöglicht. Siehe die Abschnitte Multiview im QSB-Handbuch und Qt Shader Tools Build System Integration für Details.

Multiview-Unterstützung in Qt Quick 3D

Qt Quick 3D Anwendungen, die nicht Qt Quick 3D Xr verwenden, d.h. keine VR/AR-Anwendungen sind, können derzeit kein Multiview-Rendering verwenden. Der 3D-Renderer ist jedoch voll multiview-fähig, da Qt Quick 3D Xr auf der gleichen Infrastruktur aufbaut. Alle standardmäßigen, integrierten Funktionen wie Model oder PrincipledMaterial sind vollständig multiview-fähig. Einige veraltete Funktionen, wie z. B. das alte Standalone-Effektmodul, unterstützen möglicherweise kein Multiview-Rendering.

Wenn benutzerdefinierte Shader-Snippets in einer CustomMaterial oder Effect enthalten sind, muss der von der Anwendung bereitgestellte Shader-Code mit Blick auf die Multiview-Unterstützung geschrieben werden, damit er in einer Qt Quick 3D Xr-Anwendung mit aktiviertem Multiview-Rendering korrekt funktioniert. Lesen Sie in der Dokumentation dieser Typen nach, wie Sie dies erreichen können. Die speziellen Schlüsselwörter, für die dies besonders wichtig ist, sind VIEW_INDEX, INPUT, SCREEN_TEXTURE, DEPTH_TEXTURE, AO_TEXTURE.

Der folgende Nachbearbeitungseffekt ist zum Beispiel multiview-kompatibel, weil er für den Fall vorbereitet ist, dass INPUT ein sampler2DArray statt ein sampler2D ist:

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
}

Multiview-Unterstützung in Qt Quick 3D Xr

Multiview-Rendering ist standardmäßig aktiviert, sofern die zugrunde liegende Grafik-API dies unterstützt. Dies geschieht, um die bestmögliche Leistung zu gewährleisten. Um abzufragen, ob Multiview-Rendering unterstützt wird, prüfen Sie die Eigenschaft multiViewRenderingSupported.

Für Entwicklungs- und Testzwecke kann es sinnvoll sein, die Verwendung von Multiview-Rendering zu deaktivieren. Dazu setzen Sie die Umgebungsvariable QT_QUICK3D_XR_DISABLE_MULTIVIEW auf einen Wert ungleich Null.

Um abzufragen, ob Multiview-Rendering aktiviert ist, verwenden Sie die Eigenschaft multiViewRenderingEnabled. Der Wert bleibt immer false, wenn Multiview-Rendering nicht aktiviert werden kann.

Im Allgemeinen wird empfohlen, dass VR/AR-Anwendungen das Multiview-Rendering aktiviert lassen, wenn es unterstützt wird, und es nur deaktivieren, wenn Probleme auftreten oder zu Testzwecken. Es wird erwartet, dass das Multiview-Rendering die Leistung verbessert, indem es die GPU- und insbesondere die CPU-Belastung reduziert.

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