Sur cette page

Rendu multivue

Le rendu multivue consiste à instancier des appels de dessin dans les couches d’un tableau de textures 2D. Dans Qt, cette technique est particulièrement utile pour les applications de réalité virtuelle (VR) et de réalité augmentée (AR) développées avec Qt Quick 3D Xr. Au lieu d'effectuer séparément le parcours de la scène, les préparatifs de rendu et l'enregistrement des passes de rendu pour le contenu destiné à l'œil gauche et à l'œil droit, le rendu multivue permet de réaliser ces opérations en une seule fois, les appels de dessin de la passe de rendu unique étant instanciés dans les couches 0 et 1 d'un tableau de textures. Le shader de sommets utilise une variable spéciale indiquant l’index de vue et calcule les valeurs par vue en fonction de celui-ci. Les uniformes contenant des données dépendantes de la vue, telles que les matrices de caméra, doivent être fournis pour les deux yeux. Le rendu multivue devrait réduire la charge du moteur de rendu sur le système, ce qui pourrait se traduire par de meilleures performances. Cela implique toutefois que le moteur de rendu et les shaders doivent être capables de gérer, le cas échéant, les données dépendantes de la vue et le tableau de textures.

Aperçu de bas niveau

Les développeurs d’applications Qt n’ont pas nécessairement besoin de comprendre en détail comment le rendu multivue est mis en œuvre aux niveaux inférieurs de la pile de rendu Qt. Les liens suivants sont fournis à l’intention des développeurs souhaitant approfondir les détails techniques.

Prise en charge du rendu multivue dans les API 3D

Le rendu multivue n’est disponible que si l’API 3D sous-jacente le prend en charge lors de l’exécution. Pour plus de détails, consultez les spécifications et la documentation correspondantes :

Prise en charge du rendu multivue dans l'interface matérielle de rendu (RHI) de Qt

Dans Qt, les API graphiques 3D sont abstraites par la classe ` QRhi `. Les bibliothèques ` Qt Quick ` et ` Qt Quick ` 3D utilisent cette infrastructure pour l’ensemble de leur rendu accéléré. Consultez les liens suivants pour obtenir des informations de bas niveau supplémentaires sur la prise en charge du rendu multivue :

Prise en charge multivue dans l'interface Qt Quick - Quick 3D - Quick 3D XR Stack

La prise en charge du rendu multi-vue dans Qt Quick

Qt Quick prend en charge le rendu multi-vues, mais n’utilise jamais le rendu multi-vues de manière autonome. La prise en charge du rendu multivue devient importante en combinaison avec Qt Quick 3D lorsque des éléments 2D sont intégrés dans la scène 3D. Pour rendre correctement le contenu 2D lorsque la scène 3D est exportée vers une cible de rendu multivue, le moteur de rendu 2D et ses matériaux (shaders) doivent être préparés pour la prise en charge multivue.

Les développeurs d’applications basées sur Qt n’ont généralement pas besoin d’en tenir compte, car les matériaux intégrés d’ Qt Quick, sur lesquels reposent des éléments tels que Rectangle, Image ou Text, sont tous compatibles avec le rendu multivue.

Toutefois, lors du développement de matériaux personnalisés (QSGMaterial, QSGMaterialShader) ou de l’écriture de shaders pour ShaderEffect, si l’objectif est d’utiliser ce contenu 2D au sein d’une scène VR/AR dans une application 3D XR de type Qt Quick, le contenu personnalisé doit prendre en charge le multivue. Voir QSGMaterial::viewCount() pour plus de détails à ce sujet.

L’écriture de shaders compatibles avec le mode multivue est rendue possible par le pipeline de conditionnement des shaders de Qt. Reportez-vous aux sections « Multivue » du manuel QSB et à la fonction qt_add_shaders() pour plus de détails.

Prise en charge du rendu multivue dans Qt Quick 3D

Qt Quick Les applications 3D qui n’utilisent pas Qt Quick 3D Xr, c’est-à-dire qui ne sont pas des applications VR/AR, ne peuvent actuellement pas utiliser le rendu multivue. Le moteur de rendu 3D est toutefois entièrement compatible avec le rendu multivue, puisque Qt Quick 3D Xr repose sur la même infrastructure. Toutes les fonctionnalités standard intégrées, telles que Model ou PrincipledMaterial, sont entièrement compatibles avec le rendu multivue. Certaines fonctionnalités obsolètes, comme l’ancien module d’effets autonome, peuvent ne pas prendre en charge le rendu multivue.

Lorsque des extraits de shader personnalisés sont utilisés dans un ` CustomMaterial ` ou un ` Effect`, le code de shader fourni par l’application doit être écrit en tenant compte de la prise en charge du multivue afin de fonctionner correctement dans une application ` Qt Quick 3D Xr` avec le rendu multivue activé. Consultez la documentation relative à ces types pour savoir comment procéder. Les mots-clés pour lesquels cela est particulièrement important sont : VIEW_INDEX, INPUT, SCREEN_TEXTURE, DEPTH_TEXTURE, AO_TEXTURE.

Par exemple, l’effet de post-traitement suivant est compatible avec le mode multivue, car il est conçu pour le cas où INPUT est une image sampler2DArray plutôt qu’une image sampler2D:

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
}

Prise en charge du multivue dans Qt Quick 3D Xr

Le rendu multivue est activé par défaut, à condition que l’API graphique sous-jacente le prenne en charge. Cela permet de garantir les meilleures performances possibles. Pour vérifier si le rendu multivue est pris en charge, consultez la propriété multiViewRenderingSupported.

À des fins de développement et de test, il peut être utile de désactiver le rendu multivue. Pour ce faire, définissez la variable d’environnement QT_QUICK3D_XR_DISABLE_MULTIVIEW sur une valeur non nulle.

Pour vérifier si le rendu multivue est activé, utilisez la propriété multiViewRenderingEnabled. La valeur reste toujours « false » si le rendu multivue ne peut pas être activé.

En général, il est recommandé que les applications VR/AR laissent le rendu multivue activé lorsqu’il est pris en charge, et ne le désactivent qu’en cas de problèmes ou à des fins de test. Le rendu multivue est censé améliorer les performances, en réduisant la charge du GPU et surtout celle du CPU.

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