Initial commit
This commit is contained in:
@@ -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 путь.
|
||||
Reference in New Issue
Block a user