两足动物群组是特性复杂的有腿动物运动所必需的群组模拟的特例。Biped 运动显示了复杂的动态处理和准确的 IK 脚部约束。例如,通过代理运动参数计算得到的光滑曲线轨迹适于鸟类、鱼类、昆虫和蛇。这些参数不够丰富,无法用于制作 Biped 微型结构的动画。因此,群组的几项功能主要用于满足 Biped 的特殊要求。
为了生成必需的微妙差异级别,动画运动剪辑可以成为 Biped 整体运动的基础。换而言之,在制作 Biped/群组的动画期间,代理不会对 Biped 的运动产生任何影响。这些代理只会使用“运动流”图形中的剪辑设置所要实现的目标。使用这种所谓的运动合成方法,动画程序可以精确地控制运动中的各个细节。具体方法是,使用手调动画或运动捕获,生成描述群组中成员行为方式的系列剪辑。
例如,如果希望设置这样的动画:一群沿城市街道跑动的马拉松运动员,则需要下列各种动作的运动剪辑:行走、跑动、慢跑、休息、喝水以及喝彩等。实际上,您期望在马拉松比赛中看到的各种运动都可以用剪辑来表示。但是,运动并非仅仅是收集的剪辑片断。另外,必须考虑运动的排序方式。哪些运动变换可能来自指定的运动剪辑呢?
为了更好地了解这个过程,请研究这个主题,然后按照步骤在群组模拟中使用 Biped 执行操作。
Biped 的运动流功能可以提供一种机制,用于定义各个运动如何共同适于流体动画。事实上,运动流网络说明了其它运动之后可以追随的运动。一旦定义了运动流网络,网络中不同路径之后可以跟各种动画动作。在“Biped”中,网络中的路径称作运动流脚本。
例如,下面显示的是一个运动流网络。

这是一个相对简单的运动网络,因为各个角色只能在 90 度角的左侧或右侧(walk_L90 和 walk_R90)开始、停止和转动,然后发生倒转 (walk_180)。但是,要想获得更加自然的群组交互,建议对运动流网络进行扩展,使其包括更加短的微调变量,如以 45 度角的增量旋转、向不同方向移动的同时面对相同的方向、闲逛运动以及以不同速度移动。“Biped 运动库”拥有剪辑的综合列表,可供您测试时使用。
切实可行的运动流图形包括微调的变换。检查运动流变换的最佳方法是,采用构建图形的方式构建测试脚本:向图形添加剪辑,然后添加所需的变换,并优化变换。优化变换与起始点的作用一样令人满意。通常,优化变换会生成最光滑的变换。其次,制作使用变换的新脚本,并使用该脚本调整运动流,直到双脚不会滑动为止。
通过“共享运动流网络”功能,很多 Biped 可以使用单个运动流网络。因此,无需消耗计算机的内存,即可扩展运动流网络。
您可以为 Biped 提供行为目标,方法是使其与群组系统中的代理关联,然后为该代理指定行为。
例如,在上面所示的示例中,每个 Biped 代理的行为目标是:
在模拟 Biped 群组过程中,character studio 尝试计算群组中每个 Biped 成员的最佳运动流脚本,该脚本可以满足与其关联的代理的行为目标。换而言之:
因此,在该示例中,模拟将始终会选择网络中最适合的走动剪辑。该剪辑可以将 Biped 的代理定向到球体。随着群组求解操作对脚本的计算,便应运而生了每个 Biped 的脚本。这就好像是一个实时的“游戏引擎”。在其中,群组解算器为指定 Biped 选择的下一个最佳剪辑会受到该 Biped 的活动剪辑的限制。
因为群组中的 Biped 之前始终是运动流脚本,所以对于各种 Biped,回避行为的工作方式不尽相同。与常见代理不同的是,Biped 代理只能沿着运动流脚本路径移动,所以,如果发生冲突,则 character studio 会回溯到当前脚本的上一个剪辑中,并查找另一个路径。如果存在复杂的群组交互,则计算时可能需要花费一些时间,因为一个回溯可能不够。此后,计算将会在指定的回溯剪辑中搜索所有的路径。如果失败,将会回溯到上一个剪辑,依此类推,直到找到合适的解决方法为止。
在本示例中,如果当前的 Biped 脚本是:
walk_start walk walk_L90
且在 walk_L90 剪辑中遇到碰撞,则 Biped 将会回溯到 walk 剪辑的末尾处,然后尝试代替失败的左旋运动以试验不同的剪辑。如果失败,将会试验下一个最佳的选择,依此类推。
为了便于通过计算机管理回溯,一次只能计算一个 Biped 的群组成员,其顺序同“优先级”卷展栏。为此,可以使用添加到动画中的每个后续 Biped,对群组的交互进行累积。换而言之,每个成员都要等待轮到自己计算完整动画。这样做可以回避已经在其之前计算的 Biped。接着,具有最低优先级的 Biped 一般会遇到最多的碰撞,因为它们必须回避具有较高优先级的所有 Biped。
要创建 Biped 群组模拟,需要若干个 Biped。因为对 Biped 应用剪辑时,群组模拟包含每个 Biped 的腿部长度,所以,如果 Biped 的大小从一开始就是正确的,则模拟将会更加精确。
一个简单的工作流程应该是:
通过这种设置,可以轻松地将角色合并到群组场景中。合并角色时,模型自身将会隐藏,进而会提高系统的性能。
Biped 群组模拟所使用的剪辑可以从 3ds Max 附带的示例中加载、从运动捕获文件中导入或者从头创建。
创建 Biped 群组模拟时,各个剪辑之间变换的完整性在运动流网络中起着非常重要的作用。为单个 Biped 创建变换时,在创建完运动流脚本之后纠正各个变换并非是件难事。有了群组,完成模拟之后,必须为每个 Biped 执行的纠正转换是极其费时。对模拟进行求解之前,确保变换正确无误是更加切实可行的方法。
一种简化此过程的方法是设置所有运动,这样每个运动都将具有相同帧数的理想过渡,如 10 或 15 帧。然后,可以优化此长度的过渡,从而使所有或大多数过渡的效果达到完美。
要检查变换,可以使用图形中的几个变换为一个 Biped 创建简单的脚本。分别检查运动和工作的变换,直到它们正确为止。使用这种方法,可能无法捕捉到所有的错误变换,但可以捕捉到大部分错误变换。“错误”变换可能是应该为走动但是双脚跳跃或单脚跳跃的变换,或是变换过程中发生的其它意外更改。请参见自定义变换。
在前几次对 Biped 群组进行求解之后,请重新检查错误的变换,以便了解是否在首次检查时有所遗漏。经过几次模拟之后,您很有可能找到所有或近乎全部的错误变换。
经设计,群组系统的某些功能不能用于 Biped 的群组。如果将 Biped 与模拟结合使用,这些行为和参数不会对群组的运动产生任何影响。
下面一系列过程说明了执行下列操作的基本步骤:创建和保存运动流图形,为代理指定几个 Biped,然后在 Biped 之间共享运动流图形,使 character studio 可以根据指定给其代理的行为,为每个 Biped 自动创建单独的运动流脚本。
第一步是创建相应的运动流图形,然后将其保存到磁盘。
要创建共享的运动流,请执行下列操作:
此时,将会显示“打开”对话框。使用该对话框,可以从相同目录中选择任何数目的 BIP 文件,以便同时将其添加到运动流图形中。使用单击+Shift+单击(单击,然后使用 Shift+单击)可以选择几个连续的文件,而使用 Ctrl+单击可以选择非连续的文件。
此时,文件便作为剪辑添加到图形中。每个剪辑会自动命名在从其派生剪辑的文件之后。
然后,添加剪辑之间的变换,使 character studio 了解动作之间的因果关系。为了更好地进行控制,可以通过手动方式完成。但在进行初始测试时,可以让 character studio 自动添加和优化变换,以节省时间。
该图形此时会显示每个剪辑的左右指向箭头,以及从每个剪辑指向图形的箭头。如若需要,删除明显不属于的变换,如从停止和起跑剪辑到自身的变换。
或者,可以使用
(创建过渡)来设置自定义图形。
对模拟求解时,群组会根据此图形为 Biped 自动生成运动流脚本。如果图形包含多个剪辑,在这种情况下,它会从指定为随机开始剪辑的一个或多个剪辑中选择脚本的开始剪辑。
如果要在继续操作前检查变换的完整性,请立即执行此操作。请参见自定义变换。
这样将指示 character studio 以此剪辑为起点启动脚本,并使用默认概率 100% 作为选择该剪辑的概率。
如果要让各种 Biped 以不同剪辑开始,请在单击时按住 Ctrl 键,然后选择多个随机开始剪辑。如果对所有剪辑都使用默认的“随机开始概率”设置 100,则表示 character studio 将会为每个 Biped 的脚本随机选择这些剪辑来作为开始剪辑。
要更改以特定剪辑开始的概率,右键单击剪辑,然后修改其“随机开始概率”设置。例如说要让每个 Biped 的脚本以下面三个剪辑之一开始:剪辑 A、B 和 C。剪辑 A 和剪辑 B 或 C 的选择频率一样,都是两次。在这种情况下,使用“随机开始剪辑”工具时,首先单击剪辑 A,然后使用 Ctrl+单击对剪辑 B 和 C 执行操作。其次,依次右键单击每个剪辑,将“随机开始概率”60 指定给剪辑 A,而将 30 指定给剪辑 B 和 C。
在群组模拟中使用 Biped 的第二步是创建模拟。
要设置群组模拟,请执行下列操作:
Biped 组设置将每个代理与不同的 Biped 建立关联。 必须选择 Biped 的重心 (COM) 对象(通常命名为 Bip0#),即将鼠标的光标放置在活动视口中 COM 之上时,它会变成十字准线。
要应用共享的运动流,请执行下列操作:
其次,使用“共享运动流”功能,将保存的运动流图形应用于 Biped。
此时,将会创建新的共享运动流,并为其指定默认的名称。您可以根据需要更改名称。
再次,加载运动流文件。
“加载 .mfe”按钮,并使用“打开”对话框来加载运动流文件。通常,此文件是以前在过程中保存的文件。 接着,指定要共享此运动流的 Biped。
为方便起见,“选择”对话框只会显示场景中 Biped 的重心对象。
单击“选择”按钮之后,Biped 会显示在该对话框中。该对话框位于“Biped 共享此运动流”下面的列表中。
在“共享运动流”对话框中,必须执行下列多项操作:必须为所有共享运动流的 Biped 激活“运动流”模式。此时,可以使用该对话框中的特殊按钮执行这一步骤中的操作。
此时,便为所有共享运动流的 Biped 激活“运动流”模式。
要偏移代理并测试模拟,请执行下列操作:
代理控制的 Biped 动画可以运动流脚本的第一个剪辑(如果存在)或随机运动编辑开始。但是,将运动流文件加载到“共享运动流”对话框中时,将会忽略文件中所有的脚本。因此,与代理关联的 Biped(使用未求解的群组模拟中的运动流)当前没有脚本,进而必须说明这些 Biped 使用的是在运动流中设置的随机开始剪辑。通过代理,可以完成上述操作。
“Biped”组为所有代理指定“随机开始剪辑”。 求解模拟。
此时,群组可以对模拟进行求解。
要微调模拟,请执行下列操作:
需要调整的机率很大。所以,可以采用下面很多不同的方法解决问题:更改行为和/或运动流设置,更改代理参数等。
如果发现 Biped 碰撞和互相贯穿,可以利用群组的特殊“优先级”和“回溯”功能。事实上,强烈建议您对大多数群组/ Biped 模拟同时使用这两个选项。
“Biped”组中,启用“仅 Biped/代理”,然后启用“使用优先级”,然后启用“回溯”。如果以前已经求解过,则最好也打开“在求解之前删除关键点”。 此时,如果对模拟进行求解,群组一次只能对一个 Biped/代理进行求解,所以将会从优先级最低的 Biped/代理开始。对每个后续的 Biped/代理求解之后,将会查找碰撞。如果发生碰撞,则会将解决方法备份到上一个剪辑的结尾处。此后,前面的剪辑会根据需要尝试运动流图形中的不同路径。使用这种方法可能会花费较长时间,这就是为什么“回溯”在默认情况下处于关闭状态的原因之所在。但是,这种方法通常是解决 Biped 碰撞问题的理想方法。