Photogrammétrie vers texture

Une texture pour un objet 3D n'est pas seulement une simple image que l'on ira plaquer sur notre objet 3D.
Une texture peut être beaucoup plus complexe et faire appel à plusieurs images pour obtenir certains effets particuliers.

La première chose à faire est de vous reporter au tutoriel sur la photogrammétrie afin de réaliser une photogrammétrie de l'objet que vous voudrez voir transformé en texture.

Pour ce tutoriel, nous allons utiliser un modèle qui n'est pas du tout idéal pour ça mais qui permet de bien se rendre compte du processus.
Ce modèle est tout simplement celui utilisé pour le tutoriel “photogrammétrie”.

Pour arriver à notre texture, suivez donc ce tutoriel jusqu'à l'étape MeshLab, étape changeant complètement pour ce besoin particulier.

Il nous faudra faire appel à un logiciel particulier, non utilisé dans le tuto sur la photogrammétrie : xNormal

Ouverture des fichiers

Ouvrez votre fichier NVM ainsi que le modèle 3D que vous avez créé :

Nous pouvons voir sur notre capture que l'objet 3D n'est pas orienté convenablement et ne nous fait pas face.
Dans la colonne à droite, déselectionnez le nuage de point en cliquant sur le petit oeil situé à sa gauche et sélectionner l'objet 3D encore visible.

Ré-orientation des objets

Une fois cela fait nous allons ré-orienter notre objet au moyen du Manipulators Tool :

jusqu'à obtenir notre objet convenablement orienté. Attention, il vous faudra sans doute un peu d'entraînement, ce n'est pas une chose spécialement facile à réaliser.
Comme dans beaucoup de logiciels 3D, il vous est possible de modifier la vue au moyen des touches du pavé numérique, 1 et 3 vous proposant la vue de face et de côté, 7 la vue du haut.

Le principal est donc d'arriver à avoir votre objet de face. Nous avons ici également couper les bords de l'objet :

Une fois cela fait, dans la colonne de droite, rendez à nouveau visible votre nuage de points et faites un click droit sur le modèle 3D, faisant apparaître le menu suivant :

Dans ce menu, sélectionnez Matrix : Set/copy transformation, faisant apparaître la fenêtre suivante :

Dans cette fenêtre, commencez par choisir Read from current Layer.
Toutes les modifications faites à notre modèle pour l'avoir de face vont apparaître sous forme de matrice.

Cochez la case Apply to all visible Layers et appliquez.

Tous les calques seront modifiés afin d'être alignés sur le calque que vous avez modifié :

Création d'une texture plate

Attention! MeshLab a un petit bug au niveau de la création des textures plates, raison pour laquelle la procédure suivante peut sembler “bizarre” et qui ne sera peut-être plus aussi longue à l'avenir s'ils venaient à corriger cela.

Maintenant que notre objet est orienté convenablement, rendez-vous dans Filters, allez dans Texture et choisissez Parametrization : Flat plane.

La fenêtre suivante s'affichera, dans laquelle il faut cocher Preserve Ratio et s'assurer que Projection plane soit bien sur XY :

Rendez-vous à nouveau dans Filters, puis Texture et choisissez maintenant Project active rasters colors to current mesh, filling the texture, ce qui fera apparaître la fenêtre suivante :

C'est donc dans cette fenêtre que vous indiquerez le nom du fichier image ainsi que sa dimension.

Si vous appliquez, le processus se déroulera convenablement, mais aucune texture n'apparaitra sur votre objet, c'est là qu'est le bug.

Pour que la texture soit appliquée, retournez dans Filters, allez dans Texture et choisissez Parametrization : Trivial per-triangle, ce qui fera apparaître la fenêtre suivante :

Modifiez la résolution et le Inter-Triangle Border jusqu'à ce qu'il accepte d'appliquer le filtre.

En principe, à ce moment là, vous deviez vous retrouver avec votre objet texturé mais dont la texture est appliquée n'importe comment :

Rendez-vous à nouveau dans Filters, Texture et Parametrization : Flat plane en ré-appliquant les paramètres entré lors de la première utilisation. Après application, nous aurons, enfin, notre objet texturé :

Sauvegardez votre fichier en OBJ.

Création d'un modèle plat

xNormal est un logiciel qui permet de transférer sous forme de texture les détails d'un modèle 3D très complexe vers un modèle 3D moins complexe.

Un texture étant un élément plat, le modèle 3D moins complexe en question sera donc une surface plane.

Néanmoins, nous ne pouvons pas simplement lancer un logiciel de modélisation et créer une surface pour l'exporter par la suite, ce serait trop simple…

Dans Meshlab, vous allez relancer les transformateurs vus plus haut et effectuer un redimensionnement en Z jusqu'à avoir aplati totalement votre modèle :

Une fois cela fait, dans la colonne de droite, faites un click droit sur le nom de votre modèle et sélectionnez Matrix : Freeze current matrix.

Il va maintenant nous falloir réduire le nombre de triangles format notre objet.

Pour cela, affichez, au moyen des outils de la barre située au-dessus de la fenêtre de visualisation de l'objet 3D, les trianglse de votre objet. comme on peut le voir, il y en a beaucoup :

Rendez-vous ensuite dans Filters, puis dans Remeshing, Simplification and Reconstruction et choisissez Simplification : Quadric Edge Collapse Decimation (with texture), faisant apparaître la fenêtre suivante :

Le premier nombre indiqué correspond à la moitié du nombre de faces formant notre objet et est donc le nombre de face qu'aura notre objet si nous appliquons le filtre tel quel.

Attention! Ne jamais passer à moins de la moitié du nombre de faces. Il vaut mieux répéter plusieurs fois l'opération jusqu'à obtenir ce que l'on désire que directement indiquer une faible valeur. Ainsi si vous voulez passer de 1 million à 10000, faîtes 1M - 500k - 250k - 130k - 70k - 40k - 20k - 10k…

Dans notre cas nous descendrons jusqu'à obtenir quelque chose ressemblant à ceci :

Sauvez ce nouvel objet au format OBJ sous un nouveau nom.

Nous pouvons maintenant passer à …

Voici la fenêtre qui apparaîtra lorsque vous lancerez le logiciel :

Configuration

La première chose que nous allons faire est configurer le logiciel. Pour cela cliquer sur la petite prise située en bas à gauche de la fenêtre, ce qui fera apparaître la fenêtre suivante :

Allez dans l'onglet Image exporters et sélectionner dans cette liste TIFF Exporter, ce qui fera apparaître un bouton “Configure” qui ouvrira la fenêtre suivante :

Il est très important de faire passer le Bits per channel à 16 s'il n'est pas déjà sur cette valeur.

Nous travaillerons en TIFF car ce format permet justement de sauvegarder des images en 16bits et non en 8.

Cette différence est-il importante? Oui! 8 bits signifie que chaque couleur est codée sur 8 bits et peut donc être déclinée en 256 variantes, du noir à la couleur pleine, rouge, verte ou bleu.

Cela permet donc d'arriver à 256*256*256 couleurs affichées, soit un peu plus de 16 millions de couleurs.

Néanmoins, pour aller du noir au blanc, les trois couleurs de bases auront la même valeur et ça ne fera donc qu'un dégradé possible de 256 couleurs.

Cela peut déjà sembler beaucoup mais est insuffisant pour une utilisation dans le cadre d'une texture car elle créera un effet d'escalier visible :

8 bits 16 bits

Si vous vous baladez dans le reste des options, vous verrez qu'il est possible de mettre le logiciel en français. Ne le faites pas!!! C'est une Google traduction qui n'a ni queue ni tête.

Ouvertures des modèles

Nous allons maintenant ouvrir nos deux modèles 3D.

Rendez-vous dans la colonne de droite et cliquez sur High definition meshes, ce qui vous amènera à cette fenêtre :

Faites un click droit sur cette ligne et cliquez sur Add Meshes pour rajouter le modèle 3D non-aplati.
Faites un nouveau click droit et cliquez sur Base texture to bake en choisissant alors la texture utilisée pour cet objet.

Dans la colonne de droite, cliquez maintenant sur Low definition meshes qui vous aménera à une fenêtre similaire dans laquelle vous pourrez indiquer votre modèle 3D plat.
Il n'y a pas besoin d'indiquer une texture.

Configuration de la texture

Dans la colonne de droite, cliquez sur Baking options, ce qui fera apparaître cette fenêtre :

Dans Output file, vous indiquerez le nom de votre texture. N'oubliez pas d'indiquez que vous voulez travailler en TIFF.

Dans la section Maps to render vous retrouverez toutes les cartes qui seront générées pour composer votre texture (Vous retrouverez plus bas le résultat de chacune de ces cartes.)

Une fois cela fait…

Création de la texture

Cliquez maintenant sur

et voici ce qui devrait se passer :

amenant au résultat suivant :

Texture de base Normals Heights Occlusion
Bent normals PRTP PRTN Convexity
Thickness Proximity Wire rays Cavity

Résultat