리더도 없는 새 떼는 어떻게 한 몸처럼 날까?
맑은 낮 하늘에서 찌르레기 수천 마리가 거대한 한 덩어리처럼 휘어지고, 갈라졌다가, 다시 모입니다. 방향을 정해 주는 대장 새가 있을 것 같지요. 그런데 이 모델의 새들은 가장 가까운 이웃 몇 마리만 보고 세 가지 규칙만 따릅니다. 실제 찌르레기도 거리와 상관없이 가장 가까운 6~7마리쯤을 본다고 보고한 현장 연구가 있어요. 정말 이것만으로 한 몸처럼 날 수 있을까요? 규칙을 하나씩 꺼 보고, 매도 보내 보세요.
모델은 이렇게 움직입니다
- 새 1,500마리(휴대폰에서는 처음부터 700마리)가 납작한 공 모양의 하늘 안을 납니다. 새는 멈추지 않고 거의 같은 빠르기로 날며, 한 걸음에 돌 수 있는 각도가 정해져 있습니다. 처음에는 대체로 한쪽을 향하지만 방향이 제각각입니다.
- 새는 가장 가까운 이웃 7마리(또는 "일정 거리 안의 모두")만 봅니다. 리더도, 전체를 내려다보는 계획도 없습니다. 그리고 세 규칙만 따릅니다. ① 붙기: 이웃들의 가운데 쪽으로 다가간다. ② 맞추기: 이웃들이 나는 방향으로 고개를 돌린다. ③ 피하기: 너무 가까이 붙은 이웃에게서 비켜난다.
- 하늘 가운데(잠자리 쪽)로 약하게 끌리는 힘이 있어서 떼가 멀리 날아가 버리지 않고 하늘을 크게 돕니다. 새마다 걸음마다 작은 흔들림이 더해집니다.
- 매 보내기를 누르면 매 한 마리가 떼의 가운데를 향해 돌진합니다. 매에서 가까운(12 거리 안) 새는 ④ 도망가기 규칙이 더해져 매 반대쪽으로 꺾고 조금 빨라집니다. 매는 사냥하지 않고 지나가기만 합니다.
- 지표는 세 가지입니다. 방향이 맞은 정도(0~100): 모든 새의 나는 방향(길이 1인 화살표)을 평균 낸 화살표의 길이 × 100이라, 모두 같은 쪽이면 100, 제각각이면 0에 가깝습니다. 뭉친 정도(0~100): 무리 중심에서 새까지의 평균 거리가, 새들이 하늘 전체에 고르게 흩어졌을 때보다 얼마나 짧은지(0 = 고르게 흩어진 만큼, 100 = 한 점에 모임). 덩어리 수: 서로 3 거리 안에 있으면 이어진 것으로 보고 이어진 무리를 셉니다. 전체의 3%(최소 10마리)보다 작은 무리는 세지 않습니다. 거리와 시간(걸음)은 이 모델의 단위입니다.
직접 돌려보기
① 한낮 하늘의 새 떼 3D
새 한 마리가 작은 쐐기 하나이고, 뾰족한 쪽이 나는 방향입니다. 무리 한가운데 새는 진하게, 가장자리 새는 하얗게 칠했어요(색은 무리 안 위치만 나타냅니다). 땅 위의 옅은 점은 떼의 그림자입니다. 아래 "매 보내기"를 눌러 보세요.
드래그로 돌려 보기 · 휠이나 두 손가락으로 확대 · 가만히 두면 카메라가 천천히 돕니다(끌 수 있어요) · 휴대폰에서 세로로 쓸면 페이지가 내려갑니다. 화면이 느려지면 새 수를 자동으로 줄입니다.
② 방향이 얼마나 맞았나, 얼마나 뭉쳤나
재생이 지난 시점까지만 그립니다. 파란 선은 방향이 맞은 정도, 주황 선은 뭉친 정도입니다. 붉은 띠는 매가 하늘에 있던 때, 초록 점선은 다시 모인 때예요.
③ 떼가 몇 덩어리로 갈라졌나
재생이 지난 시점까지만 그립니다. 1이면 한 덩어리입니다. 매가 지나가면 잠깐 여러 덩어리로 갈라졌다가 다시 붙는지 보세요.
④ 이웃을 몇 마리 보면 될까 (집계: 미리 돌린 16판)
기본 설정에서 한 마리가 보는 이웃 수만 1·3·7·15마리로 바꿔 각각 4판씩 2,000걸음까지 돌리고 마지막 400걸음을 평균했습니다. 재생과 상관없이 미리 계산한 집계입니다. 파란 막대는 방향이 맞은 정도, 회색 막대는 가장 큰 덩어리에 든 새의 비율, 막대 아래 숫자는 덩어리 수 평균입니다.
⑤ 규칙을 하나씩 끄면 (집계: 미리 돌린 16판)
같은 방식으로, 이웃 7마리에서 규칙 하나만 0으로 끈 집계입니다. 무엇이 빠지면 떼가 어떻게 무너지는지 보세요.
⑥ 떼의 절반을 갑자기 퍼뜨리면 (집계: 미리 돌린 8판)
600걸음에 떼의 한쪽 절반을 무리 중심에서 3배 멀리 옮겨 그쪽 새 사이 간격을 갑자기 크게 벌린 뒤, 1,100~1,400걸음을 평균했습니다(방식마다 4판). "일정 거리 안" 방식의 거리(2.9)는 보통 때 보이는 이웃 수가 비슷해지도록 맞췄습니다(평균 6.3마리 대 7마리).
이 결과가 말하는 것, 말하지 않는 것
말하는 것:
- 세 규칙을 다 켜면 리더 없이도 한 몸처럼 날고, 맞추기를 끄면 모여 있어도 제각각, 피하기를 끄면 작은 뭉치들로 갈라졌어요.
- 새마다 가까운 몇 마리의 방향만 따라 해도 그 방향이 이웃의 이웃으로 번져 전체가 한쪽으로 돌아요. 이 모델에선 처음 방향이 맞은 정도 44가 50걸음 만에 90이 됐어요.
- 그렇다면 한 몸처럼 날려면? 맞추기가 빠지면 안 됐고(끄면 방향 3), 이웃은 7마리쯤 보면 충분했어요(1마리 1%, 7마리 95%, 15마리 99%). 떼가 퍼질 땐 가까운 몇 마리를 보는 쪽이 더 버텼어요.
상세 설명
말하는 것: 기본 설정(새 1,500마리, 가까운 이웃 7마리, 세 규칙 100%)의 첫 판에서 처음 방향이 맞은 정도는 44였고 50걸음 뒤 90이 됐습니다. 4판 평균(2,000걸음 중 마지막 400걸음)으로 방향이 맞은 정도 91, 뭉친 정도 72, 가장 큰 덩어리에 든 새 95%였습니다. 이웃 수를 바꾸면 1마리일 때 방향 29·가장 큰 덩어리 1%(작은 무리로 흩어짐), 3마리 81·70%, 7마리 91·95%, 15마리 93·99%였습니다. 규칙을 하나씩 끄면, 맞추기가 없을 때 방향 3·뭉친 정도 25·가장 큰 덩어리 1%로 모여 있어도 제각각 흩어졌고, 피하기가 없을 때 방향 78·가장 큰 덩어리 53%·덩어리 3.2개로 작은 뭉치들로 갈라졌으며, 붙기가 없을 때는 방향 91로 같이 날았지만 뭉친 정도 65·가장 큰 덩어리 87%로 조금 느슨해졌습니다. 떼의 절반을 갑자기 3배로 퍼뜨리면 가까운 7마리를 보는 방식은 가장 큰 덩어리가 93%에서 78%로, 일정 거리 안을 보는 방식은 73%에서 54%로 줄었습니다. 매를 보낸 4판에서 방향이 맞은 정도는 20~43까지 떨어졌고, 매가 떠난 뒤 다시 모이기까지 4~616걸음이 걸렸습니다.
말하지 않는 것:
- 규칙 끄기와 이웃 수의 차이는 이 시뮬레이션이 직접 보여 준 거예요. 다만 단순 모델이라 실제 찌르레기 군무가 이렇게 일어난다는 증명이 아니고, "7마리가 정답"이란 뜻도 아니에요.
- 날갯짓과 공기 흐름, 시야각, 매의 실제 사냥 전략, 에너지, 바람, 장애물, 새마다 다른 성질은 빠져 있어요. 숫자는 모두 이 모델의 무차원 설정에서 나온 예시예요.
- 현실에서 확인하려면 실제 떼를 여러 카메라로 3D 촬영해 새마다 누구를 따라 움직이는지 재 봐야 해요. 그런 현장 연구가 가까운 6~7마리를 본다고 보고했지만, 이 모델이 그걸 증명하진 않아요.
상세 설명
말하지 않는 것: 이 모델은 단순한 보이드 모델이며, 실제 찌르레기 떼 군무가 이렇게 일어난다고 단정하지 않습니다. 날갯짓과 공기의 흐름, 시야각과 눈의 구조, 매의 실제 사냥 전략, 새의 체력과 에너지, 바람, 건물·나무 같은 장애물, 새마다 다른 성격과 크기는 모두 빠져 있습니다. "7마리가 정답"이라는 뜻도 아닙니다. 이 모델에서는 7마리와 15마리의 차이가 작았을 뿐이고, 결과는 이 프로젝트가 정한 세기·거리·하늘 크기에 따라 달라집니다. 붙기를 꺼도 같이 날았던 것은 처음에 새들이 대체로 같은 쪽을 보고 맞추기가 남아 있었기 때문일 수 있습니다. 거리·시간·세기는 모두 이 모델의 무차원 단위이고, 숫자는 모두 이 모델에서 나온 예시입니다.
이론적 근거와 구현 메모
- 모델의 뿌리: Reynolds (1987)가 컴퓨터 그래픽에서 새 떼를 그리려고 만든 보이드(boids)는 새마다 붙기·맞추기·피하기 세 규칙만 따르게 해서 떼 전체의 움직임이 생겨나게 한 모델입니다. Ballerini 외(2008)는 로마의 찌르레기 떼를 여러 대의 카메라로 3D로 촬영해, 새 한 마리가 거리와 상관없이 평균 6~7마리 가까운 이웃과 영향을 주고받는다고(위상 이웃) 보고했고, 이런 방식이 떼의 밀도가 변해도 잘 버틸 수 있다고 설명했습니다.
- 핵심 가정과 수식: 새 i의 다음 방향은 지금 방향
h에s = w붙기·0.09·(이웃 중심 − 나)/4 + w맞추기·0.22·(이웃 평균 방향 − h) + w피하기·0.55·Σ(나 − 이웃)(1 − d/1.6)/d + 끌림 + 도망 + 흔들림을 더한 쪽으로, 한 걸음에 최대 0.11라디안까지만 돕니다(이웃 중심까지 거리는 4에서 자름, 피하기는 1.6 거리 안 이웃만). 속도는 0.35로 거의 일정하고 매에게 놀라면 최대 1.6배까지 빨라집니다. 하늘은 가로 반지름 70, 세로 30인 납작한 공이며, 가운데로 끄는 힘0.01 × (위치/반지름), 하늘 밖에서는0.5 × (밖으로 나간 정도)를 더합니다. 흔들림은 축마다 ±0.2 안의 고른 난수입니다. 위상 이웃은 가장 가까운 k마리(최대 24 거리 안), 거리 이웃은 2.9 거리 안의 모두입니다. 방향이 맞은 정도는100 × |평균 h|(물리학에서 말하는 "정렬도(polarization)"), 뭉친 정도는100 × (1 − 평균 거리/44.1)(44.1 = 하늘 전체에 고르게 흩어졌을 때 중심까지 평균 거리)입니다. - 이 프로젝트의 단순화: 새는 크기 없는 점이고 속도·회전각·세기·거리는 모두 이 프로젝트가 정한 무차원 값입니다. 날갯짓, 공기역학, 시야각(뒤는 못 보는 것)과 눈의 구조, 매의 사냥 전략과 사냥 성공, 에너지·피로, 바람, 장애물, 개체마다 다른 성질은 넣지 않았습니다. 하늘 가운데로 끄는 힘은 떼가 화면 밖으로 날아가지 않게 하려고 넣은 설정이고, 처음 방향을 한쪽으로 살짝 치우치게 둔 것도 이 프로젝트의 선택입니다(완전히 제각각에서 시작하면 여러 떼로 나뉘어 따로 나는 일이 많았습니다).
- 이론값과 시뮬레이션: 보이드에는 맞춰 볼 이론값이 없어 시뮬레이션 값만 적습니다(
node tools/validate-murmuration.js, 시드 고정). 극단은 예상과 맞습니다. 맞추기를 끄면 방향이 맞은 정도가 3으로 무작위 방향에 가깝고, 이웃이 1마리뿐이면 29로 떼가 이어지지 않습니다. 현장 연구의 설명(가까운 몇 마리를 보는 방식이 밀도 변화에 더 잘 버틴다)과의 방향: 이 모델에서도 절반을 퍼뜨린 뒤 가장 큰 덩어리가 가까운 7마리 방식은 78%, 일정 거리 방식은 54%로 같은 방향이었습니다. 다만 일정 거리 방식은 퍼뜨리기 전에도 73%로 이미 낮았고(가까운 7마리 93%), 두 방식 모두 줄어들었습니다. - 더 읽을거리: Reynolds (1987), 「Flocks, herds and schools: A distributed behavioral model」, Computer Graphics(SIGGRAPH '87) 21(4). Ballerini 외 (2008), 「Interaction ruling animal collective behavior depends on topological rather than metric distance: Evidence from a field study」, PNAS 105(4).
- 이 프로젝트가 직접 설계한 단순화 구현이며 논문 수치를 재현한 것은 아닙니다. 이웃 찾기는 새들이 있는 범위에 맞춘 공간 격자(칸 3)로 하고, 가까운 k마리는 칸을 한 겹씩 넓혀 가며 찾습니다. 모든 새는 같은 걸음의 이전 상태를 보고 동시에 움직입니다. ① 3D는 계산 결과를 그대로 그리며, 한 걸음 전과 지금 위치 사이를 이어 그려 부드럽게 보일 뿐 결과에 영향이 없습니다. 휴대폰에서는 처음부터 새를 700마리까지만 쓰고, 화면이 초당 24프레임 아래로 3초 넘게 느려지면 새 수를 25%씩 줄입니다(통계 카드에 표시). ④~⑥은 기본 설정으로 미리 돌린 집계라 슬라이더를 바꿔도 달라지지 않습니다. 매 예시(4판, 600걸음에 매)는 검증 스크립트에만 있습니다. 이 페이지는 2D 지도 대신 3D 화면 하나로 보여 줍니다(카메라가 천천히 돌아 입체가 읽히고, 휴대폰에서 화면을 하나 더 그리지 않으려는 것).