在 bpy
模块中,bpy.data
是一个非常重要的数据块,包含了许多 Blender 文件的数据,在 Python 脚本中使用这些数据可以进行各种操作。本文档将会列出 bpy.data
中一些较为常用的数据类型,并展示它们的用法及属性。
bpy.data
中保存了所有的动作数据,可以通过 action
访问到。每个动作包含多个动作帧,其中一个动作帧对应着物体在时间轴上的某个位置。
可以通过 bpy.data.actions
获取所有的动作列表。如果只需要获取指定动作的话,可以使用 bpy.data.actions.get(name)
,其中 name
是动作名称。
# 获取名称为 Action 的动作
action = bpy.data.actions.get('Action')
使用 bpy.data.actions.new(name)
可以创建一个新的动作,其中 name
是动作名称。
# 创建一个名为 New Action 的动作
new_action = bpy.data.actions.new('New Action')
可以通过 action.fcurves
访问动作帧列表。
# 遍历所有的动作帧
for fcurve in action.fcurves:
# ...
可以通过 fcurve.keyframe_points
访问动作帧的数据。例如,可以使用以下代码设置第 0 帧的前进量为 1。
# 获取前进量动作帧
fcurve = action.fcurves.find('location', index=0)
# 设置第 0 帧的前进量为 1
fcurve.keyframe_points[0].co[1] = 1
bpy.data.materials
中保存了所有的材质数据。每个材质包含了在场景中渲染和显示的相关数据。
可以通过 bpy.data.materials
获取所有的材质列表。如果只需要获取指定材质的话,可以使用 bpy.data.materials.get(name)
,其中 name
是材质名称。
# 获取名称为 Material 的材质
material = bpy.data.materials.get('Material')
使用 bpy.data.materials.new(name)
可以创建一个新的材质,其中 name
是材质名称。
# 创建一个名为 New Material 的材质
new_material = bpy.data.materials.new('New Material')
可以使用以下代码获取材质的漫反射颜色以及透明度,并修改透明度为 0.5。
# 获取材质
material = bpy.data.materials.get('Material')
# 获取漫反射颜色
diffuse_color = material.diffuse_color
# 获取透明度
alpha = material.alpha
# 修改透明度为 0.5
material.alpha = 0.5
bpy.data.meshes
中保存了所有的网格数据。每个网格包含了在场景中显示物体的详细几何数据。
可以通过 bpy.data.meshes
获取所有的网格列表。如果只需要获取指定网格的话,可以使用 bpy.data.meshes.get(name)
,其中 name
是网格名称。
# 获取名称为 Cube 的网格
mesh = bpy.data.meshes.get('Cube')
使用 bpy.data.meshes.new(name)
可以创建一个新的网格,其中 name
是网格名称。
# 创建一个名为 New Mesh 的网格
new_mesh = bpy.data.meshes.new('New Mesh')
可以使用以下代码获取网格的顶点坐标,并修改第 0 个顶点的 Z 坐标为 1。
# 获取网格
mesh = bpy.data.meshes.get('Cube')
# 获取第 0 个顶点的坐标
vertex = mesh.vertices[0]
# 修改 Z 坐标为 1
vertex.co.z = 1
bpy.data.objects
中保存了所有的物体数据。每个物体包含了在场景中显示物体的详细数据,包括位置、旋转、缩放等。
可以通过 bpy.data.objects
获取所有的物体列表。如果只需要获取指定物体的话,可以使用 bpy.data.objects.get(name)
,其中 name
是物体名称。
# 获取名称为 Cube 的物体
obj = bpy.data.objects.get('Cube')
使用 bpy.data.objects.new(name, mesh)
可以创建一个新的物体,其中 name
是物体名称,mesh
是关联的网格数据。
# 获取 Cube 网格数据
mesh = bpy.data.meshes.get('Cube')
# 创建一个名为 New Object 的物体
new_obj = bpy.data.objects.new('New Object', mesh)
可以使用以下代码获取物体的位置和旋转,并修改位置为 (1, 2, 3)
,旋转为 (0, 0, 45)
。
# 获取物体
obj = bpy.data.objects.get('Cube')
# 获取位置和旋转
location = obj.location
rotation_euler = obj.rotation_euler
# 修改位置和旋转
obj.location = (1, 2, 3)
obj.rotation_euler = (0, 0, 45)
bpy.data.scenes
中保存了所有的场景数据。每个场景包含了在场景中显示的物体、光源、相机等信息。
可以通过 bpy.data.scenes
获取所有的场景列表。如果只需要获取当前场景的话,可以使用 bpy.context.scene
。
# 获取当前场景
scene = bpy.context.scene
使用 bpy.data.scenes.new(name)
可以创建一个新的场景,其中 name
是场景名称。
# 创建一个名为 New Scene 的场景
new_scene = bpy.data.scenes.new('New Scene')
可以使用以下代码修改场景渲染分辨率。
# 获取当前场景
scene = bpy.context.scene
# 修改渲染分辨率为 800x600
scene.render.resolution_x = 800
scene.render.resolution_y = 600
bpy.data.textures
中包含了所有的纹理数据。每个纹理可以用于修改物体或材质的颜色或亮度等值。
可以通过 bpy.data.textures
获取所有的纹理列表。如果只需要获取指定纹理的话,可以使用 bpy.data.textures.get(name)
,其中 name
是纹理名称。
# 获取名称为 Texture 的纹理
texture = bpy.data.textures.get('Texture')
使用 bpy.data.textures.new(name, type)
可以创建一个新的纹理,其中 name
是纹理名称,type
是纹理类型。
# 创建一个名为 New Texture 的纹理
new_texture = bpy.data.textures.new('New Texture', 'IMAGE')
可以使用以下代码将纹理映射为物体的法向量贴图。
# 获取物体
obj = bpy.data.objects.get('Cube')
# 获取材质
material = obj.data.materials[0]
# 获取纹理
texture = bpy.data.textures.get('Texture')
# 设置纹理类型为法向量
texture.type = 'NORMAL'
# 映射纹理到材质
material.texture_slots.add()
material.texture_slots[0].texture = texture
在 bpy.data
中还包含了其他很多数据类型,这里只列出了一些常用的数据类型及其用法。更多信息可参考官方文档。
官方文档:https://docs.blender.org/api/current/bpy.data.html