In questo tutorial vedremo come utilizzare la funzione export_layout di Blender per esportare, sotto forma di immagini PNG, le mappe (o layout) UV di tutti gli oggetti mesh presenti in una scena. Il tutorial è valido per le versioni della serie 3 di Blender.
Trascrizione del video
Salve a tutti!
In questo tutorial vedremo come utilizzare la funzione export_layout di Blender per esportare, sotto forma di immagini PNG, le mappe (o layout) UV di tutti gli oggetti mesh presenti in una scena. Il tutorial è valido per le versioni della serie 3 di Blender.
Lo script può tornare utile se dovete fornire le mappe UV come immagini PNG con trasparenza, ad esempio se volete pubblicare la scena su alcuni siti stock 3D.
La funzione BPY.OPS che utilizzeremo è piuttosto semplice, in realtà: richiede due parametri (ossia il percorso dei file da creare e la dimensione, in pixel, delle mappe UV), ma dobbiamo utilizzarla per tutti gli oggetti di tipo mesh presenti nella scena, per cui utilizzeremo un ciclo FOR.
Per prima cosa, apriamo un file BLEND; potete iniziare anche con un file nuovo, ma dovrete salvarlo su disco, perché memorizzeremo le immagini PNG nella stessa cartella del progetto.
Facciamo un paio di import di base:
import bpy
from bpy import *
Come anticipato, la funzione export_layout richiede due parametri, per cui definiamo due variabili (in effetti potremmo scrivere i due valori direttamente nella funzione, ma preferisco definirli a parte per maggiore chiarezza):
UVpath = bpy.path.abspath("//") + "UV-LAYOUT---"
UVsize = (2048, 2048)
Come potete vedere, bpy.path.abspath restituirà il percorso assoluto su disco del file BLEND; aggiungeremo poi il prefisso UV LAYOUT a tutti file i png, ma potete modificare o rimuovere questa parte.
Il parametro UVsize è una tupla di due valori numerici, che rappresentano le dimensioni, in pixel, delle immagini da creare. Sto scrivendo 2048, così da creare immagini 2k.
Per poter eseguire la funzione su tutti gli oggetti mesh disponibili nella scena, dobbiamo creare un ciclo FOR, per cui scriviamo:
for o in bpy.data.objects:
quindi, all'interno del ciclo for (indentando quindi il testo), aggiungiamo un filtro sul tipo di oggetto da trattare:
if(o.type=="MESH"):
La condizione è chiara: l'oggetto bpy.data.object da trattare di volta in volta deve essere di tipo MESH.
Le seguenti istruzioni vanno inserite all'interno dell'if, per cui, anche in questo caso, bisogna prestare attenzione all'indentazione del testo:
bpy.ops.objects.select_all(action='DESELECT');
bpy.context.view_layer.objects.active = o
L'istruzione imposterà l'oggetto attivo della scena, assegnando la mesh corrente a context view_layer objects active; dobbiamo effettuare questa operazione perché l'istruzione OPS seguente, ossia Blender Python Operations, verrà effettuata sul solo e unico oggetto attivo presente (infatti è possibile selezionare più oggetti, ma c'è un solo oggetto attivo).
bpy.ops.uv.export_layout(filepath = UVpath + o.name, size = UVsize, mode='PNG')
L'istruzione OPS esporterà il layout UV dell'oggetto attivo nel percorso da noi specificato, costituito in questo caso dalla variabile UVpath, dal prefisso UV LAYOUT e dal nome dell'oggetto attivo, con le dimensioni in pixel da noi specificate.



Prima di concludere questo tutorial, vi lascio un esercizio: modificate lo script in modo tale da esportare entrambe le versioni 2k e 4k dei Layout UV delle mesh presenti nella scena, fornendo alle immagini due differenti prefissi (come ad esempio UV 2K e UV 4K).
Bene, per questo tutorial è tutto! A presto!