Neste tutorial, veremos como usar a função Python de exportação de layout de UV no Blender para exportar os mapas de UV, ou layouts, de todos os objetos do tipo MESH disponíveis em uma cena.


A versão em vídeo deste tutorial não está disponível atualmente neste idioma.


Transcrição do vídeo

Olá! Neste tutorial, veremos como usar a função Python de exportação de layout de UV no Blender para exportar os mapas de UV, ou layouts, de todos os objetos do tipo MESH disponíveis em uma cena.

Este script pode ser útil se você precisar fornecer mapas de UV como imagens, por exemplo ao publicar sua cena 3D em sites de stock 3D.

Este tutorial foi feito usando o Blender 3.3. Às vezes, os desenvolvedores do Blender fazem alterações nas APIs Python do Blender, abreviadas como BPY, mas este script deve funcionar a partir da versão 3 em diante.

A função bpy.ops que vamos usar é bastante simples. Ela requer apenas dois parâmetros, ou seja, o filepath da imagem a ser criada e o tamanho da UV em pixels. No entanto, como precisamos usá-la para todos os objetos MESH disponíveis na cena, utilizaremos uma instrução for sobre os objetos MESH.
Além disso, vou especificar a extensão do arquivo, que por padrão é PNG.
Na verdade, vou exportar os layouts como PNGs, mas quero mostrar como especificar isso porque você também pode exportar os layouts de UV como arquivos SVG ou EPS.
Ok, vamos começar.

Abra um arquivo BLEND.
Você também pode começar com um arquivo totalmente novo, mas será necessário salvá-lo em algum lugar, porque vamos colocar os arquivos PNG na mesma pasta do projeto.

Vamos fazer algumas importações básicas:

import bpy

from bpy import *

Como eu disse antes, a função export_layout requer dois parâmetros, então vamos definir duas variáveis. Poderíamos escrever os valores diretamente na função, mas prefiro defini-los aqui por questão de clareza:

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

UVsize = (2048, 2048)

Como você pode ver, "bpy.path.abspath" retorna o caminho absoluto no disco do arquivo BLEND.
Vamos adicionar um prefixo, "UV-LAYOUT---", a todos os arquivos PNG, mas você pode alterar ou remover isso.

O parâmetro UVsize é uma tupla de dois valores numéricos, que são as dimensões, em pixels, das imagens a serem criadas.
Estou escrevendo 2048, criando assim uma imagem 2k.

Para executar a função em todos os objetos MESH disponíveis na cena, precisamos criar uma instrução for. Então podemos escrever:

for o in bpy.data.objects:

Em seguida, dentro do bloco da instrução for, portanto não se esqueça de indentar o texto, podemos adicionar um filtro no tipo do objeto:

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

A condição é clara. O tipo do objeto atual em bpy.data.objects deve ser MESH.

As instruções seguintes devem ser colocadas dentro do if, então, novamente, não se esqueça de indentar o texto.

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

Precisamos fazer isso todas as vezes para desmarcar todos os outros objetos, caso contrário obteríamos uma imagem com dois ou mais mapas de UV sobrepostos.

bpy.context.view_layer.objects.active = o

Essa atribuição define o objeto ativo da cena, atribuindo o mesh atual a context.view_layer.objects.active.
Precisamos fazer isso porque a operação OPS seguinte, ou seja, a operação Python do Blender, será executada apenas no único objeto ativo. Lembre-se de que você pode selecionar vários objetos, mas existe apenas um objeto ativo por vez.

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

A instrução ops irá exportar o layout do objeto ativo para o filepath fornecido, que é composto pela variável UVpath com o prefixo "UV-LAYOUT---" mais o nome do objeto ativo, e com o tamanho definido, em pixels.

Como eu disse antes, você pode exportar os layouts de UV como PNGs, EPSs ou SVGs.
Você pode especificar o formato de saída com o parâmetro mode, como acabei de mostrar.
Se olharmos a pasta de saída, podemos ver que o script criou tantas imagens quantos forem os meshes.

Como os meshes do meu modelo 3D "Desk set 3" compartilham o mesmo layout com ilhas de UV que não se sobrepõem, posso juntar todos os objetos, executar o script novamente e obter apenas um único mapa de layout de UV do asset, sem sobreposição.

Antes de encerrar este tutorial, vou lhe passar uma tarefa.
Edite este script para exportar tanto os layouts de UV em 2k quanto em 4k dos meshes disponíveis em suas cenas, fornecendo as imagens com dois prefixos diferentes, como "UV-2K---" e "UV-4K---", por exemplo.

Isso é tudo para este tutorial.
Até a próxima!

Este site tem como único objetivo apresentar alguns dos meus trabalhos, sem qualquer finalidade promocional. Observe que, no momento, não estou procurando - nem responderei a - solicitações de trabalhos personalizados, consultorias ou qualquer outro tipo de colaboração profissional.


INFORMAÇÕES DE POLÍTICA DE PRIVACIDADE AVANÇADAS E USO DOS FICHEIROS DE COOKIES