跳转至内容

Blender 3D:从新手到专业/高级教程/Python 脚本/简介

来自维基教科书,开放世界中的开放书籍

Python 是一种功能强大、高级、动态的语言。Blender 2.67 中使用的 Python 版本是 3.3。如果您不熟悉 Python,请先阅读 Python 书籍。如果您熟悉旧版本的 Python (2.x),此页面 总结了 3.x 中的新增内容。

如果您熟悉旧版 Blender 中的 Python 脚本,请注意 2.5x/2.6x 是完全不同的;旧的 Blender 模块已不存在。许多功能现在可以通过 bpy 模块获得,但不要期望完全的 1:1 对应关系。

Blender 脚本入门

[编辑 | 编辑源代码]

打开一个新的默认 Blender 文档。如果您没有自定义设置,底部将有一个时间轴 窗口;将其更改为 Python 控制台 。也许可以增加它的高度,以便您可以一次看到更多行。

首先,让我们找出文档中存在哪些对象。在“>>>”提示符下,键入

bpy.data.objects

您应该会看到响应

<bpy_collection[3], BlendDataObjects>

这实际上并没有那么有信息量。实际上,您这里有一个迭代器;要查看其内容,只需执行通常的 Python 操作,将其转换为列表。尝试输入以下内容

list(bpy.data.objects) #or bpy.data.objects[:]

这次响应应该是

[bpy.data.objects["Camera"], bpy.data.objects["Cube"], bpy.data.objects["Lamp"]]

这向您展示了如何在 3D 视图窗口中引用三个默认对象。

让我们获取对 Cube 对象的引用,以便更方便地访问它:键入

Cube = bpy.data.objects["Cube"]

现在让我们尝试查询其一个属性的值:键入

Cube.delta_location

您应该会看到响应

Vector((0.0, 0.0, 0.0))

Vector 类型来自 Blender 提供的 mathutils 模块。但与 bpy 不同,它不会自动导入到 Python 控制台中。因此,让我们将其导入以供后续使用:键入

import mathutils

好的,现在让我们尝试更改默认 Cube 的位置:键入

Cube.delta_location += mathutils.Vector((1, 1, 1))

(请注意双括号:mathutils.Vector 接受一个参数,它是一个 X、Y 和 Z 坐标值的元组。)

当您按下  ENTER  时,您是否在观看 3D 视图?您应该会看到立方体跳到另一个位置。要使其再次移动,请按  UPARROW  将上面的命令带回来,以便您可以使用  ENTER  再次执行它。这样做后,立方体将像以前一样再跳一步。就这样——您正在编写脚本!

bpy 模块

[编辑 | 编辑源代码]

bpy 模块的内容分为多个子模块,其中包括

  • bpy.data — 这里您会找到当前文档的内容。
  • bpy.types — 有关 bpy.data 中对象类型的详细信息。
  • bpy.ops操作符执行 Blender 的实际功能;这些可以附加到热键、菜单项和按钮。当然,它们也可以从脚本中调用。当您编写插件脚本时,它通常会定义新的操作符。每个操作符必须有一个唯一的名称。
  • bpy.context — 包含设置,例如当前的 3D 模式、哪些对象被选中等等。也可以通过全局变量 C 在控制台窗口中访问。
  • bpy.props — 用于定义属性的函数。这些允许您的脚本将自定义信息附加到场景,例如用户可以通过界面元素调整这些信息来控制脚本的行为。

mathutils 模块

[编辑 | 编辑源代码]

mathutils 模块定义了几个重要的类,这些类在 Blender API 的其余部分中被大量使用。

  • Vector:表示 2D 或 3D 坐标。
  • Matrix:表示任何类型的线性变换的最通用方式。
  • Euler:一种直接的方式,将旋转表示为一组欧拉角,欧拉角是绕 X、Y 和 Z 轴的旋转角。易于出现著名的陷阱,例如 万向节锁
  • Quaternion:从表面上看,这是一种更抽象的数学方法,用于表示旋转。但实际上,它具有许多很好的特性,例如没有万向节锁,并且在两个任意旋转之间插值更平滑。后者在角色动画中尤为重要。
  • Color:表示 RGB 颜色,并转换为/从 HSV 空间(没有 alpha 通道)。

另请参阅

[编辑 | 编辑源代码]
华夏公益教科书