Phosphor
4 дня назад
4 дня назад
5 дней назад
6 дней назад
5 дней назад
5 дней назад
5 дней назад
5 дней назад
README.md
Phosphor
— научный физический движок на Rust для детерминированных симуляций с акцентом на точность, воспроизводимость и кроссплатформенность (Desktop + WASM).Phosphor
Проект организован как workspace на Rust 2021 и разделяет:
- вычислительное ядро (математика, геометрия, физика, солверы),
- headless runtime/backend,
- слой визуализации и аналитический GUI.
Быстрый обзор
- детерминированная арифметика и переключаемая точность
(по умолчаниюf32/f64);f64 - Data-Oriented Design: SoA-хранилище тел + генерационные идентификаторы;
- интеграторы:
,SymplecticEuler,VelocityVerlet,Rk4;BackwardEuler - collision stack: broad phase
, narrow phaseBVH,GJK/EPA;CCD/TOI - Jacobian-based ограничения и sparse LCP-путь решения контактов;
- физические свойства тел, редактируемые в рантайме:
- масса, форма, упругость, трение, мягкость контакта,
- линейное демпфирование, масштаб гравитации;
- комбинируемая гравитация:
- N-body взаимодействие,
- естественная гравитация с явным
(вдоль осиg);Y
- ограничения сцены:
- пол (
),floor - ограничивающий объём (
), чтобы тела не уходили за пределы рабочей области;bounds
- пол (
- GUI-инструменты для аналитики: time control, инспектор, outliner, real-time графики, экспорт данных.
- UQ/validation контур:
- параметрические sweep режимы
/Cartesian/DOE one-at-a-time,Monte Carlo - доверительные интервалы (CI) для
иenergy_drift,max_speed - benchmark baseline + performance regression (slowdown ratio).
- параметрические sweep режимы
Архитектура
Структура workspace
| Крейт | Назначение |
|---|---|
| математика, размерные типы, SIMD/dispatch, deterministic helpers |
| коллайдеры, BVH, GJK/EPA, manifold, CCD |
| SoA-хранилище тел, интеграторы, контакты, солверы, |
| headless runtime, команды/события, triple buffer, интерполяция |
| отдельный stdio JSON backend-процесс |
| desktop GUI-клиент для симуляций и аналитики |
| рендер-пайплайн и подготовка render-данных |
| wasm-bindgen bridge и zero-copy буферы |
| сериализация/экспорт snapshot-данных |
Быстрый старт
1) Проверить проект
2) Запустить GUI
3) Запустить headless backend отдельно
Режимы транспорта GUI
умеет работать как с внешним backend-процессом, так и in-process:phosphor-gui
(по умолчанию),PHOSPHOR_GUI_TRANSPORT=auto,PHOSPHOR_GUI_TRANSPORT=process.PHOSPHOR_GUI_TRANSPORT=in-process
Если выбран , путь к бинарю можно задать через:process
.PHOSPHOR_BACKEND_BIN=/abs/path/to/phosphor-backend
Пример:
Что можно делать в GUI
- создавать произвольные 3D-объекты (sphere/cuboid/capsule/point) батчами;
- задавать физические свойства при создании и редактировать их на лету;
- переключать интегратор и управлять временем (
);play/pause/step/time scale - включать естественную гравитацию с параметром
;g - задавать ограничения сцены:
- пол (высота + упругость + трение),
- ограничивающий объём (min/max + упругость + трение);
- анализировать энергию/импульсы, смотреть outliner и инспектор;
- запускать batch sweep (
/Cartesian/DOE) и получать CI-метрики;Monte Carlo - экспортировать графики и данные в CSV/JSON.
Точность, фичи и платформы
По умолчанию: .std + scalar-f64
Примеры сборок:
FFI / WASM
реализует командно-ориентированный мост:crates/ffi
- JS отправляет команды в движок;
- Rust владеет памятью и состоянием симуляции;
- данные для визуализации отдаются через zero-copy представления буферов;
- используется тройная буферизация кадров для синхронизации producer/consumer.
Тестирование
Базовый прогон:
Целевые научные проверки:
Статический контроль:
CI-матрица (desktop/features/SIMD/WASM node+browser) описана в:
/.github/workflows/ci-matrix.yml
Документация
Полная техдокументация находится в каталоге :docs
- архитектурные принципы;
- карта workspace и крейтов;
,core,geometry;physics- runtime/wire/backend;
/WASM;ffi- render и GUI;
- I/O, валидация, профилирование и эксплуатация.
Лицензия
MIT