Как делают 3D-игры на Playdate: разбор невозможного на монохромной консоли

Инди-разработчица Кристина Рамос (Cristina Ramos) 22 июля 2026 года опубликовала в Bluesky видео своего незавершённого 3D-проекта для Playdate, консоли, которую индустрия дружно записала в неспособные на объёмную графику. На ролике герой сначала лезет вверх по интерьеру помещения, а потом выбирается на крышу и прыгает между зданиями от первого лица, почти покадровая цитата из Mirror's Edge. И всё это на устройстве без видеокарты и с экраном, который знает ровно два цвета. Разберём по шагам, как здесь устроено 3D.
«Мне говорили, что на Playdate нельзя сделать 3D, и я это сделала. Потом говорили, что я ни за что не создам уличные уровни, как в Mirror's Edge, и я снова доказала обратное», написала Рамос. За её словами стоит инженерный подвиг. Ниже я покажу, где именно проходит граница, за которой Lua перестаёт справляться и в дело идёт C.
Что вообще такое Playdate
Playdate, карманная консоль от студии Panic из Портленда, железо для которой спроектировали вместе с Teenage Engineering. Вышла в 2022 году, стоила 179 долларов на старте (позже 199), по нынешнему курсу это примерно 15-17 тысяч рублей. В комплекте шёл сезон из 24 игр, которые выдавались по две в неделю. Фирменная фишка устройства, заводная рукоятка (crank) сбоку, помимо привычной крестовины и кнопок A/B.
Экран и железо: почему 3D казалось фантастикой
Экран, 2,7-дюймовый Sharp Memory LCD с разрешением 400×240 и глубиной цвета в один бит. Один бит. Это значит: только чёрный и белый, без единой градации серого. Подсветки нет, экран отражающий. Внутри процессор ARM Cortex-M7, 16 МБ оперативной памяти и полное отсутствие графического ускорителя. Вся картинка рисуется программно, силами одного CPU. Отсюда и репутация невозможной затеи.
Дизеринг: чёрное, белое и ничего между
Главный враг объёмной графики на Playdate, 1-битный экран. В обычном 3D ощущение объёма создают тени и плавные переходы яркости: дальняя стена темнее, ближняя светлее, на округлых поверхностях градиент. На Playdate такого инструмента нет физически. Пиксель либо горит, либо нет.
Решение сообщество нашло старое, как ранняя компьютерная графика: дизеринг. Полутон имитируется узором из чёрных и белых точек, и чем плотнее чёрные точки, тем темнее кажется область глазу с расстояния. Упорядоченные точечные и штриховые паттерны заменяют собой всю палитру серого. Отсюда и узнаваемый визуальный почерк 3D на Playdate, рябящая, почти газетная фактура поверхностей. Именно дизеринг отвечает за то, что на видео Рамос стены и крыши читаются как объёмные, а не как плоские силуэты.
Без видеокарты: как один Cortex-M7 рисует полигоны
Раз GPU нет, растеризацией полигонов занимается процессор, тот самый Cortex-M7. Каждый треугольник сцены нужно спроецировать, отсечь, залить узором и вывести на экран вручную, кадр за кадром. Чтобы это укладывалось в приемлемый фреймрейт, разработчики достают классический набор оптимизаций софт-рендера:
- Backface culling: не рисуем грани, повёрнутые от камеры, их всё равно не видно.
- Жёсткий лимит на число полигонов в кадре, сцены проектируют так, чтобы геометрии было мало, но она работала на силуэт.
- Плоская заливка дизер-узором вместо попиксельного освещения.
- Иногда отрисовка каркасом (wireframe), когда заливка слишком дорога.
Обходные техники вместо честных полигонов
Есть и обходные пути, не требующие честного полигонального рендера. Псевдо-3D в духе Mode 7, когда плоскость просто масштабируется и наклоняется. Рейкастинг, техника движков уровня Wolfenstein 3D и раннего DOOM, где мир строится из вертикальных полос. Кстати, DOOM на Playdate уже запускали, это и был первый громкий пример «невозможного», после которого сомневаться в консоли стало неприлично.
Lua или C: где проходит граница
SDK у Playdate бесплатный и двухъязычный: высокоуровневый Lua и низкоуровневый C, плюс симулятор для отладки. Lua хорош для прототипов и игровой логики, на нём быстро и приятно писать. Но 3D-математика (проекции, повороты, сортировка полигонов) и сам софт-рендер на Lua не влезают в бюджет кадра: интерпретируемый язык съедает слишком много тактов.
Граница проходит так: сценарий, интерфейс, управление на Lua; всё, что крутится в горячем цикле отрисовки, на C. Тяжёлые вычисления выносят в нативный код, иначе паркур по крышам превратится в слайд-шоу. Этот компромисс и отделяет милую 2D-игру выходного дня от 3D-демо, которое заставляет людей писать «этого не может быть».
Ограничение как творческий ресурс
История Playdate показывает, что жёсткие рамки не убивают творчество, а фокусируют его. Один бит цвета, нет GPU, 16 МБ памяти, и вместо жалоб появляется дизеринг, рейкастинг, аккуратно вырезанная геометрия. Разработчики находят консоли и вовсе неожиданные применения: одна из них, например, помогает Биг-Бену звонить точно по времени.
Нам в Sigma эта логика близка: самые интересные инженерные решения рождаются там, где кто-то отказался принимать «это невозможно» за ответ, будь то 3D на чёрно-белом экране или доступ к сайту, который «нельзя открыть».
Что сильнее впечатляет в 3D на Playdate?
Коротко: как сделать 3D на Playdate
- Забудьте про серый, объём и тени имитируйте дизерингом (узоры из чёрных и белых точек).
- Готовьтесь к софт-рендеру: GPU нет, полигоны считает Cortex-M7.
- Экономьте геометрию: backface culling, минимум полигонов, при необходимости wireframe.
- Логику пишите на Lua, горячий цикл рендера на C.
- Рассмотрите обходные техники: рейкастинг или Mode 7 вместо честных полигонов.
Источники
Engadget, о 3D-демо Кристины Рамос для Playdate
А вы бы стали играть в 3D-паркур на чёрно-белом экране 400×240, или это уже перебор?
Ответить в комментариях


Пока нет комментариев. Будьте первым!