해결책
1994년과 1995년, 너티 독의 프로그래머 앤디 개빈은 스튜디오 최초의 3D 플랫폼 게임인 크래시 밴디쿳을 소니의 최신 플레이스테이션용으로 제작했다. 이 콘솔은 고작 2MB의 빠른 시스템 RAM과 느리지만 대용량인 CD 드라이브를 갖추고 있었고, 레벨은 당시 기준으로 방대했다. Ars Technica의 War Stories 영상 인터뷰에서 개빈은 이 불균형을 어떻게 극복했는지 설명했다.
핵심 기법은 고급 가상 메모리 스와핑 기법이었다. 각 레벨은 64KB 청크로 나뉘었고, 크래시의 즉각적인 화면 환경에 필요할 때만 CD에서 독립적으로 로드되었다. 개빈에 따르면 그 결과 툼 레이더 같은 동시대 게임의 20~30배에 달하는 디테일 수준을 얻었다.
표현력 풍부한 워너 브라더스 스타일의 애니메이션이 두 번째 과제였다. 크래시는 플레이스테이션이 프레임당 렌더링하는 1,500개 폴리곤 중 600개를 배정받았지만, 당시의 표준적인 스켈레탈 3D 애니메이션은 너무 로봇처럼 보였다. 그래서 팀은 모든 애니메이션에 걸쳐 500개 정점 전체의 위치 애니메이션 데이터를 미리 구워 저장하고, 많이 움직이지 않는 정점의 데이터를 버리는 맞춤형 압축 알고리즘을 작성했다. 개빈의 기억에 따르면 50 또는 80대 1의 압축이었다. 팀은 또한 대부분 검증되지 않은 하드웨어에서 사용 가능한 메모리와 수학 연산 속도를 극대화하기 위해 플레이스테이션의 내장 코드 라이브러리를 해킹했다.
이룬 성과
RAM을 캐시로 취급하라. 레벨을 64KB 청크로 나누어 화면에 보일 때만 CD에서 스트리밍하고, 정점 애니메이션을 맞춤형 50~80:1 압축으로 미리 구워라.
통한 이유
플레이스테이션은 RAM이 2MB밖에 없어서 레벨 전체가 들어갈 수 없었다. CD에서 청크 단위로 스트리밍하는 것만이 루빈의 아트가 요구하는 디테일을 얻는 유일한 방법이었다.
CD 드라이브는 느리지만 대용량이었기에, 데이터를 독립적인 64KB 조각으로 나누기만 하면 스왑 장치로 활용할 수 있었다.
당시의 스켈레탈 애니메이션은 로봇처럼 보였다. 정점별 위치를 미리 굽는 방식은 방대한 데이터를 대가로 만화 같은 스쿼시 앤 스트레치를 얻었고, 맞춤형 압축만이 이를 감당할 수 있었다.
소니의 내장 코드 라이브러리를 해킹해 아무도 출시해 본 적 없는 하드웨어에서 추가 메모리와 수학 연산 속도를 짜냈다.
플랫폼이 당신의 세계를 담을 수 없을 때는, 보이는 조각만 상주하도록 데이터를 재구성하라. 느린 저장 장치에서 청크 스트리밍하는 방식은 이제 오픈 월드 게임의 표준이다.
그 후
크래시 밴디쿳은 1996년 9월에 출시되어 Ars Technica에 따르면 마리오와 소닉에 맞서는 소니의 마스코트급 대답이 되었다. 유사한 동적 메모리 관리 기법은 이제 오픈 월드 비디오 게임의 표준이며, 해당 매체는 개빈의 크래시 작업을 그 개념 증명으로 평가한다.
근거 확인하기
출처
- War Stories: How Crash Bandicoot hacked the original PlayStation Ars Technica · arstechnica.com ·