Caitlyn is an in-development Monte Carlo ray tracer built in C++ by a team of students from the University of Waterloo and Wilfrid Laurier University. Caitlyn is actively working towards being a beautiful tool for bridging the accuracy and lighting of raytracing and the breathtaking visuals of pixel art (see our portfolio and Odd Tales' "The Last Night"!)
Interested in getting involved? Contact Connor Loi or Samuel Bai.
Caitlyn MCRT is built on Debian 12. It may work on other distros, but we recommend simply pulling our Docker container with the connortbot/caitlyn-mcrt
repository. We recommend cloning the repository, mounting a volume, initializing our validation submodule, and compiling.
Before continuing:
- Install
Docker Desktop
. - Pull the latest
docker pull connortbot/caitlyn-mcrt:base-vX.X.X
You may pull the repository from within the container or mount a volume. Either works!
Run cmake -B build/ -S .
to create files in the build
folder. cd build
, and make
. Don't forget to initialize the submodules.
Caitlyn renders scenes from our custom filetype .csr
. By default, the caitlyn
executable will read the scene from a scene.csr
file, so you need to have one before running. In this guide, we'll just run the example.csr
, which you can copy from here.
To learn how to write CSR files, check out the Basic Guide.
Caitlyn has a user-friendly command line interface, allowing you to customize samples, depth, type of multithreading, and more. Once you have the executable, you can run ./caitlyn --help
to see all the options at your disposal.
Let's render a PNG file of the example scene! Ensure that you have your CSR file in the same directory.
./caitlyn -i example.csr -t png -r 600 600
This will read the scene from example.csr
and output as a png
.
And now you have your first caitlyn-rendered scene!
As mentioned in the Quick Start
, caitlyn
will read and build scenes via CSR files. The CSR Basic Guide covers everything from creating objects to custom materials.
To see all the options available to caitlyn
, run:
./caitlyn --help
Flags like --samples
and --depth
control the amount of time spent on the render. If you are unfamiliar with rendering concepts, samples
refer to the amount of rays traced per pixel, which decreases the noise of a render as it increases. depth
refers to the amount of times a ray is simulated to "bounce" around the scene, allowing for realism in reflections, emissives, etc.
Sometimes, CSR files will have features not supported in your version of caitlyn
. You can check this with the version indicator at the top of the CSR file and with ./caitlyn --version
.
For users who have a better understanding of their computer's resources, the --threads
and --vectorization
flags control the use of more efficient architecture. While threads
dictate the amount of CPU threads to split the workloads on, the vectorization
flag will dictate the type of SIMD batching. [NONE|SSE|AVX|AVX512]
.
For contribution or general inquiries, please email one of us at Connor Loi or Samuel Bai.
The people the made it happen: