En este tutorial, aprenderemos cómo usar la función de Python UV export layout en Blender para exportar los diseños de mapas UV de todos los objetos MESH disponibles en una escena.
Transcripción del video
¡Hola!
En este tutorial, aprenderemos cómo usar la función de Python UV export layout en Blender para exportar los diseños de mapas UV de todos los objetos MESH disponibles en una escena.
Este script puede ser útil si necesitas proporcionar mapas UV como imágenes, como cuando publicas tu escena 3D en ciertos sitios web de stock de 3D.
Este tutorial se ha grabado utilizando la versión 3.3 de Blender; a veces, los desarrolladores de Blender realizan cambios en las Blender Python APIs (BPY, para abreviar), pero este script debería funcionar desde la versión 3.0 en adelante.
La función bpy ops que vamos a usar es bastante simple: solo requiere dos parámetros, a saber, la ruta de archivo de la imagen a crear y el tamaño UV en píxeles.
Sin embargo, dado que tenemos que usarlo para todos los objetos MESH disponibles en la escena, usaremos una declaración FOR en los objetos MESH.
Además, especificaré la extensión de archivo, que es PNG por defecto.
De hecho, exportaré el diseño como PNG, pero quiero mostrarte cómo especificarlo porque también puedes exportar los diseños de UV como archivos SVG o EPS.
¡Vamos a empezar!
Abre un archivo BLEND.
También puedes empezar con un archivo completamente nuevo, pero tendrás que guardarlo en algún lugar porque pondremos los archivos PNG en la misma carpeta que el proyecto.
Hagamos algunas importaciones básicas:
import bpy
from bpy import *
Como mencioné antes, la función export_layout requiere dos parámetros, así que definamos dos variables. Podríamos escribir los valores en la función misma, pero prefiero definirlos aquí por claridad:
UVpath = bpy.path.abspath("//") + "UV-LAYOUT---"
UVsize = (2048, 2048)
Como puedes ver, "bpy.path.abspath" proporcionará la ruta absoluta en el disco del archivo BLEND. Vamos a añadir un prefijo ("UV-LAYOUT---") a todos los archivos PNG, pero puedes cambiarlo o eliminarlo.
El parámetro UV size es una tupla de dos valores numéricos, que son las dimensiones - en píxeles - de las imágenes a crear. Estoy escribiendo 2048, creando así una imagen 2k.
Para ejecutar la función en todos los objetos MESH disponibles en una escena, tenemos que crear una declaración for.
Entonces podemos escribir:
for o in bpy.data.objects:
luego, dentro del bloque de la declaración for (así que no olvides indentar el texto), podemos añadir un filtro sobre el tipo de objeto:
if(o.type=="MESH"):
La condición es clara: el tipo del objeto actual de bpy.data debe ser 'MESH'.
Las siguientes declaraciones deben ponerse dentro del if, así que - de nuevo - ¡no olvides indentar el texto!
bpy.ops.objects.select_all(action='DESELECT');
tenemos que hacer esto cada vez para deseleccionar todos los otros objetos, de lo contrario obtendríamos una imagen con dos o más mapas UV superpuestos.
bpy.context.view_layer.objects.active = o
Esta asignación establecerá el objeto activo de la escena, asignando la MESH actual a bpy.context.view_layer.objects.active.
Tenemos que hacer esto porque la siguiente operación OPS (operación Python de Blender) se realizará en el único objeto activo. Recuerda: puedes seleccionar varios objetos, pero solo hay un objeto activo a la vez.
bpy.ops.uv.export_layout(filepath = UVpath + o.name, size = UVsize, mode='PNG')
La declaración ops exportará el diseño del objeto activo a la ruta de archivo dada, hecha por la variable UVpath, con el prefijo UV-LAYOUT---, más el nombre del objeto activo, y con el tamaño dado, en píxeles.

Como te dije antes, puedes exportar los diseños UV como archivos PNG, EPS o SVG. Puedes especificar el formato de salida con el parámetro de modo, como acabo de mostrar. Si echamos un vistazo a la carpeta de salida, podemos ver que el script ha creado tantas imágenes como mallas hay.

Dado que las mallas en mi modelo 3D "Desk set 3" comparten el mismo diseño con islas UV no superpuestas, puedo unir todos los objetos juntos, ejecutar el script de nuevo, y obtener solo un mapa de diseño UV no superpuesto del activo.

Antes de cerrar este tutorial, voy a darte una tarea: edita este script para exportar tanto los diseños UV de 2k y 4k de las MESHES disponibles en tus escenas, proporcionando las imágenes con dos prefijos diferentes (UV 2K y UV 4K, por ejemplo).
¡Eso es todo por este tutorial! ¡Nos vemos pronto!