Files
RaymarchingEditor/README.md
T
Efim Beshmenev 0c36122baa Initial commit
2026-07-19 00:19:41 +03:00

99 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 путь.