Top Banner
TACTICAL PATH-FINDING WITH A* GPG3 3.6 William van der Sterren, CGF-AI
60

Pathfinding 관련 GPG스터디 발표

Jun 24, 2015

Download

Technology

Junghyun Kim
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Pathfinding 관련 GPG스터디 발표

TACTICAL PATH-FINDINGWITH A*

GPG3 3.6William van der Sterren, CGF-AI

Page 2: Pathfinding 관련 GPG스터디 발표

저자 소개

William van der Sterren

William van der Sterren 은 게임과 시뮬레이션을 위한 전술 AI 를 개발한다 . 그는 개발자 / 컨설턴트이자 CGF-AI 의 설립자이다 . William 은 Game Developers Conference에서 강연을 했으며 AI Programming Wisdom (Charles River Media, Inc., 2002) 와 Game Programming Gems 시리즈에 글을 기고했다 . 임베디드 시스템과 방위 시뮬레이션 분야의 연구 과학자로 일했던 그는 현재 차세대 콘솔용 게임의 AI 수석 프로그래머로 일하고 있다 .

Page 3: Pathfinding 관련 GPG스터디 발표

A* 에 대한 복습

A* 기본 알고리즘F = G + H비용값 = 현재 노드까지의 비용 + 휴리스틱 비용

- Open List 에서 F 값이 가장 작은 쪽을 우선적으로 탐색 하는 것

Page 4: Pathfinding 관련 GPG스터디 발표

A* 에 대한 복습

http://hackish.tistory.com/21 한국어 http://www.policyalmanac.org/games

/aStarTutorial.htm 영문 원본

Page 5: Pathfinding 관련 GPG스터디 발표

엄호 , 은폐까지 고려한 이동경로

Page 6: Pathfinding 관련 GPG스터디 발표

(a)최단경로 (b)엄호와 은폐를 제공하는 경로

Page 7: Pathfinding 관련 GPG스터디 발표

차이점

(a) : F = G + H (b) : F = D( 위험도 )+ H

Page 8: Pathfinding 관련 GPG스터디 발표

결함이 있는 전술적경로 – 짧은 네번의 노출보다 긴 하나의 노출이 선택되었다.

Page 9: Pathfinding 관련 GPG스터디 발표

알고리즘 설명

미사일 런처에 노출된 지역이다 : -> 총누적위험도 D = 노출된시간 +

누적 노출위험도

- 미사일 런처에 노출되지 않은 지역이다 :-> 총누적위험도 D = 노출되지 않은 시간 * 감소 상수 K * 총누적위험도

-> F = D( 총누적위험도 ) + H

Page 10: Pathfinding 관련 GPG스터디 발표

(a) 적이 움직이지 않는다는 가정하의 경로 (b) 적이 두 걸음 움직인다는 가정하의 경로

Page 11: Pathfinding 관련 GPG스터디 발표

기타 전술적 개선방안

이동하는 지점의 적의 사선 ( 射線 )(Line Of Fire) 의 개수를 샌다 : 사선이 적으면 적이 소수 이므로 리스크가 준다 .

잠입요소 강조 : 잡초 등 엄폐가 가능한 요소가 있는 곳 외에 작은 벌점을 부여

탱크 : 능선을 피한다 . 마린 : 사다리 피한다 , 다른 분대원들이 저격 당한 장소 피한다 . 등등 유닛에 따른 지형학적 벌점을 부여

Page 12: Pathfinding 관련 GPG스터디 발표

성능

이렇게 오리지널 A* 에 case by case 로 전술적인 능력을 더하면 더할수록 느려지는건 당연 !

그러니까 그냥 각각의 지형타일의 참조테이블을 일일이 만들어서 길찾기 할 때 우선순위를 정하면 빠르고 좋을 거임 !

Page 13: Pathfinding 관련 GPG스터디 발표

섹터 기반 LOF 참조 테이블과 그에 의한 경로

Page 14: Pathfinding 관련 GPG스터디 발표

섹터기반의 미리 계산된 LOF 정보를 이용한 위험도 근사

미리 전체 섹터의 위험도를 지정해놓은 참조테이블을 구성

현재 플레이어가 위치한 곳에서 적까지의 위치에 대해서 45 도 안에 해당하는 섹터의 위험도를 가져옴

그리고 다시 위험도 기반 A* 를 돌림

Page 15: Pathfinding 관련 GPG스터디 발표

(a) 최단 경로를 위한 검색 공간 (b) 전술적 경로를 위한 검색 공간

Page 16: Pathfinding 관련 GPG스터디 발표

확장된 A* 비용에 대한 해결책

전술적 비용함수 계산시 부동소수점 연산을 자제 : 정수 연산을 이용해서 부동소수점 계산을 근사 하여 성능을 향상

측면과 후방에 비용이 큰 가상의 장애물을 도입한다 : 쓸 때 없이 옆이랑 뒤랑 찾는 시간을 아끼자 .

영역을 나누어 전략적 길찾기를 한다 : 섹터 단위 보다 크니까 빠르겠죠 ?

Page 17: Pathfinding 관련 GPG스터디 발표

A FAST APPROACH TO NAVIGATION MESHES

GPG3 3.7Stephen White and Christopher Christensen, Naughty Dog

Page 18: Pathfinding 관련 GPG스터디 발표

저자 소개

Christopher Christensen [email protected]

Christopher 는 1982 년 Apple II+ 컴퓨터로 처음 프로그래밍을 시작했다 . 1994 년 컴퓨터 공학 석사 학위를 땄지만 , 학계에 남는 대신 Interplay Produc-tions 에서 PC 롤플레잉 게임을 프로그래밍하는 일을 하게 되었다 . 그 후 계속 게임 업계에 남아 있으며 , 현재는 Santa Monica, California 의 Naughty Dog 에서 프로그래머로 일하고 있다 .

Page 19: Pathfinding 관련 GPG스터디 발표

저자 소개

Stephen White [email protected]

Stephen White는 Naughty Dog의 프로그래밍 디렉터이며 다양한 플랫폼들에서 전문 비디오 게임 프로그래머로 15년 이상 일했다 . Stephen의 작품들 중 중요한 것 몇 가지를 들자면 Jak and Daxter: The Precursor Legacy, Crash Bandicoot: Warped, Crash Bandicoot: Cortex Strikes Back, Bril-liance, Deluxe Paint ST 등이 있다 . 그는 비디오 게임 만들기에 매우 열성적이며 , 비디오 게임 개발의 실질적으로 모든 측면들에 관여해왔다 . Stephen은 아내 Linda(10 년 된 아내)의 헌신적인 남편이자 Logan(10 달 된 아들)의 헌신적인 아버지이다 .

Page 20: Pathfinding 관련 GPG스터디 발표

네비게이션 메시 복습

네비게이션 메쉬란 ? : 3 차원 지형을 2D 처럼 간단하게 표현

하는 방식으로 Object 가 이동 가능한 모든 지형을 Cell( 삼각형 ) 으로 표시 하여 A* 와 같은 길찾기 알고리즘을 쉽게 적용 할 수 있게 해 줍니다 .

Page 21: Pathfinding 관련 GPG스터디 발표

네비게이션 메쉬의 예 – Unity3d

Page 22: Pathfinding 관련 GPG스터디 발표

Jack and Daxter : The Precuser Legacy

Page 23: Pathfinding 관련 GPG스터디 발표

정적인 장애물 대 동적인 장애물

정적 장애물 : 절벽 , 벽 , 나무 , 기둥 동적 장애물 : 크리처 , 플레이어 , 움직이는

플랫폼 , 상자

동적장애물은 미리 계산된 길찾기 꽁수나 미리 계산된 경로를 사용할 수 없게 만들기

때문에 더 까다롭다 .

Page 24: Pathfinding 관련 GPG스터디 발표

네비게이션 메시

Page 25: Pathfinding 관련 GPG스터디 발표

포탈 (Portal)

포탈 ? : 다른 삼각현으로의 관문(doorway) 에 해당

삼각형의 변은 3 개 , 그러므로 포탈도 3 개 3 변이 다른 삼각형으로 모두 연결되어있을

경우 모든 포탈을 2 비트로 표현가능 00, 01, 10, 11 : 여분의 값이 하나 남네요 !

Page 26: Pathfinding 관련 GPG스터디 발표

포탈 (Portal)

현재 삼각형에서 다른 삼각형으로 이동할 때 경로를 찾는 방법 :

방법 1) A* 를 사용한다 . 방법 2) 아까 언급한 미리 계산해놓은

각각의 삼각형들의 포탈 정보를 담은 2 차원 배열테이블을 이용

Page 27: Pathfinding 관련 GPG스터디 발표

2 차원 배열 테이블을 이용

테이블의 메모리 소비량은 대략 메시의 삼각형 개수의 제곱값을 4 로 나눈 것에 해당

- 삼각형이 256 개 일 때 포탈정보를 저장해놓은 테이블의 소비 메모리는 16KB

테이블 참조를 통해서 어떤 포탈을 사용할 것인지 찾아낼 수 있으므로 속도가 매우 빠름

Page 28: Pathfinding 관련 GPG스터디 발표

포탈을 이용한 간단한 이동의 예

Page 29: Pathfinding 관련 GPG스터디 발표
Page 30: Pathfinding 관련 GPG스터디 발표

분기점에서의 문제

목표에 도달 할 수 있는 포탈이 둘 이상인 경우 , 테이블 항목은 목표에 보다 가까운 포탈을 알려준다 .

하지만 미리 계산된 테이블은 단지 한 삼각형에서 다른 삼각형으로 이동하는 방법만 알려줄 뿐 , 한 삼각형 점의 정확한 위치와 다른 삼각형 점의 정확한 위치는 알려주지 않으며 , 따라서 테이블을 통해 얻은 경로가 반드시 최단 경로라 할 수는 없다 . But 그리 문제는 안된다 .

Page 31: Pathfinding 관련 GPG스터디 발표

테이블 만들기

삼각형의 중심 (세 꼭지점과의 거리가 동일한 점 ) 을 계산

Simple flood-fill 알고리즘을 사용하여 삼각형들을 연결하는 경로들을 찾는다 .

두 삼각형들 사이의 경로가 둘 이상이라면 더 긴 경로를 폐기한다 .

Page 32: Pathfinding 관련 GPG스터디 발표

네비게이션 메시를 이쁘게 만들자

Page 33: Pathfinding 관련 GPG스터디 발표

크리처의 네비게이션 메시 위의 표현

2 차원 원으로 표현한다 .

원으로 하면 회전과 무관하기 때문에 네비게이션 메시나 장애물과의 충돌 시 크리처의 방향을 고려할 필요가 없다 .

크리처와 네비게이션 메시의 충돌 판정을 위해서 원 대 선분 , 원 대 삼각형 교차 판정을 일일이 하면 열라 느려진다 .

Page 34: Pathfinding 관련 GPG스터디 발표

정적인 장애물을 위한 네비메시

Page 35: Pathfinding 관련 GPG스터디 발표

동적인 장애물

Page 36: Pathfinding 관련 GPG스터디 발표

정적 , 동적 장애물을 동시에 피해가자 ! 1. 네비게이션 메시로 정적인 장애물을

피하는 경로를 알아낸다 . 2. 그 경로에 동적인 장애물 ( 원 ) 이 있는지 파악한다 .

3. 동적인 장애물이 있다면 이동백터를 수정한다 .

4. 수정된 이동백터에 의한 이동이 네비메시를 벋어나면 메시 가장자리까지만 이동하도록 벡터를 수정한다 .

Page 37: Pathfinding 관련 GPG스터디 발표

추가적인 네비게이션 메시 고려사항들 나선형 계단이라면 ? 3 차원이네요 ?- 네비게이션 매시의 한 삼각형 안에서

크리처가 가질 수 있는 최대 높이를 설정- 그 높이 이하려면 크리처는 여전히 그 삼각형

안에 속하게 되는 식- 점프 삼각형 포탈 : 그 포탈로 들어오는 순간

다음 삼각형의 포탈로 바로 점프를 시킴

Page 38: Pathfinding 관련 GPG스터디 발표

CHOOSING A RELATION-SHOP BETWEEN PATH-FINDING AND COLLISION

GPG3 3.8Thomas Young, PathEngine

Page 39: Pathfinding 관련 GPG스터디 발표

저자 소개

Thomas Young [email protected]

Thomas는 오래전 Amiga를 위한 하드웨어 트릭들을 코딩하면서 게임

프로그래밍을 시작했다 . 그는 Sussex University에서 AI를 전공하고

학위를 땄다 . 그 후 그는 Gremlin Interactive(Sheffield, U.K.)에서 AI

프로그래머로 일하면서 주로 캐릭터가 환경의 장애물들을 이해하게 만드는

것과 캐릭터가 좀 더 사실적으로 이동하게 하는 것에 초점을 두고 작업을

했다 . 2000 년 그는 Gremlin(현재는 Infogames, Sheffield Hose)를

떠나서 독립 계약자로 일했으며 정교한 길찾기 시스템을 미들웨어

라이선스로 제공하는 회사를 설립했다 (http://www.pathengine.com).

Page 40: Pathfinding 관련 GPG스터디 발표

개요

복잡한 의사결정 시스템을 가지고 있는 길찾기 시스템이라고 해도 맵에 끼어버리면 한순간에 유저들의 평에 나락으로 떨어진다 .

만약 , 케릭터가 환경의 장애들을 적절히 다룰 수 있는 능력을 가지고 있다면 , 아주 간단한 의사결정 구조만으로도 그럴듯하게 보이는 AI를 만들 수 있다 .

길찾기 시스템과 충동 처리의 관계 : 케릭터가 환경 안의 장애물에 반응하는 방법을 이해하게 만드는 핵심적인 요인

Page 41: Pathfinding 관련 GPG스터디 발표

충돌 시스템의 제어 하에서의 이동

케릭터가 벽같은 장애물을 뚫고 나가게 하는 일이 게임에서 발생한다면 대략 낭패 !

그래서 , AI 의 의사결정은 먼저 충돌 시스템에서 OK 가 떨어진 다음에 케릭터의 이동으로 이어져야 한다 .

그래서 행동 코드는 충돌 코드에 강한 의존성을 갖게 된다

Page 42: Pathfinding 관련 GPG스터디 발표

길찾기를 위한 충돌 모형

Page 43: Pathfinding 관련 GPG스터디 발표

Approach #1:fault-toler-ant AI (좀 틀려도 되 AI) 사람이 돌아다니면서 물체를 피할 때

물리학을 따지고 수학으로 최적화 해서 돌아다니는 건 아니다 .

길 찾기 공간을 수작업으로 편집하거나 충돌처리가 일어나는 매카니즘은 접어두고 맵이나 충돌할 만한 오브젝트를 보고 대략 피해갈 수 있는 루트를 자동으로 생성

Page 44: Pathfinding 관련 GPG스터디 발표

Steering behavior(캐릭터 운전 )

Page 45: Pathfinding 관련 GPG스터디 발표

fault-tolerant AI 의 장단점

충돌이 단순하고 게임 세계가 비교적 작을때 쓰면 탁월한 효과 !

하지만 , 충돌상황이 상당히 복잡하면 길찾기를 대충 때려서 하기가 힘들어진다 .

또한 , 많은 종류의 상황들에 적용되어야 할 경우 (앞에서 말한 위험지역 돌아가기 등 ?) 대충 찾은 길찾기는 캐릭의 사망을 유도

Page 46: Pathfinding 관련 GPG스터디 발표

이럴 때는 운전하기도 힘들다 .

Page 47: Pathfinding 관련 GPG스터디 발표

해결책 ?

일일이 지정 : 지그재그 할 때마다 캐릭터를 적절히 회전시키고 다음 지그재그

턴시점에서 방향도 바꾸고 다시 캐릭터 회전시키고…헉헉 ..

애시 당초 못가게 하면 되잖아 !!! 맵을 잘 만들란 말야 . 아예 좁은 틈은 못가게

하던가 .

충돌 피드백 : 한번 가보고 막혔으면 그 terrain 은 못 가는 곳으로 체크 . 그런데

어쩌다가 빠져 나왔는데 못 가는 체크되어있으면 갇히는 겁니다 .. GM 부르고

게시판에 영자 욕하고… OTL

신경망 훈련 같은 기계 학습 기법들을 사용한다 . 배우면서 크는거죠… . 모든 막힌

부분을 다 찾아낼 때까지 -_-;

그러니까 복잡한 데 쓰지 말란 겁니다 .

Page 48: Pathfinding 관련 GPG스터디 발표

Approach #2:Path-Finding in a Subset of Unobstructed Space 개방 공간의 부분집합에서의 길 찾기 (먼

소리야 )

절대로 충돌이 일어나지 않는 지형만 때내서 돌아다니자는 겁니다 .

그러면 충돌처리도 생각 안 해도 되니까 아까 말한 복잡한 예외상황도 안 일어나겠죠 .

Page 49: Pathfinding 관련 GPG스터디 발표

길 넓히는 무적박스

Page 50: Pathfinding 관련 GPG스터디 발표

무적박스 방식에도 문제는 있다 .

예 1) 카우보이 캐릭터가 말을 타고 그랜드 캐넌 맵에서 좁은

협곡도 충돌 없이 잘 가다가 갑자기 버팔로 때가 앞에서

몰려와서 이리 치이고 저리 치이다가 맵 밖으로 튕겨버렸다 .

예 2) 좁은 해구를 요리조리 잘 피해서 순항하던 독일잠수함 U-

BOAT 가 기뢰를 맞더니 폭발력의 반동으로 맵 밖으로

튕겨버렸다 .

이럴 때는 그냥 카트라이더의 그것 처럼 이동 가능한 곳으로

옮겨주는 처리를 한다 .

이때 이동가능 한 곳으로 돌아왔을 때부터는 모든 충돌을

무시하는 신공을 쓰면 최고다 . 두어번 클베를 해도 심신이

편할 수 있다 .

Page 51: Pathfinding 관련 GPG스터디 발표

유효한 위치찾기

방법 1) 이동 때마다 방금전의 유효한 위치를 보존해

두는 것 .

방법 1 의 문제점 ) 캐릭터가 이미 길찾기 공간 밭에서

상당한 거리를 움직였다면 소용이 없다 .

방법 2) 지금 서있는 길찾기 외부 공간에서 가장 가까운

길찾기 공간 내부의 점을 알아내는 것 .

방법 2 의 문제점 ) 지름길용 벾뚫기 버그를 이용할

문제가 생긴다 .

Page 52: Pathfinding 관련 GPG스터디 발표

유효한 위치 찾기

Page 53: Pathfinding 관련 GPG스터디 발표

Putting Backbones In the World 월드에 뼈를 넣자 ! (응 ?)

절대로 못지나가는 지형에 본을 박아 놓으면 찡기는 버그를 이용해서 벽 뛰어넘는 꽁수는 막을 수 있을 겁니다 .

Page 54: Pathfinding 관련 GPG스터디 발표

Approach #3: Using the Pathfinder Itself for Character collision 분리되어 있는 길찾기 모듈 (Pathfinder) 자체를 케릭터 충돌에 사용한다 .

캐릭터가 길찾기 공간 바깥으로 나가 버리는 일이 일어나지 않는다 .

실시간으로 길찾기 모듈이 케릭터의 현재위치를 이해할 수 있다 따라서 , 캐릭터는 길찾기 모듈이 돌려준 경로를 항상 안심하고 따라갈 수 있다 .

단 , 케릭터 충돌에 대해서 단순화된 메커니즘을 사용해야 한다 . 그리서 멋은 없어지지만 빠르고 안정적이고 예측가능한 이점이 생긴다 .

Page 55: Pathfinding 관련 GPG스터디 발표

보완책 : 계층화된 충돌처리

그냥 월드를 돌아다니면서 길을 갈 수 있느지 없는지는 길찾기 모듈이 관장하는 길찾기 충돌층이 처리

월드를 돌아다니다가 케릭터의 높이나 방향이나 팔 다리 같은 것이 월드에 걸려서 길찾기에 영향이 주는지 등의 판단은 월드 충돌층에서 관리

평소에는 길찾기 충돌층만 쓰면 속도면에서 이점이 있고 , 복잡한 충돌처리가 필요한 지형이나 이벤트시에는 월드 충돌층을 이용하면 되니까 멋도 살릴 수 있다 .

Page 56: Pathfinding 관련 GPG스터디 발표

경로를 따르는 이동

Page 57: Pathfinding 관련 GPG스터디 발표

경로를 따르는 이동

Page 58: Pathfinding 관련 GPG스터디 발표

대략 근사로 가려고 해도 이런문제가… .

Page 59: Pathfinding 관련 GPG스터디 발표

결론 및 감상

머든지 삽질을 하다 보면 길이 생긴다 . 기본 착상에 따라 맞춤 꽁수는 무궁무진하게

나오는 거니까 책에 있는 내용들은 이제 정답 이라는 것이 아니라 그런 꽁수를 찾아나가는 다큐멘터리 정도라 이해하면 되겠다 .

Page 60: Pathfinding 관련 GPG스터디 발표

終わり

お疲れ様で

した 

이에요…

설마

질문

?