Odin/crates/muninn-move-tracker/README.md
2026-08-26 17:57:36 +02:00

31 lines
1.5 KiB
Markdown

# Muninn Move Tracker
Muninn owns PS Move sensor stream exposure. This crate is Muninn's first native
optical marker candidate extractor: Rust owns orchestration, FFI, validation,
and the CPU mirror; the compute shader owns the parallel image reduction stage.
The shader includes CultMath's canonical HLSL mirror, so shader compilation must
add `E:\Projects\CultLib\packages\cultmath\shaders` or the packaged CultMath shader content to
the include path.
This crate deliberately stops at per-frame marker candidates. Final pose,
stereo triangulation, controller association, IMU fusion, prediction, and
calibration remain separate later owners. Mimir consumes Muninn-emitted typed
candidate/observation streams; it does not own raw optical extraction.
## Current Contract
- Input: one luma frame (`Y8`) with width, height, stride, source hash, and frame
sequence.
- GPU stage: one 16px tile per thread group, emitting at most one candidate per
tile.
- Output: `MoveMarkerCandidate` records containing weighted centroid, radius,
area, peak/mean luma, and score.
- Rust mirror: deterministic CPU implementation and FFI wrappers for tests and
non-GPU smoke paths.
- FFI prefix: `muninn_move_tracker_*`.
- Shader IDs are carried as `uint2` low/high pairs to avoid making 64-bit HLSL
integer support a dependency of the first extraction pass.
This is the first stage required for PlayStation-class wand tracking. The
remaining stack needs calibrated camera rays, controlled sphere colors/exposure,
multi-camera association, triangulation, IMU fusion, and latency prediction.