Once upon a time, doing graphics on a microcontroller was challenging, to say nothing of the concept of going into three dimensions. But modern microcontrollers are far more powerful, and you might find yourself wanting to do all sorts of graphical wizardry with one. To that end, you might find Jet useful.
Created by [CubeCoders], Jet is a compact 3D rasterizer built for modern chips like the ESP32 and STM32. It’s dependency free, relatively tiny, and is written in C++17 with an eye towards working well on memory-limited platforms. It runs entirely in software, uses only integer arithmetic, and is built around 16-bit RGB565 color — intended to make it easy to use with parts like the ST7796, ILI9488, and other similar displays interfaced via SPI.
As a point of reference, on a ESP32-S3 Jet can render around 650 on-screen triangles (post-culling) at 60 frames per second on a 480×320 display, or 1300 triangles at 30 FPS. The developers note that 3D performance lands somewhere between the Sega 32X and Sega Saturn — not bad for a microcontroller you can buy for under $20. The Wipeout-like demo shows off the capabilities of Jet rather fantastically, we think.
You’d be foolish to expect your next microcontroller project to render Crysis. However, if you want some retro 3D graphics for your next ESP32-based build, you might just consider exploring what Jet can do for you.

SNES or GBA had maybe the 1/10th power of a modern STM32F1 microcontroller yet they already had 3D games like Mario Kart or Golden Sun. It doesn’t matter how fast the CPU is but how smart the brain writing the code is.
Arduino community of late 2000s was a notorious example of this. The stuff that we (I mean people who were 1337) easily did on PIC12 or ATtiny they needed the whole expensive ATmega and some stupid “shields”.
The PIC16F84(A) was very popular by turn of the century. It replaced the older PIC16C84.
There were many websites with schematics and hex files for download.
The PIC was notable for its easy programming.
A simple serial interface and one of the dozen freeware programmers was all it needed.
It was a fun time, years before the Arduino appeared.
However, sharing source code was more difficult back then.
People either used commercial IDEs or did write in assembly language.
The PICs all had a different instruction set, so the PIC16F84 and closely related types (PIC16F628A and PIC16F88?) were popular.
“It doesn’t matter how fast the CPU is”
You’re right! Because it wasn’t the CPU providing Mode 7 for Mario Kart, it was the PPU which did the transformations directly in hardware. For the more advanced games they brought in the SuperFX chip which was a basic GPU.
Pure soft rendering is a lot harder.