Efim Beshmenev 0c36122baa Initial commit
2026-07-19 00:19:41 +03:00
2026-07-19 00:19:41 +03:00
2026-07-19 00:19:41 +03:00
2026-07-19 00:19:41 +03:00
2026-07-19 00:19:41 +03:00
2026-07-19 00:19:41 +03:00
2026-07-19 00:19:41 +03:00

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 путь.

S
Description
No description provided
Readme 154 KiB
Languages
Rust 85.9%
WGSL 14.1%