1 / 25

플로킹 : 집단 행동을 흉내내는 간단한 기법

플로킹 : 집단 행동을 흉내내는 간단한 기법. (GEMS1- 3.7 장 ). 개요. 플로킹 (flocking 또는 swarming, herding) 1987 년 SIGGRAPH 에 제출된 Craig Reynolds 의 “ Flocks, Herds, and Schools : A Distributed Behavioral Model ” 이라는 논문에서 처음 등장한 기법

hunter
Télécharger la présentation

플로킹 : 집단 행동을 흉내내는 간단한 기법

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 플로킹 : 집단 행동을 흉내내는 간단한 기법 (GEMS1- 3.7장)

  2. 개요 • 플로킹 (flocking 또는 swarming, herding) • 1987년 SIGGRAPH에 제출된 Craig Reynolds의 “Flocks, Herds, and Schools : A Distributed Behavioral Model”이라는 논문에서 처음 등장한 기법 • 자동화된 에이전트(boid라고 함)들의 집단이 새떼나 물고기떼, 또는 벌떼와 비슷한 집단 행동을 보이도록 만들기 위한 규칙 제시 => 조타 행동 (steering behavior)

  3. 조타 행동(steering behavior) • 분리 (Separation) • 주변 보이드들과 충돌하지 않도록 방향을 돌린다 • 정렬 (Alignment) • 주변 보이드들과 같은 방향을 가리키도록 한다 • 응집 (Cohesion) • 주변 보이드들과의 평균 위치쪽으로 방향을 돌린다 • 회피 (Avoidance) • 지역•장애물이나 적들에 부딪히지 않도록 방향을 조정한다

  4. 분리 (Separation) • 보이드가 주변의 다른 보이들과 적당한 거리를 유지하도록 하는 것 • 응집규칙만 있다면 보이드들은 서로 부딪히게 되는데, 그것을 방지하는 것이 분리 규칙 • 이 글에서는 … • 무리의 각 보이드마다 주변 보이들과의 거리를 판단하고 적당한 거리를 유지할 수 있도록 방향을 돌리는 방식으로 이 규칙을 구현함

  5. 정렬 (Alignment) • 보이드가 주변의 다른 개체들과 동일한 방향(또는 속도)을 유지하도록 하는 것 • 이 규칙에 의해 보이드들이 모인 무리가 마치 하나의 보이드처럼 움직이게 됨 • 이 글에서는 … • 보이드의 방향과 속도를 주변 보이드들의 평균적인 속도와 방향으로 조정함으로써 이 규칙을 구현함

  6. 응집 (Cohesion) • 보이드들을 하나의 무리로써 모이게 하는 역할 • 이 글에서는 … • 주변 보이드들과의 평균 위치로 갈 수 있도록 보이드의 방향과 속도를 조정함으로써 이 규칙 구현

  7. 회피 (Avoidance) • 보이드가 장애물과 부딪히지 않도록 하기 위한 것 • 보이드가 어느 정도의 거리를 내다 보고 장애물이 존재하면 그것을 피할 수 있는 쪽으로 방향을 조정함으로써 구현 • 이 규칙은 장애물뿐만 아니라 어떠한 천적에 해당하는 에이전트(토끼의 경우 늑대, 비둘기 경우 매)가 있을 때에도 적용

  8. 상태 없는 알고리즘 • 각각의 보이드는 무리에 대한 어떠한 정보(무리가 어디로 가는 지 등)도 가지지 않는다는 점 • 보이드가 어떠한 상태 정보도 가지지 않는다는 점에서 플로킹은 ‘상태없는(stateless)’알고리즘 • 각각의 보이드는 매 순간마다 자신의 주변을 다시 평가할 뿐, 무리에 대한 정보는 아예 가지고 있지 않음 • 플로킹 이외의 접근 방식을 이용한 무리 행동 알고리즘에 비해 메모리 요구량이 대단히 적음 • 임기 응변적인 행동 (emergent behavior) • 무리의 보이드들은 무리가 어디로 가는 지에 대해서는 전혀 알지 못하지만, 모든 보이드들은 하나의 무리로서 움직이고, 장애물과 적들을 피하며, 다른 보이드들과 보조를 맞춰서 유동적으로 이동하게 됨

  9. 게임에서의 응용 • 플로킹 • 유닛들의 집단 이동을 위한 도구 • 게이머에게 좀 더 현실감 있는 게임 환경을 제공하는 수단 • 많은 상용 게임에서 이미 사용 • Unreal(Epic)과 Half-Life(Sierra)는 먼스터들이나 또는 좀 덜 위험한 생물들(물고기나 새)의 움직임에 플로킹을 적용함 • Enemy Nations(Windward Studio)는 3D 환경 안에서의 유닛 진형 유지나 이동에 수정된 플로킹 알고리즘 적용 • RTS 게임이나 RPG에서 동물들의 무리를 움직일 때 간단한 스크립팅보다는 플로킹을 사용하는 것이 훨씬 더 현실감 있는 결과를 얻을 수 있음 • 궁수들이나 검사들이 다리를 건너던가 기둥을 돌아가게 할 때 적용할 수도 있음 (?) • 1인칭 슈팅 게임에서, 던젼 안의 먼스터들이 혼자 떨어져 있을 때에는 플레이어를 피하다가 무리를 이루면 플레이어를 공격하게 만드는 데에도 사용

  10. 구현 - 벡터와 이동 • 국소 공간(local space –보이드 자신을 중심으로 하는 공간)이라는 개념 (그림 3.7.2) • 앞 –양의 z축 • 왼쪽 –양의 x축 • 위 –양의 y축

  11. 방위 (orientation)라는 개념(그림 3.7.3) • Roll : 국소 z축(앞,뒤) • Pitch : 국소 x축(좌,우) • Yaw : 국소 y축(위,아래) • 무리의 이동 중 보이드의 방향과 속도를 조정할 때 방위 개념을 주로 사용 • 하나의 보이드가 가지는 상반된 요구들을 조정하는 방식 • 네 가지 규칙들은 모두 동일한 중요성을 가짐 (예) 한 마리의 비둘기는 장애물이나 적들과 부딪히고 싶지 않겠지만, 그렇다고 동료들과 떨어지고 싶지도 않음. 그러나 생사가 달린 상황이라면 다를 수 있음(예를 들어 매에 쫓긴다면 무리에 대해서는 생각할 겨를이 없음)

  12. 벡터 누적 방식 • 각각의 규칙마다 개별적으로 벡터들을 조정하고, 그것들을 하나의 변화벡터로 합한 후 그것을 최종적으로 보이드의 이동에 적용하는 것 • 누적된 변화들이 적절한 비율을 유지할 수 있도록 하기 위해, 편의상 이 변화 벡터는 하나의 단위 벡터로 저장됨 • 이 방법은 각각의 조타 행동이 보이드의 최종 이동 변화에 부분적인 영향을 미치게 함으로써 둘 또는 그 이상의 상반되는 요구들을 만족시킴

  13. 제한 조건들 • 보이드의 이동과 반응에 영향 미치는 제한 조건 (1) 각 보이드의 ‘지각 범위’ • 하나의 보이드가 얼마나 멀리 떨어진 동료보이드 또는 장애물을 볼 수 있는지 결정하는 크기 • 이 범위가 크면 좀 더 조직화되고 응집적인 무리가 만들어지며, 적이나 장애물도 좀 더 효과적으로 피할 수 있음 • 이 범위가 작으면 무리가 좀더 산만해지며, 장애물을 거쳐 갈 때 무리가 둘로 나눠지는 등의 행동을 보이기도 함 (2) 보이드의 속도와 최대 속도 변화량 • 실세계에서도 이동 속도나 선회 속도 같은 능력에 따라 한 개체가 무리로부터 이탈하거나 제대로 무리를 따라가게 됨 (여기서는 속도만 고려, 가속도는 무시함) • 속도 변화를 제한하지 않으면 무리에서 떨어진 보이드가 비정상적으로 빠른 속도로 무리를 따라 잡는 현상이 생길 수 있음 • 속도 변화의 제한은 장애물을 피하기 위해서 방향을 틀거나 속도를 낮추는 행동에도 영향을 미칠 수 있음 (속도 변화를 제한하지 않으면, 장애물 앞에서 갑자기 멈춰서 잽싸게 방향을 바꾸는 비현실적인 행동이 일어남)

  14. 세계에 대한 제한 • 책 예제 • 보이드가 돌아다니는 세계는 장애물이 없는 하나의 상자 • 보이드가 상자의 한 경계면을 지나가면 즉시 그 반대편 면으로 순간 이동굄 • 경계를 넘어도 보이드의 속도와 방위는 그대로 유지 • 무리가 상자의 경계면에 너무 가깝게 이동하다가 일부 보이드들만 반대편으로 넘어가게 되면 그 보이드들은 원래의 무리를 따라잡지 못하게 되며, 결과적으로 새로운 무리를 구성하게 됨

  15. 코드 • 플로킹 예제의 핵심 클래스 • CBox • CFlock : 임의의 개수의 무리들 • CBoid : 임의 개수의 개체들

  16. CBox 클래스 보이드들이 활동 세계를 넘나드는 지를 점검할 때 유용하게 쓰임

  17. CFlock 클래스 • 보이드들의 무리 의미 • 무리 자체를 표현하기 위한 수단이라기 보다는 무리에 속한 보이드들을 관리하기 위한 도구 • 무리를 관리하는 데 다양한 함수 제공 • 절차 • 무리 만들어짐 • 거기에 보이드들이 추가됨 • Cflock::ListOfFlocks[]를 통해서 관리

  18. CBoid 클래스 • 보이드의 이동 방식이나 환경을 감지하는 방식, 행동의 우선 순위 등 한 보이드의 행동과 존재를 규정하는 모든 측면들을 처리 • CBoid::KeepDistance –분리 행동 • CBoid::MatchHeading –정렬 행동 • CBoid::SteerToCenter –응집 행동 • CBoid::FleeEnemies –회피 행동 • CBoid::ComputeRPY –방위 조정 함수

More Related