局部交互

三条规则。一个群。

你不是给鸟群做动画。你只是给一只鸟写规则 —— 然后跑许多个副本。
群,是副产品。

1987 年,Craig Reynolds 在 SIGGRAPH 大会上把这个小把戏公开。在 boids 之前, 给一群鸟做动画意味着手工编写每一只鸟的轨迹。Reynolds 的洞见是不要那样做 —— 给一只鸟写规则,然后跑很多个副本。这个方法直接进了好莱坞: 蝙蝠侠归来(1992)里成群的蝙蝠、狮子王(1994)里的角马奔逃、 1998 年奥斯卡科学与工程奖。它可能是整个计算史上被重现最多的基于主体的模型。 而整件事只有三条规则,每一条都在说一只鸟看到其他鸟时要做什么。

实验室 · 选一个模式,再试试关掉某条规则

在场内拖动即可化身捕食者 · 按空格键暂停

分离 推开靠得太近的邻居 1.00
对齐 与邻居的朝向保持一致 0.25
凝聚 朝邻居的中心靠拢 0.030
更多参数 — 感知、飞行、显示

空间与生物

感知

50
10
300°

飞行

260
3.0
0.60

显示

极化度
0.00
0 混乱 · 1 完全同向
旋转度
0.00
环流有多强
最近邻距
0.0
以身长为单位的平均间距
当前状态
初始化
0 只 · 0 fps
试试把“分离”关掉。点击“无分离”模式,或取消勾选上面的“分离”复选框。 一两秒之内,整个群就塌缩成了一个点 —— 方向完全一致,间距为零,毫无物理感。 这就是对齐和凝聚各自为战的结果。再把分离打开,看每只鸟如何重新夺回自己的空间。 一条规则撑起了整个幻觉。

三条规则究竟在说什么

每只 boid 只能看到自己的邻居 —— 视野半径以内、视场角以内的鸟(鸟的眼睛也不是朝正后方的)。 从这一小群可见的邻居中,三条规则各自提议一个要转向的方向:

近距排斥、中距朝向匹配、远距吸引。加权求和。加速度被夹到最大力;速度被夹在一段区间内; 就这些。规则里没有一条写着“保持距离邻居 2 个身长”—— 但你看最近邻距这个数,它会稳定在一个你从没要求过的间距上。这就是涌现。

裁剪为什么重要。把力的裁剪去掉,鸟会瞬间跳到理想速度 —— 看上去像粒子在弹跳。把速度的裁剪去掉,最快的那只会跑出群。正是这两道裁剪, 把模拟从“物理玩具”推到了“看起来像一只飞行动物”。

一套规则,四种格局

同样的三条规则,配上不同的权重和范围,会产生明显不同的集体行为。 每个上面的预设都是一组被反复测量过的参数:

2008 年罗马的椋鸟研究

以上一切都基于度量规则:“我关注距离 R 以内的任何鸟。”但这带来一个问题 —— 如果群变稀,每只鸟看到的邻居就变少,凝聚力就减弱,群就更稀。它应该散架才对。 椋鸟的群飞却从不散架。为什么?

由 Andrea Cavagna 和 Irene Giardina 领导的意大利团队,在 2005 到 2008 年间 在罗马特米尼火车站上空用立体相机拍摄真实的椋鸟群,重建了每只鸟的三维位置,然后问: 每只鸟实际跟踪的是多少只邻居?答案是大约 7 只—— 一个固定的数量,而不是固定的距离。这就是“拓扑”型交互。 在“更多参数”里把“按邻居数量而非距离计数”打开,或直接选椋鸟模式, 群就能在任何疏密下保持聚合。

试试椋鸟模式,再把“鸟数”拉到 60。如果用度量规则, 稀疏的群早就散了;用拓扑规则,它仍然紧紧抱在一起。感知规则上这一点小小的改动 —— 一个生物学事实 —— 把模型从“没人设计过的非物理行为”里救了回来。

Boids 后来去了哪里

直接的应用大家都知道 —— 蝙蝠侠归来(1992)里的蝙蝠、 狮子王(1994)里的角马、后来数不清的游戏和电影。 但这个想法走得更远:

相关模型

← 生命游戏与局部多数 所有模型 →