
I keep a mental list of projects that make me stop scrolling. Jet, a project from developer CubeCoders, made the list this week. It is a software only 3D rasterizer built for microcontrollers like the ESP32 and STM32. No GPU, no floating point unit required, just C++17 and integer math pushing triangles to a cheap SPI display.
Full details and the source are on GitHub, under CubeCoders/Jet, with the writeup covered by Hackaday here.
What it actually does
Jet renders triangles into a 16 bit RGB565 framebuffer using pure integer arithmetic, then pushes that framebuffer out to displays like the ST7796 or ILI9488 over SPI. On an ESP32-S3 running at 480×320, the numbers hold up: about 650 on-screen triangles at 60 FPS after culling, or roughly 1,300 at 30 FPS. The demo is a Wipeout style hovercraft race that actually looks like a game, not a tech demo running in slow motion.
That performance envelope sits somewhere around the Sega 32X or early Saturn generation. For a chip that costs less than a decent lunch, that is a genuinely good result.
What is clever here
The choice to go integer only is the right call for this hardware class. Floating point emulation on a chip without an FPU is slow and unpredictable, and even chips that do have one benefit from avoiding the conversion overhead when you are pushing thousands of vertex transforms a frame. Fixed point math has been the backbone of console era 3D engines since the PS1, and it still works because the tricks are well understood: clamp your precision loss, watch your overflow, and budget your bits carefully.
Zero dependencies is also a real feature, not just a marketing line. A lot of embedded graphics libraries drag in a whole windowing abstraction or a display HAL that assumes you are running FreeRTOS a specific way. Jet apparently just wants a framebuffer and a display driver, which means it will drop into almost any existing ESP32 project without a fight.
Where I would push back
Flat shading only, at least for now, based on what is documented. That is a reasonable starting point, and I get why textures are the harder problem (UV interpolation eats cycles fast on constrained hardware), but it limits what this is useful for beyond retro style demos and simple UI visualizations. I would also want to see how it behaves under partial occlusion with a lot of overlapping geometry, since the benchmark numbers quoted are post-culling and real scenes rarely cull as cleanly as a hovercraft racing over open track.
One thing I would have tried differently: exposing a software Z-buffer as optional rather than assumed, so simple scenes with few overlapping triangles could skip the depth test entirely and buy back a chunk of frame budget. Might already be there. The public writeup does not say either way, and that is the kind of detail that only shows up once you read the actual source.
The alternative approach: hardware assisted 2.5D
If I needed pseudo-3D on similarly cheap hardware and didn’t want to write a rasterizer, I would look hard at the old SNES trick: skip full 3D entirely and fake depth with scaled, layered sprites plus a Mode-7 style affine transform on a single background plane. Some ESP32 display controllers can do basic hardware scaling and rotation on framebuffer regions, which gets you pseudo-3D racing or flight game feel without touching a triangle pipeline at all.
The tradeoff is honest: you get less flexibility (no arbitrary 3D geometry, no real camera movement through a scene) in exchange for dramatically lower CPU cost and simpler code. For a top-down racer or a flight sim with a fixed camera angle, that tradeoff often wins. For anything that needs the camera to actually move through 3D space and look convincing doing it, you need something like Jet.
My honest take
This is exactly the kind of project that makes the ESP32 ecosystem fun to watch. Nobody needs a software rasterizer on a $6 microcontroller. That is not the point. The point is that someone wanted to see if it was possible, did the math right, and shipped something other people can actually build on. I will probably end up wiring this into a side project display just to see triangles spin on a $12 dev kit, and if that is not a good use of a weekend, I do not know what is.