Auf dieser Seite

Multiview-Rendering

Multiview-Rendering bezeichnet das Instanziieren von Draw-Calls in Ebenen eines 2D-Textur-Arrays. In Qt ist dies insbesondere für VR-/AR-Anwendungen relevant, die mit „ Qt Quick 3D Xr“ erstellt wurden. Anstatt die Szenendurchlauf, die Rendervorbereitungen und die Aufzeichnung des Renderdurchgangs für die Inhalte des linken und rechten Auges unabhängig voneinander durchzuführen, ermöglicht das Multiview-Rendering, dies in einem einzigen Schritt zu erledigen, wobei die Zeichenaufrufe in einem einzigen Renderdurchgang in die Ebenen 0 und 1 eines Textur-Arrays instanziiert werden. Der Vertex-Shader verwendet eine spezielle Variable, die den Ansichtsindex angibt, und berechnet auf dieser Grundlage Werte pro Ansicht. Uniforms, die ansichtsabhängige Daten wie Kameramatrizen enthalten, müssen für beide Augen bereitgestellt werden. Es wird erwartet, dass das Multiview-Rendering die Belastung des Systems durch den Renderer verringert, was möglicherweise zu einer besseren Leistung führt. Dies geht jedoch zu Lasten der Notwendigkeit, den Renderer und die Shader entsprechend darauf abzustimmen, mit ansichtsabhängigen Daten und Textur-Arrays zu arbeiten.

Überblick auf niedriger Ebene

Entwickler von Qt-Anwendungen müssen nicht unbedingt vollständig verstehen, wie das Multiview-Rendering auf den unteren Ebenen des Qt-Rendering-Stacks aktiviert wird. Die folgenden Links richten sich an Entwickler, die sich näher mit den technischen Details befassen möchten.

Multiview-Unterstützung in 3D-APIs

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

Multiview-Unterstützung in der Rendering-Hardware-Schnittstelle (RHI) von Qt

In Qt werden die 3D-Grafik-APIs durch die Klasse „ QRhi “ abstrahiert. „ Qt Quick “ und „ Qt Quick 3D “ nutzen diese Infrastruktur für ihr gesamtes beschleunigtes Rendering. Weitere Low-Level-Informationen zur Multiview-Rendering-Unterstützung finden Sie unter:

Multiview-Unterstützung in der „ Qt Quick “ – Quick 3D – Quick 3D XR Stack

Die Multiview-Unterstützung in Qt Quick

Qt Quick ist Multiview-fähig, nutzt das Multiview-Rendering jedoch nie eigenständig. Die Unterstützung des Multiview-Renderings wird in Kombination mit dem „ Qt Quick 3D “ wichtig, wenn 2D-Elemente in die 3D-Szene eingebettet werden. Um den 2D-Inhalt korrekt zu rendern, wenn die 3D-Szene auf ein Multiview-Renderziel 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 in „ Qt Quick “ integrierten Materialien, auf denen Elemente wie „ Rectangle “, „ Image “ oder „ Text “ basieren, alle Multiview-kompatibel sind.

Wenn Sie jedoch benutzerdefinierte Materialien (QSGMaterial, QSGMaterialShader) entwickeln oder Shader für ShaderEffect schreiben und beabsichtigen, diese 2D-Inhalte innerhalb einer VR/AR-Szene in einer Qt Quick 3D Xr-Anwendung zu verwenden, müssen die benutzerdefinierten Inhalte Multiview-fähig sein. Weitere Informationen hierzu finden Sie unter QSGMaterial::viewCount().

Das Schreiben von Multiview-fähigen Shadern wird durch die Shader-Conditioning-Pipeline von Qt ermöglicht. Weitere Informationen finden Sie in den Abschnitten zu „Multiview“ im QSB-Handbuch sowie unter `qt_add_shaders() `.

Die Multiview-Unterstützung in Qt Quick 3D

Qt Quick 3D Anwendungen, die „ Qt Quick 3D Xr“ nicht verwenden – also keine VR-/AR-Anwendungen sind –, kann derzeit kein Multiview-Rendering genutzt werden. Der 3D-Renderer ist jedoch vollständig multiview-fähig, da „ Qt Quick 3D Xr“ auf derselben Infrastruktur basiert. Alle standardmäßigen, integrierten Funktionen wie „ Model “ oder „ PrincipledMaterial “ sind vollständig multiview-kompatibel. Einige veraltete Funktionen, wie beispielsweise das alte eigenständige Effektmodul, unterstützen möglicherweise kein Multiview-Rendering.

Wenn benutzerdefinierte Shader-Schnipsel in einem „ CustomMaterial “ oder „ Effect “ verwendet werden, muss der von der Anwendung bereitgestellte Shader-Code unter Berücksichtigung der Multiview-Unterstützung geschrieben werden, damit er in einer „ Qt Quick 3D Xr“-Anwendung mit aktiviertem Multiview-Rendering korrekt funktioniert. Informationen dazu finden Sie in der Dokumentation zu diesen Typen. Die speziellen Schlüsselwörter, für die dies besonders wichtig ist, sind „ VIEW_INDEX “, „ INPUT “, „ SCREEN_TEXTURE “, „ DEPTH_TEXTURE “ und „ AO_TEXTURE “.

Beispielsweise ist der folgende Nachbearbeitungseffekt Multiview-kompatibel, da er für den Fall vorbereitet ist, dass „ INPUT “ ein „ sampler2DArray “ anstelle eines „ 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“

Das 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 das Multiview-Rendering unterstützt wird, überprüfen Sie die Eigenschaft „ multiViewRenderingSupported “.

Für Entwicklungs- und Testzwecke kann es sinnvoll sein, die Verwendung des Multiview-Renderings zu deaktivieren. Setzen Sie dazu die Umgebungsvariable ` QT_QUICK3D_XR_DISABLE_MULTIVIEW ` auf einen Wert ungleich Null.

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

Generell wird empfohlen, dass VR-/AR-Anwendungen das Multiview-Rendering aktiviert lassen, sofern es unterstützt wird, und es nur bei auftretenden Problemen oder zu Testzwecken deaktivieren. Das Multiview-Rendering soll die Leistung verbessern und die Auslastung der GPU sowie insbesondere der CPU verringern.

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