Программист создал 3D-город в одном HTML-файле: весь киберпанковый мир рендерится из текста и символов

Разработчик с YouTube-канала Grow Now! Games представил необычный интерактивный прототип: трёхмерный киберпанковый город, который работает прямо в браузере и полностью умещается в единственном HTML-файле.
Проект реализован без Unity, Unreal Engine, полигональных 3D-моделей, сторонних библиотек, готовых текстур или шейдеров. Вместо привычного стека автор написал собственный компактный движок на чистом JavaScript и HTML5 Canvas, где всё графическое окружение генерируется исключительно с помощью цифр, букв и ASCII-символов.
Полноценный 3D-рейкастинг вместо стилизованного фильтра
Созданный мир не является плоской анимацией или постобработкой видео. Город представляет собой полноценную пространственную сцену, построенную на трёхмерной сетке, где расположены небоскрёбы разной высоты, дороги, деревья, фонари, а также движущийся трафик из автомобилей и пешеходов.
Отрисовка каждого кадра происходит с помощью рейкастинга (raycasting):
- Движок пускает виртуальные лучи из камеры игрока, вычисляя глубину сцены, перспективу, перекрытия объектов и коллизии.
- Затем координаты трансформируются в символы разного размера, цвета и яркости: ближние к зрителю здания и объекты отображаются крупным и ярким шрифтом, а удалённые кварталы уменьшаются и плавно растворяются в темноте.
По улицам города можно свободно перемещаться с видом от первого лица, рассматривая неоновые вывески и трафик под разными углами.
Минимализм без зависимостей
Демонстрация проекта вызвала активный интерес в сообществах на Reddit и Tildes. Пользователи и разработчики оценили архитектуру «всё в одном файле», избавляющую от необходимости собирать тяжелые npm-пакеты, настраивать сборщики или разворачивать локальный веб-сервер — страницу достаточно сохранить на диск и открыть в любом современном веб-браузере.
На текущий момент автор показал работу движка только на видео. Исходный код и публичная интерактивная веб-версия пока не выложены в открытый доступ, однако разработчик планирует поделиться деталями реализации после завершения базовых оптимизаций.