Show HN: TTF-DOOM – TrueType 폰트 힌팅 안에서 실행되는 레이캐스터
Source: Hacker News
Overview
TrueType 폰트에는 글리프를 그리드에 맞추는 힌팅 가상 머신이 포함되어 있습니다. 이 VM은 스택, 저장 영역, 조건문, 함수 호출을 지원하며 튜링 완전합니다. 이를 이용해 레이캐스팅 엔진을 힌팅 바이트코드만으로 완전히 구현했습니다.
폰트에 포함된 글리프 **“A”**는 16개의 수직 바 컨투어를 가지고 있습니다. 힌팅 프로그램은 GETVARIATION을 통해 폰트 변형 축에서 플레이어 좌표를 읽어오고, VM의 저장 영역에 저장된 타일 맵에 대해 DDA 레이 마칭을 수행한 뒤 SCFS로 바 높이를 조정합니다. 그 결과 폰트 내부에 거친 Wolfenstein 스타일 뷰가 렌더링됩니다.
Technical Details
- Bytecode size: 전체 약 6.5 KB, 13개의 함수와 795개의 저장 슬롯, 그리고 사인/코사인 조회 테이블로 구성됩니다.
- JavaScript integration: 움직임, 적, 사격을 처리하고 좌표를 CSS
font-variation-settings을 통해 폰트에 전달합니다. 폰트는 사실상 GPU 역할을 합니다. - TrueType VM의 특이점:
MUL은(a × b) / 64를 계산하므로1 * 4 = 0이 됩니다.DIV명령도 유사한 제약이 있습니다.- 기본
WHILE루프가 없으며, 모든 반복은 재귀FDEF로 컴파일됩니다. FreeType은 호출 깊이를 대략 64 프레임으로 제한합니다. SVTCA[0]은 Y 축을,SVTCA[1]은 X 축을 선택합니다.
- Compiler: 작은 컴파일러(렉서, 파서, 코드 생성기)가 C‑유사 DSL을 TrueType 어셈블리로 변환합니다.
Demo
-
Visualization GIF:
-
Live demo:
(Chrome/Edge, WASD + arrow keys, Space to shoot, Tab for debug overlay)
데모에서 Tab 키를 누르면 이동에 따라 폰트 변형 축이 변하는 것을 확인할 수 있습니다.
References
- Hacker News discussion: