三条规则。一个群。
你不是给鸟群做动画。你只是给一只鸟写规则 —— 然后跑许多个副本。
群,是副产品。
1987 年,Craig Reynolds 在 SIGGRAPH 大会上把这个小把戏公开。在 boids 之前, 给一群鸟做动画意味着手工编写每一只鸟的轨迹。Reynolds 的洞见是不要那样做 —— 给一只鸟写规则,然后跑很多个副本。这个方法直接进了好莱坞: 蝙蝠侠归来(1992)里成群的蝙蝠、狮子王(1994)里的角马奔逃、 1998 年奥斯卡科学与工程奖。它可能是整个计算史上被重现最多的基于主体的模型。 而整件事只有三条规则,每一条都在说一只鸟看到其他鸟时要做什么。
实验室 · 选一个模式,再试试关掉某条规则
在场内拖动即可化身捕食者 · 按空格键暂停
模式
三条规则
更多参数 — 感知、飞行、显示
空间与生物
感知
飞行
显示
三条规则究竟在说什么
每只 boid 只能看到自己的邻居 —— 视野半径以内、视场角以内的鸟(鸟的眼睛也不是朝正后方的)。 从这一小群可见的邻居中,三条规则各自提议一个要转向的方向:
- 分离。推开任何靠得太近的邻居。距离越近,力越陡 —— Reynolds 最初用的是 1/d²。范围:小,大约是视野半径的五分之一。
- 对齐。朝邻居的平均朝向转向。范围:中。
- 凝聚。朝邻居的平均位置(即群的局部中心)转向。范围:大。
近距排斥、中距朝向匹配、远距吸引。加权求和。加速度被夹到最大力;速度被夹在一段区间内; 就这些。规则里没有一条写着“保持距离邻居 2 个身长”—— 但你看最近邻距这个数,它会稳定在一个你从没要求过的间距上。这就是涌现。
一套规则,四种格局
同样的三条规则,配上不同的权重和范围,会产生明显不同的集体行为。 每个上面的预设都是一组被反复测量过的参数:
- 群飞。经典设定。极化接近 1.0,间距稳定在几个身长。你心中“鸟群”的样子。
- 蜂群。强凝聚、弱对齐。密集的云团原地打转、不前进 —— 极化掉到 ~0.15,但群保持紧凑。蚊蚋就长这样。
- 环流。转弯半径大(转向力小)加上强凝聚:群体合拢成一个绕空心旋转的圆环 —— 看旋转这个数,不是极化。真实的鱼群和行军蚁就这样。
- 隧道视野。视场角很窄。鸟看不到身侧或身后, 群体伸展成不安分的线条,而不是整齐的团块。
2008 年罗马的椋鸟研究
以上一切都基于度量规则:“我关注距离 R 以内的任何鸟。”但这带来一个问题 —— 如果群变稀,每只鸟看到的邻居就变少,凝聚力就减弱,群就更稀。它应该散架才对。 椋鸟的群飞却从不散架。为什么?
由 Andrea Cavagna 和 Irene Giardina 领导的意大利团队,在 2005 到 2008 年间 在罗马特米尼火车站上空用立体相机拍摄真实的椋鸟群,重建了每只鸟的三维位置,然后问: 每只鸟实际跟踪的是多少只邻居?答案是大约 7 只—— 一个固定的数量,而不是固定的距离。这就是“拓扑”型交互。 在“更多参数”里把“按邻居数量而非距离计数”打开,或直接选椋鸟模式, 群就能在任何疏密下保持聚合。
Boids 后来去了哪里
直接的应用大家都知道 —— 蝙蝠侠归来(1992)里的蝙蝠、 狮子王(1994)里的角马、后来数不清的游戏和电影。 但这个想法走得更远:
- 基于主体的建模。Boids 是开山之作。它证明了集体行为可以从局部规则中涌现 —— Schelling、生命游戏、投票者模型以及一切后续工作都站在这之上。
- 群体机器人。无人机群和仓库机器人用这几条规则的变体, 让整支舰队不需要中央调度就能协调。
- 人群模拟。行人流、恐慌疏散、演唱会人群 —— 不同的权重,同一副骨架。
- 自动驾驶。把每辆车当成一只 boid,加三条规则,再加一条“保持在车道里”的力, 交通流就免费有了。
相关模型
- 🎮 生命游戏与局部多数 —— 另一个经典的 “简单的局部规则 → 惊人的全局行为”示范,只不过是在网格上,而不是在连续空间里。
- 🟦🟧 Schelling 隔离 —— 同一个家族(主体在共享空间上遵循局部规则), 不同的结局:温和的个体偏好居然产出剧烈的全局模式。
- 🏔 NK 适应度地形 —— 一旦你有了一群搜索者, 问题就变成他们在爬哪一张地形。Boids 跑在 NK 之上,就是“搜索即群飞”的故事。