# Roblox-style визуальные эффекты для гладкого ландшафта

Папка с визуальными хаками которые делают воксельный ландшафт похожим на Roblox terrain — без перехода на полноценный smooth-shading.

## Файлы

| Файл | Что |
|---|---|
| `RobloxTerrain.js` | Фасад: применяет vertex AO + slope-darken + distance fog к terrain-мешам. |
| `DensityGrid.js` | Плотность вокселей вокруг точки → используется для расчёта AO. |
| `SmoothBrushes.js` | Кисти для surface-net'а — добавляют/убирают density плавно (не дискретно как в voxel). |
| `SmoothDecoManager.js` | Декорации (трава/цветы) для гладкого ландшафта — кладёт модели на surface-точки. |
| `SurfaceNetsMesher.js` | Surface Nets алгоритм — превращает density-grid в гладкие меши (альтернатива marching cubes). |

## Зачем это нужно

Воксельный мир из чистых кубов выглядит как Minecraft. Roblox terrain — гладкий с округлыми холмами, мягким освещением. Чтобы вытянуть похожий look без перехода на полноценный smooth-shading, использует:

- **Vertex AO** — каждый вертекс получает baked ambient occlusion на основе соседних плотностей → углы темнее, открытые места светлее.
- **Slope darken** — крутые склоны темнее (как трава на солнце vs трава на тени склона).
- **Distance fog** — далёкие чанки уходят в туман → создаёт глубину.
- **Two-scale UV** — текстуры тайлятся двумя разными масштабами и блендятся → не видно повторений.
- **Wrap diffuse** — пиксели на тыльной стороне освещены частично (выглядит как мягкий свет).
- **Height blend** — на стыке материалов (трава→камень) делает плавный переход вместо резкого.

См. [reference-roblox-terrain-visuals] в приватных доках.

## Surface Nets vs Marching Cubes

- **Marching Cubes** — стандарт, но генерирует много мелких треугольников, плохо смотрится с greedy meshing.
- **Surface Nets** — один вертекс на ячейку density-grid, меньше треугольников, проще оптимизировать. У нас — Surface Nets.

## Связь с остальным движком

Использует `density-grid` (плотности 0..1 в каждой ячейке) вместо булевых вокселей. Поэтому **несовместим** с legacy `terrain/` и новым `voxel/` напрямую. Это **третья** реализация ландшафта, активная только в режиме «Smooth Terrain» (тогглится в настройках редактора).

## Будущее

Долгосрочно все три (`terrain/`, `voxel/`, `robloxterrain/`) сольются в один движок на базе `voxel/` с опциональным smooth-shading через Surface Nets. Сейчас — это разные кодпути.
