I created a reference shader with ray-primitive intersection routines on Shadertoy. A simple path tracer is used to visualize the scene.

Use your mouse to change the camera viewpoint.

I wanted to create a reference shader similar to “Raymarching – Primitives“, but with ray-primitive intersection routines instead of SDF routines.

As usual, I ended up mostly just copy-pasting code from Íñigo Quílez.

You can find all intersection routines in the Common tab of the shader. The routines have a similar signature: a routine returns the distance to the first hit inside the [distBound.x, distBound.y] interval and will set the normal if an intersection is found.
If no intersection is found, the routine will return MAX_DIST.

The following ray-primitive intersection routines are implemented:

  • Ray / Plane
  • Ray / Sphere
  • Ray / Box
  • Ray / Cylinder
  • Ray / Torus
  • Ray / Capsule
  • Ray / Cone
  • Ray / Ellipsoid
  • Ray / Rounded Cone
  • Ray / Triangle
  • Ray / Sphere4
  • Ray / Goursat
  • Ray / Rounded Box

Please let me know if there are other routines that I should add to this shader.

You can find (the full source of) the fragment shader on Shadertoy: https://www.shadertoy.com/view/tl23Rm.

Ray Tracing – Primitives