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-драйвером:
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 |
Примитивы и свет добавляются кнопками + Примитив и + Свет. Числовые
параметры, трансформация, материал, освещение и облака редактируются в панели «Свойства».
Статические проверки
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 путь.