A lightweight ray tracer optimized for MicroPython-based Micro Controllers, featuring fast pixel rendering, framebuffer optimizations, and C-accelerated shading calculations.
- Framebuffer Rendering: Faster pixel updates using framebuf
- Optimized Shading: Uses a C module for fast lighting calculations
- Integer Math: Reduces slow floating-point operations
- ESP32/RP2040 Parallel Processing: Can utilize multi-core rendering (optional)
- Modular Structure: Easily customizable for different displays and resolutions
Ensure your board has MicroPython installed. If not, download it from: MicroPython Downloads
Upload the setup script and install dependencies:
mpremote fs cp setup.py :/setup.py
mpremote run setup.pyTransfer all required source files to your MicroPython device:
mpremote fs cp -r src :/src
mpremote fs cp -r modules :/modulesIf using ESP32/RP2040, compile the C module for optimized shading:
mpy-cross modules/fast_raytrace.cRefer to MicroPython's
C module guidefor detailed instructions.
Run the ray tracer with:
import src.main
Output: Will render a simple sphere with shading
/ray_tracer_project
│── /src
│   ├── graphics.py      # Handles pixel drawing & framebuffer
│   ├── ray_tracer.py    # Main ray tracing logic
│   ├── main.py          # Entry point of the program
│── /modules
│   ├── fast_raytrace.c  # C module for faster shading
│── setup.py             # Installs required modules
graphics.py:
- Uses framebuf for efficient screen updates
- Draws pixels via the display driver
- Implements clear screen & refresh functions
ray_tracer.py:
- Traces rays to detect sphere intersections
- Calculates shading intensity based on a light source
- Uses the fast C module for improved performance
- Batch pixel updates reduce display lag
- Precomputed math avoids redundant calculations
- C acceleration speeds up shading operations
| Optimization | Benefit | 
|---|---|
| Framebuffer ( framebuf) | Fast pixel updates | 
| C Module ( fast_raytrace.c) | Accelerates shading calculations | 
| Integer Math | Avoids slow floating-point operations | 
| ESP32/RP2040 Parallelism | Uses multiple cores for rendering | 
Modify the following parameters in ray_tracer.py:
- Resolution (WIDTH, HEIGHT)
- Sphere Position (SPHERE_POS)
- Light Source (LIGHT_POS)
- Color Intensity (shade()function infast_raytrace.c)
Built off of "https://github.com/CPScript/fx-CG50_RayTracer"