Делаю движок для 3D-игр на веб (ч.3)
Движок рассчитан на то, что игры в нём делает не человек, а ИИ-агенты. Вот, что добавилось в очередной итерации.
Иерархия объектов
Раньше каждая штука в сцене висела сама по себе – нельзя было сказать «эта телега, а это её колёса, двигай вместе». Теперь можно: ставишь объекту parent: car, и он становится «приклеенным» к родителю. Подвинул машину – колёса поехали с ней. Удалил машину – колёса исчезли сами. Камера, физика и сейвы это понимают.
Сейвы
Любая игра теперь сохраняется в браузер одной строчкой api save. F5 – состояние возвращается: монеты, прогресс, анимации, иерархия. Каждая игра пишется в свой ключ, не пересекаются.
Производительность
Движок упёрся в количество draw calls – Three.js на каждый объект делает отдельный вызов GPU. Большие сцены проседали: 300 кубов = 30 fps. Сделал три слоя оптимизации: одинаковые объекты теперь отрисовываются одним вызовом, для процедурных деревьев/заборов листья сливаются в одну геометрию с per-vertex цветом. Демо-сцена «деревня» (192 объекта) упала с 480 → 199 draw calls. На реальной видеокарте уверенные 60 fps.
Игра-инкрементал
Чтобы проверить всё это в одной игре, агент сделал «садовод». Сажаешь куст → растёт через tween-анимацию → собираешь → монеты → разблокируешь цветы и деревья → апгрейды (удобрение, лучший сорт, авто-сборщик). Полностью персистится – закрыл вкладку, вернулся, всё на месте. Под капотом одновременно работают: иерархия (растение – child грядки), сейвы, частицы (искры при сборе, капли воды при посадке), tween (рост), picking (клик в центре экрана через рейкаст).
Видео – агент сам играет, ходит, прыгает, переключает три вида растений и собирает урожай.
~6900 строк кода, 136 автотестов.

Лига Разработчиков Видеоигр
10.2K пост23.4K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"