Créer une représentation 3D à partir d'un fichier d'élévation ASCII
Écrit par Weetos   
20-09-2006
Lightwave3D

Tutoriel LightWave (8.x/9.x)

Comment, à partir d'un fichier d'élévation ESRI GRID ASCII (matrice XY de coordonnées Z), obtenir un objet tridimensionnel utilisable sous LightWave, sans utilisation de plugins tierce partie ? C'est la question que je me suis posé, et n'ayant rien trouvé de vraiment concluant sous forme de plugin, je me suis orienté vers une autre solution, que je vais tenter de vous exposer dans cet article.

1 - Pré-requis

Tout d'abord, voyons sous quelle forme se présente le fichier d'élévation, et plus précisément son en-tête (Header), composé ici de six lignes :

 ncols         1982
 nrows         2523
 xllcorner     414575
 yllcorner     2118225
 cellsize      50
 NODATA_value  -9999

Les tags utilisés dans cet exemple s'expliquent ainsi :

ncols :nombre de colonnes que comporte la matrice
nrows :nombre de lignes
xllcorner :coordonnée X du coin inférieur gauche (lower left)
yllcorner :coordonnée Y du coin inférieur gauche (lower left)
cellsize :longueur(=largeur) des cellules de la matrice, en unité (ici en km)
NODATA value :Valeur utilisée pour tagger les cellules ne comportant pas de valeur d'élévation

Dans un premier temps, il nous faut noter ou imprimer les informations dont nous avons besoin pour pouvoir traiter les données, et pour par la suite avoir des grandeurs exactes lorsque nous importerons le fruit de cette matrice dans LightWave.

NB: il est possible d'imprimer cet en-tête en effectuant par exemple la séquence suivante sous linux/BSD/Mac OSX :

  $ head -n6 <fichier> | lp    

Une fois ceci fait, il nous faut générer une version du fichier ne contenant pas d'en-tête. Il est possible d'effectuer cela en supprimant l'entête et en sauvegardant cette nouvelle version décapitée sous un autre nom. Ce nouveau fichier va nous permettre d'utiliser un petit logiciel libre nommé '3DEM' (Malheureusement disponible uniquement pour Windows) téléchargeable ici .

 

2 - Conversion des données en images bitmap

Une fois 3DEM installé, lancez le et sélectionnez 'File / Load Terrain Model ', puis dans la fenêtre qui apparaît, cochez l'option 'Terrain Matrix (bin, txt) ' et pressez Entrée. Chargez alors la version décapitée de votre fichier d'élévation (celle sans l'en-tête). Vous obtenez dès lors une fenêtre vous invitant à renseigner le programme sur les données importées :

  

Renseignez les différents champs comme indiqué sur le screenshot, en adaptant si besoin, selon vos propres données. Notez que les champs initulés 'SW Corner Coordinates ' et 'NE Corner Coordinates '  importent peu, car le référentiel que nous utiliserons est celui de LightWave. Vous remarquerez que le tag par défaut des données manquantes est '-9999', ce qui est précisément ce que nous avions comme valeur dans l'en-tête.

Attention cependant à ce que les valeurs entrées soient cohérentes (au sens géométrique), et que le système de coordonnées séléctionné (XY) correspond au données soumises, sous peine de ne pas pouvoir aller plus loin.

Validez ensuite en pressant le bouton 'OK', et obtenir quelques instants plus tard la map correspondante à la résolution par défaut. Une fois celle-ci affichée, nous devons nous débarasser du shading (inutile dans notre cas, nous en appliquerons un bien meilleur dans LightWave !) qui est appliqué par défaut, en séléctionnant le menu 'Color Scale / Shading Relief ' puis en spécifiant 0% pour le paramètre 'Shade Depth '.

Vous devriez alors obtenir quelque chose comme ceci : 

Rendu par défaut de 3DEM

Il vous reste à présent à spécifier les couleurs et la résolution qui vous conviennent :

Pressez F6, et glissez le curseur Map Scale jusqu'à ce que vous obteniez la taille en pixels souhaitée.

Pressez F3, et modifiez l'échelle de couleur selon vos souhaits au moyen des curseurs RVB.

Une fois ces paramètres ajustés à vos besoins, vous pouvez sauver l'image au format désiré en séléctionnant  le menu 'File / Save Map Image '- Cette image nous servira plus tard de color map pour l'élaboration de la texture de l'objet 3D.

Il nous faut à présent regénérer cette carte de telle sorte qu'elle puisse être utilisée en tant que displacement map dans LightWave. Pour cela, nous avons besoin d'une échelle de dégradés de gris (plus la luminance est élévée, plus la géométrie du maillage est affectée). Pour cela, pressez de nouveau F3, et changez les couleurs du point haut et du point bas, respectivement en blanc et en noir, en cliquant sur les boutons correspondants (dans l'exemple 32m et 231m)  et en ajustant les curseurs RVB situé sur la droite ( 'Colors Control ' ). Sélectionnez ensuite le bouton du point bas et pressez 'Spread To'  puis le bouton du point haut, pour générer le dégradé de gris.

 

Terrain colors

 

Cliquez sur 'OK' puis sauvegarder l'image ainsi générée dans le format de votre choix, selon la même procédure que précédemment. Concernant le type de fichier à utiliser, notez qu'un format 32 ou 24 bits est ici inutile du fait du nombre restreint de couleurs, préférez donc un format 8 bits tel que GIF ou PNG-8. Selon la résolution choisie, vous verrez une nette économie de ressources lorsque ces maps seront mis à profit dans LightWave. Si vous avez à votre disposition un soft type Photoshop ou autre, prenez le temps de convertir les deux maps genérées par 3DEM, ça vaut le coup, surtout à haute et très haute résolution.

 

3 - Importation des données dans LightWave

Lancez à présent Modeler  et créez un plan (shift-x) via le numeric panel (pressez 'n'). Entrez les valeurs qui vous conviennent, comme indiqué ci-dessous :

Modeler screenshot

 

Attention au système de référence ! Le plan horizontal est XZ, l'élévation suit l'axe Y. Dans cet exemple, l'échelle ne correspond pas à la réalité, les valeurs Width (X) et Depth (Z) choisies sont les valeurs respectives de nrows  et ncols  définies dans notre en-tête de fichier. L'usage de ces valeurs nous permet de garder les proportions longueur/largeur de notre object géographique. Subdivisez le plan (Segment X / Segment Z ) de telle sorte que nous obtenions des polygones à peu près carrés et avec une densité suffisante. Convertissez alors cet objet en Subpatches (pressez TAB) - Cette étape est très importante car elle autorise un contrôle du niveau de détail souhaité lors du rendu, au travers d'un gradient basé sur la distance par rapport à l'objectif  ou de l'usage de l' APS (LW9.x). Définissez ensuite une surface (pressez q) et sauvez l'objet. Nous pouvons maintenant fermer Modeler.

Lancez à présent Layout  et chargez l'objet. Afin de pouvoir nous repérer facilement, nous allons charger dès à présent la version polychrome de notre map et l'appliquer en tant qu'image map sur  le color channel. Pour ce faire, pressez F6 (Image Editor ), et charger le fichier en question - profitez en pour faire un tour dans l'onglet 'Edit ' si vous désirez ajuster le contraste, la saturation, etc.

Pour appliquer l'image map à notre objet, pressez F5 (Surface Editor ) et selon la version de LightWave dont vous disposez, charger l'image dans le stack du color channel ou créez un noeud image map connecté au color channel dans le Node Editor

 Surface Editor

 Paramètres :

Texture Axis : Y - Important ! Il s'agit de l'axe de projection de l'image, qui est dans notre cas l'axe vertical, soit Y dans LightWave.

Scale : Cliquez sur Automatic Sizing  pour ajuster la taille de la map à celle de l'objet

 Les autres paramètres pourront être laissés à leur valeur par défaut, puis cliquez sur 'Use Texture '.

A présent, le viewport OpenGL doit afficher la color map projectée sur notre objet ( à moins que votre configuration de LightWave ne spécifie le contraire ( cocher le paramètre OpenGL Textures dans les préférences d'affichage OpenGL au besoin ). 

 

Nous allons maintenant déformer le plan selon les données d'élévation traduites en niveau de gris, obtenues au chapitre précédent. Pour ce faire, sélectionnez l'objet pui pressez 'p' (Object Properties ), et ajoutez un 'Textured Displacement ' à l'aide du menu 'Add Displacement '. 

Object Properties
 

Dans les propriétés du Textured Displacement, un calque de type image map est défini par défaut - chargez simplement la version monochrome de notre map, spécifiez Y pour Texture Axis , et cliquez sur 'Automatic Sizing '. Définissez ensuite le facteur de modification ( par défaut égal à 1 ) en agissant sur la valeur 'Texture Amplitude ' si vous souhaitez exagérer l'effet de relief, optez pour une valeur supérieure à 10.

Adaptez ensuite le niveau de subdivision à votre guise dans Object Properties, de telle sorte que le niveau de détail soit suffisant sans pour autant être trop coûteux en ressources .

 

 

 

 

Article en cours de rédaction - A suivre Wink

 

 


 

Trackback(0)
Commentaires (0)Add Comment

Ecrivez un commentaire

Powered by Azrul's Jom Comment for Joomla!
busy
Dernière mise à jour : ( 28-02-2009 )