Всем по хаю! Мой 2d движок C++ на вэбе. renderHTML(). Запеченный Spine 2D. Мини игры
VK video не встроилось, поэтому ссылкой смотреть на вк-видева
Поиграться с демкой можно здесь: https://ubgamez.ru/graph2d/
VK video не встроилось, поэтому ссылкой смотреть на вк-видева
Поиграться с демкой можно здесь: https://ubgamez.ru/graph2d/
3D-репродукция «Ночного дозора» Рембрандта (1642), которая открывается в браузере — на компьютере или телефоне. Всё началось с подарка на день рождения другу, который давно мечтал о «Ночном дозоре» в 3D.
24 человека и собака с картины, ворота с аркой, лестница и щит. Камера стоит в ракурсе картины, а у каждой фигуры свой свет на лице — так Рембрандт выхватывает лица из темноты.
Следующие кадры — снимки экрана живой веб-сцены, а не рендеры.



Это сцена, а не картинка: роту можно обойти и рассмотреть с любой стороны, даже сверху.
Сцена работает на телефоне. Нажмите на фигуру — откроется карточка: имя, годы жизни, биография и источники. Отождествления — по Дудоку ван Хелу («Rijksmuseum Bulletin», 2009).


На щите над аркой имена стрелков заменены строкой из «Мёртвых душ» Гоголя, опубликованных в 1842 году — через двести лет после картины. Я тоже есть в сцене: скромненько стою возле Рембрандта и проверяю ту же надпись на картуше со свитка. Планирую разработать шрифт в стиле голландского курсива для лучшего соответствия этой надписи.
Кое-чего у Рембрандта нет. В толпе стоят мои друзья — с их разрешения. У ступеней сидят мои собаки Тотошка и Чип. А ещё есть «Амстердамская кавалерия»: три спаниеля, на одном из которых восседает кот, — оммаж «Бременским музыкантам» братьев Гримм и «Каштанке» Чехова.
Детализации фигур хватает, чтобы напечатать их на 3D-принтере как большие статуэтки (по частям) или как миниатюры в упрощенном виде. Капитана (геометрия) и лейтенанта (с текстурой) можно скачать с GitHub.


Чтобы сцена Blender на 6 ГБ поместилась в веб-страницу, каждая фигура упрощена примерно до 200 000 треугольников, текстуры сжаты, а свет пересобран для браузера. Заметки, скрипты и замеры лежат на GitHub — включая то, что здесь стандартная практика.
Сцена полностью — pavljenko.ru/blogs/tools/night_watch_3d.
Заметки, скрипты и две фигуры для скачивания — github.com/pavljenko/night-watch-3d.
Картина: Рембрандт, «Ночной дозор», 1642, Рейксмузеум, Амстердам (общественное достояние).
В середине 90-х и начале 2000-х у многих из нас дома стояли пузатые ЭЛТ-мониторы с Windows 95/98 или голым MS-DOS. И среди сотен игр были те самые особенные шедевры, музыка из которых въедалась в память навсегда:
Xixit (1995) — медитативная головоломка, чей глубокий, меланхоличный и невероятно атмосферный саундтрек затягивал так, что игру не хотелось выключать часами.
Mine Bombers 3.1 (1995) — финский хит, за которым мы с друзьями устраивали ожесточенные баталии на одной клавиатуре. Взрывы динамита в темных шахтах гремели под бешеный, зажигательный драйв трекерных мелодий.
А чуть позже — музыка из кейгенов и кряктро от культовых демогрупп (Razor 1911, Fairlight, Paradox), где авторы умудрялись упаковывать полноценные симфонии в файлы размером 20–50 килобайт!
Это была трекерная музыка (MOD, XM, IT, S3M). В ней не было записанного аудио: файл содержал крошечные кусочки сэмплов и таблицу шестнадцатеричных нот, которые компьютер синтезировал в реальном времени.
Я сам с юности увлекался написанием таких треков в FastTracker II и долгие годы мечтал о пет-проекте: сделать настоящий веб-плеер трекерной музыки, который играл бы эти хиты прямо в браузере с живым звуком и аутентичной атмосферой демосцены.
Недавно этот проект наконец ожил: https://tracker.snakelair.ru/.
Вместо того чтобы просто проигрывать скучные MP3-записи, мы сделали полноценный трекерный синтезатор на базе WebAssembly (LibOpenMPT):
Честный синтез на лету: Браузер сам воспроизводит сэмплы и ноты оригинальных модулей.
1300+ легендарных треков: От саундтреков Xixit и Mine Bombers до культовых Unreal Super Hero 3, Space Debris и хитов Jesper Kyd.
Интерактивный микшер: Можно заглушить или послушать соло любой инструмент трека (бас, лид, ударные).
Управление скоростью: Вы можете плавно ускорять или замедлять трек от 40 до 300 BPM без искажения высоты голоса инструментов.
Демосцена 60 FPS: 5 процедурных 3D-миров (неоновый Synthwave ландшафт, кибер-туннели), живой осциллограф, матрица нот FastTracker II и падающий «водопад» нот.
🌱 Эко-режим: Если вкладку свернуть, плеер автоматически усыпляет графику и играет музыку в фоне с нулевой нагрузкой на процессор.
Обычно такие пет-проекты откладываются годами из-за нехватки времени. Здесь мне помог современный AI-напарник, который взял на себя рутину:
Проверил и вычистил базу из 1300+ файлов, устранил дубликаты и вытащил оригинальные имена авторов.
Нашел просадки производительности в графике и переписал рендеринг матрицы нот на быстрый 2D Canvas (стабильные 60 кадров в секунду).
Выровнял сетку отображения нот, чтобы параметры эффектов и громкости не накладывались друг на друга.
Плеер полностью бесплатный, без рекламы и регистрации:
👉 https://tracker.snakelair.ru/
Что включить первым делом:
Unreal Super Hero 3 (Kenet & Rez — гимн демосцены)
Space Debris (Markus Schneider / Captain)
Stardust Memories (Jesper Kyd)
Desert Dawn (Purple Motion / Future Crew)
Темы из Mine Bombers и Xixit
А какие трекерные мелодии или DOS-игры 90-х больше всего запомнились вам? Делитесь в комментариях!
Я frontend-разработчик, поэтому большую часть времени работаю с веб-интерфейсами. Но давно хотелось сделать не просто технический прототип, а законченный игровой проект, который можно открыть в браузере и дать поиграть другим людям.
С Three.js я познакомился во время разработки 2D/3D-редактора. Тогда мне стало интересно, получится ли применить полученные знания не только для редакторов и интерфейсов, но и для полноценной игры. Поэтому я решил попробовать сделать собственный игровой проект.
Так появилась Taproom 8 — небольшая 3D-игра с элементами хоррора и механикой поиска аномалий.
Исходный код проекта: GitHub
Игра отдаёт дань уважения играм Exit 8 и серии Backrooms.
Сначала игрок попадает в обычную комнату. Это нулевой цикл — в нём нет аномалий. Нужно осмотреть помещение и запомнить его состояние: где стоит мебель, какие предметы присутствуют или отсутствуют.
Затем начинаются следующие циклы. Комната выглядит почти так же, но в ней появляется изменение.
Задача игрока — заметить отличие и выбрать правильную дверь:
«Есть аномалия»;
«Аномалий нет».
Если выбор правильный, игрок переходит дальше. Если ошибся, прохождение возвращается к началу.
В качестве визуального направления я выбрал мрачную low-poly графику с эффектом старых игр для PlayStation. Хотелось получить не реалистичный бар, а немного странное место, которое вызывает дискомфорт.
PS1-эффект я не стал делать только через готовый фильтр поверх экрана. Сцена сначала рисуется в уменьшенном разрешении, текстуры используют nearest-фильтрацию, а позиции вершин привязываются к виртуальной пиксельной сетке.
Three.js — это JavaScript-библиотека для работы с 3D-графикой в браузере. Она использует WebGL и предоставляет базовые инструменты для создания сцен, камер, геометрии, материалов, текстур, освещения и загрузки 3D-моделей.
Важно, что Three.js — не игровой движок в привычном смысле. В ней нет готового редактора уровней, полноценной физики, системы персонажей, диалогов, сохранений и других игровых подсистем, которые обычно ассоциируются с Unity или Unreal Engine.
По сути, это набор инструментов для отображения 3D-графики и работы с ней. Поэтому в Taproom 8 мне пришлось самостоятельно собрать многие части игры: игровой цикл, загрузку уровня, управление игроком и камерой, столкновения, двери, систему раундов и аномалий, звук, интерфейс и интеграцию с Яндекс Играми.
Именно поэтому проект оказался для меня интересным: я не просто подключал готовые игровые механики, а собирал игровой слой поверх библиотеки, с которой раньше познакомился во время разработки 2D/3D-редактора.
Стек получился немного необычным для игры:
Vue 3 — меню, настройки и интерфейс;
TypeScript — игровая логика и типы;
Three.js — 3D-сцена, камера, модели и взаимодействия;
Vite — сборка проекта;
Pinia — состояние интерфейса;
vue-i18n — русский и английский языки;
Vitest — тестирование игровой логики.
Vue здесь не управляет каждым объектом в 3D-сцене. Я разделил приложение на два слоя.
Игровой движок отвечает за сцену, игрока, камеру, столкновения, двери, звук и раунды. Vue отвечает за экраны, HUD, меню, настройки и мобильные контролы.
Между ними используется типизированная шина событий. Например, UI не должен знать, как именно Three.js открывает дверь. Он отправляет событие «выбрать дверь», а игровой координатор уже решает, что делать с этим действием.
Такой подход оказался полезен, когда количество систем начало расти: меню, загрузка, звук, пауза и сам игровой цикл не превратились в один огромный компонент.
Одной из главных задач было сделать так, чтобы добавление новых аномалий не требовало переписывать половину игры.
Сцена загружается из GLB-файла. Внутри неё есть специальные группы объектов, которые движок сканирует при загрузке. По имени объекта и суффиксу сложности он понимает, что с ним можно сделать.
Дальше система сама собирает пулы аномалий и распределяет их по уровням. В начале вероятность простых изменений выше, затем постепенно увеличивается доля средних и сложных вариантов.
Технически аномалия применяется только на время текущего цикла. После ответа игрока состояние объекта восстанавливается, а перед следующим раундом активируется новая аномалия.
В игре есть фоновая музыка, звуки меню, открывания дверей, шагов и окружения. Для некоторых источников используется пространственное позиционирование, чтобы звук зависел от положения игрока в комнате.
До этого проекта мне казалось, что самая сложная часть — сделать саму механику. На практике после появления рабочей игры начался второй большой этап: адаптация под платформу.
Первая версия Taproom 8 не прошла модерацию. После этого пришлось отдельно пройтись по описанию игры, локализации, экрану загрузки, обработке пауз, рекламным переходам, мобильному управлению и общему поведению приложения при сворачивании.
Интеграция с платформой включает уведомление о готовности игры, управление игровым состоянием при паузе, полноэкранную и rewarded-рекламу, а также задел под внутриигровые покупки.
Игра должна корректно переживать не только обычный игровой цикл, но и вкладку браузера, потерю фокуса, рекламный экран и возвращение игрока обратно.
После доработок игру удалось опубликовать. Этот этап показал, что релиз браузерной игры состоит не только из сцены и игровой механики. Необходимо учитывать окружение платформы, её ограничения и различные сценарии поведения пользователя.
На текущей версии в репозитории есть отдельный 3D-движок, UI на Vue, загрузка GLB-модели и текстур, PS1-рендеринг, мобильное управление, звук, локализация, интеграция с платформой и система аномалий.
Я понимаю, что это не большая коммерческая игра и не попытка конкурировать с полноценными хоррорами. Это компактный самостоятельный проект, на котором хотелось пройти весь путь: от идеи и сцены до работающего релиза в браузере.
Главным результатом для меня стал опыт создания полноценного игрового проекта поверх Three.js: с собственной архитектурой, игровым циклом, системой аномалий, интерфейсом, звуком, оптимизацией и публикацией.
Привет, Пикабу. Я разработчик ГИГАХРУЩ / GIGAH|RUSH и хочу показать текущий браузерный билд, а заодно собрать нормальный фидбек по первым минутам.
Это survival horror / ARPG shooter про вылазки внутри безграничной бетонной структуры. Игрок начинает в относительно жилой зоне, собирает еду, воду, патроны, бинты, документы и оружие, выбирает повод выйти наружу, а потом пытается вернуться с добычей, информацией и последствиями.
Мне хотелось уйти от формата "сгенерировали коридор, убили врагов, вышли в меню". Поэтому игра строится вокруг вылазок и систем, которые давят друг на друга. Есть фракции, торговцы, NPC с A-Life, рынки, слухи, квесты, контракты, монстры, ручные и процедурные этажи, браузерные сохранения и САМОСБОР.
NPC не просто стоят декором. Они могут торговать, спать, драться, прятаться, вступать в конфликты и умереть навсегда. Фракции помнят поступки игрока. Рынки меняют цены. В комнатах остаются следы боев и пустые контейнеры. Если где-то умер человек, система не обязана тихо заменить его новым.
Отдельная механика - САМОСБОР. Это не катсцена, а событие, которое ломает нормальную прогулку: двери герметизируются, туман идет по щелям, монстры становятся активнее, а привычный маршрут перестает быть надежным. Иногда правильное решение - не геройствовать, а бросить часть плана и искать выход.
Сейчас в билде уже есть:
- подготовка перед вылазкой;
- бой, торговля, инвентарь и квесты;
- фракции, репутация и A-Life NPC;
- ручные и процедурные этажи;
- САМОСБОР-события;
- карта, слухи, контракты и браузерные сохранения;
- запуск прямо в браузере без установки.
Делается на TypeScript/Vite, WebGL/canvas и процедурных ассетах. Без Unity/Godot, без импортированных UI-фреймворков и без ассет-паков: текстуры, спрайты и звук генерируются внутри проекта.
Страница игры на itch.io: https://tenevik.itch.io/gigahrush
Я не прошу плюсов, рейтинга или продвижения. Мне полезнее конкретный фидбек:
1. Где в первые 5-10 минут непонятно, что делать?
2. Читается ли интерфейс, инвентарь, торговля и карта в браузере?
3. Достаточно ли очевидно, что брать перед вылазкой?
4. САМОСБОР ощущается опасностью или пока шумом на фоне?
5. В какой момент хочется закрыть вкладку?
6. Если билд долго грузится или уходит в темный экран, какой браузер/устройство и сколько ждали?
Если билд выглядит как долгий темный экран, это тоже полезный баг-репорт: напишите браузер, устройство и сколько ждали.
Контент-нота: это не NSFW, но это survival horror с боем, кровью, трупами, сиренами, монстрами и тревожными событиями.
Энтузиасты портировал на webgl warcrtaft3, нужно указать папку с сохранениям и можно играть из браузера. Кто выложит архив?
Прошло 1.5 месяца с последнего Devlog(а) и мне честно стыдно что пропал, но на разработку совсем не было времени , нужно было срочно найти работу.
За это время где я только не поработал, от работы курьером до прокладки кабеля в туннелях метро )) Может как нибудь расскажу подробней о полученном опыте!
Я наконец-то доделал прототип и реализовал главные функции, без которых играть было бы невозможно.
Сделал предварительно обложку)) Долго думал как обозвать свою игру, очень много вариантов занято, остановился на этом "Король кубиков"!
- Добавил сохранения и запись в таблицу рекордов.
- Добавил локализацию.
- Добавил эффекты монет, возможность купить бонуса во время игры.
- Добавил предложение получить случайный бонус на старте игры за 100 монет или за просмотр рекламы (он появляется только если на балансе больше 100 монет)
- Долго думал над фоном и так ничего не придумал)) Я заморочился и кое-что создал, чтобы посмотреть нажмите во время игры на кнопку листика вверху слева:)
Создаю слайды для промо материалов.


Если есть возможность, уделите пару минут и поиграйте в неё. Посоветуйте, что можно было бы улучшить, какой визуал добавить? Пока всё выглядит простовато.
В планах сделать небольшой туториал и оформить нормально страничку игры, после отправить на модерацию!
Буду благодарен за фидбек в комментариях!