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"  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 =
- Chapter 7: Diffuse https://www.shadertoy.com/view/llVcDz
- Chapter 9: Dielectrics https://www.shadertoy.com/view/MlVcDz
- Chapter 11: Defocus blur https://www.shadertoy.com/view/XlGcWh
- Chapter 12: Where next? https://www.shadertoy.com/view/XlycWh
= Ray tracing: the next week =
- Chapter 6: Rectangles and lights https://www.shadertoy.com/view/4tGcWD
- Chapter 7: Instances https://www.shadertoy.com/view/XlGcWD
- Chapter 8: Volumes https://www.shadertoy.com/view/XtyyDD
- Chapter 9: A Scene Testing All New Features https://www.shadertoy.com/view/MtycDD
This particular shader can be optimized (a lot) by using an acceleration structure, as done in my shader "More spheres": https://www.shadertoy.com/view/lsX3DH