Программист Лукас Фогель запустил Doom внутри базы данных CedarDB. «Рендерить Doom в базе данных — заведомо плохая идея», — пишет он в блоге, но проект работает. Небольшой Python-клиент обрабатывает ввод, вывод и показ кадров, а основная логика и рендеринг реализованы около 1300 строками SQL-запросов, разбитых на 89 общих табличных выражений.
Это значительное улучшение по сравнению с предыдущим проектом Фогеля DoomQL, где графика была черно-белой и основанной на рейкастинге с углами только 90 градусов — как в Wolfenstein 3D. SQLDoom генерирует полноцветные кадры 640×480, которые выглядят как из оригинального Doom. На ноутбуке с процессором Ryzen 7 частота кадров достигает 60 FPS, в сложных сценах падает до 35 FPS. Кадры обновляются 35 раз в секунду, что сопоставимо с оригинальной игрой.
Преобразование файлов WAD в реляционную базу данных оказалось простым: оригинальная игра разбивает уровни на вершины, линии и секторы. Деревья бинарного разбиения пространства (BSP) отображаются в SQL с помощью предварительно вычисленного ключа сортировки, который рассчитывается один раз при загрузке. Простой ORDER BY определяет, какие части стен показывать, а какие скрывать, что существенно повышает производительность.
Рендеринг полов и потолков потребовал «довольно хакерского» метода с итерацией по упорядоченному списку панелей, поскольку оригинальный алгоритм Doom использует visplanes и мутации состояний, которые неприменимы в SQL. Несмотря на дополнительные накладные расходы на чтение и запись в таблицы SQL, игра работает с приемлемой производительностью.
Для многопользовательской игры база данных предоставляет стабильный снимок состояния, исключая баги физи