30
GPG 3.7 플플플 플 플플

[1211 조진현][gpg1]플로킹

  • Upload
    -

  • View
    1.095

  • Download
    8

Embed Size (px)

Citation preview

Page 1: [1211 조진현][gpg1]플로킹

GPG Ⅰ3.7 플로킹

조 진현

Page 2: [1211 조진현][gpg1]플로킹

AI 를 생각해 볼 때… case by case 처리 . 간단한 벡터 조작으로만으로 할 수 있다.

Page 3: [1211 조진현][gpg1]플로킹

Flocking?

그룹의 움직임을 표현하는 컴퓨터 모델 .

인공생명 알고리즘의 한 종류 .( ex> 유전자 알고리즘 )

Page 4: [1211 조진현][gpg1]플로킹

4

게임에서의 응용

플로킹 유닛들의 집단 이동을 위한 도구

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

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

Unreal(Epic) 과 Half-Life(Sierra) 는 먼스터들이나 또는 좀 덜 위험한 생물들 ( 물고기나

새 ) 의 움직임에 플로킹을 적용함

Enemy Nations(Windward Studio) 는 3D 환경 안에서의 유닛 진형 유지나 이동에

수정된 플로킹 알고리즘 적용

RTS 게임이나 RPG 에서 동물들의 무리를 움직일 때 간단한 스크립팅보다는 플로킹을

사용하는 것이 훨씬 더 현실감 있는 결과를 얻을 수 있음

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

1 인칭 슈팅 게임에서 , 던젼 안의 먼스터들이 혼자 떨어져 있을 때에는 플레이어를 피하다가

무리를 이루면 플레이어를 공격하게 만드는 데에도 사용

Page 5: [1211 조진현][gpg1]플로킹

Boid

자동화된 에이전트

Page 6: [1211 조진현][gpg1]플로킹

핵심은 ?

주위를 어떻게 인식시킬 것인가 ?

Page 7: [1211 조진현][gpg1]플로킹

규칙은 ?

분리 (Separation)

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

정렬 (Alignment)

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

응집 (Cohesion)

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

회피 (Avoidance)

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

Page 8: [1211 조진현][gpg1]플로킹

8

분리 (Separation)

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

응집규칙만 있다면 보이드들은 서로 부딪히게 되는데 ,

그것을 방지하는 것이 분리 규칙 이 글에서는 …

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

Page 9: [1211 조진현][gpg1]플로킹

9

정렬 (Alignment)

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

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

이 글에서는 … 보이드의 방향과 속도를 주변 보이드들의 평균적인

속도와 방향으로 조정함으로써 이 규칙을 구현함

Page 10: [1211 조진현][gpg1]플로킹

10

응집 (Cohesion)

보이드들을 하나의 무리로써 모이게 하는 역할 이 글에서는 …

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

Page 11: [1211 조진현][gpg1]플로킹

11

회피 (Avoidance)

보이드가 장애물과 부딪히지 않도록 하기 위한 것 보이드가 어느 정도의 거리를 내다 보고 장애물이 존재하면

그것을 피할 수 있는 쪽으로 방향을 조정함으로써 구현 이 규칙은 장애물뿐만 아니라 어떠한 천적에 해당하는

에이전트 ( 토끼의 경우 늑대 , 비둘기 경우 매 ) 가 있을 때에도 적용

Page 12: [1211 조진현][gpg1]플로킹

원하는 것은 ?

어떤 벡터 (Vector) 를만들어낼 것인가 ?

Page 13: [1211 조진현][gpg1]플로킹

결합 (Cohesion)하여야 할 보이드

분리(Separation)하여야 할 보이드

정렬(Alignment)하여야 할 보이드

Page 14: [1211 조진현][gpg1]플로킹

- Stateless

- emergent behav-

ior

Flocking != FSM

Page 15: [1211 조진현][gpg1]플로킹

15

상태 없는 알고리즘

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

않는다는 점

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

알고리즘

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

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

적음

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

무리의 보이드들은 무리가 어디로 가는 지에 대해서는 전혀 알지 못하지만 , 모든

보이드들은 하나의 무리로서 움직이고 , 장애물과 적들을 피하며 , 다른 보이드들과

보조를 맞춰서 유동적으로 이동하게 됨

Page 16: [1211 조진현][gpg1]플로킹

- local space

- orientation

Boid 의 제어

Page 17: [1211 조진현][gpg1]플로킹

- 지각 범위 ( perception range )

- 속도 , 속도 변화량

제약 조건

Page 18: [1211 조진현][gpg1]플로킹

우리가 원하는 것은 ?

- 방향 벡터

- 스피드

Page 19: [1211 조진현][gpg1]플로킹

플로킹 구현을 위한 요소

- 세계 ( World )

- 무리

- Boid

Page 20: [1211 조진현][gpg1]플로킹

월드 개념의 확장

- 정적 세계

- 동적 세계

Page 21: [1211 조진현][gpg1]플로킹

- 정적 세계 목적지가 정해져 있는 상황 . 어떻게 갈 것인가 ?

목표 지향적이다 .

플로킹 그룹과 목표지의 관계

웨이 포인트 , 그리드의 생성 .

Page 22: [1211 조진현][gpg1]플로킹

- 동적 세계 캐릭터들이 움직일 경우를 다룬다 .

시시각각 변화한다 .

캐릭터들은 각각 연결 정보를 가진다 .

레이 트레이싱 활용 .

순간적으로 연산량이 급증할 수 있다 .

Page 23: [1211 조진현][gpg1]플로킹

벡터 누적 방식

- CBoid::KeepDistance

- CBoid::MatchHeading

- Cboid::SteerToCenter

Page 24: [1211 조진현][gpg1]플로킹

- 분리 (Separation)- CBoid::KeepDistance

Page 25: [1211 조진현][gpg1]플로킹

- 정렬 (Alignment) - CBoid::MatchHeading

Page 26: [1211 조진현][gpg1]플로킹

- 결합 (Cohesion)- CBoid::SteerToCenter

Page 27: [1211 조진현][gpg1]플로킹

영향을 받게 될 동료를 검색한다 .

룰을 통해서 벡터를 누적한다 .

영향을 전혀 받지 않을 때 , 이를 개선한다 .

가속도를 제한한다 .

속도 변화를 구하고 , 이를 제한한다 .

경계 처리를 한다 .

Page 28: [1211 조진현][gpg1]플로킹

28

코드 플로킹 예제의 핵심 클래스

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

CBoid : 임의 개수의 개체들

Page 29: [1211 조진현][gpg1]플로킹

29

보이드들의 무리 의미 무리 자체를 표현하기 위한 수단이라기 보다는 무리에

속한 보이드들을 관리하기 위한 도구 무리를 관리하는 데 다양한 함수 제공

절차 무리 만들어짐 거기에 보이드들이 추가됨 Cflock::ListOfFlocks[] 를 통해서 관리

CFlock 클래스

Page 30: [1211 조진현][gpg1]플로킹

30

CBoid 클래스 보이드의 이동 방식이나 환경을 감지하는 방식 ,

행동의 우선 순위 등 한 보이드의 행동과 존재를 규정하는 모든 측면들을 처리

CBoid::KeepDistance – 분리 행동 CBoid::MatchHeading – 정렬 행동 CBoid::SteerToCenter – 응집 행동 CBoid::FleeEnemies – 회피 행동 CBoid::ComputeRPY – 방위 조정 함수