BlenderPython (三)bpy模块

简介

bpy全称Blender Python API,是blender使用python与系统执行数据交换和功能调用的接口模块。通过调用这个模块的函数,一般来说可以实现以下功能(下面的功能说明摘自《Blender权威指南》11.2.1部分):

  • 代替界面操作去完成对物体的修改,例如修改网格属性或添加修改器。
  • 自定义系统的相关配置,例如重设快捷键或修改主题的色彩。
  • 自定义工具的参数配置,例如自定义雕刻笔刷的参数。
  • 自定义用户界面,例如修改面板的外观和按钮的排列效果。
  • 创建新的工具,例如Surface Sketching(表面绘制)工具。
  • 创建交互式工具,例如游戏的逻辑脚本。
  • 创建与外置渲染器的接口调用,例如配置Vray等外置渲染器。
  • 从定义Blender的数据结构。

同时在Blender的界面中,为python脚本书写提供了非常人性的功能,把鼠标放在某个控件(按钮、输入框)上一段时间,系统就会提示相应的python接口代码,如把鼠标放在Render按钮上,提示如下图:
BlenderPython (三)bpy模块_第1张图片
当然上面的提示比较简单,仅仅是函数的提示,如果想获得详细的提示,再该控件上右键,显示如下图,然后点击Online Manual或者Online Python Reference即可进入该控件相应官方的API文档界面。(Edit Source还提供了修改该控件系统代码的功能,不过一般应该用不到。)
BlenderPython (三)bpy模块_第2张图片

data

blender界面上所有可使用调节的对象内容(包括mesh模型、lamp灯光、camera摄像机,material材质等)都在python中以特定的类型存储起来,在控制台输入bpy.types.class_name就可以查看相应的类别(bpy.types里面存了特别多的类型),同时对这些对象的在界面上的修改操作也对应这些类型属性的修改,这样就把界面操作和python脚本操作对应起来了。

BlenderPython (三)bpy模块_第3张图片

当然使用bpy.data子模型可以访问在界面出现的对象(对个对象是以collection方式存储)
访问对象列表

bpy.data.objects  #访问场景内普通对象列表,包括lamp、camera以及mesh模型的
bpy.data.scenes  #访问场景列表
bpy.data.materials  #访问材质对象列表

BlenderPython (三)bpy模块_第4张图片

访问具体的对象,可以通过bpy.data.objects[name/id],很明显通过使用对象的名称(使用自动补全会提示对象名称)或者在列表中的id来获取这个对象(对scenes和materials列表访问同理),如下

bpy.data.objects['Camera']  #访问名为`Camera`的摄像机对象
bpy.data.objects[1]  #访问列表中的第一个对象

camera
访问对象的属性,可以通过点方法进行调用,一般使用自动补全会提示可以使用的属性。

bpy.data.objects['Camera'].name #访问对象名称
bpy.data.objects['Camera'].location #访问对象的位置

props

ops

bpy.ops子模块提供了很多内置的Operator(操作符),这些操作符既可以在控制台中使用,也可以被集成到界面中由按钮操作来完成(这里只关注python脚本的使用)。在我看来这些操作符就是类似其他语言中声明的工具函数,可以通过bpy.ops.ops_name(parameters)传入相应的参数来直接进行调用(一般的程序员同学都应该会吧)。当然和工具函数一样,也可以定义自己的操作符,注册到系统中,就可以像内置的操作符一样使用了。
具体的操作这里面就不讲究了(方法太多),如果要使用其中对应的请查看相应的api。

context

context(正文)是blender数据管理中的一个全局变量集合,它包含了目前被选择的和激活的(物体的两种属性状态)的物体的信息,还记录了当前物体的编辑模式(data中没有这方面的信息)。当然使用context对物体对象的访问以及属性的操作和data子模块中相似。

bpy.context.selected_objects #访问选择上的对象列表,明显看出可以同时选择多个对象
bpy.context.active_object #访问目前激活的对象,激活的对象在某一时刻只有一个,或者没有(激活对象这个功能主要是因为很多的属性操作和变换都是对激活对象进行操作的)

active

你可能感兴趣的:(Blender)