TTF-DOOM: Chạy engine raycasting ngay trong máy ảo của phông chữ TrueType

06 tháng 4, 2026·4 phút đọc

TTF-DOOM là một dự án kỹ thuật độc đáo thực hiện chạy game dạng raycasting bên trong bộ xử lý hinting của phông chữ TrueType. Bằng cách tận dụng tính chất Turing-complete của font bytecode, tác giả đã nhúng engine dựng hình 3D vào glyph "A", biến tệp phông chữ thành một loại GPU đầy kỳ lạ.

TTF-DOOM: Chạy engine raycasting ngay trong máy ảo của phông chữ TrueType

Bạn đã bao giờ tưởng tượng việc chơi một tựa game kiểu Wolfenstein 3D chạy trực tiếp bên trong một tệp phông chữ chưa? Đó chính là điều mà một nhà phát triển với nickname 4RH1T3CT0R7 đã đạt được với dự án TTF-DOOM.

Đây không phải là một bản port hay trò chơi ghi đè lên hình ảnh font chữ. Thay vào đó, nó thực sự sử dụng máy ảo hinting (căn chỉnh) có sẵn trong đặc tả TrueType để thực hiện các tính toán đồ họa và hiển thị môi trường 3D.

Demo hoạt động của TTF-DOOMDemo hoạt động của TTF-DOOM

Cơ chế hoạt động: Font chữ như một GPU

TrueType fonts sở hữu một máy ảo tích hợp để căn chỉnh các đường nét glyph (grid-fitting), đảm bảo văn bản hiển thị sắc nét ở mọi kích thước. Máy ảo này có ngăn xếp (stack), vùng lưu trữ (storage), phép tính số học, câu điều kiện và gọi hàm. Quan trọng hơn, nó được chứng minh là Turing-complete.

Trong TTF-DOOM, tác giả đã viết một engine raycasting (kỹ thuật dựng hình 3D dùng tia) bằng bytecode của TrueType. Cụ thể:

  • Glyph chữ "A" trong phông chữ này chứa 16 đường viền thẳng đứng.
  • Chương trình hinting sẽ đọc tọa độ người chơi từ các trục biến thể (font variation axes) thông qua lệnh GETVARIATION.
  • Nó thực hiện thuật toán ray marching (DDA) dựa trên bản đồ 16x16 được lưu trong vùng lưu trữ của font.
  • Cuối cùng, nó sử dụng lệnh SCFS để thay đổi độ cao của các thanh dọc trong glyph "A", tạo ra hiệu ứng thị giác 3D của các bức tường.

Minh họa quá trình biến đổi glyphMinh họa quá trình biến đổi glyph

Toàn bộ engine này chỉ chiếm khoảng 6,5 KB bytecode, bao gồm 13 hàm và 795 slot lưu trữ cùng các bảng tra cứu sin/cos.

Kiến trúc và Trình biên dịch tùy biến

Dự án sử dụng kiến trúc lai, nơi phông chữ đóng vai trò như một thiết bị xử lý đồ họa (GPU) kỳ lạ:

  • JavaScript: Xử lý chuyển động, kẻ địch, bắn súng và truyền dữ liệu.
  • CSS/Font: Nhận tọa độ người chơi thông qua thuộc tính font-variation-settings và thực hiện việc dựng hình tường.

Tác giả đã xây dựng một trình biên dịch nhỏ gồm lexer, parser và codegen để chuyển đổi một ngôn ngữ DSL (giống C) sang assembly của TrueType. Ví dụ, mã nguồn doom.doom sẽ được biên dịch thành các lệnh FDEF, CALL, RS, WS, SCFS và nhúng vào tệp .ttf.

Những thách thức "điên rồ" của toán học TrueType

Làm việc với máy ảo TrueType không hề dễ dàng. Tác giả đã gặp phải những vấn đề rất lạ lùng:

  • Phép nhân kỳ lạ: Lệnh MUL thực hiện phép tính (a*b)/64 thay vì a*b. Điều này dẫn đến kết quả 1 * 4 = 0 do làm tròn số nguyên. Tác giả phải dùng một workaround phức tạp thông qua lệnh DIV để giải quyết vấn đề định điểm cố định F26Dot6.
  • Không có vòng lặp WHILE: Máy ảo không hỗ trợ vòng lặp trực tiếp. Mọi vòng lặp phải biên dịch thành các hàm đệ quy (recursive FDEFs), nhưng FreeType lại giới hạn độ sâu gọi hàm khoảng 64 frame, khiến việc tối ưu hóa trở nên cực kỳ khó khăn.
  • Toàn độ: Tác giả phải dùng cờ đánh dấu (hit flags) thay vì lệnh return thông thường vì lệnh này không thoát khỏi hàm ngay lập tức trong ngữ cảnh đệ quy.

Chế độ debug cho thấy các trục biến đổiChế độ debug cho thấy các trục biến đổi

Cách chạy thử

Nếu bạn muốn trải nghiệm sự kỳ lạ này, dự án đã hỗ trợ chạy trực tiếp trên trình duyệt hoặc cài đặt locally:

Trên trình duyệt (Chrome/Edge):

  1. Truy cập trang demo trực tiếp: https://4rh1t3ct0r7.github.io/ttf-doom/
  2. Dùng phím WASD để di chuyển, Mũi tên để quay.
  3. Phím Space để bắn và phím Tab để xem lớp debug (xem các trục biến đổi font thay đổi theo thời gian thực).

Dự án này không chỉ là một trò đùa kỹ thuật (just for fun) mà còn là một minh chứng tuyệt vời cho sự sáng tạo trong việc khai thác các công nghệ cũ hoặc ít được quan tâm như đặc tả phông chữ.

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗