驱动器与表达式

驱动器

驱动器通过函数来控制属性值。 事实上,驱动器由以下部分组成:

  • 驱动器配置,指定0个,1个或多个使用其他属性或物体变换通道的输入值,并使用预定义的数学函数或自定义的Python表达式将其结合在一起。
  • 动画 函数曲线,将驱动配置的输出映射到最终值,以应用到被驱动属性。

例如,物体1的旋转可以被物体2的位置控制。可以说,物体2的位置驱动物体1旋转。 驱动器不仅可以调用大多数属性值,直接映射到其他属性,而且属性也可以作为数学表达式或者Python脚本的一部分,通过函数进一步调整。 驱动器是构建装备的极其强大的工具,通常用于驱动骨骼变换以及形状键,操作约束和影响修改器,通常使用自定义属性作为输入。

驱动器的使用对于制作动画来说非常的有用。

添加驱动器

  1. 右键数据框,选中添加驱动器 这里创建的类型根据自己调整模式来2022-04-15_125952.png
  2. 直接在数据框,输入# + 表达式 这里创建的是默认是_表达式类型_

2022-04-15_130301.png

  1. 复制其他数据框为驱动器,然后选择要添加驱动器的输入框,右键粘贴驱动器 这里创建的默认是_平均值类型_

通过使用输入属性的 复制为新驱动器 上下文菜单选项,然后通过 粘贴驱动器 将结果粘贴到输出属性上,可以快速创建将属性值设置为其他属性值的驱动器。

此方法也可以同在复制其他数据框为路径,然后再要添加的输入框里编辑驱动器,手动输入路径等参数进行驱动 也可以使用编辑器面板中的 粘贴驱动器变量 按钮为现有驱动程序添加新的驱动器变量。

时间帧驱动 #frame

这里默认的使用的是表达式类型的驱动
输入 #A_09 Drivers and Expressions - 图3,表示当前的时间帧*0.25驱动旋转
2022-04-15_131239.png

另一个物体驱动

这里使用的是平均只类型的驱动

  1. 添加新的驱动器
  2. 选择要使用的物体的控制变量的属性等

2022-04-15_132158.png2022-04-15_133259.png
备注:这里注意变换空间的选取。

驱动器类型

驱动器根据控制的方法,分为两大类

  • 内置函数 (平均, 求和, 最小值 and 最大值)驱动属性将获得被引用 驱动器变量 数值的平均值、总和、最低或最高值。如果只有一个驱动器变量,这些函数将产生相同的结果。
  • 自定义 (脚本表达式).利用 驱动器变量 的Python表达式,变量可以来自的物体属性。详见 表达式.

    表达式

    使用表达式对变量进行单独控制计算输出
    例如控制控制物转半圈,驱动物体会转两圈
    2022-04-15_134356.png

    自定义属性

    通过新建自定义属性,还可以自己新建属性来控制驱动器。
  1. 最简单的方法是友卷自定义属性复制为驱动器,那后粘贴到被驱动物体的驱动器,这个时候会自动创建平均值类型的驱动,我们也可以手动的更改为表达式,然后对变量进行控制。比例/pi。

2022-04-15_135428.png

  1. 当然也可以将自定义属性复制为数据路径,然后手动粘贴到上图中的黄色路径位置。

    驱动器编辑器

    我们同时可以右键,打开驱动器编辑面板,这里有更过的参数可以调节。
    这里我们可以使用变量调用系统的场景帧率(注意这里选中单一变量模式),同时使用表达式,调用了常量pi和全局变量frame和物体自身的自定义变量RPM(需要勾选自身)和场景帧率变量进行计算,控制旋转。
    2022-04-15_141508.png

    官方文档对表达式的解释

    表达式

    表达式 一个文本框,可以在其中输入一个任意 Python 表达式,该表达式以名称引用 驱动器变量。 The expression has access to a set of standard constants and math functions from math, blmath and other modules, provided in the _Driver Namespace. For an example of adding a custom function to the namespace, see the driver namespace example. 为了优化性能,最好尽可能使用 简单表达式使用自身 使用 self 变量引用自身数据。用于物体、骨骼,避免创建指向自身属性的变量。 举例: self.location.x 可用于同一对象的Y旋转属性,使对象在移动时旋转。 请注意,可能无法完全跟踪通过 self 访问的属性的依赖项。

    简单表达式

    Blender可以直接使用Python的函数表达方法,显著提高性能,尤其是在多个系统中。要利用此功能,驱动程序的表达式必须且仅使用以下功能: 变量名称 仅使用ASCII字符。 常量 Floating-point and decimal integer. 全局变量 frame 常量 pi, True, False 操作项 +, -, , /, ==, !=, <, <=, >, >=, and, or, not, conditional operator/ ternary if Standard Functions min, max, radians, degrees, abs, fabs, floor, ceil, trunc, round, int, sin, cos, tan, asin, acos, atan, atan2, exp, log, sqrt, pow, fmod *Blender Provided Functions lerp, clamp, smoothstep 即使禁用Python脚本执行,也会计算简单表达式。 当使用此子集外部的表达式时,Blender 将显示”慢速 Python 表达式”警告。但是,只要大多数驱动器使用的是简单的表达式,有选择地使用几个复杂表达式是可行的。