99 lines
6.8 KiB
Markdown
99 lines
6.8 KiB
Markdown
# 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 путь.
|