你好!

在本教程中,我们将看到如何使用Blender 3.0 (Alpha)中的export_layout函数来导出场景中所有MESH对象的UV贴图(或:Layouts)。

如果你必须以PNG图片的形式提供UV贴图,这个脚本可能很有用,例如你想在一些3D素材网站上发布你的3D场景。

我们要使用的bpy.ops函数其实很简单:它需要两个参数(要创建的图像的文件路径和UV尺寸,单位是像素),但我们必须对场景中所有可用的MESH对象使用它,所以我们将对MESH对象使用FOR语句。

首先,让我们打开一个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参数是一个由两个数值组成的元组,是要创建的图像的尺寸--以像素为单位;我写的是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

这个赋值将设置场景的ACTIVE对象,将当前的网格赋值给context.view_layer.objects.active;我们必须这样做,因为下面的OPS (Blender Python operation) 将在唯一的ACTIVE对象上执行(记住:你可以选择多个对象,但每次只有一个活动对象)。

OPS语句将导出ACTIVE对象在给定文件路径中的布局(由UVpath变量构成,带有 "UV-LAYOUT ---" 前缀,加上ACTIVE对象的名称)和给定尺寸,以像素为单位。

BPY 3 UV export tutorial 4

在结束本教程之前,我要给你一个任务:编辑这个脚本,以便导出你场景中可用的网格的2k4k UV Layouts,为图像提供两个不同的前缀(例如,"UV-2K--"和 "UV-4k--")。

这次就先到这里!希望你有学到一些东西。下次见!