AI가 게임 산업을 바꾸는 방식 — NPC부터 레벨 디자인까지
작년에 한 대형 게임사의 AI 팀과 몇 번 대화할 기회가 있었다. 그들은 여러 프로젝트에서 이미 AI를 실제로 적용하고 있었는데, 언론에서 나오는 이야기와는 꽤 달랐다. 생성형 AI의 거대한 파도가 게임산업을 삼킬 것처럼 보이지만, 현장에서는 더 현실적인 고민들이 있다. NPC의 동작이 더 자연스러워지는 것도 있고, 반복 작업이 줄어드는 것도 있지만, 마케팅에서 말하는 것처럼 게임을 혁명적으로 바꾸지는 못하고 있다. 내가 본 것을 정리해보면 AI가 게임산업에 끼치는 실제 영향은 훨씬 더 세분화되고 구체적이다.
현실의 AI NPC는 어떻게 작동하는가
게임의 NPC를 생각할 때 대부분의 사람들은 대사를 치고 퀘스트를 주는 캐릭터를 떠올린다. 하지만 개발자 입장에서는 NPC는 상태 관리와 행동 선택의 문제다. 전통적으로는 수백 줄의 상태 머신 코드를 작성한다. "플레이어를 봤는가? 그렇다면 거리는? 무기는 들었는가? HP는?" 이런 것들을 if-else로 조합하면 수천 줄이 된다.
요즘 게임사들이 적용하는 방식은 다르다. LLM(대규모 언어 모델)이나 작은 신경망 기반의 의사결정 모듈을 쓴다. 하지만 여기서 중요한 건 "LLM이 NPC의 행동을 결정한다"는 게 아니라 "LLM이 NPC의 대사와 반응을 생성한다"는 점이다.
// 기존 방식: 상태 머신으로 NPC 행동 결정
NPC_State current_state = IDLE;
void UpdateNPC(float delta) {
switch(current_state) {
case IDLE:
if(DistanceToPlayer() < 10.0f) {
current_state = ALERT;
PlayAnimation("detect");
}
break;
case ALERT:
if(HasWeapon()) {
current_state = COMBAT;
target = GetNearestEnemy();
} else {
current_state = FLEE;
}
break;
case COMBAT:
SelectAction(); // 복잡한 로직...
break;
}
}
이 코드는 나한테는 매우 익숙하다. 수십 개의 상태, 수백 개의 전이 조건. 시간이 지나면서 보수가 불가능해진다. 새로운 상황을 추가하려면 기존 로직이 깨질 수 있다는 두려움이 생긴다.
최근 접근 방식은 이렇다. 먼저 NPC의 실제 행동(이동, 공격, 도구 사용)은 여전히 상태 머신이나 행동 트리(behavior tree)로 관리한다. 이건 성능이 중요하고 결과를 예측할 수 있어야 하기 때문이다. 하지만 NPC가 플레이어와 상호작용할 때—대사를 할 때, 반응을 보일 때—그 부분에만 AI를 개입시킨다.
Unity ML-Agents로 본 실제 활용
Unity가 제공하는 ML-Agents는 강화학습(reinforcement learning) 기반의 NPC 행동 학습 프레임워크다. 게임 내에서 실시간으로 학습하는 게 아니라 에디터 환경에서 사전에 학습시킨다. 플레이어의 거리, 무기 유무, 체력 같은 수치들을 입력으로 받아서 "다음에 할 행동"을 결정하는 신경망을 만드는 것이다.
// ML-Agents 정책(Policy) 예시 구조
public class NPCBrain : MonoBehaviour {
private IPolicy npcPolicy;
void Start() {
// 사전 학습된 모델 로드
npcPolicy = new NeuralNetworkPolicy("npc_combat_v2.onnx");
}
void FixedUpdate() {
// 현재 상태를 벡터로 변환
float[] observation = new float[] {
transform.position.x,
transform.position.y,
Vector3.Distance(transform.position, player.position),
currentHealth / maxHealth,
hasWeapon ? 1f : 0f,
player.currentHealth / player.maxHealth
};
// 신경망이 다음 행동 추론
ActionBuffer actions = npcPolicy.Evaluate(observation);
// 행동 실행: moveX, moveY, attack, dodge
float moveX = actions.ContinuousActions[0];
float moveY = actions.ContinuousActions[1];
bool shouldAttack = actions.DiscreteActions[0] > 0.5f;
MoveToDirection(moveX, moveY);
if(shouldAttack) Attack();
}
}
이 접근법의 장점은 명백하다. 개발자가 복잡한 결정 로직을 손으로 작성할 필요가 없다. 대신 "이런 상황에서 이렇게 행동해야 한다"는 예시를 몇 천 번 시뮬레이션으로 보여주면 신경망이 패턴을 학습한다. 밸런스 조정? 훈련 데이터를 조정하면 된다. 너무 어려운 NPC? 공격 확률을 낮춰서 다시 학습시키면 된다.
하지만 문제가 있다. 첫째, 학습 데이터를 만드는 데 시간이 든다. 둘째, 신경망이 "왜" 그 행동을 했는지 설명할 수 없다. 어떤 상황에서 버그처럼 이상한 행동을 하면 디버깅이 지옥이다. 셋째, 게임마다 문제가 다르다. 격투 게임의 NPC와 RPG의 NPC는 완전히 다른 신경망이 필요하다. 일반화되기 어렵다.
절차적 생성(Procedural Generation)의 현실
AI가 게임산업에서 가장 실질적인 영향을 미치는 부분 중 하나는 콘텐츠 생성이다. 특히 절차적 생성이다. 이건 AI가 없어도 존재했지만, AI가 생성하는 것의 퀄리티를 크게 높였다.
10년 전 절차적 생성은 대부분 수학 기반이었다. 펄린 노이즈(Perlin noise)와 심플렉스 노이즈를 섞어서 맵을 만들고, 규칙 기반 생성 알고리즘으로 던전을 만들었다. 결과는 "기계적"이었다. 플레이어들은 금방 패턴을 알아챘다. 같은 형태의 방이 반복되고, 적의 배치가 비슷했다.
// 전통적 노이즈 기반 맵 생성
float[,] GenerateHeightMap(int width, int height) {
float[,] heightMap = new float[width, height];
for(int y = 0; y < height; y++) {
for(int x = 0; x < width; x++) {
float value = Mathf.PerlinNoise(
x * 0.1f + seed,
y * 0.1f + seed
);
heightMap[x, y] = value;
}
}
return heightMap;
}
이 방식은 여전히 쓰이지만, 요즘은 생성형 모델이 한 층 위에서 작동한다. 예를 들어 Nvidia의 GauGAN 같은 모델을 활용하면, 개념 스케치(concept sketch)를 주고 실제 같은 텍스처와 디테일을 생성하게 할 수 있다. 또는 기존 게임 맵들을 학습시킨 모델에 "테마: 사막, 난이도: 어려움, 크기: 중형"이라고 입력하면 적절한 맵을 생성한다.
실제로 작동하려면 매우 신중해야 한다. 게임 밸런스를 깨뜨리기 쉽기 때문이다. 절차적으로 생성된 던전이 플레이 불가능한 상태가 될 수 있다. 플레이어가 고립되거나, 방이 너무 크거나, 적이 너무 많을 수 있다. 그래서 대부분의 게임사는 생성 모델 위에 검증 레이어를 쌓는다.
// 생성된 던전 검증
bool ValidateDungeon(Dungeon dungeon) {
// 플레이어가 목표에 도달 가능한가?
if(!IsPathfindableToGoal(dungeon)) return false;
// 적의 개수는 적절한가?
int enemyCount = dungeon.CountEnemies();
if(enemyCount < MIN_ENEMIES || enemyCount > MAX_ENEMIES)
return false;
// 보상 분포는 균형잡혀 있는가?
float[] treasureDistribution = dungeon.GetTreasureDistribution();
if(!IsBalanced(treasureDistribution)) return false;
// 모두 통과했다면 이 던전을 사용한다
return true;
}
이 검증 과정이 사실은 매우 중요하고 복잡하다. 절차적 생성 자체보다 더 많은 코드가 들어갈 수 있다.
텍스처와 에셋 생성
게임의 콘텐츠 중 가장 시간이 오래 걸리는 부분 중 하나가 에셋 제작이다. 3D 모델, 텍스처, 애니메이션. AI가 이 부분에서 가장 직접적인 도움이 된다.
스테이블 디퓨전이나 미드저니 같은 이미지 생성 모델로 텍스처 베이스를 만들고, 그걸 게임용으로 후처리한다. 또는 3D 생성 모델(Tripo3D, Point-E)로 대강의 메시를 만들고 아티스트가 다듬는다. 이렇게 하면 처음부터 손으로 만드는 것보다 빠르다.
하지만 여기서도 함정이 있다. 생성된 에셋의 품질이 일정하지 않다. 각도에 따라 이상할 수 있다. UV 맵핑이 잘못될 수 있다. 라이선스 문제도 있다. 학습 데이터가 어디서 왔는지 명확하지 않으면 저작권 침해가 될 수 있다.
게임 밸런싱과 QA 자동화
이 부분은 사실 게임사들이 가장 기대하는 영역이다. 게임을 자동으로 테스트하고, 밸런스 문제를 찾고, 조정 방안을 제시하는 것. 개발 기간을 크게 단축할 수 있기 때문이다.
전통적인 QA는 이렇다. QA 팀이 수백 번 플레이한다. 버그를 찾는다. 개발팀이 수정한다. 다시 테스트한다. 큰 게임은 이 사이클이 수개월 간다.
AI를 활용하면 다르다. 자동 에이전트가 게임을 무작위로 또는 특정 목표를 가지고 플레이한다. 버그가 발생하는 지점을 자동으로 기록한다. 특정 시뮬레이션 조건에서 버그가 재현되는지 자동으로 테스트한다.
// 게임 자동 테스트 에이전트
public class GameTestingAgent : MonoBehaviour {
private GameState initialState;
private List actionLog = new List();
public void RunRandomPlaytest(int hours) {
for(int i = 0; i < hours * 3600; i++) {
// 무작위 액션 선택
Action nextAction = SelectRandomAction();
ExecuteAction(nextAction);
actionLog.Add(nextAction.ToString());
// 게임 상태 확인
if(DetectAnomalies()) {
ReportBug(nextAction, actionLog);
}
// 프레임 진행
WaitForNextFrame();
}
}
private bool DetectAnomalies() {
// 캐릭터가 월드 밖으로 나갔는가?
if(player.position.magnitude > WORLD_BOUNDARY) return true;
// 물리 시뮬레이션이 폭발했는가? (NaN 감지)
if(float.IsNaN(player.rigidbody.velocity.x)) return true;
// 메모리 누수가 있는가?
if(GC.GetTotalMemory(false) > MEMORY_THRESHOLD) return true;
return false;
}
}
하지만 이것도 한계가 있다. 자동 테스트가 모든 버그를 찾을 수는 없다. 게임의 "재미" 문제, "위화감" 문제는 AI가 감지하기 어렵다. 또한 게임의 규칙이 복잡할수록 AI가 의미 있는 플레이를 하기 어렵다. 턴 기반 RPG는 쉽지만, 복잡한 규칙의 전략 게임은 AI가 제대로 플레이하기 어렵다.
밸런싱 쪽은 더 나은 결과를 보인다. 수천 번의 시뮬레이션을 돌려서 각 직업의 승률을 측정하거나, 아이템의 가치를 계산하거나, 경제 시스템의 인플레이션을 예측할 수 있다. 여기서는 AI가 단순히 데이터를 모으고 분석하는 것이지만, 매우 효율적이다.
마케팅 vs 현실: 게임사들이 실제로 하는 일
게임사의 공식 발표를 보면 "AI로 게임의 모든 것을 만들 수 있다"처럼 들린다. 하지만 현장은 다르다.
한 AAA 게임사가 생성형 AI를 도입하려고 했을 때의 일이다. 초기 기대는 컸다. 3D 모델 생성, 텍스처 생성, 심지어 스토리까지. 하지만 실제로는 텍스처 생성 부분에만 제한적으로 사용하고 있다고 들었다. 왜인가?
첫째, 회사의 아트 스타일 일관성을 유지하기 어렵다. 생성형 모델은 훈련 데이터의 평균을 내서 만들기 때문에, 원래 의도한 스타일을 정확히 재현하기 어렵다.
둘째, 퀄리티 보증이 문제다. 생성된 에셋마다 다시 손으로 검토하고 수정해야 하면 시간 절감이 거의 없다.
셋째, 법적 문제다. 생성형 AI의 학습 데이터가 어디서 왔는지 불명확하면, 나중에 저작권 소송에 걸릴 수 있다. 큰 회사일수록 이 위험을 감수하기 어렵다.
실제로 성공하는 사례들을 보면 다 특정 부분에만 AI를 사용한다. 배경 생성, 적의 행동 패턴, 밸런싱 데이터, 버그 감지. 게임 개발의 "반복되는 부분"이나 "데이터 분석이 필요한 부분"이다.
게임 개발에서 AI의 진짜 가치는 "전체를 혁명적으로 바꾸기"가 아니라 "지루한 반복 작업을 줄이기"에 있다.
미래는 어떻게 될까
앞으로 2-3년을 내다보면, 게임산업의 AI 활용은 더 정교해질 것이다. 하지만 지금의 "AI 게임 혁명" 같은 언론의 기대는 현실화되지 않을 것이다.
대신 이런 식으로 진화할 것 같다. 첫째, AI NPC가 더 자연스러워진다. 대사 생성, 감정 표현, 플레이어 행동에 대한 적응적 반응이 개선된다. 하지만 복잡한 전술이나 스토리 이해는 여전히 어렵다.
둘째, 절차적 생성이 더 똑똑해진다. 단순히 맵 형태를 생성하는 것이 아니라, 게임 밸런스, 몬스터 배치, 보상 분배까지 고려한 완전한 레벨을 생성하는 모델이 나타날 것이다.
셋째, 개발 파이프라인 자동화가 진전된다. 콘셉트 아트 → 3D 모델 → 애니메이션까지 일부를 자동화한 도구들이 표준화될 것이다. 하지만 최종 결과물은 여전히 사람의 손을 거쳐야 한다.
넷째, 플레이어 맞춤형 게임이 현실화된다. AI가 플레이어의 스킬, 선호도, 플레이 패턴을 분석해서 난이도, 스토리, 보상을 실시간으로 조정한다. 이건 이미 일부 게임에서 시작되고 있다.
하지만 게임 개발의 가장 중요한 부분—창의성, 직관, 플레이어와의 감정적 연결—은 여전히 사람의 몫이다. AI는 도구일 뿐이다. 좋은 도구는 작업을 빠르게 하고 반복성을 줄인다. 하지만 도구만으로는 위대한 게임이 만들어지지 않는다.
게임 개발에 오래 몸담으며 본 게 있다면, 기술의 발전보다 중요한 건 그 기술을 어떻게 쓸지에 대한 이해다. AI도 마찬가지다. 부글부글 끓는 시장의 기대와 과장 속에서 진짜 가치가 뭔지 냉철하게 판단하는 것. 그게 이 시대 게임 개발자의 역할이라고 생각한다.