Большой консолидирующий коммит после поднятия 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>
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. Сейчас — это разные кодпути.