본문으로 건너뛰기

© 2026 Molayo

YouTube요약2026. 06. 15. 09:59

Rockstar가 어떻게 PlayStation 2 메모리에 도시 전체를 담아냈는가

요약

Grand Theft Auto III가 PlayStation 2의 제한된 32MB 메모리 환경에서 어떻게 거대한 오픈 월드 도시를 구현했는지 분석합니다. DVD의 느린 전송 속도와 시스템 메모리의 작은 용량 사이의 기술적 한계를 극복한 최적화 과정을 다룹니다.

핵심 포인트

  • PS2의 32MB 메모리 한계를 극복하기 위한 데이터 관리 전략
  • DVD의 대용량 저장 공간과 시스템 메모리의 빠른 속도 활용 차이
  • 오픈 월드 구현을 위한 에셋 로딩 및 메모리 관리의 중요성
  • 구역 분리 없는 자유로운 탐험을 위한 기술적 도전 과제

영상: Rockstar가 어떻게 PlayStation 2 메모리에 도시 전체를 담아냈는가
채널: Game Maker's Toolkit
길이: 25분 43초
출처: 자막 (수동, 영어)

이것은 Grand Theft Auto III입니다.
그리고 이 게임은... 이 게임은 정말 많은 것을 의미합니다.
제 말은, 이 게임이 비디오 게임 역사상 가장 수익성이 높은 프랜차이즈 중 하나를 위한 토대를 마련했다는 것입니다.
이 게임은 오픈 월드 (Open World) 게임들의 막을 수 없는 거대한 물결을 일으켰습니다.
그리고 뉴스 채널들을 매우, 매우 바쁘게 만들었죠.
리포터: 이것은 전국에서 가장 많이 팔리는 비디오 게임이며, 수백만 명의 아이들이 행인을 살해하는 법을 배우며 이 게임을 마스터하고 있습니다.
하지만 이 게임은 마술이라고 해도 과언이 아닙니다.
당시 DMA Design이었던 Rockstar North가 뉴욕시를 모방한 폭 4km에 달하는 도시 전체를 PlayStation 2의 아주 작은 32MB (메가바이트) 메모리 칩 안에 밀어 넣는 데 성공한 마술 말입니다.
저는 Mark Brown입니다.
이것은 Game Maker's Toolkit입니다.
그들이 어떻게 그것을 해냈는지 지금부터 알아보겠습니다.
좋아요, 게임에서 메모리 (Memory)가 어떻게 작동하는지에 대해 아주 빠르고 아주 단순화된 입문 과정이 필요할 것 같습니다... 그렇지 않으면 이 모든 내용이 이해되지 않을 테니까요.
PlayStation 2에는 DVD가 있는데, 이는 무려 4.7GB (기가바이트)에 달합니다.
이것은 모든 모델 (Model), 텍스처 (Texture), 사운드 효과 (Sound effect), 그리고 라디오 스테이션 (Radio station)을 포함한 게임 전체를 담기에 충분할 만큼 큽니다.
하지만 전송 속도가 초당 약 5~6MB (메가바이트) 정도로 매우 느립니다.
에셋 (Asset)을 즉석에서 불러오기에는 너무 느리죠.
하지만 시스템 내부에는 메모리가 있습니다.
이것은 빛처럼 빠릅니다.
초당 3.2GB (기가바이트)의 속도로 파일을 이동할 수 있습니다. 기가바이트 말입니다!
그래서 에셋 (Asset)을 다루기에 완벽합니다.
하지만 용량은 단 32MB (메가바이트)로 매우 작습니다. DVD 용량의 1%도 되지 않죠.
전통적인 게임의 경우, 콘솔은 현재 구역에 필요한 모든 데이터, 즉 모든 모델 (Model), 텍스처 (Texture), 애니메이션 (Animation), 사운드 효과 (Sound effect) 등을 DVD에서 메모리 (Memory)로 불러옵니다.

그 후 해당 구역을 벗어나면, 그 에셋 (Assets)들을 비우고(flushed) 다음 구역의 에셋들을 메모리 (Memory)로 복사할 수 있습니다. 에셋들이 이동하는 동안 로딩 화면 (Loading screen)이 나타나게 됩니다.

하지만 이러한 설정은 Grand Theft Auto 3에는 적용될 수 없었습니다.
이 게임에는 구역을 분리할 벽이나 문이 있는 개별적인 구역이 존재하지 않기 때문입니다.
대신, 플레이어가 어느 방향으로든 자유롭게 탐험할 수 있는 거대한 대도시가 펼쳐집니다.
게임 내의 모든 건물, 차량, 그리고 보행자를 구성하는 수천 개의 고유한 모델 (Models)로 이루어져 있으며, 총 용량은 약 77MB에 달합니다.
여기에 모든 재질 (Material), 표지판, 그리고 캐릭터 스킨 (Character skin)을 위한 수천 개의 서로 다른 텍스처 (Textures)가 추가되어 또 다른 45MB를 차지합니다.
따라서 총 약 130MB의 데이터로 구성된 Liberty City는 우리의 보잘것없는 32MB 예산에 담기에는 너무나 큽니다.

음, 좋습니다. 솔직하게 말씀드리겠습니다.
Liberty City는 세 개의 서로 다른 섬으로 나뉘어 있습니다.
Portland의 산업 지구,
Staunton Island의 도심 확장 구역,
그리고 Shoreside Vale의 고급 교외 지역입니다.
이들은 서로를 가로지를 때마다 빠른 로딩 화면 (Loading screens)이 나타나는 별개의 레벨 (Levels)로 취급됩니다.
하지만 그럼에도 불구하고, 이 섬들 각각은 여전히 메모리 (Memory)에 담기에는 너무 큽니다.
Portland를 예로 들면, 600개 이상의 고유한 모델 (Models)을 가지고 있으며, 모델과 텍스처 (Textures)를 위해 대략 40에서 50메가바이트 (Megabytes)의 데이터를 필요로 합니다.
여전히 32MB 예산을 훨씬 초과하는 수치입니다.

그렇다면 Rockstar는 무엇을 할 수 있었을까요?
스튜디오의 첫 번째 아이디어는 도시를 훨씬 더 단순한 방식으로 만드는 것이었습니다.
저해상도 텍스처 (Low resolution textures)를 가진 기본적인 3D 모델 (3D models)을 사용하여 각 섬이 메모리 (Memory)에 여유롭게 들어갈 수 있도록 하는 것이었습니다.
하지만 게임의 기술 감독 (Technical director)인 Obbe Vermeij는 이것이 "도시를 밋밋하게 보이게 만들었다"고 말했습니다.
이에 게임의 또 다른 기술 리드 (Technical lead)인 Adam Fowler는 훨씬 더 야심 찬 해결책을 고안해 냈습니다.
그 방식은 다음과 같습니다: Liberty City를 수천 개의 작은 섹터 (Sectors)로 나눕니다.
그런 다음, 플레이어 주변에 보이지 않는 사각형 (Square)이 존재하게 됩니다.

그리고 해당 사각형 (Square) 내에 있는 섹터 (Sectors)들에 필요한 모든 모델 (Models)들이 메모리 (Memory)에 로드됩니다.
그다음, 도시를 돌아다님에 따라 게임은 플레이어가 진입하는 섹터의 건물들에 대한 모델 (Models)과 텍스처 (Textures)를 로드하고, 플레이어가 떠나는 섹터의 모든 에셋 (Assets)들을 언로드 (Unload)합니다.
새로운 모델들은 항상 플레이어로부터 멀리 떨어져 있기 때문에, DVD에서 이를 로드하는 데 약간의 시간이 걸리더라도 문제가 되지 않습니다.
이것은 "스트리밍 (Streaming)"이라고 불리는 기술입니다.
그리고 우리는 실제로 이 과정이 일어나는 것을 볼 수 있습니다.
잠시 저를 따라와 보세요.
잠시 이곳으로 이동시켜 보겠습니다.
지금 이 창에는 PC에서 실행 중인 GTA 3가 있고, 이 창에는 메모리에서 일어나는 모든 일을 보여주는 프로세스 모니터 (Process Monitor)가 있습니다.
그래서 제가 차에 타서 거리를 달리기 시작하면, 파일들이 로드되기 시작하는 것을 볼 수 있을 것입니다.
구체적으로는 텍스처 (Textures)와 모든 모델 (Models)을 담고 있는 txd.img와 gta3.img 파일입니다.
이제, 이는 해당 파일들의 아주 작은 조각일 뿐입니다.
예를 들어 gta3.img를 가져와서, 오프셋 (Offset) 9291800 위치에서 로드되는 것을 확인해 보겠습니다.
그다음, 이 도구에서 gta3.img를 열고 해당 오프셋에 있는 파일을 찾아보겠습니다.
여기 있습니다, 9291800입니다.
다이너 (Diner) 간판이군요.
이것을 추출하여 이 페이지에 로드하면, 방금 메모리에 로드된 다이너 간판이라는 것을 확인할 수 있습니다.
이것은 저 멀리 이곳에 있습니다.
이 과정이 더 실시간적이고 시각적인 방식으로 일어나는 것을 보여드리고 싶지만,
스트리밍 (Streaming) 시스템이 플레이어가 아닌 카메라 (Camera)에 종속되어 있기 때문에... 음, 제가 카메라를 제어하여 멀리 날아가더라도 스트리밍은 그저 저를 따라올 것이고 도시는 제 주변에 나타날 것입니다.
결국 유일한 해결책은 어떻게든 GTA 3의 소스 코드 (Source Code)를 구해서, 프로그램의 여러 섹션을 다시 작성하고, 완전히 새로운 실행 파일 (Executable)을 컴파일하는 것뿐일 것입니다.

그래서 저는 GTA의 무료 소스 코드 (Source Code)를 구해서, 프로그램의 여러 섹션을 다시 작성하고, 완전히 새로운 실행 파일 (Executable)을 컴파일했습니다.

이제 그 트릭을 확인하실 수 있습니다. Grand Theft Auto 3가 Liberty City를 돌아다닐 때 어떻게 적은 수의 에셋 (Assets)을 메모리 (Memory)에 로드 (Load)하고 언로드 (Unload)하는지 말이죠.

이 게임은 당신의 눈앞에서 몰래 세계를 구축하고, 당신의 등 뒤에서 조용히 세계를 삭제합니다.

기본적으로, 도시 전체를 메모리에 담으려고 시도하는 대신, Rockstar는 환상을 유지하기에 충분할 만큼의 도시 모습만을 보여주는 '움직이는 창 (Moving window)'을 구축한 것입니다.

이를 통해 Rockstar는 원하는 만큼 큰 도시를 건설할 수 있었으며, 아티스트 Aaron Garbut는 다음과 같이 말했습니다. "그 방식을 제대로 구현해낸 것은 규모와 디테일에 대한 많은 제약을 효과적으로 제거해 주었습니다. 플레이어 주변의 영역이 메모리에 들어갈 수 있고, DVD에서 충분히 빠르게 읽어올 수만 있다면 우리는 원하는 것을 무엇이든 만들 수 있었습니다."

이제, 한 가지 짚고 넘어가야 할 점이 있습니다. GTA 3가 플레이 중에 에셋을 메모리에 로드한다는 아이디어를 처음 떠올린 게임은 분명 아닙니다.

사실, 이러한 방식은 이미 이전 세대에서도 일어나고 있었습니다.

Crystal Dynamics가 개발한 PlayStation 1 게임인 Legacy of Kain: Soul Reaver를 예로 들어보겠습니다.

개발자는 전체 세계를 수많은 작은 청크 (Chunks)로 나눈 뒤, 이를 일렬로 끝없이 배치할 수 있다는 사실을 깨달았습니다.

그러고 나서 플레이어가 한 청크의 경계에 접근하면, 게임은 다음 부분을 빠르게 로드하기 시작하여 플레이어가 그곳에 도착했을 때 준비가 되어 있도록 했습니다. 덕분에 로딩 화면 (Loading screen)을 위해 멈출 필요 없이 탐험할 수 있는 전체 세계를 경험할 수 있었던 것입니다.

이와 동일한 기술은 Jak and Daxter, Metroid Prime부터 Uncharted, God of War에 이르기까지 수백 개의 게임에서 사용되어 왔습니다.

또한 이것은 왜 비디오 게임 캐릭터들이 좁은 틈 사이를 천천히 비집고 지나가는 데 그렇게 많은 시간을 소비하는지도 설명해 줍니다. 이는 콘솔이 다음 구역을 메모리 (Memory)에 로드 (Load)할 시간을 벌어주기 때문입니다.

하지만 다시 Grand Theft Auto 이야기로 돌아가자면, 이 게임은 아마도 밀집된 도시 환경을 구축하기 위해 스트리밍 (Streaming) 솔루션을 사용한 최초의 게임이었을 것입니다. 개발자가 플레이어가 다음에 어느 구역으로 갈지 예측할 수 없거나, 문이나 엘리베이터, 혹은 좁은 틈 뒤에 로딩 (Loading)을 숨길 수 없는 그런 세상 말이죠. 이것은 말 그대로 360도 모든 방향을 자유롭게 탐험할 수 있는 실제 오픈 월드 (Open World)였습니다.

하지만 이를 구현하는 것은 쉽지 않았으며, 이 야심 찬 계획은 Rockstar가 해결해야 할 5가지 큰 문제로 이어졌습니다.

그럼, 첫 번째 문제입니다.
팝인 (Pop-in).
만약 GTA 3가 방금 제가 설명한 방식 그대로, 즉 플레이어 주변의 좁은 사각형 영역 안에서만 에셋 (Assets)을 로드 (Load)하고 언로드 (Unload)하며 작동했다면, 다음과 같은 모습이었을 것입니다. 즉, 이전 세대 게임에서 나타나는 끔찍한 팝인 (Pop-in) 효과와 함께, 눈앞에서 세상의 파편들이 허공에서 갑자기 나타나는 게임 말이죠.

따라서 플레이어와 가장 가까운 모델 (Models)들을 스트리밍 (Stream)하는 것만으로는 충분하지 않습니다. 하지만 동시에, 메모리 (Memory)가 바닥나기 전까지 그물을 던질 수 있는 범위에는 한계가 있습니다.

그래서 해결책은 이렇습니다. 게임은 수많은 섹터 (Sectors)를 확인하지만, 멀리 떨어진 구역에서는 건물, 다리, 배, 크레인과 같은 더 큰 구조물들만 로드 (Load)합니다. 즉, 캐릭터 주변의 구역은 완전히 로드 (Load)되지만, 몇 개의 섹터 (Sectors)보다 더 멀리 떨어진 곳은 가장 큰 구조물들만 나타나게 됩니다.

물론, 이 방식 역시 여전히 많은 메모리 (Memory)를 잡아먹을 것입니다. 그래서 실제 모델 (Models)을 사용하는 대신, 이 멀리 있는 구조물들은 형편없는 저해상도 텍스처 (Texture)를 가진 단순화된 저폴리곤 임포스터 (Low Polygon Imposter)를 사용합니다.

그러다 충분히 가까워지면, 실제 모델 (Model)과 텍스처 (Texture)를 스트리밍 (Streaming)하여 저폴리곤 (Low poly) 복사본 위에 자연스럽게 페이드 인 (Fade in) 시킬 수 있습니다.
이것은 LOD, 즉 디테일 수준 (Level of Detail)이라고 불리는 시스템입니다.
그리고 이 방식은 다른 섬들에도 확장 적용됩니다.
포틀랜드 (Portland), 스턴턴 (Staunton), 쇼어사이드 (Shoreside)는 각각 리버티 시티 (Liberty City)의 다른 부분들을 대신하여 지평선에 배치될 저폴리곤 (Low poly) 모델들을 가지고 있습니다.
사실, 스턴턴은 두 가지 모델을 가지고 있는데, 포틀랜드에서 바라보느냐 혹은 쇼어사이드에서 바라보느냐에 따라 모델이 달라집니다.
결국, 당신이 동쪽에 있다면 이 마천루들의 뒷면을 렌더링 (Rendering)하는 것은 의미가 없기 때문입니다.
삼각형 (Triangle) 개수를 아끼는 것이 더 낫습니다.
이 모든 기술 덕분에 리버티 시티는 몰입감과 길 찾기 목적을 위해 먼 곳의 스카이라인 (Skyline)을 유지할 수 있습니다.
하지만 이 멀리 있는 건물들에 저해상도 대역 (Low resolution stand-ins)을 사용함으로써, 게임은 많은 메모리 (Memory)를 절약할 수 있습니다.
다음 문제는, 음, 리버티 시티가 메모리에 저장해야 할 유일한 요소가 아니라는 점입니다.
그 32메가바이트 (32 megabyte)의 RAM 더미는 애니메이션 (Animations), 보행자 AI (Pedestrian AI), 물리 계산 (Physics calculations), 마지막으로 탔던 차량의 위치 등도 추적해야 합니다.
메모리에 저장할 필요가 없는 유일한 것은 라디오 스테이션 (Radio stations)뿐인데, 이는 DVD에서 직접 재생됩니다.
따라서 이는 전체 메모리 오버헤드 (Memory overhead) 중 아주 작은 부분만이 스트리밍 (Streaming)에 할당될 수 있음을 의미합니다.
GTA3가 정확히 얼마나 많은 메모리를 사용하는지는 모르지만, 동일한 콘솔에서 동일한 엔진을 사용하는 San Andreas를 예로 들어, DVD를 컴퓨터에 넣고 확인해 보면...
stream.ini라는 파일을 찾을 수 있는데, 여기에는 도시 스트리밍 (Streaming)을 위해 단 13.5메가바이트 (13.5 megabytes)의 메모리만이 할당되어 있음을 보여줍니다.
게다가, 리버티 시티는 단순히 건물과 가로등만으로 이루어진 것이 아닙니다.
이곳은 자동차와 보행자로 가득 찬 북적이는 도시이며, 이들 또한 해당 메모리 공간을 공유해야만 합니다.

따라서, 도시 스트리밍 (city streaming)을 위한 충분한 공간을 확보하기 위해 이 모든 시스템은 고도로 최적화 (optimised)되어야 했습니다.

자동차를 예로 들어보겠습니다. GTA 3에는 약 60대의 고유한 차량이 있습니다. 제가 추정하기로 전체 차량 목록의 모델과 텍스처 (textures) 용량은 약 10MB에 달합니다.

따라서 이 차량들을 모두 동시에 로드 (loaded)해 두는 것은 합리적이지 않습니다. 대신, 게임은 매우 엄격한 풀 (pool)을 유지합니다. 한 번에 오직 8종류의 차량 유형만이 메모리에 로드될 수 있습니다.

차량이 생성 (spawned)될 때, 이 8개의 슬롯 중 하나에 있는 차량을 사용하거나, 공간을 만들기 위해 기존의 오래된 차량을 내보내야(boot out) 합니다.

그리고 이 작은 풀에는 현재 당신이 운전 중인 차량, 직전에 운전했던 차량, 근처 지역에 주차된 모든 차량, 그리고 택시나 경찰차와 같은 흔한 차량들도 포함되어야 합니다. 여기에는 SWAT 차량, 헬리콥터, 그리고 수배 레벨 (wanted level)이 충분히 높을 경우의 군용 트럭까지 포함됩니다...

글쎄요, 이것이 가끔 똑같은 자동차들이 계속해서 반복되어 보이는 이유입니다.

단지...

AI 자동 생성 콘텐츠

본 콘텐츠는 YouTube GMTK (게임 디자인)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0