About
Raytracer is a modular 3D image rendering engine developed in C++ with SFML over five weeks as part of a second-year group project at Epitech. Our goal was to simulate realistic lighting and material interactions through a custom raytracing pipeline – rendering a single image per configuration.
As project leader, I coordinated a team of four, managed task allocation, code integration, and personally developed several core features such as lighting, reflections, and colored illumination.
🎖️ Delivered with full documentation, modular extension system via dynamic libraries, and advanced rendering features like Perlin noise, anti-aliasing, and mirror surfaces.
Project Info
- Role: Project Lead & Feature Developer (lighting logic, reflections, color blending)
- Team Size: 4
- Time Frame: 5 weeks
- Language: C++
- Library: SFML + libconfig++
🎮 Introduction
The engine produces a single image output from a scene defined in a libconfig++ file. This includes objects, materials, camera settings, and lighting.
🧩 Objects, textures, and lights are loaded dynamically from
.so
libraries, enabling modularity and extensibility without recompilation.
The render restarts automatically when the config is modified, enabling rapid iteration – though each frame is the result of a full offline rendering pass.
🧠 Key Features
Object Support
- Spheres
- Planes
- Cones
- Cylinders
.obj
mesh import
Material & Texture Support
- Flat color
- Checkerboard pattern
- Image texture
- Mirror reflection
- Transparency
- Perlin noise
Lighting Models
- Ambient light
- Spot light
- Colored light
- Fog simulation
- Reflection calculation
🔄 Each of these is encapsulated in a shared object (.so) file, making it easy to add new elements without modifying the core engine.
Rendering Tools
- Camera control: position, rotation, field of view
- Skybox integration
- Anti-aliasing for smoother visuals
- Live render status window with progress bar
🎨 Architecture & Patterns
The project implements core design patterns such as:
- Factory Pattern: for object and light instantiation
- Singleton Pattern: for config and render controller
A complete documentation set was delivered, enabling future users to:
- Add new object types
- Customize scenes via config
- Build their own materials and effects
- Extend the render logic
📤 Download & Source Code
👉 Available on GitHub:
https://github.com/ArthuryanLoheac/RayTracer
📚 What I Learned
- How to implement complex math models for light behavior (reflection vectors, color blending, transparency)
- Managing a C++ project with shared libraries and runtime loading
- Coordinating a small dev team to produce a functional, documented product
- Debugging rendering logic and isolating fragile mathematical operations
- Writing clean, extensible code using design patterns
- Creating tools and documentation for non-dev users
💡 The hardest challenge was ensuring new lighting computations didn’t disrupt existing rendering logic – this required careful planning, modular code, and lots of visual testing.