Raytracer – 3D Rendering Engine in C++

Raytracer

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.


🎬 Render examples