BM Studio 2026 · WebXR

Visualizer2026 WebXR

Stand inside a matrix transformation. SVD, PCA, and least squares visualized immersively in virtual reality — running entirely in your browser.

Launch VR Demo →
Optimized for Meta Quest 2 / 3 · Also works in any WebXR-capable browser
No installation · No app store · Open and enter VR

Five Mathematical Scenarios

Cycle through modes with the left grip button (VR) or S key (desktop).

Mode 0

3×3 SVD

A 3D point cloud and deforming grid animate through the full SVD decomposition. Three presets: Symmetric, Rotation+Scale, Shear+Scale.

Mode 1

2×3 Projection   R³→R²

A 3D cube collapses flat onto a tilted image plane as the transformation reduces dimension from 3D to 2D.

Mode 2

3×2 Lifting   R²→R³

A flat 2D square rotates and lifts into 3D space, showing how a non-square matrix maps a plane into a higher-dimensional space.

Mode 3

3D PCA

A 60-point ellipsoidal cloud aligns to its principal axes, then squashes to the best-fit plane, then to the best-fit line.

Mode 4

Least Squares

Four overdetermined planes in 3D space. A glowing sphere marks the least-squares solution; white lines show the perpendicular residual to each plane.

The SVD Animation

Parameter t ∈ [0, 3] drives a smooth three-stage decomposition of any matrix A = U Σ Vᵀ. Scrub with the VR triggers or desktop arrow keys.

t = 0 → 1

Stage 1 — V rotation

The point cloud rotates to align with the right singular vectors.

t = 1 → 2

Stage 2 — Σ scaling

Each axis stretches or compresses by its singular value.

t = 2 → 3

Stage 3 — U rotation

A final rotation by U completes the full matrix transformation.

Each stage boundary triggers haptic feedback on both controllers and a visual pulse ring expanding outward from the origin.

VR Controls

Right trigger Advance t → animate the transformation forward Left trigger Reverse t → animate backward Right grip Cycle 3×3 matrix preset (mode 0) L thumbstick ←→ Cycle scenario modes: push right = next, push left = prev R thumbstick Y Zoom in / out A button Grab, drag, rotate and throw the scene B button Toggle ambient music L thumbstick click Teleport to aimed floor position

Desktop: ← → keys scrub t  ·  1/2/3 or G = cycle matrix  ·  S = cycle scenario  ·  +/− = zoom  ·  M = music

Technology

Three.js r183 — 3D engine
WebXR Device API
Vite 8 — build system
Jacobi SVD — pure JS, no math library
InstancedMesh — single draw call per cloud
Web Audio API — Cmaj9 ambient pad
GitHub Pages — zero backend
ESO Milky Way — CC BY 4.0 panorama

The entire application is ~1350 lines of JavaScript in a single file. SVD, PCA, and least-squares are computed in plain JS with a self-contained Jacobi eigendecomposition — no server, no WebAssembly, no backend. Bundle size: ~590 kB (gzip: ~151 kB).

Links