欢迎大家一起创建属于自己可方便定义的Blender二次开发语言mybpy
blender吧
全部回复
仅看楼主
level 7
caonan2000bd 楼主
发现Maya的MEL非常方便,每个步骤都有对应的MEL语言代码展示, 甚至可生成MEL语言型文件,非常有利于回溯修改程序开发方式, 而且代码还很简洁,这个可能是Maya通用性好的一个原因. 而Blender虽然有bpy, 在Script模式下,也是有展示代码步骤, 也可以有功能钮bpy代码提示, 但它展示的代码太乱太复杂, 很多是不能直接使用的, 需要根据线索研究找到其他相关代码才能使用,(不过也是很方便了), 但觉得还是不够方便的. 所以, 本人决心基于bpy与吧里的高手(当然还有任何感兴趣用bpy代码创作的任何小白), 一起创建属于咱们自己方便定义的Blender二次开发语言mybpy. 还请大家多多参与. (到时欢迎展示自己的mybpy及基于自己的mybpy 创作的作品)
mybpy开发的宗旨和思路 (请参与者尽可能遵循此宗旨和思路)
(1) 文件要尽可能简洁, 能一个py文件就一个py文件, 可以方便放在任何的地方(比如默认是D盘根目录) ,引用时用sys.path.append命令加载
(2) 不写成class格式, 要方便大家(特别是程序小白)自定义
(3) 方便一个命令多重的自定义, 尽量有与快捷键一致的自定义,非常非常简洁的自定义, 甚至可以自己定义中文命令
(4) 可支持创作时,单行写多个代码(用分号分割即可), 这样创作的代码作品可以简洁清晰.( 特别是If 语句可支持一行写, 支持exec()写一行文本多代码方式.
(5) 支持Blender多版本, 基础的命令要从2.79版支持到 3.0 (以及以后任何版本) ,Blender特殊版本新加命令,要在代码里有提示支持多少之后的Blender版本
(6) 发现Blender 线 和 面 的 Index编号有不稳定性 (就是每次运行时Index不同), 尽量做代码处理(比如重新按位置Index等), 使Index保持稳定(不仅是一个版本内的稳定, 尽可能是跨版本的稳定). 也就是代码尽可能可在多版本运行出一样的效果.
(7) 可随时自己方便定义和修改mybpy.py文件,然后直接生效, 而不需要再重新启动Blender
(8) 可方便从bpy工作台输命令, 提取当前手工编辑作品点线面 index号位置等信息, 方便写在代码里, 供将来用代码还原自己的作品, 并可用调整代码里参数的方法, 修改作品.
(9) 创作时, 在Blender直接调到script 界面 , 文本里先粘上一段前置代码 (此段代码也可以写成一个文本模板文件打开),比如, 一行这样的代码:
sys.path.append('d:\mybpy.py');from mybpy import *;
就完成了mybpy加载, 然后接下来可以写这样的代码:
cube();s(2);gx(1.5);ry(90); # 创一个cube; s命令扩大2倍, gx命令,x方向移动1.5;ry命令延y轴旋转90度.
一行的命令也一起, 用分号分割, 然后在后面注上这个命令是做模型的什么部位之类的. 也就是完全 的将在Blender 的命令自己记录下来, 然后可以方便微调.
如果小白也可以写成中文的, 比如:
方块();缩放(2);移x(1.5);旋y(90);
一起都是可以自己定义. 自己的Script文档,可以当自己创作和学习的记录, 还方便修改参数.
先把这些想法抛出来, 算是抛砖引玉吧, 如果有感兴趣的, 志同道合的, 也欢迎提出你的想法. 我们共同交流和研发.
2021年06月07日 02点06分 1
level 7
caonan2000bd 楼主
Script模式下, 按Alt+P , 就可运行代码, 刷新结果.
这种开发方式, 就是要尽可能实现自记录步骤式的开发方式, 一切有可回溯性. 并且代码易于复制和复用. (也是一种笔记)
(Script模式就是Blender 上方与菜单同列的各页里, 用鼠标中键滚轮滚到最右边, 也就是最后的一个模式页, 就是Script模式页)
2021年06月07日 02点06分 2
level 7
caonan2000bd 楼主
import bpy
#-------Cube方块-------------------------------------
def cube(): #<---- 基础的二次自定义
bpy.ops.mesh.primitive_cube_add(enter_editmode=False, location=(0, 0, 0)) #Blender bpy代码
def 方块():cube() #<------其他定义(比如中文的定义)
def 方():cube()
def 块():cube()
#-----------resize缩放----------------------------------------------------
def resize(x,y,z): #<---- 基础的二次自定义
bpy.ops.transform.resize(value=(x, y, z)) #<---- bpy代码
def s(v): resize(v,v,v) #<-------按快捷键名称的自定义
def sx(v):resize(v,1,1)
def sy(v):resize(1,v,1)
def sz(v):resize(1,1,v)
def 缩放(v):s() #<-------中文名称的自定义
def 缩放x(v):sx()
def 缩放y(v):sy()
def 缩放z(v):sz()
2021年06月07日 03点06分 3
level 1
除了定义 cube ,还需要定义其它的一些信息:
打开 Info ,运行 s 2 gx 1.5 ry 90 的命令,对比一下,可以看到:
还需要指定 orientations 的三个参数,是否启用 mirror 和 proportional 及其四个参数。
2021年06月07日 03点06分 4
level 7
caonan2000bd 楼主
非常感谢有感兴趣的朋友. 我上面的只是举个例子的. 其实, 我已经开发有一段时间了. 只要是有感兴趣的朋友,愿意研究Blender程序Script开发模式设计的, 咱们共同进步, 我很乐意分享我现有的这个二次开发的mybpy. 请试用, 并欢迎提出宝贵意见.
刚才的步骤有些更改, 请按下面的来操作, 具体如下:
1. 先在D盘, 建mybpy文件夹, 写一个文本文件, 命名为 m.py (注意扩展名一定是.py 而不是.txt, 需要把电脑调成文件后缀扩展名显示模式下修改)
2. 复制我发布的 mybyp的代码到 m.py 文件中 (也就是 d:\mybpy\m.py 文件中),保存.
上面这个就是mybpy的安装了, 很简单吧(符合要简洁的要求吧)
下面进入Blender Script模式, 新建文本, 先粘一下这两行代码:
import sys;sys.path.append('D:\mybpy'); #<-------mybpy所在文件夹
import importlib as imp;import mybpy.m as m;imp.reload(m);from m import *; #<-----自动更新模式加载m文件(有此行代码直接改mybpy的m文件保存后, 不用启动Blender即可生效,便于自定义命令)
然后之后 就可以 试验 刚才的代码了. (我的原始代码里没有中文定义, 需要的话, 可以在m文件Find找到相应代码 def 自定义一下中文即可)
为了避免刷新时模型重复, 所以代码第一句话 一般会写个 clearAll(); 清空一下; 如果以后是需要加在其他场景中, 可#号注销掉即可clearAll()
我的命名规则是模仿MEL语言命名规则, 即小写开头,后面的直接用大写区隔, 比如clearAll(), 中间的A是要大写, 这个与bpy命名用"_"隔开是有区别的, 主要是方便书写, 另外也避免与bpy冲突(如果有需要还可以自己在script直接 from bpy import * 来使用bpy里命令, 尽可能不冲突.
所以 在文本里粘下面的命令即可:
import sys;sys.path.append('D:\mybpy');
import importlib as imp;import mybpy.m as m;imp.reload(m);from m import *;
#-----------初始化---------
clearAll()
#------------模型------------
cube();s(2);gx(2);rx(20);
2021年06月07日 04点06分 5
level 7
caonan2000bd 楼主
粘mybp的代码时, 为什么总是提示超5000字, 粘不上我的mybp代码, 不知道是否贴吧支持发文件?
2021年06月07日 05点06分 6
level 7
caonan2000bd 楼主
mybpy.m 文件发到百度网盘, 请有需要的朋友下载, 欢迎提出宝贵意见和建议, 共同进步
[无效] https://pan.baidu.com/s/1-QqrxJHYC0Vy0k8y9GGRkg
提取码:mbpy
2021年06月07日 06点06分 9
level 7
caonan2000bd 楼主
需要注意的是, 如果需要自定义命令, 要不就是查找m里已有的命令,用def语句写在命令def块的后面, 要不就是 自己写在m文件末尾 专门自己的一个区域. 一定不能写在命令的前面, 因为这个py是没有用通常的class 最后 main() 来运行的方式, 脚本会从上往下运行, 如果写到命令的前面, 就会取不到了, 所以,建议可以统一命名在最下面自己的区域.
比如,m文件最底下的区域写
#------我自己的定义-----
def 方块():cube()
def 移动(v): g(v)
def 缩放(v): s(v)
如有问题, 欢迎留言.
2021年06月07日 06点06分 10
level 6
直接用bpy 不行吗? blender 自带 python 啊
https://www.bilibili.com/video/BV1Pz411i7Xp
看我这个教程 ,教程 里面 有 提到 怎么使用blender 里的python
另外,我建议 卸载python .只使用blender 里面的python 是一样的。
2021年06月08日 03点06分 12
感谢您的回复. 我这个mybpy, 就是在bpy的基础上二次开发的,也不用单安Python, 用的就是 Blender自带的Python控制台和script文本编辑器. 您看我今天新发的贴: https://tieba.baidu.com/p/7393914011
2021年06月08日 08点06分
@caonan2000bd 就是方便使用的 二次开发。 呵呵 加油
2021年06月09日 02点06分
@zmtom18988 感谢您的支持, 还请抽空的时候下载试用一下, 有什么问题和意见欢迎提出[哈哈]
2021年06月10日 02点06分
@caonan2000bd 我和你走了两个不同的方向: 你是用python 操控blender. 我是用blender 操控python . 哈哈。 殊途同归。
2021年06月15日 16点06分
level 7
caonan2000bd 楼主
您可以把我的mybpy文件夹从 网盘下载下来, 然后 放在D盘, 只要Blender主页面切出个控制台窗体(或用script页), 在控制台粘一下那两行加载代码, 回车, 您就可以用控制台非常非常方便的调用自定义命令(当然也可以写脚本 按 alt+P 运行). 方便之处,就比bpy代码简单, 比如敲个 hdr(), 就可以自动加上自己默认的hdr贴图, 敲个 ca(), 就可自动加camera和灯光 可用于渲染了. 敲 img(文件路径), 就可以在object上贴图, 而且如果是给两个路径, 是正反面贴图的. 一句话, 就是方便.
2021年06月08日 08点06分 13
level 7
caonan2000bd 楼主
不试是不知道的. 这个mybpy是基于bpy二次开发的,还可以方便的自定义, 就是要做到方便再方便, 是这个目的和宗旨的.
欢迎试用(这个贴里的网盘地址已经不行了) 请到我今天新发的贴里的网盘地址下载.
新贴地址:
https://tieba.baidu.com/p/7393914011
2021年06月08日 08点06分 14
1