Большой консолидирующий коммит после поднятия studio.rublox.pro (28 мая 2026). Содержит изменения которые делались в процессе подготовки прод-окружения: Фиксы импортов после выноса из minecraftia: - Массовая замена путей ../../components → ../components (40+ файлов в src/community/, src/admin-preview/) - Замена ../KubikonEditor/ → ../editor/, ../KubikonStudio/ → ../community/, ../AdminPreview/ → ../admin-preview/ - API.js скопирован из минки целиком (было 8 экспортов, стало 312) - Добавлены PLAYER_URL, MyButton_1, недостающие компоненты - Заменены require() на статические ES-imports в BabylonScene, PrimitiveManager, GameRuntime (Vite не поддерживает CJS require) Структура ассетов: - public/kubikon-templates/ → public/assets/kubikon-templates/ - public/kubikon-learn/ → public/assets/kubikon-learn/ - (код искал в /assets/, файлы лежали без /assets/) Навигация роутов внутри студии: - /kubikon-studio/docs → /docs (90+ навигационных вызовов sed-replaced) - /kubikon-editor/X → /edit/X, /kubikon/play/X → /play/X, /kubikon/gd/X → /gd/X UI: - Новый компонент StudioHeader (61px, как в минке) + копия favicon - WithHeader wrapper в App.jsx для всех страниц кроме fullscreen-редактора/плеера - SSO ticket-flow в AuthContext (auto-redeem #ticket= при загрузке) - Тёмная тема карточек игр в ВИКИ (фон #1c2231 вместо #fff, картинка впритык) Документация: - docs/ONBOARDING.md — путь нового контрибьютора от нуля до PR - docs/TUTORIAL_ADD_SCRIPT_API.md — как добавить game.* API - API_USAGE.md — список эндпоинтов backend - README в подпапках engine/, engine/terrain/, engine/voxel/, engine/robloxterrain/, engine/types/ .gitignore: - public/wiki/ исключён (73МБ PNG, будут на CDN отдельной задачей) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Воксельный движок (chunks-based, новый)
Это новый движок ландшафта, который заменит legacy terrain. Идея — как у Minecraft / Roblox terrain: мир разбит на чанки 16×16×16, каждый рендерится независимо, далёкие — в LOD, удалённые выгружаются.
См. RUBLOX_VOXEL_ENGINE_PLAN.md (план на 2-3 месяца, старт 2026-05-12).
Архитектура
VoxelWorld ← фасад. setVoxel(x,y,z, type) / getVoxel.
│
├─ Map<chunkKey, VoxelChunk> ← один чанк = 16³ вокселей
│
├─ WorldGenerator ← процедурная генерация (Perlin/Simplex)
│
└─ VoxelRenderer ← Babylon-меши, LOD, frustum culling
│
└─ ChunkMesher per chunk ← greedy meshing на воркере
Файлы
| Файл | Что |
|---|---|
VoxelWorld.js |
Главный фасад. Хранит `Map<"x |
VoxelChunk.js |
Один чанк 16³ + материалы + dirty-bit. Память: 4 КБ. |
VoxelLayer.js |
Слои воксельных типов (твёрдые / жидкие / прозрачные). |
ChunkMesher.js |
Greedy meshing для одного чанка → vertex/index buffers. |
ChunkSerializer.js |
Кодирование чанка для сохранения / multiplayer-стрима. |
GreedyMesher.js |
Алгоритм объединения граней одинаковых вокселей. |
VoxelRenderer.js |
Babylon: создаёт Mesh per chunk, ставит на сцену, LOD-менеджер. |
WorldGenerator.js |
Процедурная генерация: высота через SimplexNoise, материал по высоте. |
SimplexNoise.js |
Шум-функция для генерации. |
Greedy meshing — зачем
Без него:
- 16³ = 4096 вокселей в чанке
- Каждый воксель = 6 граней = 24 576 граней в чанке
- 100 чанков = 2.4M вертекс — FPS падает
С greedy meshing соседние одинаковые грани объединяются в большие прямоугольники:
- Травяной холм 16×16×8 → ~50 граней вместо 12000
- Один чанк = 100-500 вертексов
- 100 чанков = 50К вертексов — 60 FPS
Алгоритм: для каждой оси (X,Y,Z) и направления (+/-) проходим слой за слоем, ищем прямоугольные области одинакового материала, эмитим quad.
LOD
- LOD0 (близко, ≤4 чанков): полное разрешение.
- LOD1 (4-8 чанков): меш каждые 2 вокселя.
- LOD2 (>8 чанков): меш каждые 4 вокселя.
- >16 чанков: чанк выгружается, рендерится только heightmap.
Текущий статус
Voxel-движок работает параллельно с legacy TerrainManager как shadow-копия: при любом изменении ландшафта мы пишем И туда И туда. Это даёт замеры производительности и готовность к Этапу 2 (полная замена).
См. PR в репо для прогресса.
Связанные доки
- RUBLOX_VOXEL_ENGINE_PLAN.md — план
- ../terrain/README.md — legacy движок
- ../README.md — обзор всех менеджеров движка
Вопросы
Канал #разработка в https://team.rublox.pro, отвечает МИН и команда движка.