# Ray Marching Editor Небольшой редактор уровней на Rust с ray-marching рендерером. На desktop рендер запускается только через Vulkan backend `wgpu`; внешний Vulkan SDK и компилятор GLSL не нужны — шейдер хранится в WGSL и проверяется Naga. ## Что уже есть - Полноэкранный ray marcher с нормалями, мягкими тенями, AO, туманом и ACES tonemapping. - 16 SDF-примитивов: Sphere, Box, Rounded Box, Box Frame, Plane, Torus, Link, Capsule, Cylinder, Capped Cone, Rounded Cone, Ellipsoid, Octahedron, Triangular Prism, Hexagonal Prism и Black Hole. - Размещаемая чёрная дыра: абсолютно чёрный горизонт событий и настраиваемые радиус влияния, сила линзирования и закручивание света вокруг локальной оси Z. У выбранной чёрной дыры показывается фиолетовая граница области влияния. - Conservative bounding sphere перед вычислением основного SDF. - Sparse CPU uniform grid и компактная GPU-сетка до `32 × 32 × 32`; переходы между ячейками ограничивают шаг луча, поэтому объекты в соседних ячейках не пропускаются. Plane всегда обрабатывается глобально. - Русский интерфейс сцены с аутлайнером, инспектором и интерактивным transform gizmo: оси и плоскости перемещения, кольца вращения, осевое и равномерное масштабирование. Drag вычисляется пересечениями мировых лучей с осями/плоскостями, а переключатель «Мир / Локально» меняет и геометрию гизмо, и саму трансформацию. - Система координат как в UE: `X/Y` образуют горизонтальную плоскость, `Z` — высота. - Групповое выделение: `Ctrl` во вьюпорте, `Ctrl`/`Shift` в аутлайнере; команды перемещения, вращения, масштабирования, дублирования и удаления работают со всей группой. - Размещаемые источники «Солнце», «Лампочка» (`Point Light`) и «Прожектор» (`Spot Light`). У выбранной лампочки виден сферический радиус действия, у прожектора — внешний конус. Для источников доступны цвет, мощность, дальность и, у прожектора, углы конуса. - Процедурное небо с движущимися фоновыми облаками. - Компактная панель в углу вьюпорта в стиле `stat fps` + `stat unit`: FPS, Frame, Game, Draw и реальный GPU time через неблокирующие timestamp queries. - Версионированные JSON-карты со стабильными ID, источниками, материалами, настройками мира и editor camera. «Открыть» и «Сохранить как» используют системный Проводник; обычное сохранение повторно пишет в выбранный файл. Запись идёт через временный файл и атомарную замену. - VSync по умолчанию выключен: Vulkan выбирает `Immediate`, затем `Mailbox`; в панели инструментов режим можно переключить. ## Сборка Целевая конфигурация — Windows x86-64 с CPU, поддерживающим AVX2, и актуальным Vulkan-драйвером: ```powershell cargo build --release ``` Release-профиль использует `opt-level = 3`, thin LTO, один codegen unit, `+avx2` и статический MSVC CRT (`+crt-static`). Rust-библиотеки упаковываются в исполняемый файл. Системный Vulkan loader `vulkan-1.dll` и видеодрайвер остаются внешними системными компонентами. Готовый файл: `target\release\ray-marching-editor.exe`. ## Управление | Действие | Управление | |---|---| | Обзор | RMB + мышь | | Полёт | RMB + W/A/S/D, Q/E вниз/вверх | | Ускорение | Shift | | Скорость камеры | Колесо | | Orbit | Alt + LMB | | Pan | MMB | | Dolly | Alt + RMB | | Выделить объект / снять всё кликом по пустому месту | LMB | | Добавить объект в выделение или убрать из него | Ctrl+LMB во вьюпорте | | Групповое выделение в аутлайнере | Ctrl+клик; Shift+клик для диапазона | | Взаимодействовать с гизмо | LMB по оси, плоскости, кольцу или центральному маркеру | | Фокус на выделенном | F | | Move / Rotate / Scale | W / E / R | | Дублировать | Ctrl+D | | Удалить | Delete | | Сохранить (с выбором файла для новой карты) | Ctrl+S | | Сохранить как | Ctrl+Shift+S | | Открыть карту | Ctrl+O | | Новая карта | Ctrl+N | Примитивы и свет добавляются кнопками `+ Примитив` и `+ Свет`. Числовые параметры, трансформация, материал, освещение и облака редактируются в панели «Свойства». ## Статические проверки ```powershell cargo fmt --all -- --check cargo clippy --all-targets --all-features -- -D warnings cargo test cargo check --release ``` Тесты отдельно парсят WGSL, валидируют все entry points и генерируют Vulkan SPIR-V, проверяют все 16 CPU SDF, bounds, grid, picking и round-trip карты. Текущие GPU-лимиты MVP: 128 видимых примитивов, 64 уникальных материала, 16 источников света и 131072 ссылок примитивов в spatial grid. При переполнении сетки рендерер безопасно переключается на brute-force путь.