Sur cette page

Rendu multi-vues

Le rendu multi-vues fait référence à l'instanciation des appels de dessin dans les couches d'un tableau de textures 2D. Dans Qt XML, il est pertinent, en particulier pour les applications VR/AR construites avec Qt Quick 3D Xr. Au lieu d'effectuer indépendamment la traversée de la scène, la préparation du rendu et l'enregistrement de la passe de rendu pour le contenu de l'œil gauche et de l'œil droit, le rendu multi-vues permet de le faire en une seule fois, les appels de dessin dans la passe de rendu unique étant instanciés dans les couches 0 et 1 d'un tableau de textures. Le nuanceur de sommets utilise une variable spéciale indiquant l'indice de vue et calcule les valeurs par vue sur la base de cet indice. Les uniformes qui contiennent des données dépendantes de la vue, telles que les matrices de caméra, doivent être fournis pour les deux yeux. Le rendu multi-vues est censé réduire la charge du moteur de rendu sur le système, ce qui pourrait améliorer les performances. Il faut cependant que le moteur de rendu et les nuanceurs soient conscients de la nécessité de travailler avec des données dépendantes de la vue et des tableaux de textures, le cas échéant.

Vue d'ensemble de bas niveau

Les développeurs d'applications Qt n'ont pas nécessairement besoin d'une compréhension complète de la manière dont le rendu multi-vues est activé aux niveaux inférieurs de la pile de rendu Qt. Les liens suivants sont fournis aux développeurs qui souhaitent approfondir les détails sous le capot.

Prise en charge de la vue multiple dans les API 3D

Le rendu multi-vues n'est disponible que si l'API 3D sous-jacente le prend en charge au moment de l'exécution. Pour plus de détails, voir les spécifications et la documentation appropriées :

Prise en charge des vues multiples dans l'interface matérielle de rendu (RHI) de Qt

Dans Qt 3D, les API graphiques 3D sont abstraites par la classe QRhi. Qt Quick et Qt Quick 3D utilisent cette infrastructure pour tous leurs rendus accélérés. Voir ce qui suit pour plus d'informations de bas niveau sur la prise en charge du rendu multi-vues :

Prise en charge de la vue multiple dans la pile Qt Quick - Quick 3D - Quick 3D XR

Prise en charge des vues multiples dans la pile XR Qt Quick

Qt Quick est conscient du multiview, mais n'utilise jamais le rendu multiview seul. La prise en charge du rendu multi-vues devient importante en combinaison avec Qt Quick 3D lorsque des éléments 2D sont intégrés dans la scène 3D. Pour que le contenu 2D soit rendu correctement lorsque la scène 3D est transmise à une cible de rendu multi-vues, le moteur de rendu 2D et ses matériaux (shaders) doivent être préparés pour la prise en charge multi-vues.

Dans la plupart des cas, les développeurs d'applications basées sur Qt XML n'ont pas besoin d'en tenir compte, car les matériaux intégrés de Qt Quick sur lesquels des éléments tels que Rectangle, Image ou Text sont construits sont tous compatibles avec le mode multi-vues.

Cependant, lors du développement de matériaux personnalisés (QSGMaterial, QSGMaterialShader) ou de l'écriture de shaders pour ShaderEffect, et si l'intention est d'utiliser ce contenu 2D dans une scène VR/AR dans une application Qt Quick 3D Xr, le contenu personnalisé doit être compatible avec le multiview. voir QSGMaterial::viewCount() pour plus de détails à ce sujet.

L'écriture de shaders compatibles avec les vues multiples est rendue possible par le pipeline de conditionnement des shaders de Qt. Voir les sections Multiview dans le manuel QSB et Qt Shader Tools Build System Integration pour plus de détails.

Prise en charge du multiview 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 multi-vues. Cependant, le moteur de rendu 3D est entièrement compatible avec le multiview, puisque Qt Quick 3D Xr est construit sur la même infrastructure. Toutes les fonctionnalités standard intégrées, telles que Model ou PrincipledMaterial, sont entièrement compatibles avec le multiview. Certaines fonctionnalités obsolètes, telles que l'ancien module d'effets autonome, peuvent ne pas prendre en charge le rendu multi-vues.

Lorsque des snippets de shaders personnalisés sont impliqués dans une application CustomMaterial ou Effect, le code de shaders fourni par l'application doit être écrit en tenant compte de la prise en charge du multiview afin de fonctionner correctement dans une application Qt Quick 3D Xr dont le rendu multiview est activé. Voir la documentation de ces types pour savoir comment y parvenir. Les mots-clés spéciaux 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 multiview, car il est préparé pour le cas où INPUT est un sampler2DArray au lieu d'un 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 multiview dans Qt Quick 3D Xr

Le rendu multi-vues est activé par défaut, tant que l'API graphique sous-jacente le prend en charge. Cela permet de garantir les meilleures performances possibles. Pour savoir si le rendu multivue est pris en charge, vérifiez la propriété multiViewRenderingSupported.

À des fins de développement et de test, il peut être utile de désactiver l'utilisation du rendu multi-vues. Pour ce faire, définissez la variable d'environnement QT_QUICK3D_XR_DISABLE_MULTIVIEW à une valeur non nulle.

Pour savoir si le rendu multivues est activé, utilisez la propriété multiViewRenderingEnabled. La valeur reste toujours fausse si le rendu multi-vues ne peut pas être activé.

En général, il est recommandé aux applications VR/AR de laisser le rendu multi-vues activé lorsqu'il est pris en charge, et de ne le désactiver qu'en cas de problème ou à des fins de test. Le rendu multi-vues est censé améliorer les performances, en réduisant la charge du GPU et surtout 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.