BTC$29880

ETH$3666

Шукати

DOOM перенесли на SQL: рендерер гри написали на 1300 рядках запитів

SQL зазвичай сприймають як мову для роботи з великими наборами даних. Але це також мова програмування з багатьма можливостями, знайомими користувачам C чи Python. Хоча SQL не створювали для загальних обчислень, він придатний і для завдань, для яких його зазвичай не використовують. Команда CedarDB перенесла оригінальну DOOM на SQL, щоб продемонструвати можливості мови.

Дані WAD — майже все, крім рушія гри, — зберігаються в наборі таблиць. Цю частину проєкту було порівняно просто реалізувати. Складніше було налаштувати синхронізацію гри з частотою 35 кадрів на секунду й організувати рендеринг зображень. На рендерер припадає 1300 рядків SQL, розподілених між 89 загальними табличними виразами (CTE). У решті проєкту — ще близько 4000 рядків SQL. Python використовують для обробки натискань клавіш, керування часом і виведення згенерованого растрового зображення.

Як не дивно, DOOM може бути вдалою грою для реалізації на SQL. Її створили до появи спеціалізованих відеокарт, і вона не є повністю тривимірною: розробникам довелося використовувати різні прийоми, щоб гра здавалася 3D. У результаті значну частину роботи становлять перетворення даних — завдання, з якими SQL добре справляється. Виходить майже так, ніби оригінальний рендерер DOOM створювали з думкою про цю мову.

Вихідний код проєкту доступний на GitHub. Серед інших незвичних реалізацій DOOM — версії, створені за допомогою регулярних виразів і в Microsoft Word.

Нагадаємо, дослідники з Google Research і Тель-Авівського університету презентували новий ігровий рушій GameNGen, який здатен відтворювати класичну гру DOOM з частотою понад 20 кадрів на секунду, забезпечуючи візуальну якість, що не поступається оригіналу.