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

48 lines
2.8 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.

# Воксельный ландшафт (legacy)
Папка содержит **legacy воксельный движок ландшафта** — тот, что сейчас работает в продакшене студии. Постепенно заменяется на новый chunks-based из [../voxel/](../voxel/).
## Файлы
| Файл | Что делает |
|---|---|
| `VoxelGrid.js` | Хранение вокселей в `Uint8Array`. Ключ позиции = `(x * SIZE + y) * SIZE + z`. Размер мира 256×128×256 = 8 МБ. |
| `GreedyMesher.js` | Greedy meshing — объединяет соседние одинаковые воксели в большие прямоугольники. Без него 50 тыс вокселей = 50 тыс кубов и 5 FPS. |
| `TerrainMesh.js` | Babylon-меш из выхода `GreedyMesher`. Один меш на материал (grass/stone/sand/snow). При изменении воксели — пересоздаём затронутые fragment'ы, не весь меш. |
## Связь со сценой
`TerrainManager` (в папке выше) — фасад. Он хранит `VoxelGrid`, при изменении вызывает `GreedyMesher.mesh()` → создаёт `TerrainMesh`-объекты и кидает на сцену.
```
User красит кисть
TerrainManager.paintVoxel(pos, material)
↓ обновляет VoxelGrid
↓ помечает chunk dirty (16×16×16 кусок)
В next render tick:
GreedyMesher.mesh(dirtyChunk) → возвращает массив прямоугольников
TerrainMesh.rebuild(chunk) → пересоздаёт Babylon Mesh для этого chunk
```
## Размер chunk: 16×16×16
Меньше → много draw calls. Больше → пересборка большой области при мелком изменении.
## Plant-кисти (трава, цветы)
Это **не вокселы**, а GLB-модели поверх terrain. См. `DecoManager.js` в папке выше — он использует VoxelGrid для нахождения surface-точек ландшафта, потом кладёт мелкие модели через `paintDeco()`.
## Архитектурный документ
Полный план движка — [reference_kubikon_terrain_voxel_architecture.md](../../../../disaster-recovery/) (приватный).
## Почему legacy
- Один глобальный `Uint8Array` 8 МБ — невозможно стримить из сети для multiplayer.
- Нет LOD — далёкие чанки рендерятся в полном разрешении.
- Greedy meshing на main thread — лагает 500мс на большую кисть.
Новый движок ([../voxel/](../voxel/)) решает всё это.