Skip to content

Software rendering - no GPU, no packages

A real-time 3D engine that draws every pixel on the CPU.

FableEngine rasterizes a live game loop from scratch: a per-frame sun shadow map, a geometrically exact planar mirror, impulse rigid-body physics, and a Verlet rope - four cameras of one simulation, rendered at once. Every clip below is a screen capture of the running loop, with the measured frame rate burned into the HUD.

130fps steady, 4 views
120 Hzfixed physics
1,238triangles / frame
512²sun depth map

Pure C# on the .NET base library only. Target was 20 fps; it holds ~6.5x that on a 32-core desktop.

The doctrine

Everything here is simulated, not faked

01A real game loop

A Stopwatch drives wall-clock dt into a fixed 120 Hz physics accumulator; rendering is decoupled and the frame rate is measured live. The sim advances on elapsed time, not a frame index - it is not a movie.

02Rasterized, not traced

A perspective-correct edge-function rasterizer with near-plane clipping, backface culling, and a 1/z depth buffer. Primary visibility is rasterized so the playable path stays fast; ray-style work is reserved for what needs it.

03Parallel across viewports

One rasterizer and framebuffer per viewport; the four views and each mirror pre-pass render concurrently with no locks and no shared mutable pixels. The shadow map builds once per frame and is read-only during the fan-out.

04Nothing but the base library

No GPU API, no game engine, no packages - vector math, the PNG and GIF encoders, and the terminal presenter come from a pure-C# standard library; the rasterizer, shadow map, mirror, and physics are written from scratch.

Measured this run

steady 130 fps · per-second range 65 to 166 fps · 2,806 physics steps in 24.0 s (120.0 Hz lockstep) · 1,238 triangles · up to 5 render passes per frame · 512-square shadow map · captured from the live loop, delays are the real wall-clock gaps.