RBF即径向基函数(Radial Basis Function)。 在姿势编辑器中,RBF可根据另一个关节的旋转驱动某个关节的平移、旋转和缩放。
每个RBF解算器都包含了一系列姿势,这些姿势会根据驱动关节的旋转值来描述各个从动关节的位置。 随着驱动关节在动画过程中旋转,RBF解算器会根据解算器中所设的参数,选择各姿势之间的插值百分比,并为各从动关节应用该百分比。
创建解算器
创建解算器的过程很简短。 绝大多数时间将用于优化屏幕上的最终输出结果。
要新建解算器,请点击姿势编辑器RBF选项卡左下角的创建(Create)按钮。 如果此时已有选中的关节,则右侧的RBF驱动关节列表中会自动添加这些关节。
新建的解算器会自动进入编辑模式。 同一时间只能有一个解算器处于编辑模式。 解算器名称左侧的铅笔图标会标识出当前正在编辑的解算器。
编辑解算器
按下RBF选项卡左下角的编辑选中项(Edit Selected)按钮,即可编辑解算器。 如果解算器已处于编辑模式,则该按钮会显示完成编辑(Finish Editing)。
在编辑模式下,首先请确保为解算器设置正确的RBF驱动关节和从动关节,因为当存在多个姿势时,编辑这些关节会比较棘手。
要添加驱动关节/从动关节,在Maya视口中选择关节并分别点击添加驱动关节/从动关节(Add Driver/Driven)按钮即可。 移除关节的操作相同,从列表中选择关节并点击移除驱动关节/从动关节(Remove Driver/Driven)即可。
设置正确输入后就可以编辑姿势了。 大部分工作都将在这里完成。 要访问姿势操作,请切换到姿势(Poses)选项卡。
双击任何列表中的元素即可选择Maya场景中的对应内容。
| 项目 | 操作 |
|---|---|
解算器名称(Solver Name) | 选择UERBFSolver节点。 |
姿势名称(Pose Name) | 将解算器的所有驱动关节/从动关节移动到该姿势。 |
驱动关节(Driver Joint) | 选择驱动关节。 |
从动关节(Driven Joint) | 选择从动关节。 |
通用的工作流程如下:
将驱动关节旋转到新姿势所需的位置。
平移/旋转/缩放从动关节以进行补偿。
创建/更新姿势。
如果姿势看起来不太正确,请尝试移动关节并更新姿势。
一定要点击更新(Update)按钮才能保存编辑内容。禁用编辑模式将丢失编辑内容。
RBF参数
半径
半径表示驱动变换与目标姿势必须保持的距离,在该距离内,目标姿势才能处于激活状态。
自动半径
启用自动半径即可计算默认姿势与各目标姿势之间的平均距离。
最小半径值和最大半径值是调试值,用于显示解算器在使用什么计算自动半径值。 自动半径值也属于调试特性,用于显示结果。
最小半径是通过计算默认姿势与最近姿势之间的绝对距离得出的。 最大半径是最近姿势与最远姿势之间的绝对距离之和。
规格化方法
当你旋转从动变换时,解算器会计算一个权重,以显示该姿势已激活的比例。 该权重值为0到1之间。 在某些情况下,所有姿势的权重总和可能超过1,而在其他情况下则小于1。 这时就需要进行规格化。
无论是否选择规格化,其结果都始终被规格化为大于1的值。 建议始终进行规格化。 DNA不支持无规格化。如果使用此设置导出解算器,则会生成错误。
权重阈值
激活姿势所需的最小规格化距离。
距离方法
| 名称 | 说明 |
|---|---|
欧几里德(Euclidean) | 标准的n维距离度量。 |
四元数(Quaternion) | 将输入视为四元数。 |
摇摆角度(SwingAngle) | 将输入视为四元数,并计算旋转后的扭转轴方向之间的距离。 仅使用Y + Z轴的旋转值(即任何未被设为扭转轴的值)。 |
扭转角度(TwistAngle) | 将输入视为四元数,并计算绕扭转轴方向的旋转之间的距离。 仅使用由扭转轴定义的轴的旋转值。 |
函数类型
在不同姿势间插值所用的曲线类型。
扭转轴
计算摇摆角度或扭转角度距离方法时使用的轴。
输入模式
DNA只支持"旋转(Rotation)"。 若设为"平移(Translation)"则会导致导出错误。
镜像
可以通过两种方式实现解算器/姿势的镜像:一是简单的搜索并替换,二是使用带有命名组的正则表达式。
下表展示了使用正则表达式为MetaHuman骨架正确镜像解算器、姿势和关节名称的示例。
| 名称 | 搜索 | 替换 |
|---|---|---|
解算器(Solver) | (?P<prefix>.+)?(?P<side>_l_)(?P<suffix>.+)? | {prefix}_r_{suffix} |
关节(Joints) | (?P<prefix>.+)?(?P<side>_l) | {prefix}_r |
姿势(Poses) | (?P<prefix>.+)?(?P<side>_l_)(?P<suffix>.+)? | {prefix}_r_{suffix} |