Skip to content

ahamez/ray-tracer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ray Tracer Challenge

This is an implementation in Rust of the book The Ray Tracer Challenge . Go get it, it's one of the best book I read!

My main objective is to be fluent in Rust 🗣🦀. So, if some seasoned rustacean comes across this, don't hesitate to pinpoint the problems 😉!

Differences from the book and other points of interest

  • Parallelization with rayon (I can't believe how easy it was!)
  • Matrices inversion are cached (which provides a significant speedup!)
  • Don't explicitly store the w component for tuples. Instead, it's up to the implementation of the Tuple trait to return the correct value (1.0 or 0.0)
  • Avoid creating a new vec for each call to a shape intersects() method using a kind of closure (it provides an interesting speedup as it prevents the dynamic allocation of many temporaries)
  • Use f64 everywhere
  • Naive anti-aliasing
  • Use enums rather than traits to describe polymorphic behaviors (shapes, lights, etc.)

Some samples

Cover

Shadow Glamour Shot

Github Skyline

Plane

Pattern

Reflection

Refraction

Fresnel

Reflect-Refract

Cube

Cylinder

Cone

Hexagon

Triangle

Lunar lander

Armadillo

Astronaut