Tutorial: Carte de niveau d'après une image (Bitmap Heightmaps)

Ce tutorial décrit l'utilisation du plugin Heightmap pour générer des pseudo profils 3D à partir d'images bitmaps. La même routine peut également être utilisée pour générer des photogravures à partir d'images à deux tons et des lithopanes. Le code source du plugin Heightmap est également fourni avec CamBam pour les plus aventureux.

ATTENTION! Le plugin Heightmap produit un code qui plonge dans toute la profondeur de votre Heightmap en une seule passe. Une nouvelle méthode est disponible dans CamBam plus pour générer des maillages 3D à partir de bitmaps et qui permet d'utiliser les opérations de profilage 3D pour créer des passes d'ébauche. Si vous utilisez le plugin heightmap, utiliser une faible profondeur.

Note de traduction: Il est désormais possible d'avoir des passes multiples avec un Heightmap car la fonction de gravure de la version 0.9.8 supporte désormais les passes multiples.

Etape 1 – Ouvrir le plugin Heightmap

La plugin HeightMap est accessible depuis le menu principal Plugins - HeightMap Generator.

Les plugins de CamBam sont des bibliothèques DLL de classe .NET et sont situées dans le sous-dossier 'plugin' du dossier d'installation de CamBam.

C:\Program Files\CamBam\plugins ou C:\Program Files\CamBamPlus\plugins

Le code source du générateur Heightmap se trouve également dans un fichier zip de ce dossier.

Etape 2 – Sélectionner un fichier Bitmap

La réussite d'un Heightmap dépend en grande partie de la qualité de l'image source. Des objets éclairés de face, même avec un ombrage donnent les meilleurs résultats.

Inspirée par les expériences vues sur ce post de cnczone 3D for Crazies, j'ai photographié un objet immergé dans un bac contenant de l'eau et du colorant alimentaire bleu. J'ai ensuite utilisé un programme de dessin pour filtrer l'image bitmap afin de n'avoir que le canal rouge affiché en niveaux de gris. En théorie, plus la surface de l'objet est loin de la surface du liquide, plus il apparaîtra bleu,. Cela a bien fonctionné, beaucoup mieux que je m'y attendais mais il faut prendre des précautions pour éviter les réflexions de surface et les bulles d'air. Ce n'est peut-être pas une si bonne idée pour faire des heightmaps de personnes.

Object in blue food colouring Object with Red Filter

Avec la fenêtre du générateur Heightmap ouverte, sélectionnez File – Open (Fichier – Ouvrir) dans le menu principal et sélectionnez l'image source.

Etape 3 – Les options de Heightmap

Modifier les options de Heightmap via le menu Tools – Options de la fenêtre heightmap.

ClearPrevious

L'option de menu Tools - Generate Heightmap peut être appelée plusieurs fois. Si cette option est à true, le Heightmap précédemment créé sera supprimé avant génération d'un nouveau heightmap.

Invert

Si à true alors les couleurs sombres sont plus élevées (de plus grandes valeurs Z), si à false, ce seront les couleurs claires qui indiqueront la hauteur la plus importante.

XSize / YSize

Largeur (X) et hauteur (Y) du Heightmap dans les mêmes unités que le projet courant.

Ces valeurs contrôlent la taille physique du Heightmap résultant. Si le YSize = 0, l'aspect ratio de l'image sera appliqué à la valeur Xsize pour déterminer la hauteur Y.

Exemples:

Xsize = 100 (mm), YSize = 0

Xsize = 4 (pouces), YSize = 0

XStep / YStep

Un Heightmap crée une série de lignes de balayage, sensiblement de la même façon qu'une image de télévision est créée. La valeur YStep contrôle la distance entre les lignes de balayage horizontal et la valeur de XStep détermine à quelle distance se trouve chaque point de la ligne dans la direction X.

Si l'un est mis à 0, la hauteur sera calculée pour chaque pixel de l'image.

Exemples

XStep = 0, YStep = 0

(Calculer la hauteur à chaque pixel de l'image)

XStep = 0, YStep = 0,75 (mm)

(Calculer la hauteur à chaque pixel dans une ligne de balayage, avec chaque ligne de balayage horizontal à 0,75 mm d'intervalle)

XStep = 0, YStep = 0,001 (pouces)

(Calculer la hauteur à chaque pixel dans une ligne de balayage, avec chaque ligne de balayage horizontal à 0.001" d'intervalle).

Zmax

Il s'agit de la plus grande hauteur en Z. Si la surface du brut est au niveau zéro de l'axe Z, alors typiquement Zmax serait également à zéro.

Zmin

Il s'agit de la plus grande profondeur atteinte en Z dans le heightmap.

Exemples

Zmax = 0, Zmin = -10 (mm)

Les hauteurs vont donc de -10mm au plus profond du Heightmap à 0mm pour le point le plus haut.

Zmax = 0,125 (pouces) Zmin =- 0,125 (pouces)

Les hauteurs vont de -0.125" au plus profond à 0.125" au point le plus haut.

Etape 4 – Générer le Heightmap

Fermer la fenêtre des options et sélectionnez Tools – Generate Heightmap (Outils - Générer heightmap).

Vous devriez voir des lignes apparaissent dans la zone de dessin de CamBam. Laissez la fenêtre du générateur ouverte, effectuez des rotations et modifiez le zoom dans la fenêtre de dessin de CamBam pour avoir une meilleure idée des dimensions du Heightmap.

Vous pouvez trouver plus d'informations sur les fonctions de rotation, panoramique et zoom ici.

Voici une capture d'écran du Heightmap résultant.

Etape 4 – Générer le Heightmap

En plus de générer un objet composé de lignes 3D représentant le Heightmap, le plugin crée également une opération de gravure liée à cet objet. Une opération de gravure est utilisée car elles sont conçues pour «suivre» la géométrie associée. En effet, la fonction de gravure utilise les lignes 3D comme un parcours d'outil.

Modifiez les paramètres de l'opération de gravure telles que la vitesse d'avance.

NOTE: Ne pas modifier la valeur TargetDepth, la profondeur d'usinage sera tirée de l'objet source.

Pour convertir le Heightmap en Gcode, cliquez droit sur le dossier d'usinage puis sélectionnez Produce Gcode dans le menu contextuel.

Voici la toute première Heightmap que j'ai produit à partir de CamBam. L'image fait 120 mm X 90 mm avec une fraise de 2 mm à bout plat dans du contre-plaqué. Pas fantastique à regarder, mais pas catastrophique non plus. Je vais essayer de trouver quelques beaux exemples.

Gravure de photos

Le processus Heightmap peut également générer des gravures ombrées.

Une fraise en V (à graver) est utilisée pour cela, généralement pour une gravure à 2 tons dans du stratifié. Plus l'usinage est profond, plus il apparaîtra sombre (si vous utilisez une lumière sur le stratifié noir). Une faible profondeur en Z est suffisante (~ 0,5 mm, 0.02"). La valeur YStep doit être réglée de sorte que les lignes de balayage ne se chevauchent pas ce qui gâcherai l'effet d'ombrage. Cette distance varie en fonction de l'angle de l'outil de gravure et de la profondeur de passe. Pour une fraise à 60° et 0.5mm de profondeur de passe, j'utilise un YStep 0.7mm.

Photo Engraving

Un lithopane est une autre variation sur ce thème, où une image est gravée dans un matériau mince et translucide est vue avec rétro-éclairage. Les lithopanes sont généralement inversés car d'une profondeur d'usinage importante résulte un matériau plus mince et qui laisse donc passer plus de lumière.

Photo Lithopane Engraving

Créer un nuage de point depuis un Heightmap

Voici une méthode pour générer un nuage de points au format DXF

Générer un Heightmap comme d'habitude et sélectionnez l'objet composé de lignes si ce n'est pas déjà fait.

Maintenant, utilisez le menu contextuel de la zone de dessin Draw – Points – Step Around (Dessiner - Points – Répartir autour).

Ceci va insérer un point le long de chaque ligne avec un pas N. Par défaut, un Heightmap fera 1 pixel de l'image = 1 unité de dessin (Ceci peut être modifié dans les options de Heightmap).

Entrez 1 pour Step Distance, puis appuyez sur OK.

CamBam affiche actuellement des points en utilisant des gros carrés. Ca donne une impression de fouillis, mais ne vous inquiétez pas à ce sujet. L'objet ligne peut maintenant être supprimé.

Le dessin peut maintenant être exporté vers un fichier DXF. Voici un nuage heightmap affiché dans Autocad.

Heightmap Pointcloud