slide1
Download
Skip this Video
Download Presentation
플로킹 : 집단 행동을 흉내내는 간단한 기법

Loading in 2 Seconds...

play fullscreen
1 / 25

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


  • 130 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '플로킹 : 집단 행동을 흉내내는 간단한 기법' - hunter


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
slide2
개요
  • 플로킹 (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)
  • 보이드가 장애물과 부딪히지 않도록 하기 위한 것
  • 보이드가 어느 정도의 거리를 내다 보고 장애물이 존재하면 그것을 피할 수 있는 쪽으로 방향을 조정함으로써 구현
  • 이 규칙은 장애물뿐만 아니라 어떠한 천적에 해당하는 에이전트(토끼의 경우 늑대, 비둘기 경우 매)가 있을 때에도 적용
slide9
상태 없는 알고리즘
  • 각각의 보이드는 무리에 대한 어떠한 정보(무리가 어디로 가는 지 등)도 가지지 않는다는 점
  • 보이드가 어떠한 상태 정보도 가지지 않는다는 점에서 플로킹은 ‘상태없는(stateless)’알고리즘
  • 각각의 보이드는 매 순간마다 자신의 주변을 다시 평가할 뿐, 무리에 대한 정보는 아예 가지고 있지 않음
    • 플로킹 이외의 접근 방식을 이용한 무리 행동 알고리즘에 비해 메모리 요구량이 대단히 적음
    • 임기 응변적인 행동 (emergent behavior)
    • 무리의 보이드들은 무리가 어디로 가는 지에 대해서는 전혀 알지 못하지만, 모든 보이드들은 하나의 무리로서 움직이고, 장애물과 적들을 피하며, 다른 보이드들과 보조를 맞춰서 유동적으로 이동하게 됨
slide10
게임에서의 응용
  • 플로킹
    • 유닛들의 집단 이동을 위한 도구
    • 게이머에게 좀 더 현실감 있는 게임 환경을 제공하는 수단
    • 많은 상용 게임에서 이미 사용
      • Unreal(Epic)과 Half-Life(Sierra)는 먼스터들이나 또는 좀 덜 위험한 생물들(물고기나 새)의 움직임에 플로킹을 적용함
      • Enemy Nations(Windward Studio)는 3D 환경 안에서의 유닛 진형 유지나 이동에 수정된 플로킹 알고리즘 적용
      • RTS 게임이나 RPG에서 동물들의 무리를 움직일 때 간단한 스크립팅보다는 플로킹을 사용하는 것이 훨씬 더 현실감 있는 결과를 얻을 수 있음
      • 궁수들이나 검사들이 다리를 건너던가 기둥을 돌아가게 할 때 적용할 수도 있음 (?)
      • 1인칭 슈팅 게임에서, 던젼 안의 먼스터들이 혼자 떨어져 있을 때에는 플레이어를 피하다가 무리를 이루면 플레이어를 공격하게 만드는 데에도 사용
slide11
구현 - 벡터와 이동
  • 국소 공간(local space –보이드 자신을 중심으로 하는 공간)이라는 개념 (그림 3.7.2)
    • 앞 –양의 z축
    • 왼쪽 –양의 x축
    • 위 –양의 y축
slide12
방위 (orientation)라는 개념(그림 3.7.3)
    • Roll : 국소 z축(앞,뒤)
    • Pitch : 국소 x축(좌,우)
    • Yaw : 국소 y축(위,아래)
    • 무리의 이동 중 보이드의 방향과 속도를 조정할 때 방위 개념을 주로 사용
  • 하나의 보이드가 가지는 상반된 요구들을 조정하는 방식
    • 네 가지 규칙들은 모두 동일한 중요성을 가짐

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

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

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

      • 하나의 보이드가 얼마나 멀리 떨어진 동료보이드 또는 장애물을 볼 수 있는지 결정하는 크기
      • 이 범위가 크면 좀 더 조직화되고 응집적인 무리가 만들어지며, 적이나 장애물도 좀 더 효과적으로 피할 수 있음
      • 이 범위가 작으면 무리가 좀더 산만해지며, 장애물을 거쳐 갈 때 무리가 둘로 나눠지는 등의 행동을 보이기도 함

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

      • 실세계에서도 이동 속도나 선회 속도 같은 능력에 따라 한 개체가 무리로부터 이탈하거나 제대로 무리를 따라가게 됨 (여기서는 속도만 고려, 가속도는 무시함)
      • 속도 변화를 제한하지 않으면 무리에서 떨어진 보이드가 비정상적으로 빠른 속도로 무리를 따라 잡는 현상이 생길 수 있음
      • 속도 변화의 제한은 장애물을 피하기 위해서 방향을 틀거나 속도를 낮추는 행동에도 영향을 미칠 수 있음 (속도 변화를 제한하지 않으면, 장애물 앞에서 갑자기 멈춰서 잽싸게 방향을 바꾸는 비현실적인 행동이 일어남)
slide15
세계에 대한 제한
    • 책 예제
      • 보이드가 돌아다니는 세계는 장애물이 없는 하나의 상자
      • 보이드가 상자의 한 경계면을 지나가면 즉시 그 반대편 면으로 순간 이동굄
      • 경계를 넘어도 보이드의 속도와 방위는 그대로 유지
      • 무리가 상자의 경계면에 너무 가깝게 이동하다가 일부 보이드들만 반대편으로 넘어가게 되면 그 보이드들은 원래의 무리를 따라잡지 못하게 되며, 결과적으로 새로운 무리를 구성하게 됨
slide16
코드
  • 플로킹 예제의 핵심 클래스
    • CBox
      • CFlock : 임의의 개수의 무리들
        • CBoid : 임의 개수의 개체들
slide17
CBox 클래스

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

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

cflock
CFlock 클래스
  • 보이드들의 무리 의미
  • 무리 자체를 표현하기 위한 수단이라기 보다는 무리에 속한 보이드들을 관리하기 위한 도구
  • 무리를 관리하는 데 다양한 함수 제공
  • 절차
    • 무리 만들어짐
    • 거기에 보이드들이 추가됨
    • Cflock::ListOfFlocks[]를 통해서 관리
cboid
CBoid 클래스
  • 보이드의 이동 방식이나 환경을 감지하는 방식, 행동의 우선 순위 등 한 보이드의 행동과 존재를 규정하는 모든 측면들을 처리
    • CBoid::KeepDistance –분리 행동
    • CBoid::MatchHeading –정렬 행동
    • CBoid::SteerToCenter –응집 행동
    • CBoid::FleeEnemies –회피 행동
    • CBoid::ComputeRPY –방위 조정 함수
ad