URL: https://linuxfr.org/news/vulkanscenegraph-un-graphe-de-scene-en-c Title: VulkanSceneGraph - Un graphe de scène en C++ Authors: small_duck Julien Jorge Date: 2022-12-04T22:50:57+01:00 License: CC By-SA Tags: c++, openscenegraph et vulkan Score: 3 Ayant parlé [rendu 3D](https://linuxfr.org/news/le-rendu-3d-retrospective) et [graphes de scène](https://linuxfr.org/news/les-graphes-de-scene), 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](http://www.openscenegraph.com/index.php/gallery/use-cases), on peut citer le simulateur de vol libre [Flightgear](https://www.flightgear.org/), 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](https://github.com/vsg-dev/VulkanSceneGraph) 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](https://github.com/vsg-dev/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](https://github.com/assimp/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](https://github.com/vsg-dev/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](https://github.com/vsg-dev/vsgExamples/blob/master/examples/app/vsgviewer/vsgviewer.cpp) affichant le modèle [openstreetmap.vsgt](https://github.com/vsg-dev/vsgExamples/blob/master/data/models/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](https://technoturtle.net/images/vsg_osm.png) Un autre exemple parlant : prendre une simple capture d'écran, c'est 644 lignes de code avec [vsgscreenshot](https://github.com/vsg-dev/vsgExamples/blob/master/examples/app/vsgscreenshot/vsgscreenshot.cpp), 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](https://fr.wikipedia.org/wiki/Objet_3D_(format_de_fichier)) (.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](https://technoturtle.net/images/gltf.png) 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.