工作流程 & 范例

这里有几个驱动器范例和工作流程。

工作流程

变换驱动器

这个例子展示了如何建立一个变换驱动器。首先确保你用的是正交前视图。 Numpad5, Numpad1.

  1. 在物体模式,选择并复制默认立方体。 Shift-D ,将 "Cube.001" 移到一边。
  2. 选中 "Cube.001" ,对 旋转 Y 属性添加单个驱动器。
  3. 打开 曲线编辑器 ,设置模式为 驱动器
  4. 禁用图中绿框标记的 仅显示选中 按钮。
  5. 在通道区域,选择 Y欧拉旋转 属性。
  6. 按下 N 打开属性区块,向下滚动到驱动器面板。
  7. 修改 类型平均化值 ,这将返回所有驱动器变量的平均值。
  8. 修改驱动器变量设置:
    • 类型 -- 变换
    • 物体 -- Cube
    • 变换类型 -- X 位移
    • 变换空间 -- 世界空间
../../_images/animation_drivers_workflow-examples_transform-driver-1.png
../../_images/animation_drivers_workflow-examples_transform-driver-2.png

结束之后,从左向右移动 "Cube"时,"Cube.001" 会绕Y轴旋转。

范例

驱动器表达式

这里是一些使用脚本表达式设置驱动器值的范例。

../../_images/animation_drivers_workflow-examples_object-rotation.png

物体旋转。

环绕一个点

这里对立方体的X位移和Y位移分别添加驱动器。

使用脚本表达式设置物体位置。

X位移表达式
0 + (sin(frame / 8) * 4)
(frame/8) : 表示当前动画帧除以8,降低环绕速度。 (sin( )*4) : 返回 (frame/8)的正弦值,再乘以4,放大环绕半径。 0 + : 用于控制环绕时 X 位移偏移量。
Y位移表达式
0 + (cos(frame / 8) * 4)
(frame/8) : 表示当前动画帧除以8,降低环绕速度。 (cos( )*4) : 返回 (frame/8)的余弦值,再乘以4,放大环绕半径。 0 + : 用于控制环绕时 Y 位移偏移量。

frame 与 bpy.context.scene.frame_current 等价。

驱动器命名空间

内置的驱动器函数和属性是一个列表。可以使用Python控制台显示出来:

>>> bpy.app.driver_namespace['
                              __builtins__']
                              __doc__']
                              __loader__']
                              __name__']
                              __package__']
                              acos']
                              acosh']
                              asin']
                              asinh']
                              atan']
                              atan2']
                              atanh']
                              bpy']
                              ceil']
                              copysign']
                              cos']
                              cosh']
                              ..

下面的脚本用于添加一个函数到驱动器命名空间,接下来可以在表达式中使用 driver_func(frame)

import bpy

def driver_func(val):
    return val * val    # return val squared

# add function to driver_namespace
bpy.app.driver_namespace['driver_func'] = driver_func

形态键驱动器

这是一个形态键驱动器的范例,即对形态键数值添加驱动器。

../../_images/animation_drivers_workflow-examples_shape-key.png

形态键驱动器。

该例子使用骨架的骨骼 "b" 的Z旋转控制形态键数值。骨骼旋转模式设置为XYZ欧拉。

驱动器函数曲线映射如下:

  • 骨骼Z旋转 0.0 (0.0): 形态键数值 0.0
  • 骨骼Z旋转 -2.09 (-120.0): 形态键数值 1.0

这种类型的驱动器还可以使用旋转差值变量类型设置。

更多信息参考 形态键

驱动器和多重相关形态键

下面的屏幕截图展示了结合形态键,骨骼和驱动器,来制作共用基型的多重链状相关形态键。尽管这样没有使用绝对形态键的单一时间计算来的方便,但却可以做出更复杂的形态键关系。

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-shape-base.png

Basis 形态键。

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-shape-1.png

Key1 形态键。

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-shape-2a.png

Key2A 形态键。

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-shape-2b.png

Key2B 形态键。

作为基型的形态键的挤出面完全缩回,Key1的基底完全挤出,Key2A挤出左侧凸起,Key2B挤出右侧凸起。Key2A和2B都和Key1相关(如右下角的形态键面板所见)。

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-key1.png

Key1需要处理来自两个骨骼的数值冲突。

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-key2a.png

Key2A有不同的生成器系数,所以会在骨骼的另外一段位置范围内才被激活。

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-key2b.png

Key2B和Key2A类似,但是被第二根骨骼控制。

Key1的值通过一个包含两个变量的驱动器,与两个骨骼的位置属性绑定。每一个变量使用的都是骨骼的全局Z坐标,然后取最大值决定基底的挤出量。多项式生成器用于使基底的上表面与骨骼对齐。

Key2A的值与 Bone.L 的位置绑定。生成器的参数使得当Key1的值增加到1时,Key2A 才开始从0增长。这样的话,左侧凸起顶部会与 bone.L 一起移动(基本上)。

Key2B的值与 Bone.R 的位置绑定。它的生成参数和Key2A类似,右边的凸起会随着bone.R一起移动(基本上)。

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-retracted.png

当骨骼所有骨骼调低时,Key2B 和 Key2A 不被激活,Key1处于低影响。

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-extended.png

Extended.

由于bone.L 和 bone.R很容易出现位置差异,这意味着Key1的值会导致冲突,有时骨骼无法与对应的凸起对齐。如果Key1的驱动器使用平均值或最小值,而非最大值,来确定形变键的值, bone.L 和 bone.R 的“冲突”则会断然不同。用户可以视动画需求进行选择。