Théodore Billotte
← All projects

2024 · Academic 3D rendering projectCompleted

Raytracer

A ray-tracing renderer, extensible through plugins.

Developer (Epitech academic project, 2nd year)

Raytracer

A 3D rendering engine written in C++ that produces images by ray casting, built around a runtime plugin architecture so the renderer can be extended without touching its core.

Complex scene rendered by the engine A multi-object scene with reflections, shadows and coloured lighting, rendered to PPM.

Overview

The renderer fires rays from a virtual camera into a scene, finding the nearest intersection for each pixel and shading it from the scene’s lights. Everything that can vary between scenes is loaded as a plugin:

  • Primitives: sphere, plane, cylinder, cone
  • Light sources: point, directional, ambient
  • Materials and post-processing filters: sepia, black & white, negative

Because these are plugins, new shapes, lights or effects can be dropped in without recompiling the core engine.

Highlights

  • Plugin-based core: primitives, lights, materials and filters are loaded at runtime, keeping the renderer open for extension.
  • Plain-text scenes: scenes are described in human-readable .cfg files.
  • Multi-threaded rendering: pixels are rendered in parallel for faster frames.
  • Several display backends: a live SFML preview, PPM file output, or an ASCII terminal view of the same render.

A walkthrough of the architecture and results is also available as a slide deck, embedded further down the page.

My role

Developer on a two-person Epitech academic project (2nd year). C++ engine design, the plugin loading system and the rendering pipeline.

Tech

C++ for the engine and plugins, SFML for the live preview window.

Team

Connections

Projects

Education