1. 게임에서 사용하는 인공지능 기술
남기룡(birdkr@gmail.com)
2006/09/16
DevRookie
2. Introduction
• Game AI?
• 게임 인공지능 기술
– Finite State Machine
– Trigger System
– Path Finding : A*
– Scripting
– Flocking
– Evolutionary Algorithm
– Neural Network
– Fuzzy Logic
– 기타
• 인공지능 기법을 사용한 게임
– The Sim’s, Black & White, Oblivion
DevRookie
3. Game AI
• AI
– 인간이나 지성을 갖춘 존재, 혹은 시스템에 의해 만들어진 지능,
즉 인공적인 지능을 뜻함.
• Game AI
– 게임 내에서 플레이어의 상대적 역할을 수행하면서, 마치 플레이
어가 다른 사람과 게임을 하고 있다는 착각을 유도하는 기술.
• Game AI의 역사
– 1970년대
• 아주 간단한 규칙만 사용(Pong, Pac-Man, Space Invaders)
– 1980년대 ~ 1990년대 초반
• Game AI보다는 그래픽 기술과 하드웨어 요소에 초점을 둠.
– 1990년대 중반 ~ 현재
• 하드웨어 성능이 향상되어 게임에 Game AI 기술을 적용할 수 있는
환경이 조성됨.
DevRookie
4. Finite State Machine(1)
• 상태들 간의 “전이”에 의해 통제되는 그래프 내에 유한개
의 “상태”들이 연결되어 있는 규칙 기반 시스템.
DevRookie
5. Finite State Machine(2)
• 장점
– 프로그램 하기 간단하면서 사용하기 편리하다.
– 가독성이 뛰어나다.
– 디버깅이 용이하다.
– 유연성이 있다.
• 구현
– 샘플 참고
DevRookie
6. Trigger System(1)
• 트리거는 조건을 정의하는 객체로서 트리거 시스템은 ‘조
건(Condition)을 평가하고 반응을 수행(Action)한다’라는
한 가지 목적을 가진 중앙 집중화된 시스템이다.
• 조건의 예
– 플레이어가 지점(x,y,z)의 반경 R 이내에 존재
– 적이 일정 거리 이상 근접함
– 생명이 x 이하
– 적이 공격함
• 반응의 예
– 임의의 음향을 재생
– 공격한 적으로부터 도망감
– NPC X를 죽임
– 위치 또는 플레이어/적에 특수효과를 적용
DevRookie
7. Trigger System(2)
• 트리거의 평가
– 여러 조건이 부울 논리로 연결될 수 있음
• ex) 적이 10미터 이내 AND 적의 HP가 50%이하 -> 공격
– 이벤트 메시지로 처리하거나 주기적 점검으로 평가
• 스크립트 언어와 비교
– 장점
• 전적으로 GUI만으로도 설정, 조작이 가능하다.
• 문법 오류를 걱정할 필요가 없다.
• 속도가 빠르다.
• 디자이너가 편집하기 쉽다.
– 단점
• 규모가변성(scalability)이 좋지 않다.
• 편집기를 따로 만들어야 한다.
DevRookie
9. Path Finding: A* 알고리즘(1)
• 두 지점들 사이의 경로를 찾는데 일반적으로 가장 빠른
목표 지향성(directed) 알고리즘.
• 용어
– 맵(map), 그래프(graph) : A*가 두 지점 사이의 경로를 찾고자
할 때 사용하는 공간
– 노드(node) : 맵 상의 위치를 표현하는 자료 구조
– 거리(distance), 휴리스틱(heuristic) : 탐색되는 노드의 ‘적합성
(suitability)’을 평가하는데 쓰임
– 비용(cost) : 어떤 경로를 택할 것인가에 대한 것인가에 대한 비
용. Ex) 시간, 에너지 등
DevRookie
10. Path Finding: A* 알고리즘(2)
• 알고리즘(1)
– g(goal) : 시작 노드로부터 이 노드까지 오는데 드는 비용
– h(heuristic) : 이 노드에서 목표까지 가는데 드는 ‘추정된’ 비용
– f(fitness) : 이 노드를 거쳐가는 이 경로의 비용에 대한 최선의
추측. f = g + h
– 열린 목록(open list) : 아직 탐색하지 않은 노드들의 집합
– 닫힌 목록(closed list) : 이미 탐색한 노드들로 구성
DevRookie
11. Path Finding: A* 알고리즘(3)
• 알고리즘(2)
1. 시작 지점을 노드 P로 둔다.
2. P에 f, g, h 값들을 배정한다.
3. P를 열린 목록에 추가한다. 이 시점에서, 열린 목록에는 P밖에 없다.
4. 열린 목록의 노드들 중 최선의 노드(최선의 노드란 f값이 가장 작은 노
드)를 B로 둔다.
a. B가 목표 노드이면 경로를 찾은 것이므로 알고리즘을 끝낸다.
b. 열린 목록이 비었다면 경로를 찾을 수 없는 것이므로 역시 알고리즘을 끝낸
다.
5. B에 연결된 유효한 노드를 C로 둔다.
a. C에 f, g, h 값들을 배정한다.
b. C가 열린 목록이나 닫힌 목록에 들어 있는지 점검한다.
a. 만일 들어있다면, 새 경로가 더 효율적인지(즉 f 값이 더 작은지) 점검
한다.
a. 만일 그렇다면 경로를 갱신한다.
b. 들어있지 않다면 C를 열린 목록에 추가한다.
c. 단계 5를 B에 연결된 모든 유효한 자식 노드들에 대해 반복한다.
6. 4부터 다시 반복한다.
DevRookie
13. Path Finding: A* 알고리즘(5)
• 알고리즘(4)
가장자리에 있는 자식 노드들이 중앙에 있는 부모 노드를 가리키고 있다
DevRookie
14. Path Finding: A* 알고리즘(6)
• 알고리즘(5)
초기 단계에서 A*알고리즘을 한번 수행하고 난 후의 모습
DevRookie
15. Path Finding: A* 알고리즘(7)
• 알고리즘(6)
A*알고리즘을 한번 더 수행하고 난 후의 모습
DevRookie
16. Path Finding: A* 알고리즘(8)
• 알고리즘(7)
왼쪽에 있는 시작노드에서 오른쪽에 있는 목표 노드로 길찾기를 수행한 모습
DevRookie
17. Path Finding: A* 알고리즘(9)
• 데모
• 단점
– 맵의 크기가 크면 ‘열린’ 목록이나 ‘닫힌’ 목록에 수백, 수천의 노
드들이 들어갈 수 있기 때문에 시스템의 메모리를 굉장히 많이
사용할 수 있으며, 이렇게 되면 상당히 많은 CPU 시간을 노드를
검색하는데 사용할 수도 있다.
– 시작 위치에서 목표 위치까지의 경로가 없는 경우에 모든 노드를
검색하게 되므로 굉장히 비효율적인 작업을 수행하게 된다.
• 발전
– 속도 최적화
– 미학적 최적화
– 전술적 길찾기
– 집단 이동
DevRookie
18. Scripting(1)
• 게임의 자료나 로직을 게임의 원본 코드 외부에서 지정
하는 기법으로 옛날에는 스크립팅 언어를 개발팀이 직접
만들 때가 많았지만, 요즘은 Python이나 Lua 같은 기존
언어를 사용하는 경우가 많아지고 있다.
• 스크립트 언어 종류
– Lua : C++ 코드와 접착이 가능하며 문법이 간단하고 속도가 빨
라 근래 가장 인기있는 스크립트 언어.
– Python : C++ 코드와 접착이 가능하며 문법이 간단하고 많은 라
이브러리를 지원한다.
– XML : 확장 가능한 마크업 언어.
– 기타 : Unreal Script, GameMonkey, AngelScript
DevRookie
19. Scripting(2)
• 스크립팅의 장점
– 코드를 다시 컴파일하지 않고도 게임 로직을 변경하거나 테스트
할 수 있다.
– 프로그래머 자원을 낭비하지 않으면서 디자이너에게 게임 변경
능력을 부여할 수 있다.
– 플레이어에게 스크립트 기능을 제공함으로써 플레이어로 하여금
직접 게임을 다듬고 확장하게 할 수 있다.
• 스크립팅의 단점
– 디버깅이 힘들다.
– 비 프로그래머들도 프로그래밍을 해야 한다.
– 스크립팅 언어의 구현이나 도입, 그리고 보조 디버깅 도구들의
개발에 시간을 들여야 한다.
DevRookie
20. Flocking(1)
• 새 떼나 물고기 떼, 곤충 떼 등과 같은 생물들의 집단 행동을 자연스럽고 유
기적인 방식으로 흉내내어 묘사하는 방법. 집단의 각 생물은 오직 세가지 이
동 규칙만을 따르지만, 전체적으로는 매우 복잡한 집단 행동이 나타난다.
• 플로킹 규칙
– 분리(separation) :
주변 다른 개체들과 너무 가까워지지 않도록 한다.
– 정렬(alignment) :
주변 다른 개체들과 평균적으로 같은 방향으로 이동한다.
– 응집(cohesion) :
주변 다른 개체들과 평균적인 거리의 위치로 이동한다.
– 회피(avoidance) :
장애물이나 다른 개체들에 부딪히지 않도록 방향을 조정한다.
DevRookie
21. Flocking(2)
• 게임에 적용
– 주로 배경의 생물들(물고기 떼, 곤충 떼 등)을 제어하는 용도로 사용.
– 캐릭터 무리의 행동을 자연스럽게 표현하기 위하여 사용. (Unreal
Tournament, Half-Life)
• 데모
DevRookie
22. Evolutionary Algorithm
• 진화와 자연 선택에 근거를 둔 여러 최적화 및 검색 알고리즘들을 통
틀어서 일컫는 용어로, 유전 알고리즘, 진화 컴퓨테이션, 진화 전략 등
이 진화 알고리즘에 속한다. 진화 알고리즘은 크고 복잡한, 또는 제대
로 이해되지 못한 검색공간과 비선형 문제들에 대한 최적의 해를 찾는
다.
• 진화 알고리즘
군집초기화 해들을 평가 부모 선택 교배&돌연변이 군집 교체
반복
• 게임에 적용
– RTS에서 사람 플레이어의 약점을 대상으로 하는 AI 전략을 조율
– NPC의 다변성
DevRookie
23. Neural Network
• 인간의 두뇌 자체에서 영감을 얻어 모델화한 정보처리
시스템. 외부로부터 받아들이는 입력에 대하여 동적 반
응을 일으킴으로써 필요한 출력을 생성한다.
뉴런 인공 뉴런
DevRookie
24. Fuzzy Logic
• 기존의 “참/거짓” 또는 “온/오프”, “예/아니오”, “부정/긍
정”이라는 기존의 이분법적인 개념이 아닌 “어느 정도”라
던가 “얼마나” 같은 애매함을 기반으로 한다.
• 퍼지 집합(fuzzy set) : 전통적인 집합이론에서 주어진 개체는 그 집
합에 속하거나 속하지 않았지만 퍼지 집합 이론에서는 주어진 개체
가 퍼지 집합에 속하는 정도가 연속적이다. 예를 들어 한 생물이 아
주 약간 배가 고프다고 할 때, 그 생물은 소속도 0.1로 배고픈 집합
에 속한다. 반면 많이 배가 고프다면 소속도 0.9로 배고픈 집합에 속
한다.
• 게임에 적용
– NPC의 감정
– 플로킹 알고리즘
– 퍼지기반 FSM
DevRookie
25. 기타
• Team AI
• LOD(Level-of-detail) AI
• 특화된 AI : 스포츠, 레이싱, FPS, RTS 등
• 결정 트리
• 학습
• 칠판 아키텍처
• 자연어 처리
DevRookie
26. Game AI Example : The Sim’s
• 인공생명 기법
• 캐릭터의 욕구에 기반한 인공지능 기법
• 똑똑한 지형(smart terrain)
• Fuzzy Logic
DevRookie
27. Game AI Example : Black & White
• 학습
• 퍼셉트론(perceptron) : 크리처의 욕망
• 동적으로 결정 트리 생성 : 크리처의 견해
• 신경망 : 제스처 인식
DevRookie
28. Game AI Example : Oblivion
• Radiant AI
– NPC들에게 배고픔처럼 충족해야 할 Needs를 주거나 일련의 목표를 주
어 NPC 각자의 스탯에 기반해 자신의 목표를 어떻게 달성할지 방법을
결정한다.
– 적은 스크립트로 사실적인 세상을 구현할 수 있지만 NPC가 디자이너의
의도와 다른 행동을 할 수 있으므로 디버깅하기는 힘들다.
DevRookie
29. Conclusions
• 게임의 인공지능 기술은 점점 더 발전하고 있고, 그 필요
성도 더 중요시되고 있음.
• 온라인 게임이 발전한 우리나라 개발사들은 상대적으로
인공지능 기술이 취약함.
• 온라인 게임에도 인공지능 기술을 적용할 곳은 많다.
– 사람처럼 느껴지는 NPC
– 분대 전술로 공격하는 NPC
– 학습이 가능한 PET
– 대전 게임에서 나를 도와주는 동료
• 뛰어난 인공지능이 바로 게임의 경쟁력!
DevRookie