기본 콘텐츠로 건너뛰기

좋은 AI의 조건 (2)

    목차

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


예측이 가능한 AI

좋은 AI는 플레이어가 예측이 가능합니다.
이것은 AI가 어떤 상황에 따라 일관된 반응을 보임으로써, 플레이어가 게임을 이해하고, 그 게임의 메커니즘을 이용해 자신만의 목표를 세우고 창의적으로 플레이하게 만들어줍니다.

예를 들어, 플레이어가 어떤 건물의 발전기를 끈다면, NPC가 발전기에 확인을 하러 옵니다. 플레이어는 이런 NPC의 특성을 예측하여 창의적인 플레이를 할 수 있게 됩니다.
'헤일로'의 'Grunt'라는 몬스터는 방향을 알 수 없이 항상 도망다니기만 합니다. 만약 'Grunt'가 반만 도망다닌다면 플레이어가 충분히 예측할 수 없고 게임의 난이도가 어려워졌을 것입니다.

'예측이 가능한 AI'는 플레이어가 창의적으로 플레이하고 있다고 느끼게 해주는 가장 큰 특징이라고 생각합니다.
'히트맨'시리즈에서 플레이어들은 암살 상대의 이동 경로나 행동을 예측하여 플레이를 하는 경우가 많습니다. 이런 플레이를 할때 플레이어들은 스스로 창의적으로 플레이하고 있다고 느끼게 되는 효과가 있습니다.

예측이 가능하다고해서 게임의 난이도가 낮아지는 것이 아닙니다.
'스펠렁키'에서는 모든 오브젝트들이 정해진 스크립트들에 의해서 일정하게 움직입니다.
이것은 플레이어들이 쉽게 예측할 수 있습니다.
하지만 이 게임에서는 그런 오브젝트들이 얽히고 섥혀서 또 새로운 결과가 일어나는 등 나비효과같은 일들이 벌어집니다.
그래서 '스펠렁키'에서는 작은 결과는 예측이 가능하지만 더 앞을 내다보는 것은 할 수 없습니다. 플레이어들은 이 게임을 그저 어렵기만 한 게임이 아니라 보다 합리적이라고 생각하게 됩니다.
스펠렁키 인게임


시스템과 상호작용

시스템과 상호작용하는 AI는 매우 매력적입니다.
'젤다의 전설 : 브레스 오브 더 와일드'에서 적들은 그저 '링크'를 쫓는것이 일이 아닙니다.
이 게임에서 적들은 떨어져있는 물건을 잡거나, 나무 각목에 불을 붙이는 등 도구를 사용하기도 하고,
플레이어가 던진 폭탄을 발로 차서 역으로 공격하거나, 동료를 플레이어에게 던져서 공격하기도 합니다.
곤봉에 불을 붙히는 보코블린
또, 적이 '꼬꼬'를 공격하게 만들어 '꼬꼬'들이 그 적을 공격하게 하는 전략이라던가,
몬스터들이 휴식 시간에 고기를 구워먹는 모습들도 볼 수 있습니다.

'GTA'시리즈에서 시민들은 시골에 있다면 농사를 짓기도 하고, 해변에서 선탠을 하는 시민도 있고, 플레이어의 차량이나 모습에 반응을 하기도 합니다.
'GTA'시리즈의 오픈월드 세계는 시민들이 큰 역할을 차지한다고 생각합니다.
'GTA'의 세계와 상호작용하는 그들은 그 세계에 활력을 넣어주고, 살아있는 하나의 작은 도시같아보입니다.

또 '바이오쇼크'에 등장하는 적들은 전투 중에 갑자기 체력을 회복할 수 있는 기계로 달려가기도 합니다. 이 기계는 플레이어도 사용할 수 있는 기계라는 점에서 독특합니다.
AI의 이런 행동들은 마치 자신이 생존을 원하고 있고 플레이어와 같은 위치에 있다고 느끼게끔 합니다.

이런 AI의 게임 시스템과 상호작용하는 행동들은 앞서 말한 '예측 가능한 AI'의 예이기도 합니다.
플레이어들은 자신도 알고있고 활용하고있는 게임 시스템에 AI도 똑같이 반응을 하고 있기 때문에 AI가 어떻게 반응하고 어떤 결과가 나올지 예측을 할 수 있습니다.
앞서 말한 '바이오쇼크'의 체력 회복 기계에 적들이 가는 것을 예측하여 그곳에 함정을 설치하는 등 창의적인 플레이를 가능하게 합니다.

이런 방식은 선형적인 게임 보다는 오픈월드 게임에서 더 어울립니다.
오픈월드 게임의 특징 중 하나는 개발사가 만들어 놓은 환경과 시스템에서 플레이어가 자유롭게 행동을 할 수 있는 것이기 때문에 시스템과 상호작용하는 AI는 그 오픈월드의 세계가 더 살아있는 것처럼 보이는 효과가 있습니다.


AI와 플레이어의 관계

좋은 AI는 플레이어의 행동에 반응을 합니다.
이것은 '시스템과 상호작용'하는 AI의 작은 부분이기도 합니다.

'섀도우 오브 모르도르'의 핵심 컨텐츠인 '네메시스 시스템'이라고 불리는 컨텐츠는 적 캡틴들과 플레이어와의 상호작용이 중심입니다.
적 캡틴들과 플레이어가 만났을 때 다양한 대사를 주고 받으며 플레이어와 반응하기도 하고, 적들의 약점을 알기위해 적의 병사들을 심문하기도 합니다.
플레이어와 전투 결과에 따라서 적의 생김새나 능력이 변하기도 합니다.

만약 플레이어가 그에게 죽었다면 그 캡틴은 승진을 하고 더 강해집니다. 반대로, 플레이어에게 그 캡틴이 도망을 간다면 그는 다음에 플레이어와 만났을때 다른 반응을 보이기도 합니다.
플레이어와 상호작용하는 섀도우 오브 모르도르의 캡틴
이 시스템은 플레이어에게 그 캡틴과의 관계를 만들어줍니다. 플레이어는 어떤 캡틴에게 복수심을 만들기도 하고, 캡틴끼리의 관계가 어떤지에 따라서 다른 방향으로 나아갈 수도 있습니다.
이런 것들은 이 게임의 캡틴들을 더 똑똑하고 살아있는 것처럼 만들어주고, 오픈월드 이지만 선형적인 게임에서 조금의 자유도와 추억을 만들어줍니다.

또 다른 간단한 예로, '메탈 기어 솔리드 5'에서는 플레이어의 행동 타입(헤드샷의 빈도, 전투, 밤중에 잠입하는 것 등)을 파악하여 방탄모, 방탄복 착용, 야간 투시경 착용 등으로 플레이어의 행동 방식에 대응합니다.

더 발전한 방식으로는 '에일리언 : 아이솔레이션'이나 '헬로 네이버'등에선 기술적으로 발전된 AI가 적용되어 앞서 말한 예시와는 조금 다르게 정말 '학습하는 AI'가 적용되어 플레이어가 어떤 방식을 취하고 어떻게 행동하는지를 학습하여 스스로 그 AI가 판단하고 대응하기도 합니다.


▲'Hello Neighbor'의 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 ( "/"...