ART is a ray tracing testbed designed to benchmark and compare different spatial acceleration structures used in CPU ray tracing.
It features a full GUI for ease of use.
- Path tracing renderer
- Uniform grid acceleration structure
- Hierarchical uniform grid acceleration structure
- Octree acceleration structure
- BSP tree acceleration structure
- k-d tree acceleration structure
- Bounding volume hierarchy (BVH) acceleration structure
- Basic time-based performance benchmarking
- Comprehensive performance benchmarking
- Wide range of varied test scenarios
Linux and Windows are actively supported. This is a C++17 project; it is untested with older C++ standards and may not compile.
Most dependencies are bundled in the external/ directory:
- Catch2 - Header-only C++ testing framework
- imgui - Immediate mode GUI library (GUI builds only)
- SDL3 - Cross-platform multimedia library (GUI builds only)
- Windows: Bundled in
external/SDL3/ - Linux: Install via package manager (e.g.,
sudo apt install libsdl3-devor equivalent)
- Windows: Bundled in
- stb_image, stb_image_write - Single-header image I/O libraries
The project supports three build modes:
- GUI - Interactive graphical interface using SDL3 and imgui
- Headless - Command-line only, no GUI dependencies required
- Test - Command-line only, unit test suite
./build.sh # Debug Headless build (default)
./build.sh debug # Debug Headless build
./build.sh debug_gui # Debug GUI build
./build.sh release # Release Headless build
./build.sh release_gui # Release GUI build
./build.sh test # Build test suite./generate_vs2022_solution.bat
Then open the generated solution and select the desired configuration:
Debug_GUIDebug_HeadlessRelease_GUIRelease_HeadlessTest
bin/Debug_Headless/ART- Debug headless executablebin/Debug_GUI/ART- Debug GUI executablebin/Release_Headless/ART- Optimized headless executablebin/Release_GUI/ART- Optimized GUI executablebin/Test/ART- Test suite executable
On Linux, GUI executables require the SDL3 shared library to be installed. Install it via your package manager before running GUI builds:
- Ubuntu/Debian:
sudo apt install libsdl3 - Fedora:
sudo dnf install SDL3
git clone https://github.com/miarolfe/accelerated-raytracing-testbed
cd accelerated-raytracing-testbed
./build.sh release # Linux - use "generate_vs2022_solution.bat" on Windows
./bin/Release_Headless/ART./build.sh test # Build test configuration
./bin/Test/ART # Run test suiteGitHub Actions automatically runs tests on every push and pull request to the main branch. Tests execute on ubuntu-latest and windows-latest. Check the Actions tab for build logs and test results.
This project is licensed under the MIT License - see the LICENSE file for details.
- Catch2 - Boost Software License 1.0 (see
external/Catch2/) - imgui - MIT License (see
external/imgui/) - SDL3 - zlib License (see
external/SDL3/) - stb_image, stb_image_write - Public domain / MIT (see headers in
external/stb/)
- Catch2 - C++ testing framework
- imgui - Immediate mode graphical user interface
- SDL3 - Platform abstraction layer
- stb_image, stb_image_write - Public domain image single-header libraries (stb_image, stb_image_write)
- This project, and my interest in ray tracing, were heavily inspired by the "Ray Tracing in One Weekend" series. Check them out!