【Blender 开发】 利用 Python 实现简单彩色动画

458 阅读3分钟

今天我们要用 Python 做一些非常基本的彩色动画。我们将添加一个材质到一个对象上,并插入关键帧,这将改变对象的颜色。

以下是这篇文章的最终效果:

Rot.gif

步骤1 - 创建 ico-sphere

删除默认的多维数据集并将文件保存为 colors.blend 。创建一个 ico-sphere 并缩放它至合适大小。

在材质选项卡中,你可以看到目前还没有任何材质,所以我们将在代码中创建一个。

image.png

步骤2 - 创建一个新脚本

脚本工作区(A), 创建一个新的脚本按 New 按钮, 检查栏视图菜单(B)。在侧边栏字体大小设置为 16, 这样代码更可读的(C)。我们还需要时间轴编辑, 所以打开一个底部的文本编辑器(D)。这样做仅需鼠标光标悬停在右下角的文本编辑器(中心大的区域), 直到出现一个 加号。然后按下鼠标左键并拖动你的鼠标,在新打开的编辑器的左上角设置它的类型为 时间轴

image.png

步骤3 - 转到渲染着色

在视图菜单中取消侧边栏,隐藏它(A)。当我们要创建一个材质,为了查看它,在 3D 视图编辑器中选择渲染着色(B)。

image.png

步骤4 - 输入 Python 代码

在文本编辑器中输入以下 Python 代码。它会创建一个材质并将其添加到 ico-sphere 中。然后它将添加关键帧,之后此球体将改变颜色。

完整代码与注释:

import bpy

# 创建一个新材料并命名它为 'colored'.
mat = bpy.data.materials.new(name= 'colored')

# 在变量中保存刚刚创建的 ico sphere
ico = bpy.data.objects['Icosphere']

# 将您刚刚创建的新材质设置为 ico sphere 的激活材质。
ico.active_material = mat

# 让我们定义一下将要使用的颜色。每种颜色都被定义为 4 元组,其中四个值都是 0 到 1 之间的浮点数。这些数字分别代表 R、G、B 和 Alpha。物体是完全不透明的,所以总是设为 1。颜色存储在一个列表中。
colors = [(1, .7, .2, 1), # golden
          (.1, 1, .1, 1), # green
          (.1, .7, 1, 1), # blue
          (.7, 0, 1, 1),  # purple
          (1, 0, 0, 1),   # red
          (0, 0, 0, 1)    # black
          ]

# 让我们创建一个沿时间轴(在你想插入关键帧的位置上)所有帧的列表。因为我们想在时间轴上的这些位置改变颜色,所以在颜色列表中会有和颜色一样多的关键帧。         
frames = [1, 30, 60, 90, 120, 250]

# 现在让我们插入关键帧。我们可以用 for 循环来做。循环将遍历帧和颜色,因此我们需要两个循环变量(f 用于帧,c 用于颜色)。此外,我们必须使用 zip 函数压缩这两个列表。
for f, c in zip(frames, colors):
    # 从颜色列表中设置材质的漫反射颜色的值为当前颜色。
    mat.diffuse_color = c
    
    # 在当前帧插入一个漫反射颜色关键帧。
    mat.keyframe_insert(data_path='diffuse_color', frame=f, index=-1)

步骤5 - 提前检查材质和时间轴

确保大纲中的对象名称和代码中的对象名称匹配(A)。进入材质选项卡(B)。正如你所看到的,还没有任何材质。此外,在时间轴中,还没有关键帧(C)。

image.png

步骤6 - 运行脚本

通过按文本编辑器顶部的按钮来运行脚本(A)。正如你所看到的,脚本创建了一个材质并命名为 colored (B)。

注意:这里还没有创建任何节点

现在你也可以看到脚本在时间轴中插入的所有关键帧(C)。在 3D 视图编辑器中,你可以看到球体在动画结束时的样子(D)。

image.png

步骤7 - 转到第一帧

如果你现在点击时间轴编辑器(A)中的 转到第一帧 按钮,你会看到对象在第一帧(B)中的样子。你也会在材质选项卡(C)中看到它的初始颜色。

image.png

步骤8 - 播放动画

播放动画(A)并观看球体改变颜色(B)。

image.png

(完)