Blender的插件开发-快速入门

原创
2015/01/27 08:36
阅读数 6.9K

    使用Blender创建精彩非凡的作品,你可以是三维图形、创意设计的专家,但不必要成为软件开发的专家。

    Blender具有强大的插件扩展功能,不仅可以加载大量的各种功能、效率增强插件,而且稍微懂点python的也可以开发插件。先说说怎么用插件吧。

进入文件-用户偏好设置,在对话框中选择"Addon",然后可以设置自己需要的插件。
或者,ctrl+alt+u,快速进入设置对话框。

    Blender的插件机制全部采用Python实现,最新的2.73a版本集成了Python3.4.2的引擎。

    注意:Blender的脚本print("hello")函数是输出信息到启动的控制台的,直接运行的时候看不到输出的信息。

    但是,为了保持相对独立的运行环境,这个版本与操作系统的python是不同的,是在Blender的上下文环境运行的。因此,在操作系统安装的库,在这里是用不了的,有的库可以在Blender安装运行,但有的库是不行的。但这并没有太大的妨碍,因为Blender里面的库已经足够强大了。

    Blender运行、编辑Python的脚本有几种方式:

启动时运行:
    blender --python /home/me/my_script.py

命令行运行:
    拖动3D视图的右上角,向左下,扩展出一个窗口。
    选择左下角的立方体,选择Python控制台,然后就可以输入Python脚本了。

编辑器运行:
    跟命令行类似,先扩展出一个窗口。
    选择左下角的立方体,选择文本编辑器,然后选择新建,就可以输入Python脚本了。
    再选择运行脚本即可,也可以将输入的内容保存起来。

外部编辑器:
    使用任何的编辑器,如Sublime、记事本等编辑脚本,编辑脚本。
    然后复制到文本编辑器、或打开文件、或直接复制到命令行窗口即可。
    可以把Blender挂到一个调试器上,然后从python的IDE中就可以直接Debug进去,这个以后再说。

    下面我们再看一下Blender的脚本结构。

进入目录,看一下scripts目录下的东西,一切全明白了。
Blender不仅使用Python来扩展插件,连自己的很多参数设置也都是用的同样的机制实现的。
如果搞明白了这个参数,就可以容易地定制自己的工作台了。
比如,scripts/starup下存放了Blender的启动执行过程和参数。

    闲话少说了,马上开发一个自己的插件。

import bpy

class HelloWorldPanel(bpy.types.Panel):
    """Creates a Panel in the Object properties window"""
    bl_label = "Hello World Panel"
    bl_idname = "OBJECT_PT_hello"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = "object"

    def draw(self, context):
        layout = self.layout
        obj = context.object
        row = layout.row()
        row.label(text="Hello world!", icon='WORLD_DATA')
        row = layout.row()
        row.label(text="Active object is: " + obj.name)
        row = layout.row()
        row.prop(obj, "name")
        row = layout.row()
        row.operator("mesh.primitive_cube_add")

def register():
    bpy.utils.register_class(HelloWorldPanel)

def unregister():
    bpy.utils.unregister_class(HelloWorldPanel)

if __name__ == "__main__":
    register()


    把上面的代码复制到Blender的文本编辑器中,点击“运行脚本”即可。

    怎么?没有反应?不会吧?

    鼠标右键选中缺省窗口的立方体对象(物体模式),到对象的属性面板,该面板的标题栏的第五个图标“立方体”选中,然后滚动显示到最下方,应该就可以看见了。

    终于体会到Blender的任性了吧?不要拍我啊!这是用的Blender的官方例子,以后我再弄个简单的。

    要想用Blender开发个插件,知道点这些皮毛是不够的。

    后续,我们首先要对Blender的对象体系进行探索。





展开阅读全文
打赏
0
6 收藏
分享
加载中
ing问大神,blender如何用python创建模型并导入obj文件?
以及如何变幻相机位置?
如何根据相机的每个位置导出图片?
整个过程不用图形界面,blender在后台运行
2019/11/06 09:15
回复
举报
openthings博主
远程socket连接进行操作。
2019/11/06 17:55
回复
举报
请问如何把Blender挂到一个调试器上,然后从python的IDE中直接Debug进去?
2019/11/04 10:44
回复
举报
openthings博主
set debugger in python ide.
2019/11/04 11:16
回复
举报
你好,就是有没有办法从一个web服务器项目启动blender并执行py文件进行渲染,然后返回渲染后的文件给web项目
2019/11/04 11:54
回复
举报
openthings博主
use remote socket, ref 将Blender变成一个小型的http的web服务器
2019/11/04 14:03
回复
举报

引用来自“kaa417”的评论

博主您好,想请教博主一个比较基础的问题,不太懂编译方面的原理。压缩包导入(包含一个文件下的几个.py文件)和单个.py文件导入有什么区别?因为单个py文件的导入在使用中文字符串的时候,在汉化的Blender下可以正常显示;而使用压缩包的情况下即使在 _init_.py添加 # -*- coding: UTF-8 -*- ,导入也会报错,能解决我的问题吗?

引用来自“openthings”的评论

可能是中文字符集的处理有问题,Blender的版本一直有一些这个问题,只能慢慢解决了。建议不要用压缩包,一个目录下是可以放多个文件的。
非常感谢博主能这么快回复我 T_T,非常感谢! 解决了,我用utf-8的编码格式解决了。
2016/10/10 07:03
回复
举报
openthings博主

引用来自“kaa417”的评论

博主您好,想请教博主一个比较基础的问题,不太懂编译方面的原理。压缩包导入(包含一个文件下的几个.py文件)和单个.py文件导入有什么区别?因为单个py文件的导入在使用中文字符串的时候,在汉化的Blender下可以正常显示;而使用压缩包的情况下即使在 _init_.py添加 # -*- coding: UTF-8 -*- ,导入也会报错,能解决我的问题吗?
可能是中文字符集的处理有问题,Blender的版本一直有一些这个问题,只能慢慢解决了。建议不要用压缩包,一个目录下是可以放多个文件的。
2016/10/09 17:43
回复
举报
博主您好,想请教博主一个比较基础的问题,不太懂编译方面的原理。压缩包导入(包含一个文件下的几个.py文件)和单个.py文件导入有什么区别?因为单个py文件的导入在使用中文字符串的时候,在汉化的Blender下可以正常显示;而使用压缩包的情况下即使在 _init_.py添加 # -*- coding: UTF-8 -*- ,导入也会报错,能解决我的问题吗?
2016/10/09 16:47
回复
举报
openthings博主

引用来自“921977939qqcom”的评论

实验成功,但是废话不要说太多!我刚入门,你说那么多废话就是累赘80
够任性,呵呵!
2015/10/20 19:47
回复
举报
实验成功,但是废话不要说太多!我刚入门,你说那么多废话就是累赘80
2015/10/20 11:56
回复
举报
更多评论
打赏
11 评论
6 收藏
0
分享
返回顶部
顶部