플로킹
This presentation is the property of its rightful owner.
Sponsored Links
1 / 25

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


  • 89 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


835807

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

(GEMS1- 3.7장)


835807

개요

  • 플로킹 (flocking 또는 swarming, herding)

    • 1987년 SIGGRAPH에 제출된 Craig Reynolds의 “Flocks, Herds, and Schools : A Distributed Behavioral Model”이라는 논문에서 처음 등장한 기법

    • 자동화된 에이전트(boid라고 함)들의 집단이 새떼나 물고기떼, 또는 벌떼와 비슷한 집단 행동을 보이도록 만들기 위한 규칙 제시 => 조타 행동 (steering behavior)


Steering behavior

조타 행동(steering behavior)

  • 분리 (Separation)

    • 주변 보이드들과 충돌하지 않도록 방향을 돌린다

  • 정렬 (Alignment)

    • 주변 보이드들과 같은 방향을 가리키도록 한다

  • 응집 (Cohesion)

    • 주변 보이드들과의 평균 위치쪽으로 방향을 돌린다

  • 회피 (Avoidance)

    • 지역•장애물이나 적들에 부딪히지 않도록 방향을 조정한다


Separation

분리 (Separation)

  • 보이드가 주변의 다른 보이들과 적당한 거리를 유지하도록 하는 것

  • 응집규칙만 있다면 보이드들은 서로 부딪히게 되는데, 그것을 방지하는 것이 분리 규칙

  • 이 글에서는 …

    • 무리의 각 보이드마다 주변 보이들과의 거리를 판단하고 적당한 거리를 유지할 수 있도록 방향을 돌리는 방식으로 이 규칙을 구현함


Alignment

정렬 (Alignment)

  • 보이드가 주변의 다른 개체들과 동일한 방향(또는 속도)을 유지하도록 하는 것

  • 이 규칙에 의해 보이드들이 모인 무리가 마치 하나의 보이드처럼 움직이게 됨

  • 이 글에서는 …

    • 보이드의 방향과 속도를 주변 보이드들의 평균적인 속도와 방향으로 조정함으로써 이 규칙을 구현함


Cohesion

응집 (Cohesion)

  • 보이드들을 하나의 무리로써 모이게 하는 역할

  • 이 글에서는 …

    • 주변 보이드들과의 평균 위치로 갈 수 있도록 보이드의 방향과 속도를 조정함으로써 이 규칙 구현


Avoidance

회피 (Avoidance)

  • 보이드가 장애물과 부딪히지 않도록 하기 위한 것

  • 보이드가 어느 정도의 거리를 내다 보고 장애물이 존재하면 그것을 피할 수 있는 쪽으로 방향을 조정함으로써 구현

  • 이 규칙은 장애물뿐만 아니라 어떠한 천적에 해당하는 에이전트(토끼의 경우 늑대, 비둘기 경우 매)가 있을 때에도 적용


835807

상태 없는 알고리즘

  • 각각의 보이드는 무리에 대한 어떠한 정보(무리가 어디로 가는 지 등)도 가지지 않는다는 점

  • 보이드가 어떠한 상태 정보도 가지지 않는다는 점에서 플로킹은 ‘상태없는(stateless)’알고리즘

  • 각각의 보이드는 매 순간마다 자신의 주변을 다시 평가할 뿐, 무리에 대한 정보는 아예 가지고 있지 않음

    • 플로킹 이외의 접근 방식을 이용한 무리 행동 알고리즘에 비해 메모리 요구량이 대단히 적음

    • 임기 응변적인 행동 (emergent behavior)

    • 무리의 보이드들은 무리가 어디로 가는 지에 대해서는 전혀 알지 못하지만, 모든 보이드들은 하나의 무리로서 움직이고, 장애물과 적들을 피하며, 다른 보이드들과 보조를 맞춰서 유동적으로 이동하게 됨


835807

게임에서의 응용

  • 플로킹

    • 유닛들의 집단 이동을 위한 도구

    • 게이머에게 좀 더 현실감 있는 게임 환경을 제공하는 수단

    • 많은 상용 게임에서 이미 사용

      • Unreal(Epic)과 Half-Life(Sierra)는 먼스터들이나 또는 좀 덜 위험한 생물들(물고기나 새)의 움직임에 플로킹을 적용함

      • Enemy Nations(Windward Studio)는 3D 환경 안에서의 유닛 진형 유지나 이동에 수정된 플로킹 알고리즘 적용

      • RTS 게임이나 RPG에서 동물들의 무리를 움직일 때 간단한 스크립팅보다는 플로킹을 사용하는 것이 훨씬 더 현실감 있는 결과를 얻을 수 있음

      • 궁수들이나 검사들이 다리를 건너던가 기둥을 돌아가게 할 때 적용할 수도 있음 (?)

      • 1인칭 슈팅 게임에서, 던젼 안의 먼스터들이 혼자 떨어져 있을 때에는 플레이어를 피하다가 무리를 이루면 플레이어를 공격하게 만드는 데에도 사용


835807

구현 - 벡터와 이동

  • 국소 공간(local space –보이드 자신을 중심으로 하는 공간)이라는 개념 (그림 3.7.2)

    • 앞 –양의 z축

    • 왼쪽 –양의 x축

    • 위 –양의 y축


835807

  • 방위 (orientation)라는 개념(그림 3.7.3)

    • Roll : 국소 z축(앞,뒤)

    • Pitch : 국소 x축(좌,우)

    • Yaw : 국소 y축(위,아래)

    • 무리의 이동 중 보이드의 방향과 속도를 조정할 때 방위 개념을 주로 사용

  • 하나의 보이드가 가지는 상반된 요구들을 조정하는 방식

    • 네 가지 규칙들은 모두 동일한 중요성을 가짐

      (예) 한 마리의 비둘기는 장애물이나 적들과 부딪히고 싶지 않겠지만, 그렇다고 동료들과 떨어지고 싶지도 않음. 그러나 생사가 달린 상황이라면 다를 수 있음(예를 들어 매에 쫓긴다면 무리에 대해서는 생각할 겨를이 없음)


835807

  • 벡터 누적 방식

    • 각각의 규칙마다 개별적으로 벡터들을 조정하고, 그것들을 하나의 변화벡터로 합한 후 그것을 최종적으로 보이드의 이동에 적용하는 것

    • 누적된 변화들이 적절한 비율을 유지할 수 있도록 하기 위해, 편의상 이 변화 벡터는 하나의 단위 벡터로 저장됨

    • 이 방법은 각각의 조타 행동이 보이드의 최종 이동 변화에 부분적인 영향을 미치게 함으로써 둘 또는 그 이상의 상반되는 요구들을 만족시킴


835807

제한 조건들

  • 보이드의 이동과 반응에 영향 미치는 제한 조건

    (1) 각 보이드의 ‘지각 범위’

    • 하나의 보이드가 얼마나 멀리 떨어진 동료보이드 또는 장애물을 볼 수 있는지 결정하는 크기

    • 이 범위가 크면 좀 더 조직화되고 응집적인 무리가 만들어지며, 적이나 장애물도 좀 더 효과적으로 피할 수 있음

    • 이 범위가 작으면 무리가 좀더 산만해지며, 장애물을 거쳐 갈 때 무리가 둘로 나눠지는 등의 행동을 보이기도 함

      (2) 보이드의 속도와 최대 속도 변화량

    • 실세계에서도 이동 속도나 선회 속도 같은 능력에 따라 한 개체가 무리로부터 이탈하거나 제대로 무리를 따라가게 됨 (여기서는 속도만 고려, 가속도는 무시함)

    • 속도 변화를 제한하지 않으면 무리에서 떨어진 보이드가 비정상적으로 빠른 속도로 무리를 따라 잡는 현상이 생길 수 있음

    • 속도 변화의 제한은 장애물을 피하기 위해서 방향을 틀거나 속도를 낮추는 행동에도 영향을 미칠 수 있음 (속도 변화를 제한하지 않으면, 장애물 앞에서 갑자기 멈춰서 잽싸게 방향을 바꾸는 비현실적인 행동이 일어남)


835807

  • 세계에 대한 제한

    • 책 예제

      • 보이드가 돌아다니는 세계는 장애물이 없는 하나의 상자

      • 보이드가 상자의 한 경계면을 지나가면 즉시 그 반대편 면으로 순간 이동굄

      • 경계를 넘어도 보이드의 속도와 방위는 그대로 유지

      • 무리가 상자의 경계면에 너무 가깝게 이동하다가 일부 보이드들만 반대편으로 넘어가게 되면 그 보이드들은 원래의 무리를 따라잡지 못하게 되며, 결과적으로 새로운 무리를 구성하게 됨


835807

코드

  • 플로킹 예제의 핵심 클래스

    • CBox

      • CFlock : 임의의 개수의 무리들

        • CBoid : 임의 개수의 개체들


835807

CBox 클래스

보이드들이 활동 세계를 넘나드는

지를 점검할 때 유용하게 쓰임


Cflock

CFlock 클래스

  • 보이드들의 무리 의미

  • 무리 자체를 표현하기 위한 수단이라기 보다는 무리에 속한 보이드들을 관리하기 위한 도구

  • 무리를 관리하는 데 다양한 함수 제공

  • 절차

    • 무리 만들어짐

    • 거기에 보이드들이 추가됨

    • Cflock::ListOfFlocks[]를 통해서 관리


Cboid

CBoid 클래스

  • 보이드의 이동 방식이나 환경을 감지하는 방식, 행동의 우선 순위 등 한 보이드의 행동과 존재를 규정하는 모든 측면들을 처리

    • CBoid::KeepDistance –분리 행동

    • CBoid::MatchHeading –정렬 행동

    • CBoid::SteerToCenter –응집 행동

    • CBoid::FleeEnemies –회피 행동

    • CBoid::ComputeRPY –방위 조정 함수


  • Login