Привет!

В этом уроке мы рассмотрим, как использовать функцию export_layout в Blender 3.0 (Alpha), чтобы экспортировать UV карты (или слои, Layouts) всех MESH-объектов, доступных на сцене.

Этот скрипт может быть полезен, если вы выгружаете UV карты в виде PNG изображений. Например, если вы хотите опубликовать вашу 3D сцену на некоторых вебсайтах-хранилищах 3D картинок.

Функция bpy.ops, которую мы собираемся использовать, довольно простая. Фактически, ей требуется два параметра (путь к формируемому файлу картинки и UV размер, в пикселях). Но нам следует повторить ее для всех MESH-объектов на сцене, поэтому мы будем использовать выражение FOR по MESH-объектам.

Для начала, давайте откроем файл BLEND. Вы также можете начать с нового файла, но вам понадобится сохранить его куда-нибудь, потому что мы будем складывать PNG файлы в ту же папку проекта.

BPY 3 UV export tutorial 1

Давайте сделаем несколько основных импортов:

 import bpy

 from bpy import *

Как я сказал до этого, функция export_layout требует два параметра, поэтому давайте определим две переменных (мы бы могли сохранить значения внутри самой функции, но я предпочитаю определить их здесь, для ясности):

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

 UVsize = (2048, 2048)

BPY 3 UV export tutorial 2

Как вы можете видеть, "bpy.path.abspath" даст абсолютный путь на диске для файла BLEND; мы собираемся добавить префикс ("UV-LAYOUT---") ко всем файлам изображений, но вы можете поменять или удалить его.

Параметр UVsize это набор (tuple) из двух числовых значений, которые обозначают измерение (в пикселях) создаваемых изображений. Я записываю 2048, таким образом создавая картинку размером 2k.

Чтобы выполнить функцию на всех MESH объектах, доступных на сцене, нам нужно сформировать выражение FOR. Поэтому мы можем записать:

for o in bpy.data.objects:

затем, в выражении FOR (да, и не забудьте сделать отступ перед текстом) вы можете добавить "фильтр" по типу объекта:

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

Условие простое: тип текущего bpy.data.object должен быть MESH.

Следующие выражения должны быть помещены внутри IF. И снова - не забывайте делать отступы перед текстом!

bpy.context.view_layer.objects.active = o

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

BPY 3 UV export tutorial 3

Присвоение установит АКТИВНЫЙ объект сцены, назначая текущую сетку для context.view_layer.objects.active. Мы должны сделать это, потому что последующая OPS (Blender Python operation) будет выполнена на одном единственном АКТИВНОМ объекте (помните: вы можете выделить несколько объектов, но только один объект может быть активным).

Выражение OPS экспортирует слой АКТИВНОГО объекта в заданный файл (состоящий из значения переменной UVpath с префиксом "UV-LAYOUT---" плюс имя АКТИВНОГО объекта) с заданным размером в пикселях.

BPY 3 UV export tutorial 4

В завершении этого урока я дам вам задание: отредактируйте этот скрипт, чтобы экспортировать оба слоя сеток - 2k и 4k UV Layouts, расположенные на ваших сценах, создав изоображения с двумя разными префиксами (например, "UV-2K---" и "UV-4k---").

На этом всё. Я надеюсь, вам понравился этот урок!

Увидимся!