МИН 61fba4e174
Some checks failed
CI / Lint + Format (push) Failing after 32s
CI / Build (push) Failing after 37s
CI / Secret scan (push) Failing after 37s
CI / PR size check (push) Has been skipped
fix: починка билда + studio.rublox.pro инфра
Большой консолидирующий коммит после поднятия 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>
2026-05-28 05:01:13 +03:00
..

Воксельный движок (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 в репо для прогресса.

Связанные доки

Вопросы

Канал #разработка в https://team.rublox.pro, отвечает МИН и команда движка.