This is my take on Peter Shirley's Ray Tracing in One Weekend book.
This project uses the Elixir programming language, which is a dynamic, functional language for building scalable applications.
- Install Elixir
- Clone the repository
- Optional: Change sample count in
lib/elixir_ray_tracing.ex
- Build the project
MIX_ENV=prod mix release
- Run the application
./_build/prod/rel/elixir_ray_tracing/bin/elixir_ray_tracing eval "ElixirRayTracing.main()"
I've already implemented Peter Shirley's ray tracing in various programming languages running on CPU & GPU and compared their performance.
The performance was measured on the same scene (see image above) with the same amount of objects, the same recursive depth, the same resolution (1920 x 1080). The measured times are averaged over multiple runs.
Reference system: AMD Ryzen 9 5900X (12 Cores / 24 Threads) | AMD Radeon RX 6800 XT
1 sample / pixel | 100 samples / pixel | |
---|---|---|
Elixir | 67,200 ms | N/A |
JavaScript - Node.js | 4,870 ms | 308 s |
Go | 1,410 ms | 142 s |
OCaml | 795 ms | 75 s |
Java | 770 ms | 59 s |
C++ | 685 ms | 70 s |
Rust | 362 ms | 36 s |
C | 329 ms | 33 s |
GPU - Compute Shader | 21 ms | 2 s |
GPU - Vulkan Ray Tracing Extension | 1 ms | 0.1 s |