• 둠이 PDF 파일에서 직접 구동되도록 포팅됨 — DoomPDF 포트는 약 12.5 FPS로 실행된다

    Pdftris의 최근 출시가 DoomPDF 개발자에게 영감을 주었다.

    article image

    한 고등학생이 PDF 파일 내부에 도옴(Doom, 1993) 포트를 제작했다. Ading2210은 최근 PDF 파일에 구현된 테트리스(Tetris, 1985)와 몇 년 전 PDF 컨테이너로 포팅된 브레이크아웃(Breakout, 1976)의 사례에서 영감을 얻어 DoomPDF를 만들었다. PDFtris와 마찬가지로, DoomPDF 역시 문서 파일 형식의 자바스크립트(Javascript) 지원에 의존한다. 그럼에도 불구하고, 플레이에 관심 있는 사용자는 자신의 호기심을 충족시키기 위해 크로미움 기반 브라우저를 실행해야 한다.

    Ading2210에 따르면, Adobe Acrobat의 JS 명세는 3D 렌더링이나 모니터 감지 기능처럼 본래 범위를 훨씬 초과하는 기능까지 광범위하게 지원하는 편이다. 현대 브라우저들이 보안상의 이유로 일부 기능만 지원할 수 있지만, 그럼에도 불구하고 게임을 포팅하고 구동할 수 있는 방법은 여전히 존재한다.

    DoomPDF의 경우, Ading2210은 C 코드를 "WebAssembly 대신 asm.js를 대상으로 하는 구 버전의 Emscripten"을 이용해 PDF 내부에서 실행되도록 컴파일했다고 설명한다. 이는 해당 코드가 브라우저의 PDF 엔진이 제공하는 제한된 JS 환경 내에서 구동됨을 의미한다. 입력은 크로미움 PDF 엔진의 텍스트 필드 및 버튼 지원을 통해 감지되며, 이동, 맵, 무기 조작 기능 등 모든 제어 기능이 구현되었다. 하지만 이 doomgeneric 소스 포트를 구현하는 과정에서는 시각적 및 프레임버퍼(framebuffer) 처리와 관련된 어려움이 있었다.

    기술 애호가가 40년 된 프린터 컨트롤러에서 도옴을 구동시키다

    article image

    스크린샷에서 볼 수 있듯이, DoomPDF 구동 직후의 PDF 렌더러 시각 효과는 어느 정도 디테일을 갖추었으나, 낮은 색 깊이와 대비 부족 등의 문제점을 안고 있다. 개발자는 이전의 PDF 기반 게임들이 개별 픽셀을 구현하기 위해 켜고 끌 수 있는 단순한 개별 텍스트 필드를 사용했었다고 설명한다. 그러나 320 x 200 픽셀을 구현하려면 최대 64,000개의 필드를 빠르게 토글(toggle)해야 하며, 이는 기술적으로 불가능에 가깝다고 한다.

    이에 Ading2210은 픽셀 하나하나를 위해 텍스트 필드를 사용하는 대신, 게임 화면의 각 행마다 별도의 텍스트 필드를 사용하고 ASCII 문자를 활용하여 여섯 가지 회색 음영을 만들어냈다. 이 렌더링 방식의 성능은 프레임당 약 80ms(초당 약 12.5 FPS)로 구동하기에 충분하다고 보고한다.

    DoomPDF는 GNU GPL v2 라이선스에 따라 배포되는 무료 소프트웨어이다. 도옴은 잔디깎이 기계, 에어 하키 테이블, 키보드 키캡, 심지어 메모장(Notepad)에 이르기까지 수많은 기기 및 플랫폼에 악명 높을 정도로 포팅된 역사를 가지고 있다.

    [출처:] https://www.tomshardware.com/video-games/doom-ported-to-run-directly-from-a-pdf-file-doompdf-port-runs-at-approximately-12-5-fps