# VTK

VTK (pour Visualization ToolKit en anglais) est une bibliothèque logicielle libre sous licence BSD de classes C++ pour la visualisation scientifique de données 3D et le traitement d'images. Elle s'interface facilement avec les langages Python et Java. Elle a été développée à partir de 1993 au Centre de Recherche du groupe General Electric et utilisée en premier dans le domaine médical. Par la suite ses développeurs (Will Schroeder et Ken Martin) ont fondé la société Kitware Inc. aux États-Unis pour assurer le support commercial et continuer le développement de ce produit.

## Caractéristiques

VTK supporte l'import et l'export de données depuis les formats VTK (format de fichier), mais peut aussi lire de nombreux formats issus de solveurs numériques comme OpenFOAM ou Ansys Fluent.
VTK est une bibliothèque multiplateforme, et peut être compilée pour MacOS, Windows, Linux, mais aussi Android et WebAssembly.
Le rendu graphique de VTK repose sur le standard OpenGL avec un support expérimental pour ANARI et WebGPU. Du rendu réaliste par lancer de rayon est aussi possible via l'intégration de la librairie open source Ospray, ainsi que du rendu physique réaliste (PBR).
Les algorithmes intégrés dans VTK proposent une version parallèle, pour une utilisation avec des données massives dans un contexte de calcul haute performance.

## Architecture

VTK est construit autour d'une architecture composée de modules. Ces différents modules peuvent être activés ou non au moment de la compilation en utilisant CMake. Les classes VTK définissant des algorithmes sont appelés "filtres" et peuvent produire, transformer ou exporter des données.
Le modèle de données de VTK est prévu pour être flexible et supporte de nombreux types de maillages, en deux et trois dimensions: les maillages structurés, uniformes et rectilignes, mais aussi non structurés, qui définissent les coordonnées des points, ainsi que leur connectivité, formant ainsi des cellules. VTK supporte aussi l'exécution de filtres sur des données définies par raffinement de maillage adaptatif (AMR), basé sur des patches ou des arbres (HyperTreeGrid), mais aussi les cellules d'ordre élevé via le modèle vtkCellGrid.
L'utilisateur de VTK définit un pipeline composés de filtres successifs, le premier étant généralement une source standard ou un lecteur de fichier, et le dernier étant une action d'écriture ou de rendu. L'évaluation de ce pipeline suit un modèle d'exécution paresseuse séquentielle : les filtres en amont du pipeline ne sont évalués que lorsqu'un filtre en aval demande un résultat.
Les modèles de données et l'exécution des pipelines VTK sont prévus pour être distribuables entre plusieurs processeurs ou ordinateurs grâce à l'utilisation de MPI.
Au delà de l'interface de programmation C++, VTK fournit également une couche interprétée en Python, Java et .NET (via la bibliothèque propriétaire ActiViz).

## Domaines d'utilisation

VTK est à la base de plusieurs logiciels de visualisation scientifique libres tels que ParaView et VisIt. La bibliothèque PyVista fournit une API de haut niveau au dessus de VTK pour les utilisateurs de Python.
VTK est aussi utilisé dans une variété de domaines scientifiques, parmi lesquels figurent:
* Analyse d'image
* Imagerie médicale
* Mécanique des fluides
* Finance
* Acoustique
* Mécanique
* Éléments finis
* Géophysique
* Stéréolythographie
* Biologie Moléculaire
* Reconstructions de volumes

## Exemples

Création d'une sphère bleue avec la bibliothèque VTK Python.