«Рендеринг Doom в базе данных — очевидно плохая идея», — пишет Лукас Фогель в подробном посте в блоге, объясняя, как именно ему удалось отрисовать Doom с помощью SQL-базы данных.
Ладно, это не совсем точно. Проект SQLDoom использует небольшой клиент на Python для обработки ввода и вывода, управления игровым таймингом и отображения каждого кадра на экране. За этим стоят таблицы CedarDB, отслеживающие геометрию и состояние игры, а около 1300 строк SQL-запросов, распределенных по 89 общим табличным выражениям, реализуют игровую логику и генерируют 35 кадров в секунду в виде растровых изображений.
В этом SQLDoom является значительным улучшением по сравнению с предыдущим проектом Фогеля DoomQL, который в прошлом году ставил целью создать «многопользовательский шутер в стиле Doom полностью на SQL». К сожалению, та попытка закончилась серой ASCII-графикой на основе рейкастинга, которая больше напоминала упрощенные карты Wolfenstein 3D с углами в 90 градусов. Новая же SQLDoom генерирует полноцветные кадры с разрешением 640×480, которые выглядят так, будто могли быть получены из оригинального исполняемого файла Doom.
Всего лишь данные, чувак
Преобразование классических WAD-файлов Doom в реляционную базу данных было относительно простым и понятным, пишет Фогель, благодаря тому, как оригинальная игра разбивала уровни на вершины, линии, сектора и так далее. Даже знаменитые двоичные деревья отсеченияDoom можно разбить на SQL, используя sort_key для объектов, который предварительно вычисляется для каждой позиции во время загрузки. При наличии этого в вашей таблице простая команда «ORDER BY» определяет, какие части стен отображать, а какие игнорировать в каждом кадре, что значительно повышает производительность.
,

Однако при переходе от SQL-таблиц к отрендеренным кадрам от первого лица возникло несколько сложностей. Главной из них был алгоритм, необходимый для рендеринга полов и потолков, которые не могли эффективно использовать элегантные «визуальные плоскости» и мутации состояния, обрабатывающие этот рендеринг построчно в оригинальной игре. Для SQLDoom Фогель использует то, что он называет «довольно хакерской» заменой, включающей итерацию по упорядоченному списку панелей.
Несмотря на существенные дополнительные накладные расходы на чтение и запись в SQL-таблицы для всего, Фогель сказал, что ему удалось запустить DoomSQL примерно на 60 кадрах в секунду на ноутбуке с процессором Ryzen 7, с редкими падениями до 35 кадров в секунду в сложных сценах. И, несмотря на трудности с переводом Doom на SQL, Фогель отмечает, что стабильный «эталонный снимок» состояния игры в базе данных, наряду с присущими ей функциями управления параллелизмом и доступом, предлагает значительные преимущества для запуска многопользовательского сервера. С базой данных «нет частично примененных обновлений, физических ошибок или разногласий по поводу того, действительно ли ракета попала», — говорит Фогель.
Если вы хотите запустить Doomtabase на своем локальном компьютере, вы можете сделать это просто с помощью кода на GitHub, копии CedarDB и WAD-файла Doom. Или вы можете присоединиться к бесплатному онлайн-демоматчу, чтобы протестировать его без всякой настройки (я получил довольно низкую производительность, используя этот вариант, хотя). А когда закончите, возможно, просмотрите некоторые из многих других невероятныхDoomпортов, которые Ars освещална протяжениилет.
Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.
Автор – Kyle Orland




