UV

Un projet de recherche défragmente gratuitement vos textures

Si vous utilisez des solutions de photogrammétrie comme Metashape, 3DF Zephyr ou encore RealityCapture, vous savez à quel point les maps UV générées peuvent être fragmentées : des dizaines, centaines ou milliers de morceaux de textures sont présents, sans grande cohérence. Cela peut poser un certain nombre de problèmes, comme nous allons le voir. Heureusement, une solution permet désormais de corriger cette fragmentation gratuitement : si seule cette partie vous intéresse, rendez-vous en fin d’article ; si vous souhaitez comprendre plus précisément le problème et sa solution, nous avons préparé quelques explications.

La fragmentation et ses défauts

Le fait d’utiliser des modèles 3D avec une texture très fragmentée peut avoir plusieurs conséquences néfastes en aval, sur le résultat visuel mais aussi sur les performances lors du rendu.
En voici une liste non exhaustive :

  • mémoire gâchée en raison de l’espace entre les fragments ;
  • artefacts visuels impossible à éliminer ;
  • réplication de données sur la texture pour éviter le texture bleeding, avec là encore de la mémoire gaspillée ;
  • lors d’un affichage temps réel, chaque raccord impacte la mémoire GPU (les vertices du raccord sont en fait dupliqués dans la mémoire GPU) ;
  • perte d’efficacité des techniques de cache ;
  • incompatibilité avec le MIP-mapping ;
map UV d’un lampadaire parisien – le modèle final est visible sur Sketchfab.

Pourquoi une telle fragmentation ?

Ce problème de fragmentation est fondamentalement lié à la manière dont fonctionnent les outils de photogrammétrie, et il est difficile voire impossible de l’éviter.
Sans trop rentrer dans les détails techniques, la surface 3D étant issue de photos, l’approche la plus logique pour texturer est de projeter sur la surface 3D des portions des photos en question. Cela permet d’avoir une méthode automatique et fiable, et qui prend en compte la manière dont l’objet a été numérisé : si on a pris des photos plus rapprochées d’une portion intéressante de l’objet car elle a plus d’importance pour l’usage final (par exemple la tête d’une statue), l’approche du « collage » va de façon naturelle répercuter le détail et créer une texture plus détaillée sur la portion en question.

La fragmentation est donc difficilement évitable. En revanche, on peut imaginer des stratégies pour la corriger.

Une première approche serait de recréer une map UV propre pour l’objet, puis de ré-échantillonner la texture : mais ce dépliage ne sera souvent pas optimal par rapport aux photos prises. Pour reprendre l’exemple de la statue, un dépliage automatique risque de ne pas détailler assez la tête.

Une solution à l’horizon

C’est ici qu’intervient Texture Defragmentation for Photo-Reconstructed 3D Models, publication présentée par Andrea Maggiordomo, Paolo Cignoni et Marco Tarini à la conférence Eurographics 2021.
Leur idée : partir de la map UV fragmentée, et fusionner les morceaux de façon itérative. L’algorithme utilisé mêle optimisations locales et échantillonnage intelligent de façon à obtenir un résultat aussi proche que possible du résultat voulu : moins de morceaux, donc moins de raccords, sans pour autant que la texture soit dégradée.

Ci-dessous, un exemple concret : en partant (à gauche) d’un modèle issu de photogrammétrie, une approche de remapping classique visant à limiter les distortions crée une perte de donnes : la texture est plus floue par endroits. A droite, la méthode de la publication conserve les détails.

Vous trouverez ci-dessous d’autres exemples de modèles traités. Les auteurs ont effectué des analyses statistiques pour éprouver leur méthode, à l’aide de plus de 500 modèles 3D de résolutions variées et issus de plusieurs outils différents de photogrammétrie.

Ces modèles constituent donc un benchmark, traité en masse par l’algorithme proposé.

L’équipe indique que le temps moyen de calcul est de l’ordre de 5 minutes sur un PC équipé d’un Core i7 8750H avec 32 Go de mémoire.
Les résutats obtenus sont très bons : le nombre de morceaux chute de 72% en moyenne (avec des pics à 99%), la duplication de vertex de 6,8% en moyenne (43% au maximum)

Comment bénéficier gratuitement de cette idée ?

Si la publication résout en partie les problèmes de fragmentation, reste à pouvoir s’en servir en pratique.

Et justement, Andrea Maggiordomo, une des personnes à l’origine de ce projet, a eu la très bonne idée de proposer une implémentation de référence sur Github.

Mieux encore, Andrea Maggiordomo a aussi incorporé sa méthode dans Meshlab, outil gratuit et libre bien connu qui permet de visualiser, traiter, nettoyer et améliorer des meshes 3D.
Avec la nouvelle version 2021.05, un filtre « texture map defragmentation » vous permet d’utiliser directement ce projet de recherche sur vos modèles !

L’interface du filtre, ici avec les paramètres par défaut et l’aide activée

Rappelons au passage que MeshLab est compatible Windows, Mac OS, Linux : vous devriez donc facilement pourvoir l’incorporer à votre workflow.

En pratique, encore quelques défauts

Nous avons pu faire quelques essais sur différents modèles : l’algorithme a systématiquement permis de nettement améliorer la fragmentation, et le calcul se fait en quelques minutes.

En revanche, nous avons généralement obtenu une map UV plus grande que celle d’origine : une map 4K devenant par exemple une map 4K plus une seconde map, de petite taille, avec quelques fragments. Ce problème est mentionné dans la publication, mais présenté comme rare, alors qu’il a été quasi systématique lors de nos essais : nous allons continuer à explorer cette situation et tenter de trouver son origine. De votre côté, n’hésitez pas à indiquer vos propres résultats en commentaire.

A Lire également

3 commentaires

Shadows 31 mai 2021 at 11 h 57 min
Je viens de poster un sujet sur le GitHub de MeshLab concernant le souci de taille de texture, je mettrai à jour l’article et les commentaires en fonction des réponses.
Shadows 31 mai 2021 at 17 h 18 min
Update : un des auteurs de la publi a répondu, sur sa demande je lui ai envoyé quelques modèles qui posent problème. Bonne réactivité, espérons que cela puisse les aider à voir le souci !
vinc3r 1 juin 2021 at 14 h 31 min
Ah ouais pas mal ce projet, le fait qu’il conserve les zones bien détaillée c’est une super idée.

Laissez un commentaire