VulkanSceneGraph - Un graphe de scène en C++

Posté par  (site web personnel) . Édité par Julien Jorge. Modéré par bobble bubble. Licence CC By‑SA.
Étiquettes :
26
5
déc.
2022
C et C++

Ayant parlé rendu 3D et graphes de scène, nous pouvons nous attaquer à la troisième et dernière partie de cette série et évoquer enfin cette première sortie stable de VulkanSceneGraph.

VulkanSceneGraph (VSG) est donc une bibliothèque fournissant un graphe de scène basé sur Vulkan, écrite par Robert Osfield, qui est aussi le créateur d'OpenSceneGraph (OSG), l'ancêtre de VSG. Avec VSG, c'est une bibliothquèque plus moderne et plus modulaire qui nait. Parmi les utilisateurs d'OSG, on peut citer le simulateur de vol libre Flightgear, mais également beaucoup de simulations et de rendu de villes et de terrains, ce qui se ressent à l'usage avec des fonctionnalités très complètes de chargement à la volée de textures et de données d'élévation.

Le coeur de la bibliothèque VSG

La bibliothèque VSG en elle-même se concentre sur une collection de nœuds de base (transformations, objets 3D, texte) et sur le moteur de rendu basé sur Vulkan, s'occupant de l'initialisation et du modèle de threading.

C'est déjà un gros morceau : l'initialisation de Vulkan est une usine à gaz, et les exemples les plus simples de programmes peuvent faire des milliers de lignes de code. VSG nous débarrasse de tout ça, et l'on peut afficher un modèle complexe en quelques dizaines de lignes.

vsgXchange - Top modèles

La bibliothèque vsgXchange permet l'import de primitives VSG depuis un grand nombre de formats: images, fontes, mais surtout modèles en 3D, via la bibliothèque tierce Assimp.

Grace à cette bibliothèque, ce sont tout un tas de formats qui deviennent tout à coup des nœuds VSG ou encore des textures. Fondamental dès que l'on veut interagir avec un modeleur 3D.

Le bon vieil OSG possédait déjà une solide bibliothèque pour importer diverses ressources, nommée osgDB, munie d'un système de plugins, ce qui donnait des convertisseurs de qualité parfois excellente et parfois médiocre. Avec l'utilisation d'Assimp, on espère que VSG rendra moins aléatoire le support de nombreux formats.

vsgExamples - Pour apprendre

Enfin, le dépôt vsgExamples propose tout un tas de programmes de base pour afficher un modèle, faire du raytracing, explorer les possibilités de threading, afficher plusieurs vues…

Un exemple parlant : vsgViewer affichant le modèle openstreetmap.vsgt va, en 375 lignes de code et moins de 30 lignes d'objet, nous afficher une sphère représentant le globe terrestre sur lequel sont plaquées les tuiles d'OpenStreetMap, et va en temps réel au fur et à mesure que l'on zoome charger depuis Internet les tuiles de plus en plus détaillées.

L'Australie sur un globe OpenStreetMap

Un autre exemple parlant : prendre une simple capture d'écran, c'est 644 lignes de code avec vsgscreenshot, parce qu'il faut gérer un mécanisme complexe de sémaphores et de barrières pour capturer les tampons au bon moment.

Enfin un workflow qui fonctionne ?

Une grande frustration dans l'utilisation d'OSG est l'absence d'un workflow complet, en particulier pour la création de jeux, depuis le modeleur 3D jusqu'au rendu. Pendant longtemps, il n'y a pas vraiment eu de format qui soit à la fois complet, bien supporté par les modeleurs 3D tels Blender et bien supportés par OSG. L'on retombait souvent sur le bon vieux Wavefront (.obj), lequel était tout de même très limité (pas de multi textures, pas d'animations, obligation de créer ses propres shaders…). Avec VSG et Assimp, c'est le format GLTF qui devient disponible, et c'est un changement fondamental. GLTF, c'est un format particulièrement adapté au rendu réaliste (PBR), et il est possible de créer aisément un objet GLTF muni de sa texture diffuse, normale, métallique, rugosité, qui pourra être chargé directement dans OSG sans avoir à écrire une seule ligne de shader (écrire un shader PBR, c'est un peu sport).

Un casque PBR

Alors les animations GLTF ne sont malheureusement pas encore supportées, ce qui est bien dommage, car le format est très complet, et fournit animation par clés et animation par squelette. Mais les développeurs y travaillent, et on peut espérer que VSG permette bientôt de facilement importer des objets PBR complexes et d'activer leurs animations.

  • # 404

    Posté par  (site web personnel) . Évalué à 3.

    Les images des 2 précédents chapitres ne sont plus disponibles :(

    https://link-society.com - https://kubirds.com

    • [^] # Re: 404

      Posté par  (site web personnel) . Évalué à 3.

      Argh, je suis un boulet, j’étais persuadé que LinuxFr copiait les images et je les ai virées de mon site. Je remet ça ce soir !

      • [^] # Re: 404

        Posté par  (site web personnel) . Évalué à 2.

        Nope, c'est du markdown bête et méchant :)

        https://link-society.com - https://kubirds.com

        • [^] # Re: 404

          Posté par  (site web personnel) . Évalué à 4.

          Alors, histoire d'avoir vraiment tout faux, j'avais carrément viré les images de mon disque ! Je les ai récupérées grâce à archive.org, et téléversées à nouveau. Sauf que les images ne sont pas revenues dans les articles.

          En regardant le source, je vois par exemple <p><img src="//img.linuxfr.org/img/68747470733a2f2f746563686e6f747572746c652e6e65742f696d616765732f677261706865312e706e67/graphe1.png" alt="Graphe de scene" title="Source : https://technoturtle.net/images/graphe1.png"></p>, donc manifestement ça pointe vers img.linuxfr.org, mais peut-être comme un cache qui se remet à jour régulièrement avec la source ?

      • [^] # Re: 404

        Posté par  (site web personnel) . Évalué à 8. Dernière modification le 06 décembre 2022 à 09:48.

        Pour éviter de perdre du contenu linuxfr, je stocke depuis peu mes journaux et dépêches dans un dépôt git:

        https://gitlab.com/davenewton/linuxfr-devnewton

        => cela permets de survivre à une perte des images, mais aussi du markdown.

        Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

        • [^] # Re: 404

          Posté par  (site web personnel, Mastodon) . Évalué à 2.

          Simple curiosité, ce serait quoi une perte du markdown ?

          “It is seldom that liberty of any kind is lost all at once.” ― David Hume

          • [^] # Re: 404

            Posté par  (site web personnel) . Évalué à 4.

            Un incendie chez l'hébergeur ?

            Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.