МИН 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

71 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Воксельный движок (chunks-based, новый)
Это новый движок ландшафта, который заменит [legacy terrain](../terrain/). Идея — как у Minecraft / Roblox terrain: мир разбит на чанки 16×16×16, каждый рендерится независимо, далёкие — в LOD, удалённые выгружаются.
См. [RUBLOX_VOXEL_ENGINE_PLAN.md](../../../../../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|y|z", VoxelChunk>`, dirty-список чанков. |
| `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](../../../../../RUBLOX_VOXEL_ENGINE_PLAN.md) — план
- [../terrain/README.md](../terrain/README.md) — legacy движок
- [../README.md](../README.md) — обзор всех менеджеров движка
## Вопросы
Канал `#разработка` в https://team.rublox.pro, отвечает МИН и команда движка.