
Blender是一个非常强大的开源软件,开源软件的一大优势便是能够直接看到未加密的源代码,值得我们去学习研究。Blender能够借助python实现一些实用的效果,下面我使用blender 2.8版本来介绍一下其中的python编程相关入门,希望能与大家学习交流。
首先我们可以将主界面中某一个编辑窗口类型设置为python控制台(快捷键为Shift+F4)。

它是编写插件和脚本的时候最重要的调试工具之一,我们可以在这个控制台内输入命令来实现一些操作。
它默认包含了bpy模块,bpy模块是blender python API最常用最主要的模块,它所包含的内容比较庞大。

'>>>'是Python控制台的输入提示符,不需要输入
在控制台输入bpy.然后按Ctrl+Space可以查看它的子模块,其中一些子模块,我理解的含义大概是:ops代表操作,data代表数据,context 代表运行时的环境,types代表所有行为的类型,utils是工具集。注意在控制台中context和data已经被赋值给了大写的C和D,这样可以使他俩的输入更便捷,但是这两个大写字母不能在脚本或插件中使用,只能输入全路径或自己重新赋值一次。这里我们使用bpy的子模块来输入一些命令,如:
bpy.data.objects["Cube"].location.z += 1
然后回车,可以发现我们默认的名为Cube的立方体往z轴上移了一个单位

我们也可以同时指定三个向量,如:
bpy.data.objects["Cube"].location = (2,2,2)
#将立方体的世界坐标变换为x=2,y=2,z=2
bpy.data.objects["Cube"].scale = (2,2,2)
#将立方体的缩放沿xyz轴各拉伸2倍
bpy.data.objects["Cube"].rotation_euler = (2,2,2)
#立方体在世界空间的旋转,注意需要用欧拉将弧度转换为角度,也就是2弧度转换为115°

我们也可以使用小键盘的上下键来重复之前输入过的命令,同时也可以使用Ctrl+Space使用自动补全来快速输入命令。

其实在blender几乎每个操作按钮上,只要将鼠标悬停久点,就会出现该按钮对应的命令提示,比如按x进行删除时,我们可以ctrl+c复制这个命令,然后ctrl+v黏贴到控制台回车即可删除物体。

同理,我们也可以在创建一个棱角球时复制这个命令,通过控制台创建这个棱角球。


通过这个方法,我们可以使用blender内置的功能简单地实现一些一键自动化的效果
我们在直接控制台中执行如下修改器命令:
bpy.ops.object.subdivision_set(level=1, relative=False)
#添加表面细分修改器
bpy.ops.object.modifier_add(type='SOLIDIFY')
#添加实体化修改器
bpy.ops.object.modifier_add(type='WIREFRAME')
#添加线框修改器
bpy.ops.object.modifier_add(type='BEVEL')
#添加倒角修改器
bpy.context.object.modifiers["Solidify"].thickness = 0.05
#实体化修改器厚度设置为0.05
bpy.context.object.modifiers["Wireframe"].thickness = 0.04
#线框修改器厚度设置为0.04
bpy.context.object.modifiers["Wireframe"].use_replace = False
#线框修改器取消替换原物体
可以看到这个棱角球加了一系列的修改器。

我们也可以继续输入命令来修改这些修改器的属性:
bpy.context.object.modifiers["Solidify"].thickness = 0.08
#实体化修改器厚度设置为0.05
bpy.context.object.modifiers["Wireframe"].thickness = 0.02
#线框修改器厚度设置为0.04
bpy.context.object.modifiers["Wireframe"].use_replace = True
#线框修改器取消替换原物体

还有一种方法便是通过scripting布局窗口来查看你操作的所有命令。

我们可以通过记录这些命令制作宏命令,简化一些重复操作,或是达到一键成型的效果。
我们将编辑器窗口类型设置为文本编辑器,即可在这里写python脚本(快捷键Shift+F11)。

新建一个文本,我们尝试写一个随机分布阵。
要使用随机,我们需要导入随机模块。
python代码示例如下:
import bpy
from random import randint
#导入随机模块
number = 100
for i in range(0,number):
#创建一个范围循环
x = randint(-20,20)
y = randint(-20,20)
z = randint(0,30)
#x,y,z的范围
bpy.ops.mesh.primitive_cube_add(location=(x,y,z))
#添加方块

然后运行一下我们的脚本。

可以看到我们的场景新增了100个随机方块。

同理,继续在脚本里增加一些代码,便可以“一键”创建出一些有趣的效果。
可以通过导入其他的模块,创建一些更丰富的效果,由于up也是刚刚入门,这里我就不多赘述了。具体如何编写blender的python脚本,可以参考官方的python api文档,小伙伴们可以自行发挥一下创造力哦~
先写到这里,后面也许会继续随缘更新~
作者:seer