流场的动机
计算机游戏中的多个AI算法会产生相互矛盾的结果。 AI必须解决这些冲突并找到同时解决方案。
流场的定义
- 流场是矢量网格
- 在该流场中捕获对运动的一个影响,例如磁吸引力。
- 当你身处流场中,流场会告诉你此时如何向哪个方向走。
- 流场包含一个三维样本空间,在每个点返回一个向量,表示对感兴趣对象的吸引力或远离要避免的对象的排斥。
流场的两个组成部分:
- 围绕静态对象构建的静态数据集
- 静态字段是时不变的:对于任何给定的输入向量,它将始终返回相同的输出向量。
- 我们可以将它用作函数:我们给它一个表示位置的(x,y)向量,它返回一个表示速度的(x,y)向量。
- 围绕动态对象构建的动态生成的数据集
- 动态场可以随时间变化,以产生给定输入矢量的不同输出矢量。
- 它通常由输入矢量以外的参数控制。
展现流场
- 存储流场:使用网格存储表示流场状态的数据(向量)
- 采样流场:插值数据点之间的值
双线性插值
- 双线性插值将在网格点处定义的两个变量的函数插值到两者之间的连续空间。
- 假设函数的值在网格点Q11 =(x1,y1),Q12,Q21和Q22处定义。我们想要找到P =(x,y)点的值。具体的操作步骤如下:
(1)X方向的线性插值
(2)Y方向的线性插值
(3)对f(x,y)进行期望估计
混合场
加权加法(+)
将所有组件字段考虑在内,并提供对某些字段进行优先级排序的功能。
条件操作(OR)
允许一个字段完全覆盖其他字段。
场乘积(*)
字段中每个点的缩放值是对另一个字段进行采样的结果
例子
使用流场去创建一个平滑路径
避免碰撞
- 动态对象避免
- 非镜像径向排斥场 - 中心有死区
- 镜像径向排斥场 - 避免死区
- 横向排斥
Reynolds’s 肿瘤
- 分离:避免拥挤附近的鱼
- 对齐:转向附近鱼的平均航向
- 凝聚:转向附近成员的平均位置
流场来源
- 可视化和编辑工具可以用来创建流场。
- 从2-D样本转换为3-D样本
- 刷子可以用来创建一个良好的流场。