Salve a tutti!

In questo tutorial vedremo come utilizzare la funzione export_layout in Blender 3.0 (Alpha) per esportare le mappe (o: Layout) UV di tutti gli oggetti di tipo MESH presenti in una scena..

Questo script può tornarvi utile se dovete fornire le mappe UV come immagini PNG, per esempio se volete pubblicare le vostre scene o oggetti 3D su alcuni siti web di tipo 3D Stock.

La funzione bpy.ops che utilizzeremo è piuttosto semplice, in realtà: richiede due parametri (il percorso su disco dell'immagine PNG da creare e la risoluzione o dimensione UV, in pixels), ma dovremo utilizzarla per tutti gli oggetti di tipo MESH presenti nella scena, per cui dovremo utilizzare un'istruzione FOR filtrata su tutti gli oggetti MESH.

Per prima cosa, apriamo un file BLEND; potete iniziare anche con un nuovo progetto, ma per prima cosa dovrete salvarlo da qualche parte, perché metteremo le immagini PNG nella stessa cartella del progetto.

BPY 3 UV export tutorial 1

Effettuiamo alcuni import di base:

import bpy

from bpy import *

Come ho detto precedentemente, la funzione export_layout richiede due parametri, per cui definiamo due variabili (in realtà potremmo scrivere questi valori all'interno della stessa funzione, ma preferisco definirli qui per maggiore chiarezza):

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

UVsize = (2048, 2048)

BPY 3 UV export tutorial 2

Come potete vedere, “bpy.path.abspath” restituirà il percorso assoluto su disco del file BLEND corrente; aggiungeremo inoltre un prefisso (“UV-LAYOUT---”) a tutti i file png, ma questo potete modificarlo o rimuoverlo, a piacere.

Il parametro UVsize è una tupla di due valori numerici (ossia le dimensioni, in pixels, dell'immagine da creare); io sto scrivendo 2048, in modo da generare un'immagine con risoluzione 2k.

Per poter eseguire la funzione su tutti gli oggetti di tipo MESH presenti nella scena, dobbiamo utilizzare un costrutto FOR, per cui scriviamo:

for o in bpy.data.objects:

quindi, nel ciclo FOR (per cui non dimenticate l'indentazione), possiamo aggiungere un "filtro" sul tipo di oggetto:

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

La condizione è chiara: l'oggetto bpy.data.object attualmente esaminato deve essere di tipo MESH.

Le seguenti istruzioni devono essere poste all'interno del costrutto IF (per cui, di nuovo, non dimenticate di indentare il testo):

bpy.context.view_layer.objects.active = o

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

BPY 3 UV export tutorial 3

L'istruzione imposterà l'oggetto ATTIVO della scena, assegnando la mesh corrente a context.view_layer.objects.active; dobbiamo farlo perché la funzione OPS (Blender Python operation) seguente verrà effettuata sul solo e unico oggetto ATTIVO presente (ricordate: potete selezionare più oggetti per volta, ma c'è sempre un solo oggetto attivo alla volta).

L'istruzione ops esporterà il layout UV dell'oggetto attivo nel percorso stabilito (realizzato nella variabile UVpath, con il prefisso “UV-LAYOUT---”, più il nome dell'oggetto attivo) e con la risoluzione stabilita in pixels.

BPY 3 UV export tutorial 4

Prima di concludere questo tutorial, voglio assegnarvi un esercizio: modificate questo script in modo da esportare sia le versioni 2k che le versioni 4k dei Layout UV delle mesh presenti nelle vostre scene, fornendo alle immagini generate due diversi prefissi (ad esempio: “UV-2K---” and “UV-4k---”).

Per questo tutorial è tutto! A presto!