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