Python脚本在Blender中有多种使用场合,Blender提供了API给python脚本,脚本中需要import bpy来操纵Blender。对于这个API能做什么,官方文档中有说明:只要是界面上可以编辑的(如场景,模型,粒子等等),它都可以编辑。
我现在想观察一下Python脚本具体有哪些使用场合。

1.Python控制台

python schedule 开发文档 python scene_Test


Python控制台是一种编辑器类型,在其中可以直接运行Python脚本:

python schedule 开发文档 python scene_Test_02


其中下面脚本代码被运行:

scene = bpy.context.scene
for obj in scene.objects:
    obj.location.x += 1.0

首先获得了当前上下文中的scene对象,然后对scene中的objects进行遍历,对他们执行操作:让他们的location(位置)的x值递增1。执行后会发现场景中所有物体的位置x值都多了1 。
这里并没有import bpy,说明在python控制台这个环境中已经默认导入bpy了。

2.文本编辑器(Text Editor)

文本编辑器是另一个编辑器类型。

首先创建一个新的文本

python schedule 开发文档 python scene_blender_03


然后填入刚才的脚本(此时需要import bpy)

import bpy

scene = bpy.context.scene
for obj in scene.objects:
    obj.location.x += 1.0

然后点 运行脚本

python schedule 开发文档 python scene_Test_04


效果同样是移动了物体。

3.插件

3.0.插件代码

这是我的插件文件testPlg.py的内容:

bl_info = {
    "name": "YaksueTestPlg",
    "blender": (2, 80, 0),
    "category": "Object",
}

import bpy

class ObjectMoveX(bpy.types.Operator):
    """My Object Moving Script"""      # Use this as a tooltip for menu items and buttons.
    bl_idname = "object.move_x"        # Unique identifier for buttons and menu items to reference.
    bl_label = "Yaksue Test Operator"  # Display name in the interface.
    bl_options = {'REGISTER', 'UNDO'}  # Enable undo for the operator.

    def execute(self, context):        # execute() is called when running the operator.

        # The original script
        scene = context.scene
        for obj in scene.objects:
            obj.location.x += 1.0

        return {'FINISHED'}            # Lets Blender know the operator finished successfully.

def register():
    bpy.utils.register_class(ObjectMoveX)
def unregister():
    bpy.utils.unregister_class(ObjectMoveX)

bl_info中包含一些关于插件的信息,比如插件名字叫什么,这里我叫“YaksueTestPlg” 。
registerunregister分别在插件启动和禁用时被调用,这里他们主要工作是对ObjectMoveX进行注册和注销。
ObjectMoveX继承自bpy.types.Operator,说明它是一个操作器(Operator)。他的bl_label指明了这个操纵器在界面中显示的名字,这里叫“Yaksue Test Operator”。execute函数是这个操纵器运行时被调用的函数,他其中执行了我们之前测试的操作。

3.1.在文本编辑器中测试

如果直接在文本编辑器中运行testPlg.py,是不会有任何效果的。需要在末尾加上:

if __name__ == "__main__":
    register()

这让在文本编辑器运行时可以运行register这个函数。

运行之后,新的操纵器“Yaksue Test Operator”被添加进来,按 F3 搜索这个操纵器,可以看到它:

python schedule 开发文档 python scene_Python_05


点击后运行,效果和之前的一样。

3.2.安装插件

菜单中选择Edit,之后选Preference,打开插件分栏,选择安装插件,之后选择testPlg.py

python schedule 开发文档 python scene_Python_06


之后可以在插件列表中看到安装的插件:

python schedule 开发文档 python scene_Test_07


勾选这个插件后启用他,之后效果和我们上一步的一样。

4. 其他脚本文件

Blender安装目录的scripts文件夹中有包括插件在内的Python脚本文件,addons是插件,而startup中有启动时将载入的脚本,presets有些预设文件。