This is my take on Peter Shirley's Ray Tracing in One Weekend book.
This project uses JavaScript and is intended to serve as a reference point in the performance comparison (see below).
-
Install Node.js
-
Clone the repository
-
Optional: Change sample count in
nodejs-js/main.js
andnodejs-ts/main.ts
-
Install dependencies
npm install
-
Run plain JavaScript version (with Node.js):
npm run nodejs-js
Run TypeScript version using tsc:
npm run nodejs-ts-tsc
Run TypeScript version using tsm:
npm run nodejs-ts-tsm
Run TypeScript version using ts-node:
npm run nodejs-ts-tsnode
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 |