Les nouveautés de Qt 3D dans Qt 5.9

Qt 3D était une fonctionnalité très attendue pour Qt 5, avec une période de gestation très longue : Qt 5.5 est arrivé avec un moteur 3D, bien que pas encore finalisé (il a fallu attendre Qt 5.7). Son architecture est prévue pour être extrêmement flexible, à tous les points de vue.

Dès Qt 5.9, il devient possible d’intégrer une scène Qt Quick à l’intérieur d’une application Qt 3D (chose impossible précédemment, malgré l’ironie de la situation quand une visualisation Qt 3D est inclus dans une scène Qt Quick). Le cas d’utilisation typique est l’inclusion d’une interface bidimensionnelle sur une surface place — un cas qui deviendra de plus en plus fréquent avec l’avènement de la réalité virtuelle ou augmentée. Cette intégration se fait avec le composant Scene2D (nom choisi pour faire référence à Scene3D, pour inclure une scène 3D dans une interface Qt Quick), qui effectue le rendu de la scène Qt Quick dans une texture et l’affiche à l’endroit voulu dans un objet 3D. Les événements sont bien sûr transférés depuis Qt 3D vers la scène Qt Quick. (Voir l’exemple Scene2D.) Pour des besoins plus simples, l’affichage de texte peut se faire par QText2DEntity.

Le rendu physique (PBR) est maintenant extrêmement utilisé dans les moteurs de rendu afin d’augmenter le niveau de réalisme du rendu. De manière générale, implémenter le rendu physique signifie que chaque matériau doit renvoyer la lumière qu’il reçoit d’une manière propre, pas avec quelques lois prédéfinies de manière stricte. Qt 3D reçoit ainsi deux modèles d’éclairage : QMetalRoughMaterial et QTexturedMetalRoughMaterial, qui implémentent des algorithmes PBR avec des reflets spéculaires de Blinn-Phong. Combinés avec une lumière de type QEnvironmentLight, les réflexions sur l’environnement seront nettement plus naturelles.

Jusqu’à présent, la manière la plus simple de réaliser des animations avec Qt 3D était d’utiliser les mécanismes de base de Qt Quick pour animer des propriétés (en C++, on peut utiliser QPropertyAnimation). Cependant, les graphistes souhaitent souvent des animations bien plus compliquées ; la manière la plus courante de procéder est d’utiliser des images clés. Par ailleurs, les animations de Qt Quick ne permettent pas d’exploiter au mieux le degré de parallélisme permis par l’architecture de Qt 3D.

C’est ainsi qu’apparaît le module Animation. Il implémente exclusivement des animations par images clés pour le moment, c’est-à-dire que la valeur de certaines propriétés est connue à un instant donné (par exemple, après cinq secondes, le bras se lève à hauteur du visage). Cependant, entre ces instants clés, le moteur de rendu doit afficher quelque chose : il interpole donc entre les points connus. Pour le moment, il peut effectuer des interpolations linéaires (lerps) et selon des courbes de Bézier. Ainsi, il est possible de réaliser un très grand nombre d’animations. Les calculs sont principalement effectués en parallèle, dans la réserve de fils de calcul de Qt 3D.

Pour gérer des scènes de très grande taille ou des machines peu puissantes, les moteurs de rendu utilisent depuis belle lurette la notion de niveau de détail : les structures géométriques proches de la caméra sont affichées avec tous leurs détails, tandis que les objets plus lointains n’ont pas besoin du même niveau de fidélité (texture, nombre de polygones, shaders peuvent varier). Qt 3D propose cette notion dans la classe QLevelOfDetail, qui mémorise les différents choix, activés par QLevelOfDetailSwitch.

Qt 5.10 apportera à nouveau son lot de nouveautés pour Qt 3D, comme de nouveaux types d’animation (notamment, un moteur de morphose plus abouti). Dans un futur peut-être plus lointain, Qt 3D pourrait s’enrichir de fonctionnalités orientées réalité virtuelle.

Source et images : What’s new in Qt 3D with Qt 5.9?.

Voir aussi : quelques exemples d’utilisation de ces nouvelles fonctionnalités.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s