SlideShare a Scribd company logo
1 of 60
Tactical Path-Findingwith A* GPG3 3.6 William van derSterren, CGF-AI
저자 소개 William van derSterren        William van derSterren은 게임과 시뮬레이션을 위한 전술 AI를 개발한다. 그는 개발자/컨설턴트이자 CGF-AI의 설립자이다. William은 Game Developers Conference에서 강연을 했으며 AI Programming Wisdom (Charles River Media, Inc., 2002)와 Game Programming Gems 시리즈에 글을 기고했다. 임베디드 시스템과 방위 시뮬레이션 분야의 연구 과학자로 일했던 그는 현재 차세대 콘솔용 게임의 AI 수석 프로그래머로 일하고 있다.
A*에 대한 복습 A* 기본 알고리즘 F = G + H 비용값=현재 노드까지의 비용 + 휴리스틱 비용 - Open List에서 F값이 가장 작은 쪽을 우선적으로 탐색 하는 것
A*에 대한 복습 http://hackish.tistory.com/21한국어 http://www.policyalmanac.org/games/aStarTutorial.htm영문 원본
엄호, 은폐까지 고려한 이동경로
(a)최단경로 (b)엄호와 은폐를 제공하는 경로
차이점  (a) : F = G + H (b) : F = D(위험도)+ H
결함이 있는 전술적경로– 짧은 네번의 노출보다 긴 하나의 노출이 선택되었다.
알고리즘 설명 미사일 런처에 노출된 지역이다 :    -> 총누적위험도D =  노출된시간+ 누적 노출위험도  ,[object Object],-> 총누적위험도D = 노출되지 않은 시간 * 감소 상수 K * 총누적위험도  -> F = D(총누적위험도) + H
(a) 적이 움직이지 않는다는 가정하의 경로(b) 적이 두 걸음 움직인다는 가정하의 경로
기타 전술적 개선방안 이동하는 지점의 적의 사선(射線)(Line Of Fire)의 개수를 샌다: 사선이 적으면 적이 소수 이므로 리스크가 준다. 잠입요소 강조 : 잡초 등 엄폐가 가능한 요소가 있는 곳 외에 작은 벌점을 부여 탱크 : 능선을 피한다. 마린 : 사다리 피한다, 다른 분대원들이 저격 당한 장소 피한다. 등등 유닛에 따른 지형학적 벌점을 부여
성능 이렇게 오리지널 A*에 case by case로 전술적인 능력을 더하면 더할수록 느려지는건 당연! 그러니까 그냥 각각의 지형타일의 참조테이블을 일일이 만들어서 길찾기 할 때 우선순위를 정하면 빠르고 좋을 거임!
섹터 기반 LOF 참조 테이블과 그에 의한 경로
섹터기반의 미리 계산된 LOF 정보를 이용한 위험도 근사 미리 전체 섹터의 위험도를 지정해놓은 참조테이블을 구성 현재 플레이어가 위치한 곳에서 적까지의 위치에 대해서 45도 안에 해당하는 섹터의 위험도를 가져옴 그리고 다시 위험도 기반 A*를 돌림
(a) 최단 경로를 위한 검색 공간 (b) 전술적 경로를 위한 검색 공간
확장된 A* 비용에 대한 해결책 전술적 비용함수 계산시 부동소수점 연산을 자제 : 정수 연산을 이용해서 부동소수점 계산을 근사 하여 성능을 향상 측면과 후방에 비용이 큰 가상의 장애물을 도입한다: 쓸 때 없이 옆이랑 뒤랑 찾는 시간을 아끼자. 영역을 나누어 전략적 길찾기를 한다: 섹터 단위 보다 크니까 빠르겠죠?
A Fast Approach to navigation Meshes GPG3 3.7 Stephen White and Christopher Christensen, Naughty Dog
저자 소개 Christopher Christensen cchristensen@naughtydog.com Christopher는 1982년 Apple II+ 컴퓨터로 처음 프로그래밍을 시작했다. 1994년 컴퓨터 공학 석사 학위를 땄지만, 학계에 남는 대신 Interplay Productions에서 PC 롤플레잉 게임을 프로그래밍하는 일을 하게 되었다. 그 후 계속 게임 업계에 남아 있으며, 현재는 Santa Monica, California의 Naughty Dog에서 프로그래머로 일하고 있다.
저자 소개 Stephen White swhite@naughtydog.com Stephen White는 Naughty Dog의 프로그래밍 디렉터이며 다양한 플랫폼들에서 전문 비디오 게임 프로그래머로 15년 이상 일했다. Stephen의 작품들 중 중요한 것 몇 가지를 들자면 Jak and Daxter: The Precursor Legacy, Crash Bandicoot: Warped, Crash Bandicoot: Cortex Strikes Back, Brilliance, Deluxe Paint ST 등이 있다. 그는 비디오 게임 만들기에 매우 열성적이며, 비디오 게임 개발의 실질적으로 모든 측면들에 관여해왔다. Stephen은 아내 Linda(10 년 된 아내)의 헌신적인 남편이자 Logan(10 달 된 아들)의 헌신적인 아버지이다.
네비게이션메시 복습 네비게이션메쉬란? : 3차원 지형을 2D처럼 간단하게 표현 하는 방식으로 Object가 이동 가능한 모든 지형을 Cell(삼각형)으로 표시 하여 A*와 같은 길찾기 알고리즘을 쉽게 적용 할 수 있게 해 줍니다.
네비게이션메쉬의 예 – Unity3d
Jack and Daxter : The Precuser Legacy
정적인 장애물 대 동적인 장애물 정적 장애물 : 절벽, 벽, 나무, 기둥 동적 장애물: 크리처, 플레이어, 움직이는 플랫폼, 상자 동적장애물은  미리 계산된 길찾기 꽁수나 미리 계산된 경로를 사용할 수 없게 만들기  때문에 더 까다롭다.
네비게이션메시
포탈(Portal) 포탈? : 다른 삼각현으로의 관문(doorway)에 해당 삼각형의 변은 3개, 그러므로 포탈도 3개 3변이 다른 삼각형으로 모두 연결되어있을 경우 모든 포탈을 2비트로 표현가능 00, 01, 10, 11 : 여분의 값이 하나 남네요!
포탈(Portal) 현재 삼각형에서 다른 삼각형으로 이동할 때 경로를 찾는 방법 :  방법 1) A*를 사용한다. 방법 2) 아까 언급한 미리 계산해놓은 각각의 삼각형들의 포탈 정보를 담은 2차원 배열테이블을 이용
2차원 배열 테이블을 이용 테이블의 메모리 소비량은 대략메시의  삼각형 개수의제곱값을4로 나눈 것에 해당 -삼각형이 256개 일 때 포탈정보를 저장해놓은 테이블의 소비 메모리는 16KB 테이블 참조를 통해서 어떤 포탈을 사용할 것인지 찾아낼 수 있으므로 속도가 매우 빠름
포탈을 이용한 간단한 이동의 예
분기점에서의 문제 목표에 도달 할 수 있는 포탈이 둘 이상인 경우, 테이블 항목은 목표에 보다 가까운 포탈을 알려준다. 하지만 미리 계산된 테이블은 단지 한 삼각형에서 다른 삼각형으로 이동하는 방법만 알려줄 뿐, 한 삼각형 점의 정확한 위치와 다른 삼각형 점의 정확한 위치는 알려주지 않으며, 따라서 테이블을 통해 얻은 경로가 반드시 최단 경로라 할 수는 없다. But 그리 문제는 안된다.
테이블 만들기 삼각형의 중심(세 꼭지점과의 거리가 동일한 점)을 계산 Simple flood-fill 알고리즘을 사용하여 삼각형들을 연결하는 경로들을 찾는다.  두 삼각형들 사이의 경로가 둘 이상이라면 더  긴 경로를 폐기한다.
네비게이션메시를이쁘게 만들자
크리처의네비게이션메시 위의 표현 2차원 원으로 표현한다. 원으로 하면 회전과 무관하기 때문에 네비게이션 메시나 장애물과의 충돌 시  크리처의 방향을 고려할 필요가 없다. 크리처와네비게이션메시의 충돌 판정을 위해서 원 대 선분, 원 대 삼각형 교차 판정을 일일이 하면 열라 느려진다.
정적인 장애물을 위한 네비메시
동적인 장애물
정적, 동적 장애물을 동시에 피해가자! 1. 네비게이션메시로 정적인 장애물을 피하는 경로를 알아낸다. 2. 그 경로에 동적인 장애물(원)이 있는지 파악한다. 3. 동적인 장애물이 있다면 이동백터를 수정한다. 4. 수정된 이동백터에 의한 이동이 네비메시를 벋어나면 메시 가장자리까지만 이동하도록 벡터를 수정한다.
추가적인 네비게이션메시 고려사항들 나선형 계단이라면? 3차원이네요? ,[object Object]
그 높이 이하려면크리처는 여전히 그 삼각형 안에 속하게 되는 식
점프 삼각형 포탈 : 그 포탈로 들어오는 순간 다음 삼각형의 포탈로 바로 점프를 시킴,[object Object]
저자 소개 Thomas Young thomas.young@bigfoot.com Thomas는 오래전Amiga를 위한 하드웨어 트릭들을 코딩하면서 게임 프로그래밍을 시작했다. 그는 Sussex University에서 AI를 전공하고 학위를 땄다. 그 후 그는 Gremlin Interactive(Sheffield, U.K.)에서 AI 프로그래머로 일하면서 주로 캐릭터가 환경의 장애물들을 이해하게 만드는 것과 캐릭터가 좀 더 사실적으로 이동하게 하는 것에 초점을 두고 작업을 했다. 2000 년 그는 Gremlin(현재는 Infogames, Sheffield Hose)를 떠나서 독립 계약자로 일했으며 정교한 길찾기 시스템을 미들웨어 라이선스로 제공하는 회사를 설립했다(http://www.pathengine.com).
개요 복잡한 의사결정 시스템을 가지고 있는 길찾기 시스템이라고 해도 맵에 끼어버리면 한순간에유저들의 평에 나락으로 떨어진다. 만약, 케릭터가 환경의 장애들을 적절히 다룰 수 있는 능력을 가지고 있다면, 아주 간단한 의사결정 구조만으로도 그럴듯하게 보이는 AI를 만들 수 있다.  길찾기 시스템과 충동 처리의 관계 : 케릭터가 환경 안의 장애물에 반응하는 방법을 이해하게 만드는 핵심적인 요인
충돌 시스템의 제어 하에서의 이동 케릭터가벽같은 장애물을 뚫고 나가게 하는 일이 게임에서 발생한다면 대략 낭패!  그래서,  AI의 의사결정은 먼저 충돌 시스템에서 OK가 떨어진 다음에 케릭터의 이동으로 이어져야 한다. 그래서 행동 코드는 충돌 코드에 강한 의존성을 갖게 된다
길찾기를 위한 충돌 모형
Approach#1:fault-tolerant AI (좀 틀려도 되 AI) 사람이 돌아다니면서 물체를 피할 때 물리학을 따지고 수학으로 최적화 해서 돌아다니는 건 아니다.  길 찾기 공간을 수작업으로 편집하거나 충돌처리가 일어나는 매카니즘은접어두고 맵이나 충돌할 만한 오브젝트를 보고 대략 피해갈 수 있는 루트를 자동으로 생성
Steering behavior(캐릭터 운전)
fault-tolerant AI의 장단점 충돌이 단순하고 게임 세계가 비교적 작을때 쓰면 탁월한 효과! 하지만, 충돌상황이 상당히 복잡하면 길찾기를 대충 때려서 하기가 힘들어진다. 또한, 많은 종류의 상황들에 적용되어야 할 경우(앞에서 말한 위험지역 돌아가기 등?) 대충 찾은 길찾기는캐릭의 사망을 유도
이럴 때는 운전하기도 힘들다.
해결책? 일일이 지정 : 지그재그 할 때마다 캐릭터를 적절히 회전시키고 다음 지그재그 턴시점에서 방향도 바꾸고 다시 캐릭터 회전시키고…헉헉.. 애시 당초 못가게 하면 되잖아!!! 맵을 잘 만들란 말야. 아예 좁은 틈은 못가게 하던가. 충돌 피드백: 한번 가보고 막혔으면 그 terrain은 못 가는 곳으로 체크. 그런데 어쩌다가 빠져 나왔는데 못 가는 체크되어있으면 갇히는 겁니다.. GM부르고 게시판에 영자 욕하고…OTL 신경망 훈련 같은 기계 학습 기법들을 사용한다. 배우면서 크는거죠…. 모든 막힌 부분을 다 찾아낼 때까지 -_-; 그러니까 복잡한 데 쓰지 말란 겁니다.
Approach#2:Path-Finding in a Subset of Unobstructed Space 개방 공간의 부분집합에서의 길 찾기(먼 소리야) 절대로 충돌이 일어나지 않는 지형만 때내서 돌아다니자는 겁니다. 그러면 충돌처리도 생각 안 해도 되니까 아까 말한 복잡한 예외상황도 안 일어나겠죠.
길 넓히는 무적박스
무적박스 방식에도 문제는 있다. 예1)카우보이 캐릭터가 말을 타고 그랜드 캐넌 맵에서 좁은 협곡도 충돌 없이 잘 가다가 갑자기 버팔로 때가 앞에서 몰려와서 이리 치이고 저리 치이다가 맵 밖으로 튕겨버렸다.  예2)좁은 해구를 요리조리 잘 피해서 순항하던 독일잠수함 U-BOAT 가 기뢰를 맞더니 폭발력의 반동으로 맵 밖으로 튕겨버렸다. 이럴 때는 그냥 카트라이더의 그것 처럼 이동 가능한 곳으로 옮겨주는 처리를 한다. 이때 이동가능 한 곳으로 돌아왔을 때부터는 모든 충돌을 무시하는 신공을 쓰면 최고다. 두어번클베를 해도 심신이 편할 수 있다.
유효한 위치찾기 방법1) 이동 때마다 방금전의 유효한 위치를 보존해 두는 것. 방법1의 문제점) 캐릭터가 이미 길찾기 공간 밭에서 상당한 거리를 움직였다면 소용이 없다. 방법2) 지금 서있는 길찾기 외부 공간에서 가장 가까운 길찾기 공간 내부의 점을 알아내는 것. 방법2의 문제점) 지름길용 벾뚫기 버그를 이용할 문제가 생긴다.
유효한 위치 찾기
Putting Backbones In the World 월드에 뼈를 넣자! (응?) 절대로 못지나가는 지형에 본을 박아 놓으면 찡기는 버그를 이용해서 벽 뛰어넘는 꽁수는 막을 수 있을 겁니다.
Approach #3: Using the Pathfinder Itself for Character collision 분리되어 있는 길찾기 모듈(Pathfinder) 자체를 케릭터 충돌에 사용한다. 캐릭터가 길찾기 공간 바깥으로 나가 버리는 일이 일어나지 않는다. 실시간으로 길찾기 모듈이 케릭터의 현재위치를 이해할 수 있다 따라서, 캐릭터는 길찾기 모듈이 돌려준 경로를 항상 안심하고 따라갈 수 있다. 단, 케릭터 충돌에 대해서 단순화된 메커니즘을 사용해야 한다. 그리서 멋은 없어지지만 빠르고 안정적이고 예측가능한 이점이 생긴다.
보완책:계층화된 충돌처리 그냥 월드를 돌아다니면서 길을 갈 수 있느지 없는지는 길찾기 모듈이 관장하는 길찾기충돌층이 처리 월드를 돌아다니다가 케릭터의 높이나 방향이나 팔 다리 같은 것이 월드에 걸려서 길찾기에 영향이 주는지 등의 판단은 월드 충돌층에서 관리 평소에는 길찾기충돌층만 쓰면 속도면에서 이점이 있고, 복잡한 충돌처리가 필요한 지형이나 이벤트시에는 월드 충돌층을 이용하면 되니까 멋도 살릴 수 있다.
경로를 따르는 이동
경로를 따르는 이동
대략 근사로 가려고 해도 이런문제가….
결론 및 감상 머든지 삽질을 하다 보면 길이 생긴다. 기본 착상에 따라 맞춤 꽁수는 무궁무진하게 나오는 거니까 책에 있는 내용들은 이제 정답 이라는 것이 아니라 그런 꽁수를 찾아나가는 다큐멘터리 정도라 이해하면 되겠다.

More Related Content

Similar to Pathfinding 관련 GPG스터디 발표

Recast Detour.pptx
Recast Detour.pptxRecast Detour.pptx
Recast Detour.pptxMUUMUMUMU
 
[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)해강
 
지능 Baram 보고서
지능 Baram 보고서지능 Baram 보고서
지능 Baram 보고서NAVER D2
 
20150708 ros seminar_in_busan_korea
20150708 ros seminar_in_busan_korea20150708 ros seminar_in_busan_korea
20150708 ros seminar_in_busan_koreaYoonseok Pyo
 
Programming game ai
Programming game aiProgramming game ai
Programming game aiguest136767
 
알파고 풀어보기 / Alpha Technical Review
알파고 풀어보기 / Alpha Technical Review알파고 풀어보기 / Alpha Technical Review
알파고 풀어보기 / Alpha Technical Review상은 박
 
[NDC2016] 신경망은컨텐츠자동생성의꿈을꾸는가
[NDC2016] 신경망은컨텐츠자동생성의꿈을꾸는가[NDC2016] 신경망은컨텐츠자동생성의꿈을꾸는가
[NDC2016] 신경망은컨텐츠자동생성의꿈을꾸는가Hwanhee Kim
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기Chris Ohk
 
2D RPG 개발 이론 + 티뮤리티 개발 포스트모템
2D RPG 개발 이론 + 티뮤리티 개발 포스트모템2D RPG 개발 이론 + 티뮤리티 개발 포스트모템
2D RPG 개발 이론 + 티뮤리티 개발 포스트모템WooSung Jeon
 
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현BOAZ Bigdata
 
6강 light shadow 기초
6강 light shadow 기초6강 light shadow 기초
6강 light shadow 기초JP Jung
 
6강 light shadow 기초
6강 light shadow 기초6강 light shadow 기초
6강 light shadow 기초JP Jung
 
딥뉴럴넷 클러스터링 실패기
딥뉴럴넷 클러스터링 실패기딥뉴럴넷 클러스터링 실패기
딥뉴럴넷 클러스터링 실패기Myeongju Kim
 
[1211 조진현][gpg1]플로킹
[1211 조진현][gpg1]플로킹[1211 조진현][gpg1]플로킹
[1211 조진현][gpg1]플로킹진현 조
 
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shovelingProject anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shovelingDong Chan Shin
 
october report in korean
october report in koreanoctober report in korean
october report in koreannao takatoshi
 

Similar to Pathfinding 관련 GPG스터디 발표 (20)

Recast Detour.pptx
Recast Detour.pptxRecast Detour.pptx
Recast Detour.pptx
 
[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)
 
[Week20] D3.js_Mapping
[Week20] D3.js_Mapping[Week20] D3.js_Mapping
[Week20] D3.js_Mapping
 
지능 Baram 보고서
지능 Baram 보고서지능 Baram 보고서
지능 Baram 보고서
 
20150708 ros seminar_in_busan_korea
20150708 ros seminar_in_busan_korea20150708 ros seminar_in_busan_korea
20150708 ros seminar_in_busan_korea
 
Programming game ai
Programming game aiProgramming game ai
Programming game ai
 
알파고 풀어보기 / Alpha Technical Review
알파고 풀어보기 / Alpha Technical Review알파고 풀어보기 / Alpha Technical Review
알파고 풀어보기 / Alpha Technical Review
 
[NDC2016] 신경망은컨텐츠자동생성의꿈을꾸는가
[NDC2016] 신경망은컨텐츠자동생성의꿈을꾸는가[NDC2016] 신경망은컨텐츠자동생성의꿈을꾸는가
[NDC2016] 신경망은컨텐츠자동생성의꿈을꾸는가
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기
 
2D RPG 개발 이론 + 티뮤리티 개발 포스트모템
2D RPG 개발 이론 + 티뮤리티 개발 포스트모템2D RPG 개발 이론 + 티뮤리티 개발 포스트모템
2D RPG 개발 이론 + 티뮤리티 개발 포스트모템
 
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현
 
Hardware
HardwareHardware
Hardware
 
6강 light shadow 기초
6강 light shadow 기초6강 light shadow 기초
6강 light shadow 기초
 
6강 light shadow 기초
6강 light shadow 기초6강 light shadow 기초
6강 light shadow 기초
 
딥뉴럴넷 클러스터링 실패기
딥뉴럴넷 클러스터링 실패기딥뉴럴넷 클러스터링 실패기
딥뉴럴넷 클러스터링 실패기
 
Feature Pyramid Network, FPN
Feature Pyramid Network, FPNFeature Pyramid Network, FPN
Feature Pyramid Network, FPN
 
[1211 조진현][gpg1]플로킹
[1211 조진현][gpg1]플로킹[1211 조진현][gpg1]플로킹
[1211 조진현][gpg1]플로킹
 
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shovelingProject anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
 
october report in korean
october report in koreanoctober report in korean
october report in korean
 

Pathfinding 관련 GPG스터디 발표

  • 1. Tactical Path-Findingwith A* GPG3 3.6 William van derSterren, CGF-AI
  • 2. 저자 소개 William van derSterren William van derSterren은 게임과 시뮬레이션을 위한 전술 AI를 개발한다. 그는 개발자/컨설턴트이자 CGF-AI의 설립자이다. William은 Game Developers Conference에서 강연을 했으며 AI Programming Wisdom (Charles River Media, Inc., 2002)와 Game Programming Gems 시리즈에 글을 기고했다. 임베디드 시스템과 방위 시뮬레이션 분야의 연구 과학자로 일했던 그는 현재 차세대 콘솔용 게임의 AI 수석 프로그래머로 일하고 있다.
  • 3. A*에 대한 복습 A* 기본 알고리즘 F = G + H 비용값=현재 노드까지의 비용 + 휴리스틱 비용 - Open List에서 F값이 가장 작은 쪽을 우선적으로 탐색 하는 것
  • 4. A*에 대한 복습 http://hackish.tistory.com/21한국어 http://www.policyalmanac.org/games/aStarTutorial.htm영문 원본
  • 7. 차이점 (a) : F = G + H (b) : F = D(위험도)+ H
  • 8. 결함이 있는 전술적경로– 짧은 네번의 노출보다 긴 하나의 노출이 선택되었다.
  • 9.
  • 10. (a) 적이 움직이지 않는다는 가정하의 경로(b) 적이 두 걸음 움직인다는 가정하의 경로
  • 11. 기타 전술적 개선방안 이동하는 지점의 적의 사선(射線)(Line Of Fire)의 개수를 샌다: 사선이 적으면 적이 소수 이므로 리스크가 준다. 잠입요소 강조 : 잡초 등 엄폐가 가능한 요소가 있는 곳 외에 작은 벌점을 부여 탱크 : 능선을 피한다. 마린 : 사다리 피한다, 다른 분대원들이 저격 당한 장소 피한다. 등등 유닛에 따른 지형학적 벌점을 부여
  • 12. 성능 이렇게 오리지널 A*에 case by case로 전술적인 능력을 더하면 더할수록 느려지는건 당연! 그러니까 그냥 각각의 지형타일의 참조테이블을 일일이 만들어서 길찾기 할 때 우선순위를 정하면 빠르고 좋을 거임!
  • 13. 섹터 기반 LOF 참조 테이블과 그에 의한 경로
  • 14. 섹터기반의 미리 계산된 LOF 정보를 이용한 위험도 근사 미리 전체 섹터의 위험도를 지정해놓은 참조테이블을 구성 현재 플레이어가 위치한 곳에서 적까지의 위치에 대해서 45도 안에 해당하는 섹터의 위험도를 가져옴 그리고 다시 위험도 기반 A*를 돌림
  • 15. (a) 최단 경로를 위한 검색 공간 (b) 전술적 경로를 위한 검색 공간
  • 16. 확장된 A* 비용에 대한 해결책 전술적 비용함수 계산시 부동소수점 연산을 자제 : 정수 연산을 이용해서 부동소수점 계산을 근사 하여 성능을 향상 측면과 후방에 비용이 큰 가상의 장애물을 도입한다: 쓸 때 없이 옆이랑 뒤랑 찾는 시간을 아끼자. 영역을 나누어 전략적 길찾기를 한다: 섹터 단위 보다 크니까 빠르겠죠?
  • 17. A Fast Approach to navigation Meshes GPG3 3.7 Stephen White and Christopher Christensen, Naughty Dog
  • 18. 저자 소개 Christopher Christensen cchristensen@naughtydog.com Christopher는 1982년 Apple II+ 컴퓨터로 처음 프로그래밍을 시작했다. 1994년 컴퓨터 공학 석사 학위를 땄지만, 학계에 남는 대신 Interplay Productions에서 PC 롤플레잉 게임을 프로그래밍하는 일을 하게 되었다. 그 후 계속 게임 업계에 남아 있으며, 현재는 Santa Monica, California의 Naughty Dog에서 프로그래머로 일하고 있다.
  • 19. 저자 소개 Stephen White swhite@naughtydog.com Stephen White는 Naughty Dog의 프로그래밍 디렉터이며 다양한 플랫폼들에서 전문 비디오 게임 프로그래머로 15년 이상 일했다. Stephen의 작품들 중 중요한 것 몇 가지를 들자면 Jak and Daxter: The Precursor Legacy, Crash Bandicoot: Warped, Crash Bandicoot: Cortex Strikes Back, Brilliance, Deluxe Paint ST 등이 있다. 그는 비디오 게임 만들기에 매우 열성적이며, 비디오 게임 개발의 실질적으로 모든 측면들에 관여해왔다. Stephen은 아내 Linda(10 년 된 아내)의 헌신적인 남편이자 Logan(10 달 된 아들)의 헌신적인 아버지이다.
  • 20. 네비게이션메시 복습 네비게이션메쉬란? : 3차원 지형을 2D처럼 간단하게 표현 하는 방식으로 Object가 이동 가능한 모든 지형을 Cell(삼각형)으로 표시 하여 A*와 같은 길찾기 알고리즘을 쉽게 적용 할 수 있게 해 줍니다.
  • 22. Jack and Daxter : The Precuser Legacy
  • 23. 정적인 장애물 대 동적인 장애물 정적 장애물 : 절벽, 벽, 나무, 기둥 동적 장애물: 크리처, 플레이어, 움직이는 플랫폼, 상자 동적장애물은 미리 계산된 길찾기 꽁수나 미리 계산된 경로를 사용할 수 없게 만들기 때문에 더 까다롭다.
  • 25. 포탈(Portal) 포탈? : 다른 삼각현으로의 관문(doorway)에 해당 삼각형의 변은 3개, 그러므로 포탈도 3개 3변이 다른 삼각형으로 모두 연결되어있을 경우 모든 포탈을 2비트로 표현가능 00, 01, 10, 11 : 여분의 값이 하나 남네요!
  • 26. 포탈(Portal) 현재 삼각형에서 다른 삼각형으로 이동할 때 경로를 찾는 방법 : 방법 1) A*를 사용한다. 방법 2) 아까 언급한 미리 계산해놓은 각각의 삼각형들의 포탈 정보를 담은 2차원 배열테이블을 이용
  • 27. 2차원 배열 테이블을 이용 테이블의 메모리 소비량은 대략메시의 삼각형 개수의제곱값을4로 나눈 것에 해당 -삼각형이 256개 일 때 포탈정보를 저장해놓은 테이블의 소비 메모리는 16KB 테이블 참조를 통해서 어떤 포탈을 사용할 것인지 찾아낼 수 있으므로 속도가 매우 빠름
  • 29.
  • 30. 분기점에서의 문제 목표에 도달 할 수 있는 포탈이 둘 이상인 경우, 테이블 항목은 목표에 보다 가까운 포탈을 알려준다. 하지만 미리 계산된 테이블은 단지 한 삼각형에서 다른 삼각형으로 이동하는 방법만 알려줄 뿐, 한 삼각형 점의 정확한 위치와 다른 삼각형 점의 정확한 위치는 알려주지 않으며, 따라서 테이블을 통해 얻은 경로가 반드시 최단 경로라 할 수는 없다. But 그리 문제는 안된다.
  • 31. 테이블 만들기 삼각형의 중심(세 꼭지점과의 거리가 동일한 점)을 계산 Simple flood-fill 알고리즘을 사용하여 삼각형들을 연결하는 경로들을 찾는다. 두 삼각형들 사이의 경로가 둘 이상이라면 더 긴 경로를 폐기한다.
  • 33. 크리처의네비게이션메시 위의 표현 2차원 원으로 표현한다. 원으로 하면 회전과 무관하기 때문에 네비게이션 메시나 장애물과의 충돌 시 크리처의 방향을 고려할 필요가 없다. 크리처와네비게이션메시의 충돌 판정을 위해서 원 대 선분, 원 대 삼각형 교차 판정을 일일이 하면 열라 느려진다.
  • 36. 정적, 동적 장애물을 동시에 피해가자! 1. 네비게이션메시로 정적인 장애물을 피하는 경로를 알아낸다. 2. 그 경로에 동적인 장애물(원)이 있는지 파악한다. 3. 동적인 장애물이 있다면 이동백터를 수정한다. 4. 수정된 이동백터에 의한 이동이 네비메시를 벋어나면 메시 가장자리까지만 이동하도록 벡터를 수정한다.
  • 37.
  • 38. 그 높이 이하려면크리처는 여전히 그 삼각형 안에 속하게 되는 식
  • 39.
  • 40. 저자 소개 Thomas Young thomas.young@bigfoot.com Thomas는 오래전Amiga를 위한 하드웨어 트릭들을 코딩하면서 게임 프로그래밍을 시작했다. 그는 Sussex University에서 AI를 전공하고 학위를 땄다. 그 후 그는 Gremlin Interactive(Sheffield, U.K.)에서 AI 프로그래머로 일하면서 주로 캐릭터가 환경의 장애물들을 이해하게 만드는 것과 캐릭터가 좀 더 사실적으로 이동하게 하는 것에 초점을 두고 작업을 했다. 2000 년 그는 Gremlin(현재는 Infogames, Sheffield Hose)를 떠나서 독립 계약자로 일했으며 정교한 길찾기 시스템을 미들웨어 라이선스로 제공하는 회사를 설립했다(http://www.pathengine.com).
  • 41. 개요 복잡한 의사결정 시스템을 가지고 있는 길찾기 시스템이라고 해도 맵에 끼어버리면 한순간에유저들의 평에 나락으로 떨어진다. 만약, 케릭터가 환경의 장애들을 적절히 다룰 수 있는 능력을 가지고 있다면, 아주 간단한 의사결정 구조만으로도 그럴듯하게 보이는 AI를 만들 수 있다. 길찾기 시스템과 충동 처리의 관계 : 케릭터가 환경 안의 장애물에 반응하는 방법을 이해하게 만드는 핵심적인 요인
  • 42. 충돌 시스템의 제어 하에서의 이동 케릭터가벽같은 장애물을 뚫고 나가게 하는 일이 게임에서 발생한다면 대략 낭패! 그래서, AI의 의사결정은 먼저 충돌 시스템에서 OK가 떨어진 다음에 케릭터의 이동으로 이어져야 한다. 그래서 행동 코드는 충돌 코드에 강한 의존성을 갖게 된다
  • 44. Approach#1:fault-tolerant AI (좀 틀려도 되 AI) 사람이 돌아다니면서 물체를 피할 때 물리학을 따지고 수학으로 최적화 해서 돌아다니는 건 아니다. 길 찾기 공간을 수작업으로 편집하거나 충돌처리가 일어나는 매카니즘은접어두고 맵이나 충돌할 만한 오브젝트를 보고 대략 피해갈 수 있는 루트를 자동으로 생성
  • 46. fault-tolerant AI의 장단점 충돌이 단순하고 게임 세계가 비교적 작을때 쓰면 탁월한 효과! 하지만, 충돌상황이 상당히 복잡하면 길찾기를 대충 때려서 하기가 힘들어진다. 또한, 많은 종류의 상황들에 적용되어야 할 경우(앞에서 말한 위험지역 돌아가기 등?) 대충 찾은 길찾기는캐릭의 사망을 유도
  • 48. 해결책? 일일이 지정 : 지그재그 할 때마다 캐릭터를 적절히 회전시키고 다음 지그재그 턴시점에서 방향도 바꾸고 다시 캐릭터 회전시키고…헉헉.. 애시 당초 못가게 하면 되잖아!!! 맵을 잘 만들란 말야. 아예 좁은 틈은 못가게 하던가. 충돌 피드백: 한번 가보고 막혔으면 그 terrain은 못 가는 곳으로 체크. 그런데 어쩌다가 빠져 나왔는데 못 가는 체크되어있으면 갇히는 겁니다.. GM부르고 게시판에 영자 욕하고…OTL 신경망 훈련 같은 기계 학습 기법들을 사용한다. 배우면서 크는거죠…. 모든 막힌 부분을 다 찾아낼 때까지 -_-; 그러니까 복잡한 데 쓰지 말란 겁니다.
  • 49. Approach#2:Path-Finding in a Subset of Unobstructed Space 개방 공간의 부분집합에서의 길 찾기(먼 소리야) 절대로 충돌이 일어나지 않는 지형만 때내서 돌아다니자는 겁니다. 그러면 충돌처리도 생각 안 해도 되니까 아까 말한 복잡한 예외상황도 안 일어나겠죠.
  • 51. 무적박스 방식에도 문제는 있다. 예1)카우보이 캐릭터가 말을 타고 그랜드 캐넌 맵에서 좁은 협곡도 충돌 없이 잘 가다가 갑자기 버팔로 때가 앞에서 몰려와서 이리 치이고 저리 치이다가 맵 밖으로 튕겨버렸다. 예2)좁은 해구를 요리조리 잘 피해서 순항하던 독일잠수함 U-BOAT 가 기뢰를 맞더니 폭발력의 반동으로 맵 밖으로 튕겨버렸다. 이럴 때는 그냥 카트라이더의 그것 처럼 이동 가능한 곳으로 옮겨주는 처리를 한다. 이때 이동가능 한 곳으로 돌아왔을 때부터는 모든 충돌을 무시하는 신공을 쓰면 최고다. 두어번클베를 해도 심신이 편할 수 있다.
  • 52. 유효한 위치찾기 방법1) 이동 때마다 방금전의 유효한 위치를 보존해 두는 것. 방법1의 문제점) 캐릭터가 이미 길찾기 공간 밭에서 상당한 거리를 움직였다면 소용이 없다. 방법2) 지금 서있는 길찾기 외부 공간에서 가장 가까운 길찾기 공간 내부의 점을 알아내는 것. 방법2의 문제점) 지름길용 벾뚫기 버그를 이용할 문제가 생긴다.
  • 54. Putting Backbones In the World 월드에 뼈를 넣자! (응?) 절대로 못지나가는 지형에 본을 박아 놓으면 찡기는 버그를 이용해서 벽 뛰어넘는 꽁수는 막을 수 있을 겁니다.
  • 55. Approach #3: Using the Pathfinder Itself for Character collision 분리되어 있는 길찾기 모듈(Pathfinder) 자체를 케릭터 충돌에 사용한다. 캐릭터가 길찾기 공간 바깥으로 나가 버리는 일이 일어나지 않는다. 실시간으로 길찾기 모듈이 케릭터의 현재위치를 이해할 수 있다 따라서, 캐릭터는 길찾기 모듈이 돌려준 경로를 항상 안심하고 따라갈 수 있다. 단, 케릭터 충돌에 대해서 단순화된 메커니즘을 사용해야 한다. 그리서 멋은 없어지지만 빠르고 안정적이고 예측가능한 이점이 생긴다.
  • 56. 보완책:계층화된 충돌처리 그냥 월드를 돌아다니면서 길을 갈 수 있느지 없는지는 길찾기 모듈이 관장하는 길찾기충돌층이 처리 월드를 돌아다니다가 케릭터의 높이나 방향이나 팔 다리 같은 것이 월드에 걸려서 길찾기에 영향이 주는지 등의 판단은 월드 충돌층에서 관리 평소에는 길찾기충돌층만 쓰면 속도면에서 이점이 있고, 복잡한 충돌처리가 필요한 지형이나 이벤트시에는 월드 충돌층을 이용하면 되니까 멋도 살릴 수 있다.
  • 59. 대략 근사로 가려고 해도 이런문제가….
  • 60. 결론 및 감상 머든지 삽질을 하다 보면 길이 생긴다. 기본 착상에 따라 맞춤 꽁수는 무궁무진하게 나오는 거니까 책에 있는 내용들은 이제 정답 이라는 것이 아니라 그런 꽁수를 찾아나가는 다큐멘터리 정도라 이해하면 되겠다.