Ryan Kamp

This is my name, drawn with 1 Gaussian splat.

I’m Ryan Kamp, a master’s student in computer science at the University of Cincinnati. My interests are computer graphics and scientific visualization, and the centerpiece of my work is Splashery, a playground of Gaussian splats.

Turn the dial: each notch splits every splat in two. Point at one to measure it. Or fit your own words:

splats
1 of 16,384
level
0 of 14
probe
1 of 1
μ
(0.0, 0.0)
Σ
0000
σ1, σ2
0, 0
θ
0°
stands for
0 px of ink

Definition. One splat

Drag a handle. Solid line: one standard deviation. Dashed: two.

A splat is a Gaussian: a center μ and a covariance Σ. It is a soft ellipse with no edge, brightest in the middle and fading as exp(−½ d2), where d counts standard deviations from the center.

Σ = R S STRT = 2.010.720.720.60

R = 0.91−0.420.420.91 S = 1.50000.60 det Σ = 0.810

1.50 0.60 25°

Renderers store Σ as a rotation R and a scale S because any pair of them gives a valid covariance, so an optimizer can move them freely. In three dimensions a splat gains a third axis, an opacity and a color; the renderer projects each one onto the screen, sorts them by depth and blends (Kerbl et al., 2023).

Splashery’s Tinkerer’s Manual teaches this level by level: what one splat is, how a recipe is built, and a splat equation language.

Lemma. Splitting loses nothing

However a splat’s pixels are divided, the two halves carry the parent’s mass, mean and covariance between them.

Σ = w1(Σ1 + δ1δ1T) + w2(Σ2 + δ2δ2T), δk = μk − μ

Each half brings two things: its own spread, Σk, and the offset of its center from the parent’s, δk. Weighted by its share of the pixels, wk, they add up to the parent again.

One splat of the picture at the top of the page, with its pixels, cut in two. The wide band is the splat measured from all of its pixels at once; the white dashes inside it are rebuilt from the two halves. Drag either handle to cut it another way.
1 of 16,383

The two halves, put together

pixels
0 + 0
mean
(0.0, 0.0)
inside
0000
between
0000
sum
0000

The splat, measured whole

pixels
0
mean
(0.0, 0.0)
Σ
0000

Relative error: 0

Proof. By checking. All 16,383 splits behind the picture at the top of this page hold, with a worst relative error of 0. A test suite checks 169,544 more on bars, rings, diagonals and dust, recomputes every node from its raw points, and tries 11,200 divisions that are not at the median: straight cuts at any angle, and divisions with no shape at all. ∎

The name is fitted by moment matching: each splat is the exact mean and covariance of the pixels it stands for, and each split falls at the median along the long axis. Real Gaussian splatting fits by gradient descent. Splashery has a toy that shows it, next.

Example. Splashery

Splats you can play with.

A playground of 3D Gaussian splats that runs entirely in the browser: captured objects of up to 450,000 splats, and generated ones built from seeded recipes. Every effect (poke, wind, dissolve, drop, magnet, twist, slice, paint) runs on the GPU for every splat, every frame; the CPU only sets a few uniforms.

My part: I defined the project’s vision and its toy categories, refined the interaction design through hands-on testing, and contributed mathematical recipes.

PlayCanvas engine · WebGPU, with WebGL2 fallback · static files, no build step

Live from Splashery: its Gaussian splatting toy, which fits 2D Gaussians to a picture by gradient descent. Open Splashery if it does not load here.

Further examples. Other work

  • grooph

    Visual loop graphs for coding-agent workflows. You draw who builds, who checks, where a person decides and when the work stops. grooph checks that every loop names a stop, then compiles the graph into a prompt package for a separate coding-agent harness. It runs no agent and calls no model, and graphs stay on your device.

  • aqrobat

    A local text and emoji QR lab. Give it a link or a little text and it builds QR artwork from letters, symbols or emoji, in the browser.

  • Ars Magna

    An anagram finder. Give it any text and it returns every way those exact letters can be re-partitioned into real English words, by a deterministic search.

  • Amordle

    A free word game: any word length from 2 to 35 letters, three difficulties, a daily puzzle, and ranked multiplayer with an Elo rating.

See also

  • reword_nerd

    A local-first browser workbench that turns a reviewed document, or a set of images, into a portable workbook of rewriting prompts. Everything stays reviewable in the browser, the download is a separate, explicit step, and the application contacts no model provider itself.

  • resmon

    A local-first literature-monitoring desktop application. It runs scheduled searches across open-access scholarly sources, removes duplicates, and compiles reading reports, with optional summaries.

  • Link Meteor

    A Chrome extension that collects links with their anchor text and URL in separate fields, for reviewing sources and exporting a research collection. No account, ads, telemetry or backend.

  • English OpenList

    A free, open, continuously maintained list of valid English words, about 345,000 of them, with the provenance of every word (which sources attested it, and when), auditable correction records, and a browser explorer.

  • The Speed-Accuracy Trade-Off in Perceptual Decision-Making

    Evidence accumulation modeled as a diffusion process, with dynamic programming and value iteration to study decision boundaries in a simulated obstacle-avoidance scenario. My undergraduate research capstone, April 2025.

Everything public is on the repository map.

Remark. On the author

Now
MS in Computer Science, concentration in Artificial Intelligence, at the University of Cincinnati. August 2025 to an expected May 2027. Thesis advisor: Dr. Yizong Cheng.
Before
BA in Mathematics and BS in Neuroscience, University of Cincinnati, 2025. Capstone advisor: Dr. Hyunjoong Kim.

Research interests

  • computer graphics
  • scientific visualization
  • digital media
  • software engineering
  • information retrieval