课程
How to Generate Random Numbers
教你怎么用随机数:
Python Console 下:
-
import random
导入随机数模块 -
random.uniform(0, 1)
生成一个 0-1 的随机浮点数,服从均匀分布 -
random.choice(range(0,10))
生成一个 0-10(不包含 10)的随机整数,服从均匀分布
Blender 下 print() 的输出可以在 Window
-Toggle System Console
里显示。
将随机数用在插件中的示例:
1 |
|
开跑,按下 Generate Random Number
,就会生成一个随机数,并导致面板标题和图标的变化。
Add-on Creation - Insta-Mist
比起原先的代码,加了一些节点存在性检查:
1 |
|
1 |
|
1 |
|
这段代码是一个基于 Blender 的插件,用于在 3D 视图中添加雾效果。主要包含三个类 INSTAMIST_PT_main_panel、INSTAMIST_PT_sub_panel 和 INSTAMIST_OT_add_mist。
其中 INSTAMIST_PT_main_panel 是主面板类,包含一个按钮“Add Mist”,点击按钮会触发 INSTAMIST_OT_add_mist 类的 execute 方法来开启或关闭雾效果。
INSTAMIST_PT_sub_panel 是子面板类,当且仅当场景的视图层使用了 pass_mist 属性才会显示面板,其中包括了 start、depth 和 falloff 这三个属性来控制雾的起始位置、深度和衰减程度。
最后 INSTAMIST_OT_add_mist 是操作员类,通过 execute 方法来根据当前状态开启或关闭雾效果,并对节点树进行相应的操作。如果开启雾效果,则会调用 mist_comp_action 方法来添加新的节点,否则会移除原有的节点。
1 |
|
开跑!按下 Enable/Disable Mist
后,会在 Compositor
生成/删除节点,以 开启/关闭 雾效果。
按下 F12 就可以看到渲染后的效果:
Lists - Create, Append and Remove
- Darkfall : Blender Python Tutorial: Lists - Create, Append and Remove (darkfallblender.blogspot.com)
教你怎么用 python 里的 list:
list.append()
追加一个元素list.remove()
删除一个元素list.extend()
追加多个元素list.clear()
清空列表
1 |
|
How to Display Info Messages
介绍了一些可以将消息输出至 Info
的语句:
self.report({'INFO'}, "This is a Custom Message")
self.report({'WARNING'}, "This is a Custom Message")
self.report({'ERROR'}, "This is a Custom Message")
Why is it not Working? : Episode 1
教你怎么调试错误。
How to make a Random Word Generator
写了一个随机单词生成器:
1 |
|
点击 Generate Random Words
就可以从单词库中生成一堆单词!
Application Timers
这段代码是一个简单的 Blender Python 脚本,用于创建 10 个位置不同的立方体。该脚本使用了 Blender 的定时器功能,以便在指定时间间隔内反复调用函数 “run_10_times()”。
首先,使用 import bpy 导入必要的 Blender Python 模块。
然后,创建了全局变量 counter 和 loc, 分别用于追踪立方体数量和立方体位置。
接下来定义函数 run_10_times(), 它会在启动定时器后被调用。该函数使用 bpy.ops.mesh.primitive_cube_add() 命令在场景中添加一个立方体。该命令需要一个位置参数,它将使用 loc 变量中的值来确定立方体的垂直位置。然后,counter 变量增加 1,loc 变量增加 2(以确保每个立方体都有不同的位置)。
函数还打印出当前计数器值。
如果 counter 变量的值达到 10,函数返回 None,以便停止定时器。否则,它将返回 0.5,以便等待一段时间(0.5s)后再次调用该函数。
最后,通过 bpy.app.timers.register() 函数注册函数 run_10_times(),以便在 Blender 中启动定时器。该函数将在 Blender 界面中点击 “Run Script” 按钮后执行。
总之,该脚本使用 Blender Python 的定时器功能,创建 10 个位置不同的立方体,每个立方体之间延迟一定时间。
1 |
|
Why is it not Working? : Episode 2
这段代码是一个 Blender 插件的示例,定义了一个面板和一个操作符。该插件提供了一些功能来添加粒子系统到选择的对象中。
首先,导入必要的模块,包括 bpy 和 Panel、Operator 类型。
接下来定义了一个面板类 ADDONNAME_PT_main_panel,并从 Panel 类继承。在这个类中设置了一些属性,例如名称、区域类型和分类等。draw() 方法用于绘制面板中的内容,在这里使用 layout 属性创建了三个控件,包括两个用于设置粒子系统参数的属性和一个用于执行操作的按钮。
然后定义了一个操作符 ADDONNAME_OT_my_op,并从 Operator 类继承。在这个类中设置了一些属性,例如名称和 ID 名称等。execute() 方法是操作符的核心部分,它将在用户按下按钮时被调用。在这里,它使用 bpy.ops.object.particle_system_add() 命令向选定的对象中添加了一个粒子系统。
最后,将 ADDONNAME_PT_main_panel 和 ADDONNAME_OT_my_op 类添加到 classes 列表中,并使用 bpy.utils.register_class() 函数注册这些类。同样,使用 unregister() 函数在插件不再需要时注销这些类。
如果这个脚本是直接运行的,那么它将调用 register() 方法并注册这些类。如果该脚本作为其他插件的一部分被导入,则 register() 方法不会被调用。
1 |
|
The REDO Operator
这段代码是 Blender 插件的示例,定义了一个面板和一个操作符。该插件提供一个按钮,点击后会在当前场景中添加一个立方体。
首先导入必要的模块,包括 bpy 和 Panel、Operator 类型。
然后定义了一个面板类 ADDONNAME_PT_main_panel,并从 Panel 类继承。在这个类中设置了一些属性,例如名称、区域类型和分类等。draw() 方法用于绘制面板中的内容,在这里使用 layout 属性创建了一个控件,即一个按钮,并使用 layout.operator() 函数将其添加到面板中。
接着定义了一个操作符 ADDONNAME_OT_my_op,并从 Operator 类继承。在这个类中设置了一些属性,例如名称和 ID 名称等。bl_options 属性指定了操作符的行为,包括注册和撤销。loc 属性是一个 FloatVectorProperty,表示要添加的立方体的位置。
execute() 方法是操作符的核心部分,它将在用户按下按钮时被调用。在这里,它使用 bpy.ops.mesh.primitive_cube_add() 命令向当前场景中添加了一个立方体,位置由 self.loc 属性决定。
最后,将 ADDONNAME_PT_main_panel 和 ADDONNAME_OT_my_op 类添加到 classes 列表中,并使用 bpy.utils.register_class() 函数注册这些类。同样,使用 unregister() 函数在插件不再需要时注销这些类。
如果这个脚本是直接运行的,那么它将调用 register() 方法并注册这些类。如果该脚本作为其他插件的一部分被导入,则 register() 方法不会被调用。
-
bl_options = {'REGISTER', 'UNDO'}
-
bl_options 是一个操作符的属性,用于指定该操作符的行为。它是一个包含字符串的集合,可以指定以下选项:
- REGISTER:表示将该操作作为已注册的操作来显示,即将其添加到撤销历史记录中。如果未启用此选项,则执行该操作不会被记录在撤销历史记录中。
- UNDO:表示该操作可被撤销。如果未启用此选项,则在执行该操作后无法撤消该操作。
在代码示例中,bl_options 属性被设置为 {‘REGISTER’, ‘UNDO’},表示该操作符应被注册并可以被撤销。这样一来,当用户单击添加的按钮时,该操作的执行将被记录在撤销历史记录中,并且用户可以随时撤消该操作。
-
-
在 Blender 中,可以使用 Ctrl + Z 快捷键或 Edit 菜单中的 Undo 命令来撤消先前执行的操作。如果你想一次性撤销多个操作,可以多次按下 Ctrl + Z 或多次选择 Undo 命令。
如果你想恢复先前撤消的操作,可以使用 Ctrl + Shift + Z 快捷键或 Edit 菜单中的 Redo 命令来重做操作。同样,你可以多次按下 Ctrl + Shift + Z 或多次选择 Redo 命令以重复多个操作。
1 |
|
开跑!按下 Button 按钮后,将会生成一个正方体,同时出现一个 Dialogbox 用于控制正方体的位置。这个操作可以用 Ctrl+Z 来撤销。
API Changes and where to Find them?
说 Blender 更新到 3.0 了,一些 API 发生了变化,可以从 Reference/Release Notes/3.0/Python API - Blender Developer Wiki 里查看,其实现在也可以 chatGPT。