杰瑞科技汇

Blender Python怎么入门?基础教程有哪些?

Blender Python 教程:从入门到实践

Blender Python (通常简称为 bpy) 是 Blender 内置的强大脚本接口,通过它,你可以自动化重复性任务、创建自定义工具、甚至构建复杂的游戏逻辑或生成艺术,掌握 bpy,意味着你将 Blender 的能力提升到了一个全新的维度。

Blender Python怎么入门?基础教程有哪些?-图1
(图片来源网络,侵删)

第一部分:基础准备

为什么学习 Blender Python?

  • 自动化:自动执行繁琐任务,比如批量重命名、调整材质、设置动画关键帧。
  • 可重复性:创建一个脚本,可以精确地、无数次地复现复杂的效果。
  • 扩展功能:添加 Blender 原生没有的功能,创建你自己的工作流工具。
  • 程序化建模:通过数学和算法生成复杂的模型,这是程序化艺术和游戏开发的核心。
  • 游戏开发:在 Blender 的游戏引擎中,Python 用于编写交互逻辑、敌人 AI 等。

开发环境准备

最推荐的编辑器是 Visual Studio Code (VS Code),因为它有出色的代码补全、错误提示和调试功能。

安装步骤:

  1. 安装 VS Code:从 官网 下载并安装。
  2. 安装 Python 扩展:打开 VS Code,进入扩展商店,搜索 "Python" 并安装 Microsoft 官方提供的 Python 扩展。
  3. 配置 Blender 的 Python 路径 (非常重要!)
    • 找到你安装的 Blender 的 Python 解释器路径,在 Windows 上,它通常在 C:\Program Files\Blender Foundation\Blender 3.x\3.x\python\bin\python.exe
    • 在 VS Code 中,按 Ctrl+Shift+P (Windows/Linux) 或 Cmd+Shift+P (Mac),输入 Python: Select Interpreter
    • 选择你找到的 Blender 的 Python 解释器,这样 VS Code 就能使用 Blender 的库,并获得正确的代码提示。

第二部分:核心概念

Blender 的数据模型

理解 Blender 的数据模型是学习 bpy 的关键,Blender 的所有内容(场景、对象、材质、网格等)都是一个“数据块”(Data Block),这些数据块被组织在一个层级结构中。

  • bpy.data:这是所有数据的入口点,它是一个字典,包含了所有可用的数据块。
    • bpy.data.objects: 场景中的所有对象。
    • bpy.data.meshes: 所有网格数据。
    • bpy.data.materials: 所有材质。
    • bpy.data.images: 所有图像。
  • 上下文bpy.context 是另一个核心概念,它代表了 Blender 当前用户正在交互的“环境”,比如当前选中的对象、活动的对象、当前的场景等。

简单比喻: 想象一个图书馆:

Blender Python怎么入门?基础教程有哪些?-图2
(图片来源网络,侵删)
  • bpy.data 是整个图书馆的目录,你可以在这里找到所有的书(对象)、杂志(材质)等。
  • bpy.context 是你当前正在阅读的书桌,上面放着几本你正在翻阅的书(当前选中的对象)。

访问和操作对象

获取对象:

# 通过名称获取
my_object = bpy.data.objects["MyCube"]
# 通过上下文获取当前选中的对象
selected_object = bpy.context.active_object
# 遍历场景中的所有对象
for obj in bpy.data.objects:
    print(obj.name)

修改对象属性:

# 假设我们有一个选中的立方体
selected_object = bpy.context.active_object
# 修改位置
selected_object.location.x = 2.0
selected_object.location.y = 1.5
# 修改缩放
selected_object.scale.z = 2.0
# 修改旋转 (注意:Blender 默认使用弧度)
# 可以用 math.radians 将角度转换为弧度
import math
selected_object.rotation_euler.z = math.radians(45)

第三部分:实战演练

让我们通过几个小例子来巩固知识。

示例 1:创建一个简单的立方体

  1. 在 Blender 中,打开一个新的默认项目。
  2. 切换到 "Scripting" 工作区。
  3. 在文本编辑器中,创建一个新文本,粘贴以下代码,然后点击 "Run Script" 按钮(或按 Alt+P)。
import bpy
# 清除场景中所有默认对象
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()
# 在原点处创建一个新的立方体
bpy.ops.mesh.primitive_cube_add(size=2, location=(0, 0, 0))
# 获取刚刚创建的立方体对象
cube = bpy.context.active_object
# 给立方体添加一个新的材质
mat = bpy.data.materials.new(name="MyMaterial")
mat.use_nodes = True
cube.data.materials.append(mat)
print("立方体创建成功!")

代码解释:

Blender Python怎么入门?基础教程有哪些?-图3
(图片来源网络,侵删)
  • bpy.ops.object.select_all(action='SELECT'):选择所有对象。
  • bpy.ops.object.delete():删除所有选中的对象。
  • bpy.ops.mesh.primitive_cube_add(...):这是一个“操作”(Operator),用于创建一个原始的立方体网格,它有很多参数,如 size(大小)和 location(位置)。
  • bpy.context.active_object:获取执行操作后处于活动状态的对象。
  • bpy.data.materials.new(...):创建一个新的材质数据块。
  • cube.data.materials.append(mat):将材质添加到对象的材质槽中。

示例 2:自动化动画关键帧

让我们让立方体在 1 秒内从 (0,0,0) 移动到 (5,0,0)。

import bpy
import math
# 确保我们有一个立方体
if "MyCube" not in bpy.data.objects:
    bpy.ops.mesh.primitive_cube_add(size=1, location=(0, 0, 0))
cube = bpy.data.objects["MyCube"]
# 设置场景总帧数
bpy.context.scene.frame_end = 100
# 清除旧的动画数据
if cube.animation_data:
    cube.animation_data.action = None
# 创建新的动画数据
cube.animation_data_create()
action = cube.animation_data.action
# 为位置属性创建 F-Curves (动画曲线)
for fcurve in action.fcurves:
    action.fcurves.remove(fcurve)
# 添加 X 位置的 F-Curve
fcu = action.fcurves.new(data_path="location", index=0)
fcu.keyframe_points.add(2)
# 设置关键帧
# 第 0 帧
fcu.keyframe_points[0].co = (0, 0)  # (帧数, 值)
fcu.keyframe_points[0].interpolation = 'LINEAR'
# 第 100 帧
fcu.keyframe_points[1].co = (100, 5)
fcu.keyframe_points[1].interpolation = 'LINEAR'
print("动画关键帧设置完成!")

第四部分:进阶技巧

使用 Nodes (节点)

节点是 Blender 强大功能的核心,我们也可以用 Python 来操作它们。

import bpy
# 获取活动对象
obj = bpy.context.active_object
if not obj or obj.type != 'MESH':
    print("请选择一个网格对象")
    exit()
# 获取活动材质
mat = obj.active_material
if not mat:
    mat = bpy.data.materials.new(name="NodeMaterial")
    mat.use_nodes = True
    obj.data.materials.append(mat)
# 清除默认节点
nodes = mat.node_tree.nodes
nodes.clear()
# 创建输入和输出节点
input_node = nodes.new('ShaderNodeTexImage')
output_node = nodes.new('ShaderNodeOutputMaterial')
# 连接节点
links = mat.node_tree.links
links.new(input_node.outputs['Color'], output_node.inputs['Surface'])
# 加载一张图片
# 假设你有一张名为 'my_texture.png' 的图片在当前目录
try:
    img = bpy.data.images.load(filepath="my_texture.png") # 请确保图片存在
    input_node.image = img
    print("节点材质设置完成!")
except Exception as e:
    print(f"无法加载图片: {e}")

程序化建模

创建一个由多个小球组成的圆环。

import bpy
import math
# 清除默认对象
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()
# 圆环参数
radius = 5  # 圆环半径
ball_radius = 0.3
num_balls = 24
# 创建小球并排列成圆环
for i in range(num_balls):
    angle = (i / num_balls) * 2 * math.pi
    # 计算小球的位置
    x = radius * math.cos(angle)
    y = radius * math.sin(angle)
    z = 0
    # 创建小球
    bpy.ops.mesh.primitive_uv_sphere_add(radius=ball_radius, location=(x, y, z))
    # (可选) 给每个小球一个不同的材质颜色
    sphere = bpy.context.active_object
    mat = bpy.data.materials.new(name=f"BallMat_{i}")
    mat.diffuse_color = (i/num_balls, 1 - i/num_balls, 0.5)
    sphere.data.materials.append(mat)
print(f"已创建 {num_balls} 个小球组成的圆环。")

第五部分:学习资源与最佳实践

官方文档 (最重要!)

  • Blender Python API Reference:这是你的终极词典,当你不确定某个属性或函数时,来这里查找,通常可以通过 Google 搜索 "bpy.data.objects" 直接找到对应页面。

探索 bpy 的最佳方法:记录操作

这是学习 bpy 最快、最有效的方法!

  1. 打开 Blender 的 "Scripting" 工作区。
  2. 在文本编辑器中,点击 "Record" (录音) 按钮。
  3. 在 3D 视口中执行一个操作,比如移动一个对象、添加一个修改器、改变材质颜色等。
  4. 点击 "Stop" (停止)。
  5. 你会看到 Python 代码自动生成,精确地记录了你的每一步操作,你可以学习这些代码,然后修改它们来实现更复杂的功能。

社区与教程

  • Blender Artists Forum: blenderartists.org:官方论坛,可以提问和分享。
  • Blender Stack Exchange: blender.stackexchange.com:像知乎一样的问答社区,搜索问题通常能找到答案。
  • YouTube: 搜索 "Blender Python Scripting"、"Blender API Tutorial" 等关键词,有很多优秀的视频教程。

最佳实践

  • 注释你的代码# 这是一行注释,解释代码的目的。
  • 模块化:将复杂的功能拆分成小的、可重用的函数。
  • 版本控制:使用 Git (如 GitHub, GitLab) 来管理你的脚本,避免代码丢失。
  • 从简单开始:先实现一个小的功能,再逐步添加复杂性。
  • 多查文档:养成习惯,遇到不确定就查阅官方 API 文档。

学习 Blender Python 是一个循序渐进的过程,从理解 bpy.databpy.context 开始,通过“记录操作”这个强大的工具来快速学习,然后不断通过实践来加深理解,不要害怕犯错,调试是学习的一部分,祝你在 Blender 自动化和程序化创作的世界里玩得开心!

分享:
扫描分享到社交APP
上一篇
下一篇