群组行为的一个重要组成部分就是回避障碍物。可将障碍物看作阻止群组成员前进的任何事物。障碍物的示例有墙、电线杆和栅栏以及其他群组成员。遇到这类物体可导致回避行为,这种行为由任意组合的速度减慢、转向和停止行为组成。
在 character studio 中有多种实现回避的方式,包括:
- 回避行为是其中一种最常用的行为。使用此行为可导致群组成员回避其他群组成员,或场景中的球形物。方法是在回避的物体周围创建球形回避体积,所以这种方法不适合不规则物体。
回避行为与群组中的任何其他行为不同。在所有其他行为在代理上施加了它们的力之后,回避行为再发挥作用,它为了回避障碍物,能让代理转向、减慢速度甚至停止代理。
- 使用墙排斥行为可使群组成员回避宽大、扁平的物体(如墙和栅栏)。可以设置排除作用的最大距离,并描述在代理靠近墙时墙的斥力增大的速度。
与回避行为不同,回避行为可以停止代理或减慢代理速度,墙排斥行为只对代理施加力,目的是让它绕过墙。它不保证能够回避墙。您必须使用在“指定和组合”对话框中使用它的距离和衰减参数,以及权重来控制力的强度。
- 使用排斥行为可使群组成员绕过物体。它的作用方式与墙排斥行为非常相似,只不过它使用的是球形体积而不是平面。可以设置排除作用的最大距离,并描述在代理靠近障碍物时斥力增大的速度。
排除对代理施加力让它绕过障碍物。它不保证能够回避障碍物。您必须在“行为指定和组合”对话框中使用力的距离和衰减参数,以及权重来控制它的强度。作为一种回避非陆地生物(如鱼和鸟)的简单技巧,可以使用排斥行为,而不是回避行为。
- 使用向量场。这是一种特殊类型的空间扭曲,群组成员可以使用它来绕过不规则物体,如弯曲、凹陷的表面。可以将向量场空间扭曲和回避行为配合使用,让代理在靠近复杂物体时减慢速度,之后绕过该物体。这保证代理不穿过障碍物表面。
还可以将向量场空间扭曲和空间扭曲行为配合使用。这只是向代理施加了一个模仿对象轮廓的力。它不保证代理不会穿过障碍物表面。可以将向量场与空间扭曲行为和回避行为一起使用,以组合这几种行为的效果。
过程
要使用回避行为,请执行以下操作:
- 向群组对象添加回避行为。
- 在“避免行为”卷展栏中,使用“无”按钮或 (多个选择)来指定要避免的一个或多个目标对象。
提示要使整个代理组合的代理之间能够彼此回避,请选择组合中的所有代理。群组系统使每个代理都回避彼此。
- 打开“显示硬半径”可查看视口中的半径回避区域。将代理的硬半径到调整适合的大小。
- 调整“制动压力”以决定代理在遇到回避物时是否减慢速度。
- 调整“预处理”参数以决定每个代理将预处理多少帧以确定回避其他物体的最佳方式。
- 使用行为指定向代理或组合指定行为。
要使用墙排斥行为,请执行以下操作:
- 在 “创建”面板上,单击 (辅助对象),然后单击“栅格”。在场景中创建栅格。
提示为获得最佳效果,请勿使用“镜像”复制行为要使用的栅格。请在按 Shift 键时单击“克隆”进行复制。
- 移动和 旋转栅格以确定其位置。
提示墙排斥行为以在代理的局部 Z 轴方向上让代理远离该栅格。在仍选中该栅格的情况下,使用局部坐标系查看视口中 Z 轴的方向;该轴箭头所指方向是 Z 轴的正向。检查 Z
轴方向将加速设置行为过程。
- 选择群组对象,并添加墙排斥行为。
- 在“墙排斥行为”卷展栏中,单击“无”,并选取该栅格。
- 选择“正轴”可使代理受栅格 Z 轴一侧的排除。还可以选择“负轴”使代理受到栅格 Z 轴相反一侧的排除,或选择“双轴”使代理受到栅格 Z 轴两侧的排除。
- 如果想让代理在栅格前方指定区域内才受到栅格的吸引(而不是场景的任何位置上都被吸引),请打开“使用距离”。使用“内部距离”和“外部距离”参数可以设置代理将受栅格吸引的区域。打开“显示距离”可在视口中查看该距离。
- 使用行为指定向代理或组合指定行为。
要使用排斥行为,请执行以下操作:
- 向群组对象添加排斥行为。
- 在“排斥行为”卷展栏中,使用“无”按钮或 (多个选择)来指定要排斥代理的一个对象或多个对象。
- 根据需要更改默认设置。
- 使用行为指定向代理或组合指定行为。
要添加向量场空间扭曲,请执行以下操作:
添加向量场空间扭曲对象的效果和添加“长方体”基本几何体的效果相同。
- 在“对象类型”卷展栏上,单击“向量场”。
- 在视口中拖动以设置初始尺寸。
- 如果使用“立方体”创建方法,这会同时设置全部三个尺寸。
- 如果使用“长方体”创建方法,松开鼠标按钮,然后垂直移动鼠标设置高度。
- 单击以创建空间扭曲。
要对代理使用向量场空间扭曲,请执行以下操作:
此步骤介绍在群组模拟中对代理使用向量场空间扭曲的常规准则。
- 创建充当障碍物的对象。此对象必须是可编辑网格或基本几何体;它可以有修改器。
- 添加向量场空间扭曲。
- 设置空间扭曲晶格的位置和比例,以便它可以将障碍物围起来。
晶格应比障碍物大很多。障碍物应基本位于晶格中心。
- 在“晶格参数”卷展栏中,增大“长度分段/宽度分段/高度分段”设置,以便晶格分段以合理的间隔与障碍物相交。
要确定障碍物合适的分段设置,请先检查障碍物的复杂程度。如果障碍物有许多细节,同时您希望这些细节反映在向量场中,那么需要一个相对较高的晶格分辨率。
- 单击“障碍参数”卷展栏 “计算向量”组 “向量场对象”按钮(最初的标签为“无”),然后在视口中单击要在群组模拟中充当障碍的对象。
此操作指定了障碍物。范围体积栅格以橄榄色的线框出现在对象的表面。
- 增大“障碍参数”卷展栏 “计算向量”组 “范围”设置。
在增大此设置后,将会看到范围体积栅格扩大。该范围体积应将群组成员需要开始转向以回避障碍物的空间包围起来。
- 禁用“显示”组 “显示晶格”和“显示范围”,以便向量场在生成时更容易看见。
- 启用“显示组”“显示向量场”。
- 在“计算向量”组中,单击“计算”按钮。这将生成向量场。
提示若要使向量线更明显,请增大“显示组”
“向量缩放”设置。
向量显示为障碍物周围的蓝色线条。为范围体积栅格中的每个晶格交集计算一个向量。每个向量都与最接近晶格点的对象表面那点的对象法线匹配。
与障碍物的距离越远,向量力越小,这从朝向栅格周边的向量线逐渐变短就可以看出来。
- 添加群组和代理辅助对象。
- 选择群组对象并打开“修改”面板。
- 在“设置”卷展栏 “行为”组中,单击“新建”。
- 在显示的“选择行为类型”对话框中,选择“空间扭曲行为”,然后单击“确定”。
- 在出现的空间扭曲行为卷展栏中,单击相应按钮(最初的标签为“无”),然后在视口中,单击“向量场”空间扭曲。
提示使用“按名称选择”来选择空间扭曲可能更容易些。
- 在“设置”卷展栏中,单击“行为指定”按钮,然后使用“行为指定和组合”对话框将代理指定给该空间扭曲行为。
- 向模拟添加任何其它适合的对象或行为。
- 选择群组对象,然后通过单击“解算”卷展栏 “解算”按钮来解算模拟。
- 通过调整晶格参数和障碍参数,微调与向量场空间扭曲关联的行为。
- 在每次调整后,继续计算向量场,然后求解模拟。在某些情况下,您可能需要生成向量场参数的动画效果,以保留该字段中的对象。