Educational Python ray tracer with a modular architecture, visualization tools, example scenes, and support for shadows, reflections, refractions, and Blinn-Phong shading.
Project description
EduRay: Educational Ray Tracer in Python
EduRay is an educational ray tracer implemented in Python. It is designed to be simple, readable, and modular, making it suitable for learning the fundamentals of ray tracing and computer graphics.
The project focuses on clarity rather than performance. It includes the source code of the ray tracer, visualization tools, example scenes, and educational Jupyter notebooks.
Installation and setup
You can install the package from PyPI without the notebooks as rendering and visualization software:
pip install eduray
Or clone the repository to use the educational notebooks and install the package in editable mode:
git clone https://github.com/HonzaSik/eduray.git
cd eduray
python3.13 -m venv .venv
# macOS/Linux
source .venv/bin/activate
# Windows
.venv\Scripts\activate
# Option A: Library only — for use in IDEs like PyCharm or VS Code
pip install -e .
# You need to set your interpreter to the virtual environment you just created for the editable install to work in your IDE.
# Option B: Library + Jupyter — for running educational notebooks in the browser
pip install -e ".[all]"
To run the educational notebooks in your browser, start a Jupyter server in the project directory:
jupyter notebook
Or open the notebooks directly in an IDE with Jupyter support, such as VS Code or PyCharm.
Then open educational_notebooks/1_data_visualizer.ipynb to start with the first lesson. The notebooks are numbered and meant to be followed in order.
Note The project was developed and tested on Python 3.13. Requires Python 3.11 or newer.
Quick start
The smallest working example:
from eduray import Object, Sphere, PhongMaterial, Scene, PinholeCamera, PointLight, LinearRenderLoop
sphere = Object(
geometry=Sphere(),
material=PhongMaterial()
).translate(0, 0, -2)
scene = Scene(
camera=PinholeCamera(),
objects=[sphere],
lights=[PointLight()],
)
rt = LinearRenderLoop(scene=scene)
rt.render("hello_world.png")
To try the library, open the Hello World notebook. It demonstrates how to set up a minimal scene and render an image using only a few lines of code.
jupyter notebook ./hello_world.ipynb
Educational notebooks series
A series of educational Jupyter notebooks is available in the educational_notebooks directory.
The notebooks explain selected ray tracing concepts step by step, including:
- camera construction
- ray-object intersections
- shading
- rendering
- reflections and refractions
- procedural texturing
- visualization of ray tracing concepts
More detailed description of the notebooks can be found in the introduction notebook.
For those who want to experiment
- Click "Fork" on https://github.com/HonzaSik/eduray
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/eduray.git
- Continue with the editable install steps from the Installation section above.
Troubleshooting
ModuleNotFoundError: No module named 'eduray' in PyCharm or VS Code
Make sure your IDE is configured to use the .venv you created above,
not the system Python:
- PyCharm:
Settings → Project → Python Interpreter → Add Interpreter → Add Local → Virtualenv → Existing, then select<repo>/.venv/bin/python(macOS/Linux) or<repo>\.venv\Scripts\python.exe(Windows). - VS Code:
Cmd/Ctrl+Shift+P → Python: Select Interpreter, pick the.venvfrom this project (workspace).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file eduray-0.2.3.tar.gz.
File metadata
- Download URL: eduray-0.2.3.tar.gz
- Upload date:
- Size: 65.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5771d5be4828612df51024e7607ade5d2c350ce6b7521ba6c419d7529b6ac085
|
|
| MD5 |
73dc61145a074fad5e151fb3128f246c
|
|
| BLAKE2b-256 |
a9af93fb6d92dc51ed13ae26ab210fd2baf6ddc0360fa9d79c1da1824885af89
|
File details
Details for the file eduray-0.2.3-py3-none-any.whl.
File metadata
- Download URL: eduray-0.2.3-py3-none-any.whl
- Upload date:
- Size: 89.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
273e7825abafd05bcf92cad3580df55c3196311bac8fe3855dbd1ab191499969
|
|
| MD5 |
6ad2c9e9cc2f46134b7d7a331e17a678
|
|
| BLAKE2b-256 |
dde017fd1c63ffaab5c3977f6f60f6c20ea4c4b892f18e92eef30e2cd6ffa5d1
|