Changements apportés à Qt Quick 3D
Qt 6 est le résultat d'un effort conscient pour rendre le cadre plus efficace et plus facile à utiliser.
Nous essayons de maintenir la compatibilité binaire et source pour toutes les API publiques dans chaque version. Mais certains changements étaient inévitables dans un effort pour faire de Qt un meilleur framework. Certaines parties de l'API 3D de Qt Quick ont été considérablement modifiées.
Dans cette rubrique, nous résumons ces changements dans Qt Quick 3D et fournissons des conseils pour les gérer.
RHI
À partir de Qt 6.0, l'adaptation par défaut de Qt Quick effectue toujours le rendu via une couche d'abstraction graphique, la Qt Rendering Hardware Interface (RHI), fournie par le module QtGui. Cela signifie que, contrairement à Qt Graphs 5, aucun appel direct à OpenGL n'est effectué par le graphe de scène. Au lieu de cela, il enregistre les commandes de ressources et de dessin en utilisant les API RHI, qui traduisent ensuite le flux de commandes en appels OpenGL, Vulkan, Metal ou Direct 3D. La gestion des shaders est également unifiée en écrivant le code des shaders une seule fois, en le compilant dans SPIR-V, puis en le traduisant dans le langage approprié pour les différentes API graphiques.
Qt Quick Qt Quick Pour Qt 3D, le plus grand changement dans Qt 6.0 est la migration vers l'interface matérielle de rendu commune, qui permet à Qt 3D de fonctionner sur Direct3D, Metal et Vulkan en plus d'OpenGL et d'OpenGL ES.
Qt Quick Direct3D et Qt Quick 3D sont désormais totalement unifiés à cet égard. Tous les paramètres de configuration liés à la RHI, par exemple l'API graphique à utiliser pour le rendu, s'appliquent aux deux.
Voir Qt Quick 3D Graphics Requirements pour plus de détails.
Autres modifications de l'API
Version d'importation QML
À partir de Qt 6.0, le numéro de version des instructions d'importation QML est le même que le numéro de version de Qt. Il est désormais possible d'importer un module sans spécifier de version : la dernière version du module sera alors importée.
L'éclairage
Light brightness représente désormais un multiplicateur d'énergie de 1,0 par défaut, alors que Qt 5 utilisait un pourcentage de 100 par défaut. En pratique, cela signifie que toutes les valeurs de brightness doivent être divisées par 100.
SceneEnvironment.probeBrightness est renommé probeExposure et est également redéfini comme un multiplicateur dont la valeur par défaut est 1,0. En d'autres termes, toutes les valeurs de probeBrightness doivent être renommées en probeExposure et divisées par 100.
AreaLight a été supprimé pour des raisons de performance. Dans de nombreux cas, il peut être remplacé par SpotLight, qui a été ajouté à Qt Quick 3D 5.15.
Matériaux personnalisés
L'API des matériaux personnalisés a été entièrement remaniée dans la version 6.0. Cela signifie que tous les matériaux personnalisés existants devront être réécrits de manière substantielle. Voir la documentation CustomMaterial pour plus de détails sur la nouvelle API.
Effets de post-traitement
Effect a été amélioré pour permettre un code de shader très proche de ce que CustomMaterial supporte, en suivant les mêmes modèles en ce qui concerne la structure et les mots-clés intégrés. Cela signifie que les effets existants impliquant un code de nuanceur personnalisé devront être migrés avant de pouvoir fonctionner dans Qt 6.0. Voir la documentation de Effect pour plus de détails.
Matériau de principe
Le type QML PrincipledMaterial a été grandement amélioré dans Qt Quick 6.0, et suit maintenant plus étroitement les principes du rendu basé sur la physique. Les modèles importés devraient maintenant être rendus correctement sans changer les propriétés des matériaux. Les matériaux existants devront être modifiés pour annuler les compensations des imprécisions précédentes.
| PrincipledMaterial dans Qt 5 | PrincipledMaterial dans Qt 6 |
|---|---|
|
|
Certaines propriétés changent leurs valeurs par défaut :
- metalness 0 au lieu de 1 par défaut.
- specularAmount 0.5 au lieu de 0.
Matériau par défaut
Certaines propriétés changent leur valeur par défaut :
- specularRoughness se met par défaut à 0 au lieu de 50.
Matériaux prédéfinis
Il n'y a pas de matériaux prédéfinis dans QtQuick3D 6.0. Les matériaux ajoutés dans les versions ultérieures ne seront probablement pas compatibles avec les anciens. L'importation de matériaux n'existe pas. (Le type CustomMaterial est déplacé vers l'importation de base QtQuick3D.)
Voici les types QML de matériaux qui ont été supprimés dans Qt 6.0 :
- AluminumAnodizedEmissiveMaterial (Matériau en aluminium anodisé)
- Matériau en aluminium anodisé
- Matériau en aluminium brossé
- Matériau AluminiumEmissif
- Matériau en aluminium
- Matériau en cuivre
- Matériau en verre dépoli
- Matériau en verre dépoli à passage unique
- Matériau en verre
- Matériau en verre réfringent
- PapierMatériau artistique
- PapierMatériau de bureau
- Matériau en plastique structuré rouge émissif
- Matériau plastique structuré rouge
- Matériau en acier fraisé concentrique
Tessellation et cartes de déplacement
Le mode de tesselation du modèle a disparu en raison de l'accent mis sur la prise en charge du matériel embarqué. En outre, la prise en charge des cartes de déplacement a été supprimée des matériaux. Des effets similaires peuvent être obtenus avec custom material.
Qt Quick Items en tant qu'enfants de 3D Nodes
Bien que syntaxiquement identique, la façon dont les éléments enfants 2D sont gérés est assez différente en interne. Dans Qt 6.0, il n'y a pas d'étape implicite de rendu vers la texture. Au lieu de cela, le contenu 2D Qt Quick est rendu en ligne, avec la projection de perspective appropriée, dans la même passe de rendu, ce qui permet d'améliorer les performances, de réduire l'utilisation des ressources et, dans certains cas, d'améliorer la fidélité visuelle (avec Text, par exemple). Voir Qt Quick Scènes 3D avec contenu 2D pour une vue d'ensemble.
Si le passage par une texture est important pour une raison quelconque (écrêtage, opacité), faites du sous-arbre 2D Item un calque explicitement en définissant layer.enabled: true. De cette manière, le comportement est plus proche de ce que Qt 5.15 proposait.
Le contenu 2D n'est plus centré sur l'origine du nœud parent. C'est plutôt le coin supérieur gauche de l'élément 2D de niveau supérieur qui est placé à l'origine du nœud 3D. Par conséquent, l'élément 2D de niveau supérieur devra souvent spécifier une ancre, telle que anchors.centerIn: parent, pour obtenir des résultats correspondant à Qt 5.15.
© 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.

