跳转至内容

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

来自 Wikibooks,开放世界中的开放书籍


Python 是一种功能强大的高级动态语言。Blender 2.5x 中使用的 Python 版本为 3.1。如果您不熟悉 Python,请从本教程开始(位于python.org)。如果您熟悉旧版 (2.x) Python,此页面总结了 3.x 中的新增内容。

如果您熟悉旧版 Blender 中的 Python 脚本编写,请注意 2.5x 完全不同;旧版Blender模块已消失。现在可以通过bpy模块获得大部分功能,但不要期望完全一一对应。

Blender 脚本入门

[编辑 | 编辑源代码]

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

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

bpy.data.objects

您应该会看到以下响应

<bpy_collection[3], BlendData.objects>

这实际上并没有提供太多信息。实际上,您这里得到的是一个迭代器;要查看其内容,只需执行通常的 Python 操作并将其转换为列表即可。尝试输入以下内容

list(bpy.data.objects) #or being lazy: 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.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该模块

  • Vector定义了几个重要的类,这些类在 Blender API 的其余部分中大量使用。
  • Vector: 2D 或 3D 坐标的表示形式。
  • Matrix: 表示任何类型线性变换的最通用方法。
  • Euler: 一种表示旋转的简单方法,作为一组欧拉角,这仅仅是围绕 X、Y 和 Z 轴的旋转角度。容易出现诸如万向节锁等众所周知的缺陷。
  • Quaternion: 从表面上看,这是一种更抽象的数学方法来表示旋转。但实际上,它具有许多良好的特性,例如没有万向节锁,以及在两个任意旋转之间进行更平滑的插值。后者在角色动画中尤为重要。

Color

: RGB 颜色的表示形式以及转换为/从 HSV 空间的转换(没有 alpha 通道)。
华夏公益教科书