How to Create Autonomously Moving Game Agents 아꿈사 :  http://cafe.naver.com/architect1 김태우 :  [email_address]
INDEX Autonomous Agent Vehicle Model Steering Behavior
Autonomous Agent
자동적 에이전트 자신만의 예정된 일을 추구하면서  자신의 환경을 감지하고 ,  시간에 따라 그러한 환경에 작용하며 , 그래서 미래에 감지할 것에 영향을 미치는 , 그러한 환경 안에 또는 그 일부분으로서  위치하고 있는 시스템이다 .     목적지향적이며 ,  시간에 따라 환경과  상호작용하는 시스템이다 .  작동하기 시작하면 ,  프로그래머의 간섭 없이 단지 자신을 돌볼 뿐이다 .
자동 에이전트의 움직임
Vehicle Model
운반기 모델 점질량을가지는 기본적인 운반기를 기술하는  데이터를 캡슐화하고 있다 . 한 편으로는 ,  매우 간편하고 계산적으로 적은  물리 - 기반 모델 점질량은 속도 ( 선형 가속도 ) 를 가지지만 ,  관성 모멘트 ( 회전 가속도 ) 는 없다 . 다른 편으로는 ,  점질량은 실세계에 존재하지 않으므로 ,  강력한 물리 모델이 될 수 없다 . 질량을 가지는 어떤 물리 모델이든 반지름을 가져야 하므로 관성 모멘트를 가진다 .  이 지나치게 간소화된 비 - 물리 운반기 모델은  꽤 편하고 ,  일반성의 손실 없이 여겨 진다 . 언제나  더 타당하고 ,  더 현실적인  물리 기반 운반기 모델을 대신할 수 있다 .
운반기의 물리적 현상 갱신하기  조종힘 계산 . Calculate() 은 모든 운반기의  활성화된 조종 행동들을 합계하여 총 조종힘을 반환   조종힘을 가속도로 변환  가속도로 속도를 갱신  운반기의 위치를 새로운 속도로 갱신  방향은 속도에 따라 정렬되어야 하므로 ,  정규화된 속도 벡터와 동등함을 유지하면서 갱신  운반기의 속도가 임계값 이상이어야만 계산
BaseGameEntity MovingEntity SteeringBehaviors GameWorld Vehicle 1 *
 
 
 
 
 
Steering Behavior
Seek and Flee
SEEK FLEE
Arrive
 
Persue and Evade
PERSUE EVADE
Wander
rate Wander Direction 교재  P.110  참조 :  그림  3.5
Obstacle Avoidance
교재  P.112  참조 :  그림  3.7  /  3.8 Collision Threat Collision Box
Wall Following
 
Hide
Path Following
 
Offset Persuit
Follow One Another Follow Leader
References Steering Behaviors For Autonomous Characters http://www.red3d.com/cwr/steer OpenSteer http://opensteer.sourceforge.net/doc.html
 
Lisence

3장 자동적으로 움직이는 게임 에이전트 생성법

  • 1.
    How to CreateAutonomously Moving Game Agents 아꿈사 : http://cafe.naver.com/architect1 김태우 : [email_address]
  • 2.
    INDEX Autonomous AgentVehicle Model Steering Behavior
  • 3.
  • 4.
    자동적 에이전트 자신만의예정된 일을 추구하면서 자신의 환경을 감지하고 , 시간에 따라 그러한 환경에 작용하며 , 그래서 미래에 감지할 것에 영향을 미치는 , 그러한 환경 안에 또는 그 일부분으로서 위치하고 있는 시스템이다 .  목적지향적이며 , 시간에 따라 환경과 상호작용하는 시스템이다 . 작동하기 시작하면 , 프로그래머의 간섭 없이 단지 자신을 돌볼 뿐이다 .
  • 5.
  • 6.
  • 7.
    운반기 모델 점질량을가지는기본적인 운반기를 기술하는 데이터를 캡슐화하고 있다 . 한 편으로는 , 매우 간편하고 계산적으로 적은 물리 - 기반 모델 점질량은 속도 ( 선형 가속도 ) 를 가지지만 , 관성 모멘트 ( 회전 가속도 ) 는 없다 . 다른 편으로는 , 점질량은 실세계에 존재하지 않으므로 , 강력한 물리 모델이 될 수 없다 . 질량을 가지는 어떤 물리 모델이든 반지름을 가져야 하므로 관성 모멘트를 가진다 . 이 지나치게 간소화된 비 - 물리 운반기 모델은 꽤 편하고 , 일반성의 손실 없이 여겨 진다 . 언제나  더 타당하고 , 더 현실적인 물리 기반 운반기 모델을 대신할 수 있다 .
  • 8.
    운반기의 물리적 현상갱신하기 조종힘 계산 . Calculate() 은 모든 운반기의 활성화된 조종 행동들을 합계하여 총 조종힘을 반환 조종힘을 가속도로 변환 가속도로 속도를 갱신 운반기의 위치를 새로운 속도로 갱신 방향은 속도에 따라 정렬되어야 하므로 , 정규화된 속도 벡터와 동등함을 유지하면서 갱신 운반기의 속도가 임계값 이상이어야만 계산
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
    rate Wander Direction교재 P.110 참조 : 그림 3.5
  • 24.
  • 25.
    교재 P.112 참조 : 그림 3.7 / 3.8 Collision Threat Collision Box
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
    Follow One AnotherFollow Leader
  • 33.
    References Steering BehaviorsFor Autonomous Characters http://www.red3d.com/cwr/steer OpenSteer http://opensteer.sourceforge.net/doc.html
  • 34.
  • 35.

Editor's Notes

  • #3 뭘 원하나 ? 계층 로직에는 뭐가 있나 ? 장점은 ? 단점은 ? 그래서 어떻게 해결 ?
  • #6 액션 선택 목표를 선택 , 어떤 계획을 따라야 하는지를 결정할 의무가 있는 행동의 부분 ' 여기로   가라 ' 및 'A, B 그리고 C 를 하라 ' 라고 지시해주는 부분 조종 액션 선택층에 의해 설정된 계획을 만족시킬   수 있는 바람직한 궤적을 계산 에이전트가 어디로 가야만 하고 그곳에 도달하기 위해 얼마나 빠르게 움직여야 하는지를 기술하는   조종힘을 만들어 낸다 이동력 A 에서 B 까지 지나가는 방법 (HOW) 이다 . 만약 낙타 , 탱크 및 금붕어의 움직임 구조를 구현해서 북쪽으로 가라는 명령이 주어진다면 이동의 의도는 동일하지만 ,   움직임 생성을 위해 서로 다른 기계적 과정을 사용 조종층에서 분리함으로써 완전히 다른 형식의 이동력에 대해서 별도의 수정 없이 동일한 조종 행동을 활용할 수   있게 한다 .
  • #12 Heading / Side vector 움직이는 엔티티를 위한 지역 좌표계를 정의 매 프레임 마다 갱신
  • #15 조종힘 계산 . Calculate() 은 모든 운반기의 활성화된 조종 행동들을 합계하여 총 조종힘을 반화 조종힘을 가속도로 변환 가속도로 속도를 갱신 운반기의 위치를 새로운 속도로 갱신 방향은 속도에 따라 정렬되어야 하므로 , 정규화된 속도 벡터와 동등함을 유지하면서 갱신 운반기의 속도가 아주 작은 임계값 이상이어야만 계산
  • #17 원하는 속도를 계산 에이전트가 목표 위치에 도달하는 데 필요한 속도 반환값인 조종힘 = 원하는 속도 – 에이전트의 현재 속도
  • #18 MAGENTA: 운반기의 속도 BLUE: 조종힘
  • #19 목표에서 멀리 떨어져 있는 경우 도착하기 행동이 어떻게 찾기와 동일하게 동작하는지 목표에서 가까이 다가갔을 때 감속이 어떻게 발효하는지를 주목한다
  • #20 MAGENTA: 운반기의 속도 BLUE: 조종힘
  • #21 추격하기 에이전트가 움직이는 목표를 가로채는 것이 요구될 때 유용 목표가 앞으로 어디로 갈 것인지를 예측하고 , 그 위치와 현재 위치를 상쇄하는 방향으로 , 간격을 좁혀감에 따라 조정도 해가면서 달릴 것이다 . Quarry: 사냥감
  • #22 MAGENTA: 운반기의 속도 BLUE: 조종힘 얼마나 먼 미래 시점까지 예측해야만 하는가를 결정 예측하는 정도는 추격자와 도피자의 ‘ 거리에 비례 ’ & ‘ 속도에 반비례 ’ 이 시간이 결정되면 , 추격자가 찾기를 해야 할 미래 위치를 예상할 수 있다 .
  • #23 자신이 처한 환경을 무작위로 걸어가는 인상을 주는 조종힘 빨선 : 조종힘 흰원 : 목표물 보라원 : 배회하기 반경 에이전트 ~ 보라원중점 : 배회하기 거리
  • #24 MAGENTA: 운반기의 속도 BLUE: 조종힘 CYAN: 조종 방향 배회 방향 ( 빨간점 ) 수정된 배회 방향은 검은원 (r:2) 에 놓여 있도록 제한된다 . strength : 0~1 범위의 힘은 흰선을 따라 밖으로 나가려는 빨간점의 움직임으로 고려될 수 있다 . rate : 배회 방향이 얼마나 빨리 바뀌는지를 제어하는 0~1 범위의 비율은 , 흰원 (r:0.6) 의 반지름으로 표현된다 .
  • #26 MAGENTA: 운반기의 속도 BLUE: 조종힘 흰상자의 길이 : 운반기의 현재 속도 * 상수 시간 상자와 충돌하는 장에물 : 잠재적인 충돌 위협 최근접 위협이 회피하기 위해 선택되며 , 초록 경계로 표현된다 . 장애물을 피하기 위해 , 측면의 조종힘이 장애물의 중심과 반대 방향으로 적용된다 .
  • #28 MAGENTA: 운반기의 속도 BLUE: 조종힘 움직일 때 벽과 주어진 거리를 유지하는 것이 목적 현재 속도에 기반한 ‘ 미래의 위치 ( 껌점 ) ’ 를 예측 미래의 위치는 ‘ 벽의 최근접점 ( 빨점 ) ’ 으로 투영 ‘ 벽의 노말 ( 빨선 ) ’ 을 따라서 ‘ 벽의 최근접점 ( 빨점 ) ’ 을 원하는 OFFSET 만큼 이동시키면 ‘ 타겟점 ( 빨원 ) ’ 을 구할 수 있다 . 최종적으로 타겟점으로 SEEK 행동을 사용한다 .
  • #29 운반기를 어느 위치에 둠으로써 , 자신이 피하려고 하는 에이전트와 자신 사이에 항상 장애물이 있도록 하는 것 사격에서 엄폐물 찾기 NPC 가 숨거나 , 게임 실행자에게 슬며시 접근 [ 행동 실행 순서 ] 각 장애물들에 대해 ‘ 은신 지점 ( 빨점 ) ’ 을 결정 각 빨점과의 거리가 계산되고 , 운반기는 최근접점을 향하여 ‘ SEEK ’ 행동을 수행 . 적절한 장애물을 발견할 수 없으면 ‘ EVADE ’ 수행
  • #30 운반기가 경로를 형성하고 있는 일련의 중간 지점들을 따라서 이동하도록 조종하는 힘을 제공 . 순찰 , 험난한 지역 갈 수 있게 , 경주 트랙
  • #32 운반기를 목표 운반기로부터 명시된 오프셋 만큼 떨어진 위치를 유지하기 위해 요구되는 조종힘을 계산 대형 / 진영을 생성하는 데 특히 유용 오프셋은 항상 ‘ 리더 ’ 공간에서 정의되기 때문에 조종힘 계산전에 우선적으로 해야하는 일은 , 우선적으로 세계 공간에서 오프셋들의 위치를 결정하는 것이다 . 이후부터는 , 함수는 추격하기와 유사하게 진행된다 .
  • #33 MAGENTA: 운반기의 속도 BLUE: 조종힘 The leader following behavior combines separation (a desire to avoid crowding) and arrival (a desire to move towards a point, slowing as it draws near). 도착하기 ‘ 찾기 ’ 보다 훨씬 유연한 움직임을 제공 . 운반기의 최대 속도와 최대힘의 설정에는 그다지 의존하지 않기 때문에 보다 더 사용됨 . ‘ 찾기 ’ 는 오히려 follow 들이 leader 를 공격하는 것 처럼 보일 수도 … 예 반대편 마크 우주선에 도킹 비행기 뒤 쫓아가기 전투 대형들을 구현하기