An example path tracer which runs on multiple ray tracing backends (Embree/DXR/OptiX/Vulkan/OSPRay). Uses tinyobjloader to load OBJ files, tinygltf to load glTF files and, optionally, Ingo Wald's pbrt-parser to load PBRTv3 files. The San Miguel, Sponza and Rungholt models shown below are from Morgan McGuire's Computer Graphics Data Archive.
The currently implemented backends are: Embree, DXR, OptiX, and Vulkan. When running the program, you can pick which backend you want from those you compiled with on the command line. Running the program with no arguments will print help information.
./chameleonrt <backend> <mesh.obj>
All five ray tracing backends use SDL2 for window management
and GLM for math.
If CMake doesn't find your SDL2 install you can point it to the root
of your SDL2 directory by passing -DSDL2_DIR=<path>
.
Similarly for GLM, you can point it to the glmConfig.cmake file
in the GLM cmake/glm directory by passing -Dglm_DIR=<path>
.
This CMake file was added as of Mar. 5, 2020, and should be available in GLM 0.9.9.8.
To track and report statistics about the number of rays traced per-second
run CMake with -DREPORT_RAY_STATS=ON
. Tracking these statistics can
impact performance slightly (especially in the Vulkan backend).
ChameleonRT only supports per-OBJ group/mesh materials, OBJ files using per-face materials can be reexported from Blender with the "Material Groups" option enabled.
To build with PBRT file support set -DpbrtParser_DIR=<path>
to the CMake export files for
your build of the pbrt-parser.
Dependencies: Embree, TBB and ISPC.
To build the Embree backend run CMake with:
cmake .. -DENABLE_EMBREE=ON \
-Dembree_DIR=<path to embree-config.cmake> \
-DTBB_DIR=<path TBBConfig.cmake> \
-DISPC_DIR=<path to ispc>
You can then pass -embree
to use the Embree backend. The TBBConfig.cmake
will
be under <tbb root>/cmake
, while embree-config.cmake
is in the root of the
Embree directory.
Dependencies: OptiX 7, CUDA 10.
To build the OptiX backend run CMake with:
cmake .. -DENABLE_OPTIX=ON
You can then pass -optix
to use the OptiX backend.
If CMake doesn't find your install of OptiX you can tell it where
it's installed with -DOptiX_INSTALL_DIR
.
If you're on Windows 10 1809 or higher, have the latest Windows 10 SDK installed and a DXR capable GPU you can also run the DirectX Ray Tracing backend.
To build the DXR backend run CMake with:
cmake .. -DENABLE_DXR=ON
You can then pass -dxr
to use the DXR backend.
Dependencies: Vulkan.
To build the Vulkan backend run CMake with:
cmake .. -DENABLE_VULKAN=ON
You can then pass -vulkan
to use the Vulkan backend.
If CMake doesn't find your install of Vulkan you can tell it where it's
installed with -DVULKAN_SDK
. This path should be to the specific version
of Vulkan, for example: -DVULKAN_SDK=<path>/VulkanSDK/1.1.114.0/
Dependencies: OSPRay 2.0, TBB.
To build the OSPRay backend run CMake with:
cmake .. -DENABLE_OSPRAY=ON -Dospray_DIR=<path to osprayConfig.cmake>
You may also need to specify OSPRay's dependencies, ospcommon and OpenVKL, depending on how you got or built the OSPRay binaries. If you downloaded the OSPRay release binaries, you just need to specify that path.
You can then pass -ospray
to use the OSPRay backend.
If you find ChameleonRT useful in your work, please cite it as:
@misc{chameleonrt,
author = {Will Usher},
year = {2019},
note = {https://github.com/Twinklebear/ChameleonRT},
title = {{ChameleonRT}}
}