Dans ce tutoriel, nous allons voir comment utiliser la fonction Python d’export de layout UV dans Blender afin d’exporter les UV maps, ou layouts, de tous les objets de type MESH présents dans une scène.


La version vidéo de ce tutoriel n’est actuellement pas disponible dans cette langue.


Transcription de la vidéo

Salut ! Dans ce tutoriel, nous allons voir comment utiliser la fonction Python d’export de layout UV dans Blender afin d’exporter les UV maps, ou layouts, de tous les objets de type MESH présents dans une scène.

Ce script peut être utile si vous devez fournir des UV maps sous forme d’images, par exemple lorsque vous publiez votre scène 3D sur des sites de vente de modèles 3D.

Ce tutoriel a été réalisé avec Blender 3.3. Il arrive que les développeurs de Blender modifient les API Python de Blender, appelées BPY, mais ce script devrait fonctionner à partir de la version 3.

La fonction bpy.ops que nous allons utiliser est assez simple. Elle ne nécessite que deux paramètres, à savoir le filepath de l’image à créer et la taille des UV en pixels. Cependant, comme nous devons l’utiliser pour tous les objets MESH disponibles dans la scène, nous allons utiliser une instruction for sur les objets MESH.
De plus, je vais spécifier l’extension du fichier, qui est PNG par défaut.
En pratique, j’exporterai les layouts en PNG, mais je veux vous montrer comment la définir, car vous pouvez aussi exporter les layouts UV au format SVG ou EPS.
Très bien, commençons.

Ouvrez un fichier BLEND.
Vous pouvez également partir d’un fichier entièrement neuf, mais vous devrez l’enregistrer quelque part, car nous placerons les fichiers PNG dans le même dossier que le projet.

Faisons quelques imports de base :

import bpy

from bpy import *

Comme je l’ai dit précédemment, la fonction export_layout nécessite deux paramètres. Définissons donc deux variables. Nous pourrions écrire les valeurs directement dans la fonction, mais je préfère les définir ici pour plus de clarté :

UVpath = bpy.path.abspath("//") + "UV-LAYOUT---"

UVsize = (2048, 2048)

Comme vous pouvez le voir, bpy.path.abspath renvoie le chemin absolu sur le disque du fichier BLEND. Nous allons ajouter un préfixe, "UV-LAYOUT---", à tous les fichiers PNG, mais vous pouvez le modifier ou le supprimer.

Le paramètre UVsize est un tuple de deux valeurs numériques, qui correspondent aux dimensions, en pixels, des images à créer.
J’écris 2048, ce qui permet de créer une image en 2k.

Afin d’exécuter la fonction sur tous les objets MESH disponibles dans une scène, nous devons créer une instruction for. Nous pouvons donc écrire :

for o in bpy.data.objects:

Ensuite, à l’intérieur du bloc de l’instruction for, donc n’oubliez pas d’indenter le texte, nous pouvons ajouter un filtre sur le type de l’objet :

if(o.type=="MESH"):

La condition est claire : le type de l’objet courant dans bpy.data.objects doit être MESH.

Les instructions suivantes doivent être placées à l’intérieur du if, donc, encore une fois, n’oubliez pas d’indenter le texte.

bpy.ops.objects.select_all(action='DESELECT');

Nous devons faire cela à chaque fois afin de désélectionner tous les autres objets, sinon nous obtiendrions une image avec deux ou plusieurs UV maps superposées.

bpy.context.view_layer.objects.active = o

Cette assignation définit l’objet actif de la scène, en assignant le mesh courant à context.view_layer.objects.active.
Nous devons faire cela car l’opération OPS suivante, c’est-à-dire une opération Python de Blender, sera effectuée uniquement sur l’objet actif. Rappelez-vous que vous pouvez sélectionner plusieurs objets, mais qu’il n’y a toujours qu’un seul objet actif à la fois.

bpy.ops.uv.export_layout(filepath = UVpath + o.name, size = UVsize, mode='PNG')

Cette instruction ops exporte le layout de l’objet actif vers le filepath donné, constitué de la variable UVpath avec le préfixe "UV-LAYOUT---", suivi du nom de l’objet actif, et avec la taille spécifiée, en pixels.

Comme je vous l’ai dit précédemment, vous pouvez exporter les layouts UV au format PNG, EPS ou SVG. Vous pouvez spécifier le format de sortie à l’aide du paramètre mode, comme je viens de le montrer.
Si nous regardons le dossier de sortie, nous pouvons voir que le script a créé autant d’images qu’il y a de meshes.

Comme les meshes de mon modèle 3D "Desk set 3" partagent le même layout avec des îlots UV qui ne se chevauchent pas, je peux joindre tous les objets ensemble, relancer le script et obtenir un seul layout UV non chevauchant pour l’ensemble de l’asset.

Avant de conclure ce tutoriel, je vais vous donner un exercice : modifiez ce script afin d’exporter à la fois les layouts UV en 2k et en 4k des meshes disponibles dans vos scènes, en fournissant les images avec deux préfixes différents, par exemple "UV-2K---" et "UV-4K---".

C’est tout pour ce tutoriel.
À très bientôt !

Ce site a pour seul objectif de présenter certains de mes travaux, sans aucune intention promotionnelle. Veuillez noter que je ne recherche actuellement - et ne répondrai pas - à aucune demande de travaux personnalisés, de conseil ou de toute autre forme de collaboration professionnelle.


POLITIQUE GENERALE DE CONFIDENTIALITE ET D'UTILISATION DES COOKIES