Rendering with SDL installed
Example render (2000 samples, 1920x1080, 50 bounces, 1h 55min)
C-ray is a simple path tracer built for studying computer graphics. It's also a great platform for developing your own raytracing algorithms. Just write your own rayTrace() function! Multithreading, 3D model loading and render previews are handled by C-ray, so you can concentrate on the core principles.
C-ray currently supports:
- Real-time render preview using SDL
- Easy scene compositing using JSON
- OBJ loading with matrix transforms for compositing a scene
- PNG and BMP file output
- k-d tree acceleration structure for fast intersection checks even with millions of primitives
- Russian Roulette path optimization
The default recursive path tracing algorithm supports:
- lambertian diffuse
- triangles and spheres
- Depth of field
- Diffuse textures
Things I'm looking to implement:
- Built a more robust API with a scene state.
- Some procedural textures
- Expand the default path tracer to use PBR
Please see the Wiki for details on how to use the JSON scene interface!
- CMake for the build system
- SDL2 (Optional, CMake will link and enable it if it is found on your system.)
- Standard C99/GNU99 with some standard libraries
All other libraries are included as source
macOS: Either follow these instructions, or the instructions for Linux below. Both work fine.
- Install SDL2 (See installing SDL below)
- Open the .xcodeproj file in Xcode
- Edit scheme by clicking
C-Rayin top left, make sure 'Use custom working directory' is ticked and set it to the root directory of this project.
- Go into the
Argumentstab, and add by clicking
+. Type in
./input/scene.json, then click close
- Uncomment the
UI_ENABLEDdefine at the top of
src/includes.hif you have SDL2 installed.
- Build&Run with
- (Optional) Install SDL2 (See installing SDL below)
cmake ., or optionally
cmake . -DNO_SDL2=Trueto disable SDL2.
maketo build the project
- Run binary:
./bin/c-ray ./input/scene.json(Making sure the working dir is the root directory). You can also pipe files into
C-rayand it will read from there. This is useful for scripts that invoke
cat input/scene.json | ./bin/c-ray
- Download SDL2 Development libaries from here and extract: https://www.libsdl.org/download-2.0.php (https://www.libsdl.org/release/SDL2-devel-2.0.8-VC.zip)
- Open a
x64 Native Tools Command Promptand set path to SDL2DIR (where you extracted the files to, should have a few folders like 'include' and 'lib'):
- Run cmake:
cmake -G "Visual Studio 15 2017 Win64" .
- (Optional) Edit
#define UI_ENABLEDand copy your
- Build the generated solution:
msbuild c-ray.sln /p:Configuration=Release
type input\scene.json | bin\Release\c-ray.exe
On macOS, use
homebrew to install SDL.
brew install sdl2
On Windows, download from
On Linux using APT, run
sudo apt install libsdl2-dev
Writing your own raytracing algorithm
No tests yet! Maybe soon!
3rd party libraries included in this project
OBJ Loader library: http://www.kixor.net/dev/objloader/
lodePNG PNG compression library: http://lodev.org/lodepng/
JSON parsing library: https://github.com/DaveGamble/cJSON
PCG random number generator: http://www.pcg-random.org
If you know more than me, please do get in touch at vkoskiv [at] gmail (dot) com!
You can also ping me on Discord!: