Greboca  

DLFP - Dépêches  -  ParaView, une bibliothèque libre pour la visualisation scientifique

 -  7 mars - 

Pour faire suite à la dépêche sur VTK, voici une présentation de ParaView qui vient de sortir récemment en version 5.9.0.

ParaView logo

Basée sur VTK, une bibliothèque libre pour la visualisation scientifique développée par la même société, son architecture est modulaire. Cela permet de développer rapidement des applications métiers dédiées à un domaine particulier. Par exemple ParaVis, le module de post-traitement de SALOME, développé par EDF et le CEA, est une illustration de la réutilisation de ParaView pour un besoin précis. ParaView est donc à la fois un logiciel clef en main pour la visualisation scientifique et un cadriciel d’application (application framework).

Sommaire

Présentation

ParaView est un logiciel libre multi-plateforme dédié à l’exploration et à la visualisation de données.
La première version est sortie en 2002. Il est développé par Kitware en collaboration avec plusieurs laboratoires de recherche nord-américains.

Une des raisons qui a motivé le développement de ParaView est le calcul de rendu massivement parallélisé—d’où le Para pour Parallel dans son nom. Il est ainsi conçu pour fonctionner aussi bien sur des machines de bureau que sur des super-calculateurs dans des environnements à mémoire distribuée ou partagée de grande échelle. On peut ainsi trouver des records tels que le calcul sur des données de l’ordre du trillion (1018 !) d’éléments de maillage structuré sur plus de 100 000 nœuds de calculs.

L’écosystème autour de ParaView est très vaste et il existe plusieurs façons de l’utiliser. Nous allons en présenter quelques-unes dans la suite de cette dépêche.

Version de bureau

Voici l’utilisation la plus courante de ParaView à travers l’application de bureau basée sur Qt, disponible pour de nombreux systèmes d’exploitation : Windows, Linux, MacOS/OsX… Elle permet d’utiliser en toute transparence les ressources de la machine locale ou celle d’un serveur distant pour les calculs.

Capture d’écran de la version bureau

ParaView garde les mêmes concepts que la bibliothèque VTK sur laquelle il est basé :

  • Séparation entre données, représentations graphiques et vues 3D
  • Utilisation d’un pipeline qui applique des traitements successifs aux données

On retrouve ainsi cette dernière dans l’interface graphique représentée sous forme d’arborescence, en haut à gauche dans l’image ci-dessus. Cela permet de retrouver toute la souplesse et la puissance de cette architecture.

Paraview pipeline browser

Attention, cette représentation du pipeline est une version simplifiée par rapport aux objets VTK sous-jacents. Par exemple les filtres actor ou renderer n’apparaissent pas.

Une fenêtre de propriété et d’information est associée à chacun des filtres du pipeline, permettant de changer des valeurs générales comme la coloration ou la disposition dans la vue 3D, et des valeurs spécifiques au filtre sélectionné.

propriétés d’un filtre

fenêtre d’information

On retrouve ainsi beaucoup de filtres classiques de VTK tels que le découpage de modèle, l’extraction de surface ou de lignes de contours, l’affichage de surfaces, de lignes de flux, de rendu volumique, la modification de la plage de couleurs, etc.

barre d’outils

Petit exemple, le découpage (clip) d’un modèle volumique selon un plan :

Clip

Pour finir, la fenêtre de rendu est totalement paramétrable notamment en multipliant très facilement les vues sur un même modèle. Chaque sous-fenêtre a alors son propre jeu de propriétés, permettant d’afficher plusieurs représentations sur le même écran :

plusieurs vues

En plus de la représentation 3D, ParaView offre d’autres types de rendus facilement paramétrables comme des tableaux de données, des courbes ou encore des histogrammes :

exemple d’histogramme

Animations

ParaView sait aussi gérer les données qui ont une composante temporelle (unsteady data), via sa fenêtre d’animation. On peut ainsi paramétrer très finement la façon dont les données doivent varier temporellement et même rajouter des mouvements de caméra.

Par exemple dans la capture d’écran ci-dessous, je fais varier le facteur d’échelle de la déformation (WarpByVector) en fonction du temps, ainsi qu’un mouvement circulaire de caméra :

Fenêtre animation

Un GIF animé étant trop volumineux, vous pouvez voir le résultat ici.

Python

ParaView est développé en C++ mais ses composants sont pilotables en python. On peut ainsi créer et manipuler très facilement tous les types d’objets du pipeline dynamiquement : filtres, importeurs, exporteurs, grâce au shell python intégré :

Shell python de paraview

ainsi que les filtres programmables dont le calcul est effectué par un code python éditable à la volée :

Programmable source

Macros

Cette interface de programmation permet aussi d’enregistrer et de rejouer une série d’actions de l’utilisateur, ce qui est bien pratique pour s’éviter des clics dans des tâches répétitives.

Petit exemple : vous avez une échelle de couleur imposée que vous devez charger à chaque analyse de modèle. Vous pouvez créer une macro qui le fait en un simple clic de bouton :

  • Lancer l’enregistrement d’une trace (Tools --> Start Trace)
  • Effectuer les actions nécessaires, ici aller chercher la bonne palette de couleur
  • Arrêter la trace (Tools --> Stop Trace)
  • Une fenêtre s’ouvre avec le code python correspondant aux actions effectuées :

 Trace python

Il suffit ensuite de faire File --> Save As Macro… pour obtenir un bouton dans l’interface qui permet d’exécuter le code correspondant !

Macro python

Comme la macro est un fichier python, vous pouvez l’éditer pour l’enrichir ou encore la partager très facilement.

Greffons

Comme décrit dans le paragraphe précédent, l’utilisation de l’interface de programmation en python permet d’étendre rapidement les fonctionnalités de ParaView. Cependant les performances sont limitées, car les fichiers python sont interprétés à la volée.

Ainsi, pour des extensions plus exigeantes en vitesse il existe un mécanisme de greffons, ou plug-ins en anglais, compilés en natif, qui peut utiliser le langage C++. Les extensions possibles sont alors très diverses :

  • Ajouter un format de fichier en entrée ou en sortie
  • Ajouter un filtre personnalisé
  • Ajouter des éléments graphiques 3D ou 2D (boutons, menus…)
  • Créer une vue dédiée à un rendu spécifique

Quelques exemples avancés :

Greffon NVidia IndeX, source: NVidia

Animation des lignes de flux

Version serveur : ligne de commande et In Situ

Serveur distant

L’architecture de ParaView est de type client-serveur, c’est-à-dire que les calculs sont effectués sur l’entité serveur et le client ne fait que visualiser le résultat. Même dans la version de bureau, il y a un serveur intégré lancé automatiquement, nommé builtin :

Serveur intégré par défaut

Pour utiliser une machine distante, il suffit de lancer l’exécutable pvserver sur celle-ci et de s’y connecter avec l’application de bureau :

Serveur distant

Le fonctionnement est ensuite totalement transparent pour l’utilisateur, où que soit situé le serveur.

Ligne de commande pvbatch

Les scripts python évoqués précédemment peuvent être lancés par la commande pvbatch livrée avec ParaView. Cette commande ne prend qu’un seul argument qui est le fichier à exécuter, et peut être lancée indifféremment sur un client ou sur un serveur.

Si ParaView a été compilé avec le support de MPI, il est alors possible de lancer pvbatch via mpiexec pour effectuer un traitement sur plusieurs nœuds de calculs :

mpiexec -np 4 pvbatch my_script.py

pvbatch ne fournit pas d’interface graphique. Il faut donc prévoir à la fin du script d’écrire le résultat de la visualisation dans un fichier image ou de générer une vidéo. Par exemple, si on a une simulation qui nous fourni des résultats bruts que l’on veut visualiser, un calcul OpenFOAM ou FreeCAD FEM par exemple, alors le flux de travail serait :

ParaView pvbatch

Ce mode de fonctionnement est très pratique pour traiter à distance ou en arrière-plan des données de grandes tailles.

Cependant pour des simulations avancées, il arrive qu’il ne soit pas souhaitable de générer les fichiers intermédiaires :

  • taille trop importante, les opérations d’écritures de fichier deviennent critiques,
  • coût de stockage trop important, surtout quand on loue les serveurs de calculs,
  • besoin d’avoir accès rapidement à des résultats pendant la simulation, notamment si celle-ci dure plusieurs heures, voire plusieurs jours

C’est pour cela qu’il existe la visualisation in situ, venant du Latin sur place, qui permet d’embarquer ParaView dans le calcul de simulation et ainsi s’affranchir des données intermédiaires.

Catalyst

Si on reprend l’image de flux qui illustre l’utilisation de pvbatch, celle de la version in situ serait d’intégrer le calcul de visualisation dans la simulation :

ParaView InSitu

C’est Catalyst, un module de ParaView, qui s’en charge. Ainsi, plus besoin de générer les données intermédiaires potentiellement coûteuses en espace disque, le résultat attendu est directement généré à la volée. En outre, comme Catalyst peut être appelé dès les premiers calculs, les images arrivent en temps réel, ce qui permet d’arrêter prématurément un calcul qui serait mal paramétré.

On peut évidemment utiliser Catalyst seulement pour surveiller le calcul, avec un rendu intermédiaire rapide à calculer, et s’autoriser à faire le rendu final une fois que la simulation est terminée :

ParaView in-situ et pvbatch

C’est la force d’une architecture modulaire et ouverte !

Version Web

ParaView n’a pas échappé aux besoins croissants des utilisateurs d’utiliser un simple butineur pour visualiser des données. Il existe ainsi deux approches :

  • client seul, les calculs et l’affichage sont gérés par le client
  • client-serveur, les calculs sont effectués par le serveur et le client ne fait qu’afficher des images

ParaView Glance utilise la première approche et ParaView Web fourni la deuxième. Nous allons détailler ces deux solutions dans la suite de cette dépêche.

Calcul et affichage côté client : ParaView Glance

ParaView Glance est une application JavaScript autonome pour la visualisation interactive de données.

L’autonomie implique que traitement des données et leur affichage soient effectués directement par le navigateur internet. Plusieurs bibliothèques JavaScript sont utilisées :

Vous pouvez tester l’application via l’instance de démonstration de Kitware :

ParaView Glance

L’application permet de modifier la scène affichée (couleurs, échelle, type de représentation, etc.) ainsi que d’interagir interactivement avec le modèle (zoom, rotation, multi-vue, etc.). Dans la partie gauche, l’utilisateur a accès à un pipeline simplifié. Il peut modifier des paramètres, mais il ne peut pas rajouter ou enlever de filtres.

Paraview Glance Pipeline

ParaView Glance est donc l’outil idéal pour partager une scène préalablement paramétrée en une web app prête à l’emploi. Celle-ci peut être générée très facilement depuis la version bureau de ParaView.

Par exemple cette scène prise au hasard :

Paraview Glance avant export

s’exporte en quelques clics dans un fichier html autonome contenant données et code :

Paraview Glance après export

ParaView Glance est donc l’outil parfait pour partager rapidement des résultats de visualisations de façon portable, moderne et interactive !

Calcul sur le serveur, affichage chez le client

Comme on l’a vu dans la version serveur de ParaView, il est parfois peu pertinent d’embarquer les données côté client et de lui faire exécuter des calculs intensifs. Même si vtk.js est très performante, il est impensable de charger des fichiers de plusieurs gigaoctets dans le navigateur.

ParaView Web

ParaView Web est un cadriciel écrit en JavaScript pour construire des applications web de visualisation de données. Il contient de nombreux composants réutilisables, développés en React ou nativement :

  • connexion à des sources de données : fichiers, bases de données, ParaView Web backends, Girder
  • widgets d’interface : éléments de fenêtre (textes, boutons, onglets…) et composants dédiés à la visualisation scientifique (éditeur de sélection, légende, fonctions de transfert…)
  • fenêtre de rendu : 1D, 2D, 3D via three.js, vtk.js ou WebGL

Ce cadriciel est ainsi utilisé pour construire des applications web de type client/serveur dédiées à la visualisation scientifique. Vous pouvez en retrouver certaines développées par Kitware sur la page dédiée.

L’application web Visualizer

ParaView Lite

ParaView Lite est une application basée sur le cadriciel ParaView Web et qui reprend le fonctionnement de la version de bureau de ParaView.

Il se compose d’un serveur web accessible via le protocole http et qui expose une application qui permet d’explorer des données comme on le ferait avec l’application de bureau :

Paraview Lite

Dans ce mode de fonctionnement, les données et les calculs sont effectués sur le serveur. Le client ne fait qu’afficher des images pré-calculées. On retrouve à gauche le fameux pipeline, ainsi que les filtres et leurs propriétés en haut de la fenêtre:

Filtres dans ParaView Lite

Pipeline de ParaView Lite

Il est ainsi possible d’envisager de construire des applications manipulant des données plus importantes qu’avec ParaView Glance puisque tout le travail est effectué côté serveur.

Le résultat peut alors être consulté sur des terminaux peu puissants comme des tablettes ou des ordiphones. ArcticViewer, en version Android et iOS, en est l’illustration.

Conclusion

Cette dépêche, catalogue de fonctionnalités, illustre surtout les multiples usages possibles de ParaView pour l’exploration et l’affichage de données dans de nombreux domaines d’activités.

Développé avec une réelle philosophie d’ouverture, de réutilisation et d’exécution sur quasiment toutes les plateformes possibles (bureau, serveur, web, ligne de commande…), ce logiciel est évidemment un incontournable de la visualisation scientifique.

On remarquera que tout le long de ses bientôt 20 ans de développement il a su évoluer et s’adapter aux usages nouveaux de l’informatique (python, HPC, web…), contraint par les domaines d’activité où il se doit d’exceller pour survivre. Voici donc une belle preuve concrète que logiciel libre rime avec innovation !

Commentaires : voir le flux Atom ouvrir dans le navigateur

par mzf, Benoît Sibaud, ymz

DLFP - Dépêches

LinuxFr.org

Quel téléphone (plus ou moins) libre en 2021 ?

 -  1er mai - 

Nous terminons notre tour du monde des systèmes d’exploitation libres pour smartphones avec la partie matérielle : quel appareil se procurer pour (...)


GIMP 2.10.24: version cartographe

 -  19 avril - 

GIMP 2.10.24 est principalement une version corrective qui une fois encore améliore beaucoup le support des formats de fichier. Nouveautés notables (...)


Communiquer avec le serveur depuis un navigateur Web : XHR, SSE et WebSockets

 -  19 avril - 

Dans cette dépêche, nous allons faire un tour d’horizon de différentes manières de communiquer avec un serveur depuis une application Web, avec un (...)


GnuPG 2.3.0 est sorti

 -  16 avril - 

Le 7 avril 2021, le projet GnuPG a publié la première version officielle de sa nouvelle branche de développement, GnuPG 2.3.0. Les nouveautés de (...)


Hotspot, à la recherche du point chaud…

 -  14 avril - 

Depuis maintenant quelques semaines, j’ai repris les contributions au projet Calligra, et plus particulièrement au traitement de texte (cf ce (...)