# Воксельный движок (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, отвечает МИН и команда движка.
