무리 짓기 실험실베타

세 가지 규칙만으로 새떼·물고기 떼가 생겨나는 모습을 실험

이 도구는 아직 안정화 중인 베타 버전입니다. 결과가 예상과 다르면 알려주세요.

시뮬레이션 엔진(WebAssembly)을 불러오는 중…

정렬도0.00

각 점은 시야 반경과 시야각 안의 이웃만 보고 세 가지 규칙을 따릅니다. 시야각을 줄이면 등 뒤의 이웃은 보이지 않습니다. 분리 반경보다 가까우면 떨어지고(분리), 이웃과 같은 방향으로 날고(정렬), 이웃들의 가운데로 다가갑니다(응집). 누구도 전체를 지휘하지 않는데 무리가 생겨납니다. 캔버스를 누르거나 끌면 먹이 또는 포식자가 됩니다. 정렬도는 모두가 같은 방향이면 1, 제각각이면 0에 가깝습니다.

무리 짓기 실험실 소개

화면의 점 하나하나는 크레이그 레이놀즈가 1987년 SIGGRAPH에서 발표한 「보이드(boid)」다. 각 보이드는 시야 반경(기본 50픽셀) 안에 있는 이웃만 보고 세 가지를 한다. 너무 가까운 이웃에게서 멀어지고(분리), 이웃들의 평균 방향으로 날고(정렬), 이웃들의 평균 위치로 다가간다(응집). 무리 전체의 모양이나 우두머리는 어디에도 프로그래밍되어 있지 않다.

오른쪽 아래 「정렬도」는 모든 보이드의 진행 방향 단위벡터를 더한 길이를 개체 수로 나눈 값이다. 모두 한 방향이면 1, 방향이 제각각이면 0에 가깝다. 무리가 생기는 과정을 눈 대신 숫자로 확인할 수 있게 해 준다.

세 규칙이 실제로 계산되는 방식

각 규칙은 「원하는 방향」 하나를 만든다. 정렬은 이웃 속도의 평균, 응집은 이웃까지의 상대 위치 평균, 분리는 분리 반경(기본 20픽셀) 안의 이웃에게서 거리 제곱에 반비례해 멀어지는 방향이다. 그 방향으로 최고 속도를 낼 때 필요한 속도 변화를 구하고, 크기를 최대 조향력(최고 속도의 1/30)으로 자른 뒤 슬라이더 가중치를 곱해 더한다. 분리에는 내부적으로 1.5배가 더 곱해진다.

속도는 최고 속도와 그 1/3 사이로 제한된다. 기본값 180이면 60~180픽셀/초 사이라 보이드는 멈추지 못한다. 이웃 탐색은 화면을 시야 반경 크기의 칸으로 나눠 주변 9칸만 보는 방식이라 5,000마리도 실시간으로 돈다.

관찰 실험 1: 정렬을 0으로

기본 새떼 상태에서 정렬도가 0.9 이상으로 올라간 것을 확인한 뒤 정렬 슬라이더를 0으로 내린다. 보이드들은 여전히 뭉치지만 덩어리 안에서 방향이 흩어져 정렬도가 급격히 떨어진다. 1,500마리가 완전히 무작위 방향이면 정렬도는 대략 1/√1500 ≈ 0.03 수준이다.

반대로 응집과 분리를 0으로 두고 정렬만 남기면 뭉치지 않은 채로 방향만 서서히 맞춰진다. 이 상태는 비첵 등이 1995년 제안한 자기추진 입자 모형과 비슷하다. 그 모형은 이웃 방향 맞추기와 잡음만으로 무질서에서 질서로 바뀌는 상전이를 보였다.

관찰 실험 2: 시야 반경이 무리 크기를 정한다

시야 반경을 10으로 줄이면 이웃이 거의 없어 작은 무리가 여럿 생기고 서로 다른 방향으로 흘러, 개체마다 옆과는 맞춰도 전체 정렬도는 낮게 머문다. 150으로 늘리면 몇 초 안에 거대한 무리 하나로 합쳐진다.

기대 이웃 수로 가늠할 수 있다. 900×560픽셀 화면에 1,500마리가 고르게 퍼져 있으면 밀도는 1,500 ÷ 504,000 ≈ 0.003마리/픽셀²이다. 반경 50이면 원 넓이 약 7,854픽셀²에 이웃이 약 23마리, 반경 10이면 1마리도 안 된다. 이웃이 한 마리도 없으면 세 규칙은 아무 힘도 내지 않는다.

관찰 실험 3: 포식자와 벽

포인터를 「포식자」로 두고 무리 한가운데를 누르고 있으면 반경 160픽셀 안의 보이드가 달아나면서 무리가 둘로 갈라진다. 손을 떼면 응집 때문에 다시 합쳐진다. 실제 찌르레기 떼가 매를 피할 때 보이는 모양과 닮았지만, 여기서는 그저 도망 방향 하나가 조향에 더해질 뿐이다.

가장자리를 「벽」으로 바꾸면 가장자리 50픽셀 안에서 안쪽으로 미는 힘이 생긴다. 무리가 벽을 따라 돌며 방향을 자주 바꾸므로 정렬도가 반대편 연결 모드보다 크게 오르내린다.

이 시뮬레이션이 단순화한 것

  • 시야각은 기본 360도 원이다. 레이놀즈의 원래 보이드처럼 뒤쪽을 보지 못하게 하려면 시야각 슬라이더를 줄이면 된다. 예를 들어 270도면 등 뒤 90도 부채꼴 안의 이웃은 무시한다.
  • 세 힘을 가중치로 더한다. 원 논문은 급한 요구(충돌 회피)를 먼저 채우는 우선순위 방식을 설명했다.
  • 2차원 평면이고 장애물 회피, 에너지, 날개 역학이 없다. 조향력 상한과 최저 속도도 임의로 정한 값이다.

예시

무작위 방향일 때 정렬도

입력
1,500마리, 정렬 0, 응집 0
결과
약 0.03

무작위 단위벡터 N개의 합은 평균적으로 √N 정도라, √1500 ÷ 1500 ≈ 0.026.

시야 반경별 기대 이웃 수

입력
900×560 화면, 1,500마리
결과
반경 50 → 약 23마리, 반경 10 → 약 0.9마리

밀도 0.00298 × π × 50² ≈ 23, × π × 10² ≈ 0.9.

속도 범위

입력
최대 속도 180
결과
60~180픽셀/초, 최대 조향력 6

최저 속도 = 최대의 1/3, 조향력 상한 = 최대의 1/30.

사용 방법

  1. 무리 유형(새떼·물고기 떼·벌레 떼·각자도생)을 골라 출발점을 정한다.
  2. 분리·정렬·응집·시야 반경·분리 반경·시야각 슬라이더를 하나씩 바꾸며 정렬도 변화를 본다.
  3. 캔버스를 누르거나 끌어 먹이 또는 포식자를 만든다.

자주 묻는 질문

보이드라는 이름은 무슨 뜻인가요?

레이놀즈가 bird-oid(새 비슷한 것)를 줄여 붙인 이름이다. 1987년 SIGGRAPH 논문 「Flocks, Herds, and Schools」에서 발표되었다.

실제 새도 이 세 규칙을 따르나요?

이 모형은 새의 뇌를 흉내 낸 것이 아니라 무리 모양을 재현하는 최소 규칙이다. 다만 개체가 가까운 이웃에만 반응해도 큰 무리가 생긴다는 점은 실제 동물 연구에서도 중요하게 다루는 생각이다.

지휘자가 없는데 왜 한 방향으로 모이나요?

정렬 규칙 때문에 이웃끼리 방향이 조금씩 비슷해지고, 이웃의 이웃을 통해 그 효과가 무리 전체로 퍼진다. 도넛 모양 화면에서는 막는 벽이 없어 결국 한 방향으로 수렴하기 쉽다.

영화나 게임에서 쓰이나요?

레이놀즈 논문의 목적이 컴퓨터 애니메이션이었다. 새 한 마리씩 경로를 그리는 대신 규칙을 주고 무리를 시뮬레이션하는 방식은 이후 영상과 게임에서 널리 쓰였다.

관련 가이드

출처

기준일:

개인정보와 저장 방식