취미/게임

kkreiger: 초경량(96KB) 3D 게임에 숨겨진 비밀

lazykuna 2022. 10. 30. 12:29

예~전에, 그러니까 아마 내가 중학생 시절이 아니었나 싶다. 대략 05년도쯤이 아니었을까? 당시 커뮤니티 사이트에서 “초저용량 초고사양 게임”이라는 떡밥이 돌았던 적이 있었다. 메이플과 둠3이 대략 1GB 정도는 하던 시절이었던거 같은데, 게임의 용량은 당시 이미지 파일보다도 작았던 60KB(데모버전) 이었다.

에이, 그게 말이나 돼? 하면서 속는셈 치고 (바이러스일수도 있을 것을 감수하고서) 받아보고 실행했더니 정말 돌아갔다. 심지어 그래픽도 상당히 준수해서 놀랐다. 당시 고사양 게임 해보겠다고 어찌어찌 졸라서 당시 중급기였던 라데온 9550 를 쓰고 있었는데 버벅거렸던 기억이 있다. 어떻게 이게 가능한지 당시의 나로서 도저히 이해할수는 없었지만, 흥미롭네 하면서 넘어갔던 기억이 있다.

Ingame screenshot from Softonic

그리고 십년이 넘게 지난 지금에 와서 구체적인 메커니즘에 대해서 설명해 준 유튜브 영상이 내 한켠에 있던 기억을 끄집어 내 주었다. 정말 놀랍게도, 100kb도 안 되는 프로그램이 정말로 3D FPS 게임을 실행하고 있었다.

이 게임은 텍스쳐를 직접 “생성” 한다. 그렇다기에는 게임 내 텍스쳐들이 굉장히 복잡하고 유사한 점이 전혀 없어 보여 굉장히 의아한데, 그 비결은 바로 특정 패턴에 필터를 주거나 반복하는(반복, 엠보싱, 대조, 명암, 프랙탈, 왜곡, 마스킹 등 등) 효과를 사용하여 텍스쳐를 생성하는 것이다. 이쯤되면 내부 텍스쳐 생성 엔진은 사실상 포토샵과 다름이 없는 것이 아닐까… 😳 FYI: 이러한 방식은 텍스쳐 뿐만 아니라 Mesh, 파티클 등의 요소에도 적용됨.

이 게임은 사운드도 직접 “생성”한다. 심지어 단순 MIDI를 사용한 것이 아니라 Farbrausch 엔진을 사용하여 직접 PCM 데이터를 생성하는 형태라고 한다. 당시 기억에도 음악 퀄러티가 꽤 나쁘지 않았던 것으로 기억한다.

내부 툴 Werkkzeug로 Procedural texture generation 스크립팅하는 모습

흥미로운 점은 이렇게 초경량인 게임인데도 불구하고 내부적으로 스크립팅이 가능하게 되어 있다. 텍스쳐 이미지는 없지만 텍스쳐 이미지를 만드는 스크립트가 존재하고(Procedural texture generation), 이를 만들 수 있는 툴셋이 존재한다는 거다. 여느 게임과 마찬가지로 게임 개발툴또한 어엿하게 갖추고 있는 것이다. 초경량 게임인데 이렇게 높은 완성도까지 구비할 수 있다는 것이 상당히 놀라울 따름이다.

noise, twirl, color, repeat, mask 등의 명령을 통해 텍스쳐를 생성하여 이러한 텍스쳐를 생성해낸다고 한다.

정리하면, 이 게임은 모든 리소스(이미지, Mesh, 텍스쳐)를 변형을 통해 직접 생성하는 게 초경량 고사양 게임의 비결이었던 것이다. 그 과정에서 사용된 흥미로운 메커니즘뿐만 아니라 이를 위한 개발툴까지 구비된 높은 완성도를 보여주는 것이 이 게임의 놀라운 점.

  • 프로그램 자체 압축에 일화는 여기 참조. 여기도 꽤 재미있는 에피소드가 있다. 소스 레벨에서 실행되지 않는 브랜치나 코드를 찾아서 제거한 과정이 인상적.
  • 이외에도 다른 압축 기술 (사실 Compression이라기 보다 Generation에 가까움)들은 이 글을 참조.
  • 출처: kkrieger: Making an Impossible FPS | Nostalgia Nerd — https://www.youtube.com/watch?v=bD1wWY1YD-M