工作流程 & 范例

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

工作流程

变换驱动器

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

  • 在物体模式,选择并复制默认立方体。 Shift-D ,将 "Cube.001" 移到一边。
  • 选中 "Cube.001" ,对 旋转 Y 属性添加单个驱动器。
  • 打开 曲线编辑器 ,设置模式为 驱动器
  • 禁用图中绿框标记的 仅显示选中 按钮。
  • 在通道区域,选择 Y欧拉旋转 属性。
  • 按下 N 打开属性区块,向下滚动到驱动器面板。
  • 修改 类型平均化值 ,这将返回所有驱动器变量的平均值。
  • 修改驱动器变量设置:
    • 类型 — 变换
    • 物体 — 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控制台显示出来:

  1. >>> bpy.app.driver_namespace['
  2. __builtins__']
  3. __doc__']
  4. __loader__']
  5. __name__']
  6. __package__']
  7. acos']
  8. acosh']
  9. asin']
  10. asinh']
  11. atan']
  12. atan2']
  13. atanh']
  14. bpy']
  15. ceil']
  16. copysign']
  17. cos']
  18. cosh']
  19. ..

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

  1. import bpy
  2.  
  3. def driver_func(val):
  4. return val * val # return val squared
  5.  
  6. # add function to driver_namespace
  7. 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.pngBasis 形态键。../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-shape-1.pngKey1 形态键。
../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-shape-2a.pngKey2A 形态键。../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-shape-2b.pngKey2B 形态键。

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

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-key1.pngKey1需要处理来自两个骨骼的数值冲突。../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-key2a.pngKey2A有不同的生成器系数,所以会在骨骼的另外一段位置范围内才被激活。../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-key2b.pngKey2B和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.pngExtended.

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