首页 > 其他分享 >【笔记-Blender】插件开发

【笔记-Blender】插件开发

时间:2024-01-14 14:38:25浏览次数:27  
标签:插件 Python 代码 笔记 运算符 编辑器 Blender

【笔记-Blender】插件开发

前置工作

  • 打开设置“界面-开发选项”:
    这样可以通过对功能按钮的右键菜单直接复制或查看其源码,以及快速跳转到API手册。
  • 打开设置“界面-Python工具提示”:
    这样可以通过界面的悬停菜单直接查看该条目在代码中的表示方式。
  • 通过命令提示符打开Blender:
    这样可以利用python的print函数打印信息并显示在黑窗中(blender控制台不支持显示)。

编码环境

在内置环境中快速实现小功能,然后在外部环境组合成完整插件。

Blender内置环境

Blender自带Python解析器并会配置好相关环境,所以在此编写的代码可以直接运行,能很方便的进行一些代码片段的测试或快速执行一些临时操作。

不要在内置环境中执行注册类等操作,因为相比外部插件的方式,二次访问这些类会更困难,导致会出现无法取消和多次注册的问题。

  • Blender的Python控制台:
    自动引入所有模块,支持代码补全提示,常用于快速测试一些单行代码的可用性。
  • Blender的文本编辑器:
    无法进行代码补全,但弥补了控制台的单行代码缺陷,通常两者配合使用。

外部环境

需要自己配置开发环境,写完后还要再通过安装插件的方式嵌入Blender,整体流程肯定也没内置环境快。但若要做一个完整的插件,考虑代码量,资源文件,编辑器集成等,肯定还是在外单开一个项目更合适,具体开发时还可以内外环境配合使用。

目前市面上也有很多编辑器插件支持Blender的开发,比如VSCode内就有,可以实现自动打包并导入插件到Blender,大幅提升开发效率,可以基本实现和内置一样。

关键概念

编码原理

所有功能或数据都被用Python封装,我们包括编辑器都只是调用这些函数。

Blender的核心代码是用C++写,但其中很多常见操作都被封装成了Python函数,而Blender编辑器就相当于是调用这些函数的一个可视化入口,而我们所写的Blender脚本也是一样,只是换成了用代码的方式调用,这点可以通过Python的工具提示功能看出来。

除此之外,很多数据也被用Python进行了封装,精准控制网格的每个顶点或图像的每个像素都是完全可以的,这也正是脚本占优的地方,使用Blender编辑器只能靠官方提供的方式处理数据,很多冷门点的操作都没有,这时换成脚本就可以完美解决了。

资源处理

所有资源都存在集合中,包括对象的生命周期也完全由对集合的增删控制。

Blender中的各种资源都是一个个对象,而所有的对象都被存在了一个个集合里,并且这集合完全管理这些物体的生命周期,这意味着创建或删除物体的方式不再是常规的new,delete这些,而是要使用这些集合的函数在里面添加和移除对象。

访问属性

所有资源的属性包括自定义属性在代码中都有对应,可以利用Python工具提示查看。

所有图像界面上的设置在代码中都有对应的属性,可用利用Python工具提示很容易的看到这些,除此之外基本上每个资源都有额外的自定义属性功能,同样可以在代码中索引访问。

访问功能

所有界面上的功能都一定对应着代码中的一个运算符,借此可以像图像界面上一样调用这些功能。

Blender中所有可调用的功能都是一个运算符,如果创建了一个UI按钮,按钮所能绑定的事件也必须是运算符,而运算符需要继承实现并注册,虽然有些繁琐,但也因此所有UI上的可用功能在代码中也都可以调用对应的运算符实现。

部分运算符需要在特定的环境下才能运行,否则会抛出异常,对于这种特殊的运算符可以调用它的poll函数进行判断,来确定当前环境是否可以调用。

如果启用了“界面-开发选项”功能,那可以通过“帮助-操作项信息一览”菜单项创建一个包含所有运算符及其默认参数的文本文件,然后可以用Blender的文本编辑器查阅,这样可以很方便的了解到内置运算符及其调用方式。

代码集成

通过继承实现编辑器提供的接口类并注册的方式来将代码集成到编辑器中。

如果想把自己代码做成插件,集成到Blender编辑器中而不是一次性运行,那必须以下几个方法来实现(更具体的说是必须要继承对应的Blender类,并注册到编辑器才行)。

  • 通过定义渲染引擎。
  • 通过定义运算符。
  • 通过定义菜单、标题和面板。
  • 通过将新按钮插入到现有菜单、标题和面板中。

常用属性

对象

bpy.data #当前项目里所有的资源,对应“大纲视图-Blender文件”界面
bpy.content #当前操作环境,如选中的物体,正在使用的编辑模式等

bpy.types.Operator #运算符基类
bpy.types.Panel #UI面板基类

参考资料

Blender官方API文档

标签:插件,Python,代码,笔记,运算符,编辑器,Blender
From: https://www.cnblogs.com/BDFFZI/p/17963644

相关文章

  • 【笔记-MySql】表处理语句
    【笔记-MySql】表处理语句查看表SHOWTABLES;查看列SHOWCOLUMNSFROM<tableName>;查看约束SHOWINDEXESFROM<tableName>;创建表CREATE[TEMPORARY]TABLE<tableName>(字段描述语句[,...][表级约束]);修改表名RENAMETABLE<oldtableName>TO<tabl......
  • 【笔记-MySql】库处理语句
    【笔记-MySql】库处理语句连接数据库mysql-u<user>-p<password>查看SHOWDATABASES;创建CREATEDATABASE[IFNOTEXISTS]<name>;删除DROPDATABASE<name>;选择USE<name>;......
  • 【笔记-MySql】数据处理语句
    【笔记-MySql】数据处理语句语句参数聚合函数{count|max|min|sum|avg|...}比较运算符{=|<>|!=|<|<=|>|>=}--<>:早期符号,等同于!=,据说移植和性能略优。条件描述{--将当前值作为条件<columnName>{比较运算符<value>|--......
  • 【笔记-Manim】空间与变换
    【笔记-Manim】空间与变换所有常量都可以在constants.py中找到屏幕空间屏幕中心为原点(0,0,0),遵循右手坐标系,向右为x轴正方向,向上为y轴正方向,向前为z轴负方向,旋转时正方向为顺时针方向。相关常量名称描述FRAME_HEIGHT屏幕高度,默认为8FRAME_WIDTH屏幕宽度,默认为......
  • InternLM大模型笔记3
    整个过程相比于上次来说比较顺利,除了前期pip安装缺少有关库导致报错报错,其他都没有什么问题配置NLTK过程遇到加载很慢,最后发现可能是算力太少导致服务器响应太慢导致,经过重装之后,解决了问题最后配置成功......
  • 【软件开发学习笔记】Git版本控制
    【软件开发学习笔记】Git版本控制Git概念存储方式Git是分布式存储,每一个clone下来的仓库都可以看成独立的个体,只是Git有提供同步功能,因此Git支持离线使用,因为本质上本地和云端是两个仓库。仓库构成提交(commit)提交是存储文件的最基本元素,记录了每次对文件的修改信息,同时也是......
  • 【软件开发学习笔记】设计模式
    【软件开发学习笔记】设计模式设计模式设计模式是一种针对面向对象语言的软件设计方法,是对类设计的约束和指导。设计模式由“原则”和“方法”两部分组成,一个设计良好的项目结构应能完美符合“原则”中的要求,而为了实现完美往往需要按照“方法”的指导去设计。原则:这是必须......
  • 阅读笔记《需求工程软件建模与分析》上
    当涉及到《需求工程软件建模与分析》时,通常是指在软件开发过程中对需求进行建模和分析的相关内容。这方面的阅读笔记可以从两个不同的角度进行,一个是建模,另一个是分析。阅读笔记一:需求工程软件建模1.概述建模的重要性在软件开发中,需求建模是一个关键的阶段。了解客户需求、系......
  • 阅读笔记《需求工程软件建模与分析》下
     1.分析过程的关键步骤 需求收集:确保全面收集和理解用户需求,包括功能性和非功能性需求。需求分析:对收集到的需求进行详细的分析,识别可能的冲突或不一致性。需求验证:确保需求是准确、完整、一致且可追溯的,以便于后续的开发过程。 2.分析工具和技术 数据流图:描述......
  • Programming Abstractions in C阅读笔记:p246-p247
    《ProgrammingAbstractionsinC》学习第68天,p246-p247总结,总计2页。一、技术总结本章通过“thegameofnim(尼姆游戏)”,这类以现实生活中事物作为例子进行讲解的情况,往往对学习者要求比较高,需要学习者具备一定的人文、历史知识或专业知识,如果缺乏这方面的知识,就会导致读者在......