기본 콘텐츠로 건너뛰기

좋은 AI의 조건 (3)

    목차

▲이 글의 대부분은 Game Maker's Toolkit의 What Makes Good AI? 영상에서 인용하였습니다.


스스로 행동하고 목표를 지닌 AI

'레인 월드'라는 게임에선 플레이어와 적의 관계만이 전부가 아닙니다.
적들 스스로 움직이고 행동하면서 그들끼리 만난다면 서로 싸우기도 하죠.

이것은 전편에서 말한 '플레이어와 상호작용하는 AI'의 연장선이기도 합니다.
하나의 AI 단독으로 움직이는 게임은 활력이 없습니다. 그들끼리 스스로의 목표를 가지고 행동하면서 서로 상호작용 한다면 더 살아있는 세계처럼 보일 것입니다.

'스토커 : 섀도우 오브 체르노빌'도 이런 방식을 택했습니다. 'A-Life'시스템이라고 불리는 AI시스템은 핵전쟁으로 파괴된 세상에서 강도들은 홀로 다니거나 집단을 이루며 세상을 돌아다닙니다. 그들은 팩션끼리 우연히 만나면 전투를 하기도 합니다.

'엘더스크롤 V : 스카이림'에서도 다양한 NPC들과 팩션들이 스스로 조우하면서 전투를 만들어내는 인카운터들이 발생합니다. 이것은 아마 만들어진 스크립트이지만, 이런 상황들은 플레이어들에게 오픈월드의 세계가 더 똑똑해보이는 효과가 있습니다.

'웨이킹 마스'라는 게임에선 화성의 생명체들이 스스로의 목표를 가지고 생활합니다. 플레이어는 식물에게 물을 주거나 씨앗을 뿌리는 식으로 그들과 상호작용 합니다.
그리고 화성의 생명체들은 그들끼리 스스로 상호작용하면서 하나의 생태계를 만들어 나가면서 퍼즐을 푸는 게임입니다.
이 게임에서 화성의 생명체들은 징그럽게 생겼지만, 그들끼리 생태계를 만들어나가는 것이 정말 신기하고 아름답기도 합니다.

조금 다른 예시이기도 하지만 '몬스터 헌터 : 월드'의 대형 몬스터들도 비슷한 효과를 내고 있습니다.
그들은 오픈월드의 세계를 돌아다니면서 다른 대형 몬스터들과 싸우기도 하고, 도망가기도 하는 등 서로 상호작용을 합니다. 플레이어에게는 지옥이 될 수도 있지만요.
스스로 상호작용하는 '몬스터 헌터 : 월드'의 대형 몬스터들


적이 아닌 동료NPC의 AI

게임에서 정말 좋은 적의 AI나 훌륭한 전투 인카운터가 있다고 해도, 플레이어 동료의 AI가 멍청하다면 정말 답답하고 이 게임의 AI수준이 낮다고 느낄 것입니다.
그래서 많은 게임들이 동료의 체력을 무한으로 설정하고 불사로 만들어 놓습니다.
'바이오쇼크 : 인피니트'의 '엘리자베스'처럼요.

'더 라스트 가디언'에서는 인간 NPC가 아닌 동물의 NPC가 동료로 등장합니다. '토리코'라 불리는 이 개와 새를 합쳐놓은 듯한 동물은 뛰어난 AI를 가지고 있습니다.
'토리코'는 플레이어와 처음 조우했을 때 별로 친하지 않았지만 게임을 플레이 하면서 서로 놀고 먹이를 주면서 점점 친해집니다.
거대한 '토리코'는 스스로 몸에 박힌 창들을 뽑을 수 없고, 유리로 된 창문에서 두려움에 떨기도 합니다.
이것은 플레이어와 '토리코'가 서로 협력하고 상호작용 하는것에 중심을 두고 있다는 것을 의미합니다.

또 특이한 점은 '토리코'의 눈입니다.
'토리코'의 눈은 특정 상황이나 감정마다 색이 달라집니다. 예를 들어, 중립 상태일 때는 녹색. 먹이나 연기 등 호기심이 생겼을 때는 황색, 적이 등장하거나 두려움이 생길때는 적색으로 색이 변합니다.
플레이어는 '토리코'의 눈을 보고 '토리코'의 감정 상태를 인식하고 어떻게 행동해야 할 지 스스로 선택하게 됩니다.

'더 라스트 오브 어스'또한 정말 뛰어난 AI를 가지고 있는 게임입니다. 이 게임에서 플레이어와 '엘리'의 관계나 상호작용이 중심 기믹이라고 볼 수 있습니다.
'엘리'는 전투 중에 적에게 벽돌같은 것들을 던지기도 하고, 플레이어의 총알이 부족하다면 스스로 구해오기도 합니다. 또한, 주변의 지형을 파악하여 어떻게 해야할지 생각하기도 합니다.
'엘리'의 인공지능을 보여주는 영상
'파이널 판타지XV'에서 '프롬프토'라는 등장인물은 플레이 중에 스스로 사진을 찍고 SNS에 게시도 합니다. 이 사진들은 플레이 중에 둘러 볼 수도 있고, 엔딩이나 크레딧에 활용되어 플레이어에게 추억을 회상하게 만들어 주기도 합니다.
다른 게임과는 달리 플레이어가 스스로 찍는 사진들이 아니기 때문에, 플레이어들은 이 사진들을 정말 친구와 함께 찍은 사진처럼 여길 수도 있고, 게임 플레이 중에 있었던 일들을 조금 다른 방식으로 회상하기도 합니다.




끝으로, 좋은 AI를 가진 게임들은 플레이어에게 많은 영향을 줍니다.
멍청한 적들을 때려눕히는게 아니기 때문에 더 큰 성취감을 줄 수도 있고, 훌륭한 인공지능 하나만으로 게임의 평가에 큰 영향을 주기도 합니다.
'헬로 네이버'라는 게임은 출시 하기도 전에 학습하는 AI를 가졌다고 해서 크게 이슈가 되기도 했습니다.

훌륭한 AI는 그저 뛰어난 기술의 산물이 아닙니다. '구글'의 '딥마인드'같은 AI가 아니더라도 이 글에서 설명한 AI의 특징들을 잘 설계한다면 뛰어난 AI처럼 보이는 게임을 만들 수 있을 것입니다. 그저 똑똑한 AI가 게임내에서 좋은 AI가 될 수는 없기 때문입니다.

댓글

이 글도 관심 있으실 것 같아요!

놀이의 4대 요소 (Agon(아곤), Mimicry(미미크리), Ilinx(일링크스), Alea(알레아))

네덜란드의 고전 학자인 '요한 하위징아'의 저서인 「호모 루덴스 」에서 인간을 '유희의 인간'이라고 칭했습니다. 프랑스의 '로제 카유아'라는 학자는 「호모 루덴스 」의 이론을 발전시켜 그의 저서인 「놀이와 인간」 (원제 「 Man, plays and games 」) 에서 ‘놀이의 4대 요소’를 말했습니다. 저자는 그것을 아곤, 미미크리, 알레아, 일링크스로 소개했습니다. 이 네 가지 놀이의 요소는 인간의 모든 유희, 놀이에서 발전되어 현대의 비디오 게임에서도 매우 중요한 이론으로 알려져있습니다. 먼저, 아곤(Agon), 경쟁 아곤은 놀이의 주체와 객체간의 경쟁을 의미합니다. 사람들은 경쟁에서 승리함으로써 성취감을 얻고, 우월감을 느끼게 합니다. 이 아곤을 현대의 게임에 대입 시켜보면 경쟁은 최근 가장 많이 플레이 하는 게임 중 하나인 ‘배틀 그라운드’나 ‘리그 오브 레전드’같은 게임들도 경쟁에 기반이 되어있고, 혼자 플레이 하는 게임에서도 자기 자신과의 경쟁, AI와의 경쟁 등이 포함되어있습니다. 예를 들어, 슈퍼 마리오 같은 게임에서도 플레이어들은 어떻게 이 게임을 더 빨리 클리어하기 위해 경쟁하고, 더 많은 점수를 받기 위해 노력합니다. 또한 비교적 MMR시스템이 잘 짜여져있는 '리그 오브 레전드'같은 AOS게임에서도 플레이어의 등급을 결정하는 랭크 게임 시스템이 중점적으로 돌아가고 있고, '오버워치'의 경쟁전 등 많은 게임에서 이런 경쟁을 유도하는 시스템을 만들어 놓았습니다. 게임을 계속 플레이하게 만드는 가장 큰 요소가 아곤입니다. 많은 게임에서 플레이어의 경쟁을 어떻게 잘 이끌어 나갔느냐에 따라서 그 게임의 성공이 나뉠 수도 있습니다. 미미크리(Mimicry), 역할 미미크리는 역할을 의미합니다. 사람들은 실제 세계에서 하지 못하는 일들을 놀이에서 느끼면서 큰 기쁨을 느낄 수 있습니다. 이 역할은 롤플레...

FastAPI 실시간 영상 스트리밍 OpenCV

  FastAPI와 OpenCV를 활용한 실시간 영상 스트리밍 Permalink 실시간 영상을 스트리밍 하는 방법을 찾던 중 파이썬 FastAPI를 활용한 방법을 시도 해보았다. 필수 라이브러리 Permalink 필요한 것은 Python3.9버전 (애플 M1칩셋 맥북에어에서 3.8 버전으로 시도 해보니 OpenCV라이브러리 설치에서 문제가 발생했었다) FastAPI uvicorn OpenCV 정도면 될 것 같다. 라이브러리들은 모두 설치 되었다고 가정 하고, 예제 코드 Permalink # main.py # 라이브러리 import # StreamingResponse를 가져와야함 from fastapi import FastAPI from fastapi.responses import StreamingResponse # cv2 모듈 import from cv2 import get_stream_video # FastAPI객체 생성 app = FastAPI () # openCV에서 이미지 불러오는 함수 def video_streaming (): return get_stream_video () # 스트리밍 경로를 /video 경로로 설정. @ app . get ( "/video" ) def main (): # StringResponse함수를 return하고, # 인자로 OpenCV에서 가져온 "바이트"이미지와 type을 명시 return StreamingResponse ( video_streaming (), media_type = "multipart/x-mixed-replace; boundary=frame" ) # cv2.py import cv2 def get_stream_video (): # camera 정의 cam = cv2 . VideoCapture ( 0 ) while True : ...

Python FastAPI 알아보고 설치하고 초기 설정 해보기

  Python FastAPI, 설치하고 초기 설정 해보기 Permalink 파이썬 웹 서버를 만들어야 하는 일이 생겼늗데, 최대한 빠르고 안정적인 서버를 선택 해야했다. 그래서 기존에 사용하던 Flask보다 훨씬 빠르다고 하는 FastAP를 사용해보기로 했다. ❓ FastAPI란? Permalink 👉 FastAPI 공식 한국어 페이지  https://fastapi.tiangolo.com/ko/ FastAPI는 현대적이고, 빠르며(고성능), 파이썬 표준 타입 힌트에 기초한 Python3.6+의 API를 빌드하기 위한 웹 프레임워크입니다. FastAPI는 파이썬에서 사용 가능한 웹 프레임워크 중 하나인데, Flask나 Django보가 훨씬 빠른 속도를 보여준다고 하고, 확인 해봐야 하겠지만 Go언어와도 비슷한 속도를 보여준다고 한다. 또, 쉽고 간결한 코드, 200% ~ 300% 까지 증가하는 개발 속도를 기대할 수 있다고 하는데, 시작 해보자! 👏 Permalink FastAPI 설치 Permalink 먼저 공식 사이트에선 pip를 이용해 설치 하라고 나와있는데, 나는 anaconda를 이용해서 설치를 했다. bash $ pip install fastapi anaconda 사용 시 $ conda install fastapi 그리고 ASGI서버도 필요해서 같이 설치하라고 하는데, Univorn을 설치 해보자. bash $ pip install uvicorn[standard] anaconda 사용 시 $ conda install uvicorn FastAPI 예제 Permalink 설치가 완료되면 이렇게 vscode에서 FastAPI() 클래스가 자동 완성 되는걸 확인할 수 있다. 그리고 정말 간단히 API를 만들 수 있는데, main.py 파일을 만든 후에 from typing import Optional from fastapi import FastAPI app = FastAPI () @ app . get ( "/"...