Dans l’article précédent, nous avons mis en évidence les défis particuliers que pose la visualisation de fichier IFC de grande taille dans un contexte web. Cette article présente la solution choisie dans le cadre de IASBIM.
Il s’agit donc de convertir les fichiers IFC dans un format facilement visualisable en contexte web. Nous adoptons une approche perceptive de ce problème : le but est d’obtenir un résultat visuel satisfaisant aussi rapidement que possible pour l’utilisateur.
3D Tiles, un format 3D pour le web
3D Tiles est un format conçu pour le streaming et le rendu de contenu géospatial en 3D de grand volume, notamment de donnée BIM ou CAD.
Le principe est double :
- segmenter la donnée afin de ne pas télécharger l’ensemble du dataset pour le visualiser
- organiser la donnée au sein de chaque segment afin d’obtenir le maximum d’efficacité au moment du rendu.
Le besoin de segmentation implique de disposer d’un moyen de savoir à l’avance quelle partie du dataset est visible pour une position et une orientation donnée de la vue. Nous avons donc besoin de métadonnée géographique sur chaque segment de donnée.
L’organisation interne du segment répond quant à lui à des exigences techniques liés aux cartes graphiques et à la façon dont on leur transmet de la donnée.
Le format 3D Tiles répond à ce besoin, en proposant une organisation en tuiles (les fameux segments), en embarquant des métadonnées pour chaque tuile, et du contenu au format gLTF pour chaque tuile. Détaillons maintenant comment.
La segmentation de la donnée
Commençons par expliquer quelques concepts lié à la segmentation de la donnée à l’aide du format 3D Tiles, puis nous expliquerons comment ceux-ci s’articulent en pratique.
Cette segmentation consiste à créer des aperçus de la donnée à différentes échelles afin de ne pas avoir à télécharger toute la donnée à chaque fois. À grande échelle, on téléchargera une ou plusieurs tuiles contenant des aperçus très simplifiés, ce qui sera suffisant car les petits objets seraient de toute façon invisibles. À petite échelle, on téléchargera la donnée à la précision originelle, mais seulement la portion de celle-ci qui est visible par l’utilisateur.
Le tileset
À haut niveau, un jeu de donnée au format 3D Tiles est d’abord un fichier de métadonnée au format json - le tileset - décrivant une hiérarchie de tuiles (tiles en anglais). Chaque tuile peut contenir des données, et regrouper des tuiles enfants, qui elles-mêmes peuvent contenir des données. Chaque tuile possède des informations d’étendue spatiale. Cette étendue doit comprendre les étendues spatiales du contenu des tuiles enfants. On définit ainsi une hiérarchie spatiale qui segmente l’espace.
Typiquement, les tuiles enfants représentent ensemble le même espace que leur parent, mais chaque tuile enfant contiendra des données plus précises, sur un espace plus petit. Le visualisateur doit alors prendre des décisions sur le niveau de l’arbre à afficher. Avec cette approche perceptive, le visualisateur a besoin d’une grandeur pour estimer le degré de précision (ou plutôt d’imprécision) de chaque tuile : c’est l’erreur géométrique.
L’erreur géométrique
Une deuxième information très importante est contenue dans les tuiles : l’erreur géométrique. Cette grandeur décrit l’erreur que les données de la tuile courante impliquent.
Comme décrit précédemment, nous allons donc créer un arbre de tuiles. Chaque tuile contiendra une partie de la donnée, les tuiles près de la racine contenant des données peu précises, comme des objets volumineux éventuellement simplifiés et les tuiles près des feuilles contenant des versions plus détaillées des grands objets, ainsi que les objets de petites tailles. Les tuiles près de la racine auront donc une grande erreur geométrique car leurs données sont peu précises. À l’inverse, plus on descend dans l’arbre, plus l’erreur géométrique diminue, pour atteindre 0 dans les nœuds feuilles.
Cette hiérarchie permet au visualisateur de ne télécharger et rendre qu’une partie de la donnée à la fois:
- le visualisateur commence donc par la tuile racine du tileset, télécharge et affiche son contenu.
- puis il regarde l’erreur géométrique de cette tuile, rapporté à la distance et à l’orientation de la vue par rapport à cette tuile
- si cette erreur relative est jugée acceptable (la précision actuelle est suffisante), on s’arrête là, et on n’aura téléchargé et affiché qu’une partie de la donnée
- sinon, on considère chaque enfant de cette tuile:
- si l’étendue spatiale est visible depuis la position actuelle de la vue, on télécharge le contenu et on l’affiche
- on considère alors l’erreur de cette tuile exactement de la même manière que précédemment, pour éventuellement traiter les enfants de la tuile courante. On itère sur ce processus tant que l’erreur géométrique n’est pas jugé satisfaisante.
Cette approche est donc itérative et perceptive, se focalisant sur ce qui est utile pour le rendu.
Le format binaire du contenu
Lorsque le visualisateur a décidé de télécharger puis rendre une tuile (car son étendue spatiale est visible et que l’erreur introduite par son parent a été jugée trop grande), il télécharge un fichier binaire qui est référencé par cette tuile. Ce format binaire est optimisé pour le rendu.
En effet, 3D Tiles embarque du gLTF, un format d’échange de donnée 3D créé par le groupe Khronos, auteur de la spécification OpenGL notamment. Ce fichier est lisible quasiment directement par la carte graphique, ce qui en fait un format idéal pour le rendu 3D.
Bonus : le volume de requête pour le visualisateur
Le format 3D Tiles nous offre un dernier mécanisme pouvant être utile : la notion de Viewer Request Volume (“volume de requête pour le visualisateur”). Cette propriété de la tuile définit un volume autour de celle-ci. Lorsque le point de vue de l’utilisateur (la “caméra”) est à l’extérieur de cette zone, le visualisateur ignore l’erreur géométrique et ne cherche ni à télécharger, ni à afficher la tuile. Lorsque la caméra entre dans ce volume, le mécanisme normal d’affichage tel que décrit plus haut s’applique à nouveau.
L’intérêt de cette grandeur est de cacher facilement les éléments qui sont habituellement derrière d’autres éléments (les objets à l’intérieur des pièces par exemple). Il est théoriquement possible de détecter la présence de murs entre le point de vue de l’utilisateur et un objet particulier, mais c’est une opération qui est très coûteuse. Ce mécanisme offre donc une alternative moins précise, mais infiniment plus rapide à calculer pour l’ordinateur et beaucoup plus facile à implémenter pour les visualisateurs.
Conclusion
Le 3D Tiles est un format puissant permettant à la fois des rendus fidèles performants, et le passage à l’échelle lorsque les données d’entrée sont volumineuses. Nous avons vu que la donnée d’origine peut être segmentée et hiérarchisée dans des tuiles. L’organisation concrète de la donnée dans les tuiles est souvent cruciale pour obtenir de bonnes performances. Dans le prochain article, nous détaillerons l’organisation de tuiles que nous avons choisie et les raisons de ce choix.
Attributions
Les images de cet article sont issue du dépôt de travail de la spécification 3D Tiles, sous license CC BY 4.0.