Как стать автором
Обновить

«Куб → Город: школьный игровой движок и зрячий ИИ-копилот»

Время на прочтение4 мин
Количество просмотров973

Обратите внимание: этот материал публикуется впервые и ранее нигде не размещался, включая личные блоги, социальные сети и другие платформы.

Пролог на 3 033 знака (да, я посчитал)

Меня зовут Владимир Летуновский, и у меня есть две особенности.
Первая: мне тринадцать, и я искренне считаю, что vkCmdPipelineBarrier— это идеальный подарок на день рождения.
Вторая: все вокруг уверены, что школьники должны играть в Fortnite или — на худой конец — делать домашку, а я вместо этого выращиваю собственный игровой движок на C++ 20 + Vulkan 1 .3, да ещё и обучаю мультимодальную LLM, которая сама дорисовывает уровни, когда я просто ставлю в редакторе куб.

Если вкратце, мой типичный диалог с взрослым выглядит так:

— «Вова, сколько будет дважды два?»
— «Четыре. А теперь скажи, зачем Unity попросил Runtime Fee?»
— «Мы об этом потом поговорим. Ты лучше в футбол сходи.»
— «Схожу, когда починю VK_ERROR_OUT_OF_DEVICE_MEMORY. Футбол подождёт.»

Так и живу: днём — контрольная по биологии, ночью — контроль каденций в кластере Ray + DeepSpeed. А теперь устройство всего этого безобразия — в одном, максимально длинном и честном рассказе.


Глава 1. Биография в стиле commit log

  • v0.1.0 (7 лет): собрал первый «домик» в Blender, рендерил Cycles 40 минут.

  • v0.2.0 (8 лет): MonoGame, C#, FPS = 10, радость = ∞.

  • v0.3.7 (10 лет): OpenGL. Выучил, что «gl» — это не «good luck».

  • v0.4.2 (11 лет): «А давайте на Vulkan?» — слова, которые сломали видеокарту папы.

  • v0.9.0 (13 лет, текущий мастер): MIA Engine NEO, собственный ECS, GUI-редактор, мультимодальная LLM 5 B, Vision-CNN, Async Compute, таймлайн-семафоры, и ещё уроки по химии где-то между коммитами.


Глава 2. Почему всё-таки не Unity, не Unreal и даже не Godot

  1. Unity объявил Runtime Fee. У меня лично даже карманных денег хватит ровно на два билда и один хот-фикс.

  2. Unreal Engine 5 — шикарно, но 300 ГБ исходников — это примерно столько же, сколько весит моя школа, если её измерять в PDF-презентациях.

  3. Godot — сердечко, но не даёт потрогать VkPipelineBarrier так, чтобы validation-layer орал CAPS-LOCK’ом.

Поэтому: «сам себе кузнец — сам себе движок».


Глава 3. Архитектура: салфетка, ручка, 5 000 строчек кода

3.1. Поток данных

GLTF/PNG/WAV → Importer → ResourceMgr

ECS World ← Lua/Python Host ← LLM 5 B (+ Vision CNN)

Vulkan Backend → Swapchain → Ваш монитор

  • Importer превращает любые ассеты в собственный .asn (binary + meta.json).

  • ResourceMgr крутит граф зависимостей; staging буфер 256 МБ, копии в VRAM идут в DMA.

  • ECS — чанки ровно 4 КБ, SoA layout, std::barrier-job-пул на 6 потоков.

  • Vision CNN смотрит на downsample G-Buffer 128² + семантику, выдаёт 32 K токенов.

  • LLM 5 B читает prompt + vision-токены + историю сцен, генерирует JSON DSL, Lua-код, wav-реплики.

  • Vulkan Backend (deferred + clustered lighting + TAA + HBAO) выдаёт картинку; новая рамка снова уходит в CNN. Замкнутый круг счастья.

3.2. Render-цифры

  • G-Buffer: pos+rough (R16F+R8), normal A2B10G10R10, emissive R11G11B10F.

  • Clustered lighting: 8×8×24 клеточки, 8 000 лампочек на RTX 4090 — минус 4 % FPS.

  • PostFX: HBAO (~0.6 мс), CAS-Sharpen, LUT-тонмап. RayQuery включаю по праздникам.


Глава 4. ECS: как заставить процессор не скучать

  • Chunk = 4 096 байт → идеально делится на кеш-линию 64 б.

  • EntityID = index 24 бита | generation 8 бит — дырок не остаётся.

  • Удаление O(1): swap-last + free-list.

  • Показатель плотности после хаоса (“поджёг город, удалил 10 k объектов”) — 0.92.

  • Тик 1 000 NPC на Ryzen 5600:

    • однопоток — 4.7 мс

    • job-пул — 1.3 мс


Глава 5. Vision CNN + LLM 5 B: «Я вижу сцену, значит, понимаю»

  1. Движок снимает G-Buffer 128² и семантическую маску.

  2. CNN (8 ResBlocks) превращает это в поток из 32 000 токенов.

  3. LLM читает prompt + vision + предыдущие AST-команды и решает, что добавить.

  4. Генерирует:

    • JSON DSL (entities, materials, lights),

    • Lua-код (AI, квест-триггеры),

    • wav-файлы реплик (HiFi-GAN).

Latency: 2.6 с на RTX 4090, 1.4 с на A100 (bf16).

 как падала функция потерь у модели 5 B по эпохам.
как падала функция потерь у модели 5 B по эпохам.

Глава 6. Из чего обучен копилот

Источник

GB

Лицензия

Процедурные сцены

30

CC0 (собственная генерация)

GLTF/PNG (OpenGameArt)

12

CC0

Lua/Python (OSS-игры)

11

MIT / Apache

Квест-тексты, диалоги

5

CC-BY-SA → отфильтровано

WAV (FreeSound CC0)

3

CC0

  • 24 слоя, d_model = 3072, Rotary PE, Flash-Attn 2.

  • DeepSpeed ZeRO-3, bf16, 1 × A100 40 GB → 73 GPU-часа.

  • Loss DSL 1.04, MOS аудио 3.8/5.

сгенерировано на модели NEO V0.4 за 0.9 секунд
сгенерировано на модели NEO V0.4 за 0.9 секунд

Глава 7. Лицензия и деньги, без фокусов

Движок MIA Engine NEO

  • Открытый исходник, но исключительно для личного изучения.

  • Менять и продавать модифицированную версию движка нельзя.

  • Делать и продавать игры, если ядро оригинальное — можно.

Autopilot Dev Pipeline

  • Публичный playground — 30 запросов в час бесплатно.

  • Hobby-ключ — 5 $/мес, только личные проекты, watermark.

  • Коммерческая лицензия (инди с профитом до 100 k $/год) появится ближе к релизу.

  • Любая коммерция без лицензии запрещена.

GPU скучают без электричества, поэтому такая схема — честный компромисс: ядро остаётся открытым, копилот помогает финансировать A100 и еду (а иногда — химию в школе).


Глава 8. Benchmark-таблица — кому важны цифры

Тест

RTX 2060 6 GB

RTX 4090 24 GB

A100 40 GB

50 k tris, postFX вкл.

98 FPS

180 FPS

195 FPS

Prompt → Scene (LLM + render)

14 с

2.6 с

1.4 с

Vision-CNN 128²

32 мс

7 мс

5 мс


 сравниваем FPS на RTX 2060, 4090 и A100.
сравниваем FPS на RTX 2060, 4090 и A100.

Глава 9. Планы, более реальные, чем школьный обед

  • 15 июля 2025 — MIT-alpha: рендер, ECS, Lua, GUI-редактор.

  • 3 сентября 2025 — LoRA 8-bit, веб-playground.

  • Ноябрь 2025 — воркшоп «Text-to-Game за 60 мин», Ray-автоскейл.

  • Декабрь 2025 — Steam-playtest «Пельмень-Крафт»: если игрок AFK, AI строит завод пельменей.


Глава 10. Как помочь проекту


Эпилог

Я ставлю один куб и пишу «alien jungle, bioluminescence».
Копилот видит — ага, куб в бесплодном пространстве, вокруг темень.
Через 2 секунды экран оживает: светящиеся деревья, туман, NPC-учёный с репликой «Соберите споры!».

В этот момент не важно, какие бюрократы где нажали «профилактика». Важно, что мечта «один куб → целый мир» работает на GPU здесь и сейчас.

Следующий куб — ваш. Я жду, чем его удивите вы.

Владимир Летуновский, школьный Vulkan-садовод, 2025 год.

Теги:
Хабы:
+7
Комментарии8

Публикации

Работа

Программист C++
93 вакансии
QT разработчик
4 вакансии

Ближайшие события