본문의 모든 내용과 이미지의 저작권은 '페니 드 빌' 저자의 유니티로 만드는 게임 개발 총론 도서에 있습니다.
5-1. 캐릭터 메커니즘 - 인공지능
- 게임 인공지능은 AI 영역을 주도하는 메커니즘
- 게임 인공지능의 연구자와 개발자들은 얼굴/음성 인식 시스템, 패턴 매칭, 추리 및 의사 결정과 같은 복잡한 과제를 처리하는 탐색, 정렬, 매칭 알고리즘을 개발하고 있음
- 인간 행동의 근본을 규정해 게임 플레이를 재미있게 만드는 알고리즘이 동일한 모델을 기반으로 이루어진 것은 어찌보면 당연한 것
- 인공지능 알고리즘은 상당한 계산 처리를 필요로 함
- 과거에는 모든 애니메이션과 특수 효과를 게임에서 처리했기 때문에 컴퓨터 처리 능력의 약 10% 정도만 AI에 할애할 수 있었음
- 때문에 게임 AI 발전은 상당 기간 지체돼왔지만, 기술 발전 덕분에 점차 발전 중
5-2. 게임 캐릭터 인공지능 구현에 사용되는 방법
- 인공지능은 응용 수학, 수치 계산 및 심리학에 기반을 둔 학문적 성향이 강한 분야
1. 가시선
가시선
- NPC가 플레이어의 존재를 감지할 수 있는 범위, 벡터 연산을 사용하여 간단하게 구현함
- 인공지능을 구현할 때 사용할 수 있는 가장 간단한 프로그래밍 방법
- 인공적인 캐릭터에게 원하는 행동을 시키기 위해 항상 복잡한 AI 시스템이 필요한 것은 아님
- 직선적인 접근법 - 플레이어를 발견한 NPC가 방향을 틀어 플레이어에게 돌진
- 플레이어에게 공격 당한다는 느낌을 줌
- NPC가 위협적이며 나쁜 의도를 가지고 있음을 깨닫게 함
2. 그래프 이론
그래프 이론
- 게임에 적용되는 AI 기법에는 그래프 개념이 많이 활용됨
- 그래프: 노드(node)와 엣지(edge)의 집합
- 노드: 원으로 표시
- 엣지: 노드를 연결하는 선으로 표시
- 노드의 방향에 따라 그래프의 종류가 달라짐
- 무방향 그래프: 노드들 사이에서 어느 쪽으로나 이동 가능한 경우
- 방향성 그래프: 노드들 사이의 경로가 하나뿐인 경우
- 노드는 좌표를 나타낼 수도 있음(ex. 비행 계획)
- 노드는 의미가 없는 상징적인 상태를 나타낼 수도 있음(ex. 상태 다이어그램)
- 노드와 엣지는 모두 연관된 값을 가질 수 있으며, 이는 노드 간의 거리 및 소요시간이 될 수 있다.
3. 경유지
경유지
- NPC가 따라갈 지도상의 경로를 표기하는 수단, 맵에서 기억된 위치
- 맵 전체에 순환 배치되며 직선 경로로 연결됨
- 경로와 경유지는 다른 고정 장애물과 충돌하지 않도록 연결되며 연결된 경로는 그래프를 이룸
- 게임에서 경유지를 효과적으로 구현하려면 경유지를 검색해서 최적의 경로를 찾는 방법이 필요
경유지 탐색 - 그래프에서 노드 간의 최단 경로를 찾는 방법
- 너비 우선 탐색(Breadth-First Search; BFS)
- 주어진 시작 노드 값을 기반으로 인접한 모든 노드를 검사하는 방법
- 시작 노드에 인접한 노드란 엣지를 통해 시작 노드에 바로 연결된 노드를 의미
- 마지막 노드가 발견되거나 인접 노드 검색이 끝날 때까지 계속
너비 우선 탐색
- 깊이 우선 탐색(Depth-First Search; DFS)
- 시작 노드에서 출발하여 한 경로의 마지막에 도달할 때 까지 검사하는 방법
- BFS보다 간단하지만, 효율성이 떨어짐
깊이 우선 탐색
- A* 알고리즘(A스타 알고리즘)
- 시작 노드에서부터 모든 인접 노드의 비용을 계산하고, 다음 노드를 선택해 연산 반복
- 추정 비용을 계산하여 최적 경로가 아닌 경로를 잘못 검색하는 오류를 방지
- 다음 노드를 무작정 선택하는 것이 아닌 가장 효율적인 노드를 선택
A* 알고리즘
4. 유한 상태 기계(Finite State Machines; FSM)
유한 상태 기계의 예
- 게임에서 가장 많이 쓰이는 AI 구현 방법
- 노드로 상태를 표시하고 방향성 연결 엣지로 상태 전환을 표시하는 방향성 그래프 형식으로 나타냄
5. 결정 트리
결정 트리의 예
- 복잡한 불 함수를 구조화하고 활용해 상황을 추론하는 계층적 그래프
- 추론되는 상황을 서술하는 속성들의 집합으로 구성
- 이전에 이루어진 결정들을 기반으로 구축
- 결정은 전문가나 다른 플레이어 또는 AI 게임 경험에 의해 이루어짐
6. 군집
- 군중이나 동물 무리의 움직임은 규칙있어 보이지만, 모두 완전히 똑같이 행동하지는 않음
- 1986년, 크레이그 레이놀즈가 개발
- 특정 상황에 군집을 적용하면 2차 애니메이션과 마찬가지로 게임에 현실성을 더할 수 있음
군집 행동의 예
- 군집 행동을 만들어내기 위한 규칙
- 그룹의 평균 위치를 향해 이동
- 그룹의 평균 방향으로 방향을 맞춤
- 다른 그룹 구성원과 접촉하는 것을 피함
7. 퍼지 로직(Fuzzy Logic)
- 모호하고 불완전한 정보를 기반으로 의사를 결정하는 방법
- 일상에서는 모호한 표현에 대한 암묵적 동의를 바탕으로 의사결정을 내림
- ex) 커피가 뜨거우니 조심히 먹는다 / 밖이 너무 추우니 따뜻하게 입는다.
- 컴퓨터는 모호한 용어를 이해할 수 없음. 이를 해석하는 시스템이 퍼지 로직
퍼지 집합
- 기존 수학적 집합은 각 집합의 경계가 명확하게 나눠져있지만, 퍼지 집합은 값들이 중첩됨
- 하나의 원소가 두 집합에 속하는 것을 허용하는 ‘소속도’ 값이 주어짐
8. 유전자 알고리즘
유전자 알고리즘
- 생물학적 진화와 관련된 유전적 과정을 계산적으로 흉내낸 알고리즘
9. 셀룰러 오토마타(Cellular Automata)
- 연관 값을 가진 셀들로 이루어진 격자, 각 셀의 값은 이웃한 셀의 값에 따라 끊임없이 갱신
- 플레이어의 행동을 근거로 관련된 셀에서 어떤 일이 벌어질지를 결정
셀룰러 오토마타가 쓰인 대표적인 게임 '심시티'
- 간단한 AI 메커니즘으로도 매우 복잡한 관계를 만들 수 있음
- ex) 플레이어가 특정 셀에 핵 발전소 설치 → 주변 셀 건물의 가격이 폭락 → 거주자들이 떠남 → 주민들의 출근 거리와 거주 비율에 영향을 미침