CPU Raytracer written in the crystal language
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
images
models
scenes
src
.gitignore
LICENSE
README.md
Scenes.md
raytracer.cr
shard.lock
shard.yml

README.md

Raytracer

Documentation

Scenes

scenes/cornell_box.cr

400x400px, 20000 samples / pixel, time: ~4h

scenes/light2.cr

800x400px, 10000 samples / pixel, time: 2h15m

scenes/teapot.cr

400x400px, 100 samples / pixel, no lights, 2464 triangles with interpolated normals, time: 64s, 60s, 120s

The cube map in this example is "Yokohama 3" by Emil "Humus" Persson, licensed under CC BY 3.0

scenes/minecraft.cr

800x400px, 100 samples / pixel, no lights, time: 410s

scenes/fractal1.cr

400x400px, 5 samples / pixel, no lights, time: 3m10s

scenes/fractal2.cr

800x400px, 3 samples / pixel, no lights, time: 18s

scenes/fractal5.cr

400x400px, 5 samples / pixel, no lights, time: 30s

[WIP] scenes/sponza.cr

400x400px, 5000 samples / pixel, 1 light, time: 13h

Model: Crytek Sponza

[WIP] scenes/sponza_phong.cr

400x400px, 5 samples / pixel, 1 light, phong lighting, time: 37s

Model: Crytek Sponza without Banner

scenes/metaball.cr

800x400px, 10 samples / pixel, no lights, time: 5m

The cube map in this example is "Yokohama" by Emil "Humus" Persson, licensed under CC BY 3.0

In order to run this example:

  1. Download the set of cubemaps
  2. Unzip the folder
  3. Convert each .jpg to .png e.g. using mogrify -format png *.jpg etc. (convert is part of the imagemagick)
  4. Copy all six png files (negx.png, negy.png, negz.png, posx.png, posy.png, posz.png) to cube_maps/Yokohama
  5. Mirror negx.png, e.g. using convert negx.png -flop negx.png

Resources

Models

  • teapot.obj (Utah teapot, used by scenes/teapot1.cr)