Software ray traced voxel landscape on a six-dollar microcontroller

Oct 14, 2026 Last reply: 1 day ago 3 Replies
Jump to replies (3)

The detail that got me: this runs on a board costing roughly six dollars, with 520KB of SRAM and no graphics hardware at all. Try Edge Tech's PicoVoxel engine ray casts an entire textured, animated voxel scene in software on the RP2350's two Cortex-M33 cores at 300MHz, and it still averages over 30 FPS.



The plumbing is where the craft shows. DDA ray casting is split across both cores, with the workload rebalanced every frame. Checkerboard raycasting and macrocell skips through empty space keep the tracing focused, and finished frames go out to the display over DMA. The image is traced at 160x120 and then enlarged to 320x240 with edge-preserving depth filtering. Output lands on a 320x240 ST7789 LCD connected with jumper wires, a DualShock 4 handles input over a micro-USB OTG host link, and audio leaves the pins as PWM into an active speaker.



Plenty stands out in the result. The world fits inside a 64x64x32 volume yet holds a handcrafted Japanese countryside with mountains, sea, flowing water, a tunnel, a shrine, a lighthouse. Seventeen block varieties carry attributes like texture, transparency, animation and cutout, the camera can enter translucent water with underwater rendering effects, foliage cutouts let background geometry peek through between leaf pixels, and fog and shadows render too. Seven nature sounds play, with volume scaling by proximity to their origins. Circle toggles Play and Edit Mode, and in Edit Mode L1 and R1 cycle the inventory while square places and triangle removes blocks.



It is a tech demo rather than a finished game, and the maker names the core problem plainly: fitting the renderer, framebuffer and world data into 520KB while keeping it responsive. A future technical walkthrough of the rendering pipeline and SRAM optimization is planned. The code is MIT licensed on GitHub, with pre-built UF2 firmware on the releases page.



Project by Try Edge Tech. Watch it on their YouTube channel:

formatting link


Wiring a standard DualShock 4 in over USB host rather than building custom input hardware seems a smart call to me. It keeps the controls familiar and the mapping reads naturally, with the sticks handling movement and camera and cross jumping. The tradeoff is depending on one specific controller, but for a demo that seems a fair swap.

How is the 64x64x32 world stored in memory alongside the framebuffer? With 520KB total and 17 block types each carrying different attributes, I'm curious whether blocks are packed as compact indices or whether attribute data lives in separate tables. That feels like the crux of the whole memory budget.

Block placement and removal already work in Edit Mode, so a way to save an edited world would be my first suggested addition. It would let creations survive between sessions and give people a reason to keep returning to the same 64x64x32 space instead of starting over each time.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required