Blender 3D:新手到专业/高级教程/Blender 2.5x 脚本/简介
此页面记录了 Blender 2.5x 版本,该版本仍在开发中。 此处描述的信息随时可能更改。 |
Python 是一种功能强大的高级动态语言。Blender 2.5x 中使用的 Python 版本为 3.1。如果您不熟悉 Python,请从本教程开始(位于python.org)。如果您熟悉旧版 (2.x) Python,此页面总结了 3.x 中的新增内容。
如果您熟悉旧版 Blender 中的 Python 脚本编写,请注意 2.5x 完全不同;旧版Blender模块已消失。现在可以通过bpy模块获得大部分功能,但不要期望完全一一对应。
打开一个新的默认 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.data— 这是您查找当前文档内容的地方。
- bpy.types— 有关bpy.data.
- bpy.ops中对象类型的信息— 运算符执行 Blender 的实际功能;这些运算符可以附加到热键、菜单项和按钮上。当然,它们也可以从脚本中调用。当您编写附加组件脚本时,它通常会定义新的运算符。每个运算符都必须具有唯一的名称。
- bpy.context— 包含当前 3D 模式、哪些对象被选中等设置。还可以通过全局变量C.
- 在控制台窗口中访问bpy.props
该mathutils模块
— 用于定义属性的函数。这些函数允许您的脚本将自定义信息附加到场景,例如用户可以通过界面元素调整这些信息以控制脚本的行为。- Vector定义了几个重要的类,这些类在 Blender API 的其余部分中大量使用。
- Vector: 2D 或 3D 坐标的表示形式。
- Matrix: 表示任何类型线性变换的最通用方法。
- Euler: 一种表示旋转的简单方法,作为一组欧拉角,这仅仅是围绕 X、Y 和 Z 轴的旋转角度。容易出现诸如万向节锁等众所周知的缺陷。
- Quaternion: 从表面上看,这是一种更抽象的数学方法来表示旋转。但实际上,它具有许多良好的特性,例如没有万向节锁,以及在两个任意旋转之间进行更平滑的插值。后者在角色动画中尤为重要。