https://github.com/cpscript/micropython-raytracer
RayTracer for most micro-controllers with MicroPython
https://github.com/cpscript/micropython-raytracer
assembly c micro-controller micropython python
Last synced: 5 months ago
JSON representation
RayTracer for most micro-controllers with MicroPython
- Host: GitHub
- URL: https://github.com/cpscript/micropython-raytracer
- Owner: CPScript
- Created: 2024-02-11T20:56:13.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-30T21:06:54.000Z (5 months ago)
- Last Synced: 2025-01-30T21:19:42.299Z (5 months ago)
- Topics: assembly, c, micro-controller, micropython, python
- Language: Python
- Homepage:
- Size: 1.59 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
> A lightweight ray tracer optimized for MicroPython-based Micro Controllers, featuring **fast pixel rendering**, **framebuffer optimizations**, and **C-accelerated shading calculations**.
## 🚀 Features
- **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---
## 🛠 Installation
### 1️⃣ Flash MicroPython
Ensure your board has **MicroPython** installed. If not, download it from:
[MicroPython Downloads](https://micropython.org/download/)### 2️⃣ Install Required Modules
Upload the **setup script** and install dependencies:```bash
mpremote fs cp setup.py :/setup.py
mpremote run setup.py
```### 3️⃣ Upload Project Files
Transfer all required source files to your MicroPython device:
```bash
mpremote fs cp -r src :/src
mpremote fs cp -r modules :/modules
```### 4️⃣ Compile C Module (Optional for Performance)
If using ESP32/RP2040, compile the C module for optimized shading:```bash
mpy-cross modules/fast_raytrace.c
```
> Refer to MicroPython's `C module guide` for detailed instructions.---
#### 📌 Usage
Run the ray tracer with:
```
import src.main
```> Output: Will render a simple sphere with shading
---
#### 📂 Tree
```
/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
```---
#### 🖥️ How It Works
### 📍 1. Graphics Engine**graphics.py**:
- Uses framebuf for efficient screen updates
- Draws pixels via the display driver
- Implements clear screen & refresh functions### 🎮 2. Ray Tracing Algorithm
**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### ⚡ 3. Optimized Performance
- Batch pixel updates reduce display lag
- Precomputed math avoids redundant calculations
- C acceleration speeds up shading operations---
#### ⚡ Optimizations & Performance
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---
#### 🔧 Customization
Modify the following parameters in `ray_tracer.py`:
- Resolution (WIDTH, HEIGHT)
- Sphere Position (SPHERE_POS)
- Light Source (LIGHT_POS)
- Color Intensity (`shade()` function in `fast_raytrace.c`)---
> Built off of "https://github.com/CPScript/fx-CG50_RayTracer"