This page is created automatically. Click here to view this shader on Shadertoy.

These shaders are my implementation of the raytracer described in the (excellent) book "Raytracing in one weekend" [1] by Peter Shirley (@Peter_shirley). I have tried to follow the code from his book as much as possible, but I had to make some changes to get it running in a fragment shader:

  • There are no classes (and methods) in glsl so I use structs and functions instead. Inheritance is implemented by adding a type variable to the struct and adding ugly if/else statements to the (not so overloaded) functions.
  • The scene description is procedurally implemented in the world_hit function to save memory.
  • The color function is implemented using a loop because it is not possible to have a recursive function call in glsl.
  • Only one sample per pixel per frame is calculated. Samples of all frames are added in Buffer A and averaged in the Image tab.

You can find the raytracer / pathtracer in Buffer A.

= Ray tracing in one week =

= Ray tracing: the next week =

This particular shader can be optimized (a lot) by using an acceleration structure, as done in my shader "More spheres":

Source code

You can find (the full source of) RIOW 1.12: Where next? on Shadertoy.