TECH 으로 돌아가기
TECH HACKER NEWS 오늘 6분 읽기 26 READS

13KB 안에 퀘이크를 구겨 넣은 개발자 — 극한의 용량 최적화 이야기

1996년작 FPS의 전설 퀘이크(Quake)를, 단돈 13킬로바이트로 재현한 프로젝트가 있어요. 이름은 Q1K3. js13kGames라는 대회 출품작인데요, 이 대회는 매년 열리는 자바스크립트 게임 개발 대회로, 규칙이 딱 하나 있어요. 게임의 코드, 그래픽, 사운드, 레벨 데이터 전부를 zip으로 압축했을 때 13,312바이트(13KB) 안에 들어가야 한다는 거예요. 13KB가 어느 정도냐면, 스마트폰으로 찍은 사진 한 장이 보통 2~4MB니까 그 200분의 1도 안 되는 크기예요. 지금 읽고 계신 이 글의 텍스트 몇 배 수준밖에 안 되는 용량에 3D 슈팅 게임 하나가 통째로 들어간 거죠.

만든 사람은 phoboslab이라는 닉네임으로 활동하는 도미닉 스자블레프스키(Dominic Szablewski)예요. HTML5 게임 엔진 Impact.js를 만들었고, 단순함으로 눈길을 끈 이미지 포맷 QOI를 설계한 그 개발자거든요. 작은 코드로 큰일을 벌이는 데 이골이 난 사람이 작정하고 만든 작품이라고 보시면 돼요.

에셋을 담는 게 아니라, 만들어냅니다

원작 퀘이크의 게임 데이터는 수십 MB예요. 이걸 13KB에 넣는 건 압축 프로그램을 아무리 잘 써도 불가능하죠. 그래서 접근이 완전히 달라요. 에셋을 저장하는 대신, 실행할 때 코드로 생성하는 거예요.

텍스처가 대표적인데요. 벽돌이나 바닥 무늬 이미지를 파일로 넣는 대신, 노이즈와 패턴을 조합해서 그림을 그려내는 코드 몇십 줄만 넣어요. 이걸 절차적 생성(procedural generation)이라고 하는데, 이게 뭐냐면 완성된 그림을 저장하는 대신 '그림 그리는 레시피'만 저장하는 거예요. 요리로 치면 완성된 케이크를 배송하는 대신 레시피 쪽지 한 장만 보내고, 받는 쪽 주방(플레이어의 브라우저)에서 즉석으로 구워내는 방식이죠.

레벨 지형도 마찬가지예요. 원작의 복잡한 지오메트리를 그대로 넣을 수 없으니, 맵을 직육면체 블록 단위로 단순화하고 좌표를 거친 정수 단위로 양자화해서 블록 하나를 몇 바이트로 표현해요. 적 캐릭터의 3D 모델은 정점(vertex) 수를 극단적으로 줄이고 애니메이션 데이터도 뭉텅뭉텅 압축했고요. 사운드와 음악은 오디오 파일 대신 초소형 소프트웨어 신시사이저를 코드로 넣어서 실행 중에 합성해요. 렌더링은 기성 게임 엔진 없이 WebGL을 직접 호출하고요. 심지어 13KB 제한이 'zip 압축 후' 기준이라는 점을 이용해서, 압축 알고리즘이 좋아하는 반복적인 패턴으로 코드를 쓰는 것까지 고려됐어요. 코드 스타일을 압축기 취향에 맞추는 수준의 집요함이죠.

이런 문화, 사실 역사가 깊어요

이런 극한 용량 제한 문화의 뿌리는 데모씬(demoscene)이에요. 64KB 안에 화려한 실시간 3D 영상을 담는 대회가 수십 년째 이어지고 있고, 96KB짜리 3D FPS로 유명한 .kkrieger 같은 전설적인 작품도 있죠. 공통된 철학은 하나예요. 제약이 창의성을 낳는다는 것. 용량이 무한하면 그냥 에셋을 사서 넣으면 되지만, 13KB밖에 없으면 모든 바이트의 존재 이유를 따져 물어야 하거든요.

요즘 웹 개발 풍경과 비교하면 재미있는 대비가 돼요. 우리는 버튼 컴포넌트 하나 쓰려고 수백 KB짜리 라이브러리를 아무렇지 않게 설치하잖아요. 물론 생산성을 위한 합리적 선택이지만, 13KB짜리 퀘이크를 보고 나면 내 프로젝트의 번들 사이즈를 한 번쯤 열어보고 싶어지죠.

우리가 가져갈 것

당장 실무에서 13KB 최적화를 할 일은 없겠지만, 배울 지점은 분명해요. 첫째, 데이터를 저장할지 생성할지는 언제나 트레이드오프이고, 절차적 생성은 게임과 그래픽스에서 지금도 현역인 기법이에요. 둘째, 번들 사이즈와 로딩 성능에 대한 감각은 프론트엔드 개발자의 기본기인데, 이런 극단적 사례가 그 감각을 벼려줘요. 셋째, 소스 코드가 공개돼 있어서 '한 바이트도 낭비하지 않는 코드'가 어떻게 생겼는지 직접 읽어볼 수 있어요. 제작기 글도 함께 찾아 읽으면 압축 테크닉의 향연을 구경할 수 있고요.

정리하면, Q1K3는 제약이야말로 최고의 스승이라는 걸 보여주는 프로젝트예요. 여러분이 겪어본 가장 혹독한 용량이나 성능 제약은 뭐였나요? 그 제약 덕분에 배운 게 있다면 함께 나눠주세요.


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://js13kgames.com/games/q1k3
SHARE
처리 중...