Modéliser le terrain en 3D

Ce billet, et ceux qui vont suivre, vont aborder les techniques de représentation de données 3D. S’ils sont surtout destinés à me servir d’aide mémoire (je ne pratique pas tous les jours ce type de représentation de données), j’aborderai ces questions de façon générique pour que les lecteurs intéressés les appliquent à leurs représentations.

Comme je le disais dans le billet précédent, je n’utilise que des logiciels open sources. Ces logiciels, dont le code est distribué librement, nous garantissent que le format des données traitées est parfaitement documenté. Lorsque le format de données est secret ou mal documenté, l’exploitation des données dépendra de la volonté ou des aléas techniques et surtout économiques qui impacteront le logiciel choisi. L’usage de logiciels libres nous permet de nous assurer que les données créées aujourd’hui seront exploitables dans plusieurs années.
Les données 3D n’ont pas qu’un intérêt graphique, elles peuvent aussi être utilisées pour tester des hypothèses. Les hypothèses actuelles devront certainement être réexaminées lorsque de nouvelles idées où éléments factuels apparaîtront.

Nous allons commencer par modéliser en 3D le terrain à étudier.
Élévation du terrain

Pour les représentions 3D j’utilise le logiciel libre Blender
Depuis mes premiers essais imprécis, il est apparu une extension (un plugin) pour gérer des données cartographiques avec Blender : BlenderGIS. Les travaux sur ce plugin semblent avoir commencé à la même époque où je faisais mes premiers tests. Ajourd’hui ce plugin semble vraiment mature et très efficace. Il nous permettra de récupérer et traiter l’essentiel des données cartographiques directement depuis Blender.

Prérequis

Ce plugin s’appuie sur GDAL : un ensemble d’outils de gestion de données cartographiques. Ces outils se basent sur le vieux principe fondamental des systèmes Unix : des programmes qui effectuent une seule chose et qui le font bien.
Si ces outils sont surtout destinés à être utilisés en ligne de commande, des applications comme QGis ou Blender apportent le confort dans le choix des options et la vérification visuelle des données traitées.

La documentation de BlenderGis donne toutes les indications pour installer GDAL sur tous les systèmes (Linux, Winows, Mac)

Il faut naturellement disposer de Blender. Nous utiliserons également QGis pour effectuer certaines opérations détaillées ci-dessous.

Installation et configuration de BlenderGis

L’installation est très simple. Il suffit de télécharger un zip depuis le dépôt GitHub de BlenderGis. Si, comme moi, vous préférez travailler avec la version packagé de Blender on peut choisir la branche de développement du module pour la version 2.79

Téléchargement de BlenderGIS

Puis depuis le menu de Blender
File > User Preferences > Add-ons "Install Add-on from File ..."
Installation BlenderGIS

Lors de l’activation du plugin il faut configurer quelques paramètres indispensables : le dossier cache (Cache folder) où seront stockées provisoirement les “tuiles” des cartes cartographiques.
Configuration BlenderGIS
Il faut également ajouter le système de coordonnées de références (CRS) Lambert-93, EPSG:2154
Activer > Ajouter Lambert-93 (EPSG:2154)

Systèmes de Coordonnées de Références

Il existe de multiples Systèmes de Coordonnées de Références (CRS en anglais). Le plus courant est le WGS84 qui est le système de coordonnées mondial utilisé en particulier par les GPS. Pour avoir une meilleur précision sur la France nous utiliserons plutôt Lambert-93, EPSG:2154. Mes erreurs de précisions lors de mes premiers tests provenaient de mon usage confus entre divers CRS.

Usage de BlenderGis

Zone de travail

Dès que BlenderGis est installé et configuré, on dispose d’un panneau “GIS” supplémentaire dans Blender
Panneau BlenderGIS

Pour sélectionner notre zone de travail, on utilise le bouton “Basemap” puis on choisi OpenStreetMap (OSM)
(Il faut être patient lors du premier usage, le cache se rempli avec les “tuiles”. On peut commencer en utilisant le CRS “Web Mercator”, on passe en Lambert lorsque l’on dispose de suffisamment de données.)

Vue OpenStreetMap

La touche du clavier “Échap” permet de sortir du mode Basemap (Map View).

Le dossier de travail courant contient un fichier OSM_MAPNIK_WM.tif. C’est une image géo-référencée (un raster) que l’on peut copier pour la réutiliser plus tard. Il faudra l’importer depuis le menu de Blender
File > Import > Georeferenced raster

La premier image de ce billet est justement un raster importé qui est mappé sur la surface (mesh) du terrain. C’est joli mais inutile pour un projet historique. On peut cependant envisager de plaquer une carte topographique historique sur ce terrain contemporain.

Élévation de terrain

Le bouton du panneau GIS “Get SRTM” permet d’obtenir l’élévation de terrain collectées par la NASA en février 2000.
Élévation srtm du terrain

Dans la vue “Outliner” de Blender (en haut à gauche sur l’image ci-dessus) on obtient un groupe d’objets “srtm”.

Le dossier de travail courant a maintenant également un fichier géo-référencé srtm.tif. C’est une image où les variations de gris correspondent aux élévations de terrain.

On pourrait déjà utiliser ce terrain pour notre image 3D mais nous avons besoin d’informations supplémentaires comme les courbes de niveau ou ajouter des points GPS. Nous allons alors utiliser QGis pour obtenir ces informations. QGis est un logiciel spécialisé de cartographie.

QGis

Pour importer nos données de srtm on ajoute un couche raster où l’on sélectionne notre fichier srtm.tif

QGis: ajout de raster

Le menu Raster > Extraction > Création de contour permet de créer des lignes de contour en format vectoriel que l’on enregistre dans un fichier au format shapefile (.shp). L’intervalle de 20m est suffisant. Il faut choisir le nom de l’attribut qui contiendra les hauteurs.
QGis: courbes de niveau

Ici il y a une astuce de manipulation: le fichier contour.shp qui vient d’être créé n’est pas réutilisable en l’état. Il faut “Enregistrez sous” pour préciser le SCR Lambert-93
QGis: export de couche vectorielle shape

On procède de la même façon pour enregistrer nos points GPS (dans le SCR WGS84). On peut les importer depuis un ficher texte CSV puis importer ce fichier depuis le menu:
Couche > Ajouter une couche > Ajouter une couche de texte délimité
On obtient également une couche vectorielle de points que l’on “enregistre sous” pour définir le bon SCR.

Gestion des rivières

Une partie de ces opérations pourraient être réalisées avec QGis mais je trouve qu’il est plus simple de manipuler les vertex (points) et lignes (edge) dans Blender.

Le bouton “Get OSM” du panneau GIS permet de sélectionner le téléchargement des données “Waterway” de Openstreetmap (OSM). On pourrait sélectionner plus précisément la Moselle mais celle-ci est cartographiée en plusieurs segments. Il est alors tout aussi simple de supprimer les cours d’eau qui ne nous concernent pas.
Blender: import des données OSM

On peut ensuite importer les courbes de niveau depuis le fichier shape créé par QGis. En précisant le champ qui contient l’élévation et notre CRS
Blender: import shape file

Notre groupe d’objet Waterway peut être positionné à la hauteur désirée. La courbe qui contient le centre de la rivière doit être continue pour pouvoir sélectionner tous ses points avec un simple Ctrl+L et modifier l’altitude spécifique de la profondeur de la rivière.
On peut ensuite fusionner nos groupes d’objets de courbes de niveau et de rivière.

Blender édition des points de la rivière

Le bouton Delaunay permet de créer les meshs (surfaces) du terrain.

Blender: génération des surfaces avec l'algorithme Delaunay

Ici c’est une partie assez longue où il faut adapter les points qui délimitent la rivière et le fond de la rivière avec le calcul des meshs. Il faut généralement ajouter des points en subdivisant les edges entre 2 vertex ou ajouter des edges manquants (F en mode édition de points). Ctrl-Z permet d’annuler rapidement la dernière opération.
Les surfaces (mesh) du terrain sont groupés dans un objet TIN. C’est un objet que l’on peut supprimer et récréer lorsque l’on modifiera le tracé de la rivière pour chercher à retrouver son tracé antique.

Pour finir le bouton “Terrain” du panneau GIS permet de créer une texture rapide qui permet de visualiser l’élévation de terrain du vert au rouge. Nous n’avons plus qu’à ajouter un plan pour le niveau de la rivière.
Blender-terrain.png

Nous verrons dans un prochain billet comment gérer de façon modulaire plusieurs fichiers Blender et en particulier la modélisation de l’aqueduc.