Initial commit

This commit is contained in:
Efim Beshmenev
2026-07-19 00:19:41 +03:00
commit 0c36122baa
32 changed files with 14261 additions and 0 deletions
+98
View File
@@ -0,0 +1,98 @@
# 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 путь.