64KB 게임 개발의 극한!

by DD
3개월 전
조회수 0

64KB 용량 제한 속에서 슈팅 게임 'QUOD'를 개발한 과정을 상세히 설명함

텍스처 압축, 모델 최적화, 코드 최적화 등 극한의 리소스 절약 기법을 적용함

프로시저럴 텍스처 생성, 셰이더 최적화, 코드 압축 등 다양한 기술을 활용하여 용량 한계를 극복함

게임 로직, 렌더링, 사운드, 애니메이션 등 게임 개발 전반의 최적화 과정을 공유함

64KB 게임 개발의 동기 및 목표

발표자는 10년 전 시작한 프로젝트를 최근 1년간 집중 개발하여 64KB 용량의 슈팅 게임 'QUOD'를 완성했다고 밝힘. 64KB라는 극단적인 용량 제한은 1990년대 후반 데모씬(Demoscene)의 64KB 카테고리에서 영감을 받았으며, 이 숫자가 주는 창의적 제약이 개발 동기가 되었음을 강조함. 작은 용량으로도 풍부한 게임 경험을 제공하는 것을 목표로 함.

텍스처 및 모델 최적화 전략

일반적인 PNG 텍스처 대신, 프로시저럴 텍스처 생성 도구를 개발하여 텍스처 데이터를 수백 바이트 수준으로 압축함. 텍스처 레이어, 블렌딩 모드, 노이즈, 베벨, 타일링 등 다양한 옵션을 조합하여 복잡한 텍스처를 생성하고, 미러링 및 스케일링 최적화를 통해 용량을 추가 절감함. 모델의 경우, 미러링 모디파이어를 사용하여 버텍스 수를 절반으로 줄이고, 스플라인 기반의 3D 모델링으로 복잡한 형태를 효율적으로 표현함.

렌더링 및 라이팅 최적화 기법

게임의 실시간 렌더링을 위해 프로그레시브 텍스처 로딩GPU 기반 셰이더 최적화를 적용함. 사전 계산된 라이팅(Precomputed Lighting) 대신 프로브 라이팅(Probe Lighting) 방식을 사용하여 동적인 라이팅 효과를 구현하고, 단일 셰이더에서 다양한 라이팅 효과를 처리하도록 최적화함. 물 표면의 파도 효과스플라인 기반의 노멀 맵을 사용하여 구현하며, 물리 기반 렌더링(PBR)은 용량 제약으로 인해 제한적으로 사용함.

코드 압축 및 최적화 기법

게임 로직은 C/C++로 작성되었으며, 컴파일러 최적화 플래그를 적극 활용하여 실행 파일 크기를 최소화함. `O0` (No Default Libs) 플래그로 표준 라이브러리 의존성을 줄이고, `O0` (Disable Inline Function Expansion)으로 코드 크기를 줄임. 전역 변수 및 함수를 최소화하고, `static` 키워드를 사용하여 스코프를 제한하며, `const` 및 `constexpr`을 활용하여 컴파일 타임에 계산 가능한 상수를 정의함. 코드 압축을 위해 `O0` (No Default Libs) 플래그를 사용하고, `O0` (Disable Inline Function Expansion)으로 코드 크기를 줄임.

사운드 및 애니메이션 최적화

사운드 시스템은 오디오 트래커를 사용하여 최대 4개의 사운드 채널을 동시에 재생하도록 구현함. 각 사운드 클립은 샘플링된 오디오 데이터를 사용하며, 볼륨, 피치, 리버브 등 다양한 효과를 실시간으로 적용함. 애니메이션은 키프레임 기반으로 구현되며, 포즈와 키프레임을 사용하여 캐릭터의 움직임을 표현하고, 스플라인 보간을 통해 부드러운 애니메이션을 생성함. 스프라이트 애니메이션파티클 시스템과 함께 사용하여 시각 효과를 강화함.

QUOD - A shooter game in 64 KB