Skip to content

Software-rendered, pure C#

A physics museum you render, not fake.

Eight exhibits, each solved by a real OnlyCSharp physics kernel and rasterized by a no-GPU software renderer - one directional sun at (0.6, 1.0, 0.4) lighting every surface, and each body projecting its own shadow flat onto the museum floor. No shaders, no game engine you did not write, no stock assets. The clips below are deterministic captures of the exhibits running live.

8live exhibits, one kernel each
320 x 180native raster, 4x nearest upscale to 1280 x 720
0GPU calls, shader files, or image assets

The floor plan

Eight rooms, eight kernels

Every cube you see is a solved simulation element - never a scripted animation.

A grid of cubes rising and falling as a shaded ocean height field. GerstnerWave
01  Gerstner swell

Four trochoidal wave components sum to a closed-form ocean surface on a 26 x 26 grid. Each cube's height is read straight from the kernel; the trough-to-crest navy-to-white tint is the real surface height, not a cosmetic sine.

A fuel block glowing red to yellow-white as it burns, shedding a rising ember plume. CombustionModel
02  Arrhenius combustion

An igniter deposits 18 kJ into a fuel block; the rate law k = A·e^(-Ea/RT) then drives thermal runaway to ~2000 K. The block's colour is its live temperature on a black-body ramp - it burns out, cools, and re-fuels on a loop.

A column of water particles collapsing and sloshing inside a tank. SphFluid3D
03  SPH water

A weakly-compressible smoothed-particle-hydrodynamics fluid: a water column drops into a tank and settles, each particle solving pressure (stiffness 40), viscosity and gravity every substep at rest density 1000 kg/m³.

A pinned banner of small cubes waving in a gusting wind. SoftBody / XPBD
04  Cloth banner

Position-based dynamics: a banner pinned along its top edge, wired with XPBD structural, shear and bend springs, swings in a time-varying wind field. Every drawn cube sits on one solved cloth node, so the ripple is the particle field itself.

A driving flywheel geared to a heavier driven wheel, both spinning. OcRotatingBody + OcGearTrain
05  Gear train

A flywheel (I = 2 kg·m²) spins up under 18 N·m and steps down through a 0.4-ratio, 92%-efficient gear to a heavier driven wheel. The solver integrates I·dω/dt = τ_in − τ_load − τ_friction - a real ODE, not a spin animation.

Nine crates raining down and settling into a loose pile. SoftwarePhysics
06  Rigid-body drop

Nine 0.4 m crates rain from 1.3 m, resolve axis-aligned contacts through sequential-impulse iterations, and settle into a loose stack before the drop resets. Gravity integration and contact solving are the engine's own float-native rigid-body kernel.

A pouring sand pile avalanching into a stable cone. GranularColumn
07  Angle of repose

Sand pours onto the apex of a heightfield and avalanches down the flanks through a mass-conserving Gauss-Seidel toppling relaxation, settling into a stable cone at its angle of repose - then flipping like an hourglass so the room never goes still.

A charged particle spiralling upward in a helical cyclotron orbit with a fading trail. Lorentz / EMFormulas
08  Cyclotron orbit

A charge under the Lorentz force F = q(v × B) gyrates in the plane normal to a uniform +Y field while drifting up it, tracing a helix by an energy-conserving Boris push. The electromagnetism leaf supplies the exact gyration rate ω = qB/m and live |F|.

How it renders

One sun, real shadows, no GPU

The museum draws with a portable software rasterizer: the floor first, then every exhibit's geometry projected flat along the sun direction as a dark ground shadow, then the lit bodies on top. The sun sits at (0.6, 1.0, 0.4) normalized, so shading and shadows agree. Frames were captured deterministically at 320 x 180 - no wall-clock, no random seed - and each exhibit clip is an orbiting camera around a live simulation, exported here as animated GIFs. The physics is never re-implemented for the demo; each exhibit wraps one existing OnlyCSharp kernel and asks it for the truth every frame.