I wanted to improved my JS and learn raytracing. So I built a dynamic realtime raytracer in pure JavaScript with no libraries.

Check it out on Github: github.com/gianlucatruda/rays

Example scene

Live demo

Try the live demo in your browser (best on desktop): gianluca-rays.vercel.app


  • Realtime rendering: 75fps for 192 x 108 resolution.
  • High-res rendering: ~700ms for 1152 x 647 resolution.
  • Use the mouse and keyboard to reposition and angle the camera.
  • Supports:
    • Multiple light sources
    • Spherical objects
    • Multiple light interaction types:
      • Lambertian / diffusion reflection
      • Specular reflection (mirrors)
      • Ambient lighting
      • Shadows

I adapted core techniques from these great resources: