Skip to content

JavaScript implementation of Peter Shirley's Ray Tracing in One Weekend book.

Notifications You must be signed in to change notification settings

TwentyFiveSoftware/javascript-ray-tracing

Repository files navigation

Ray Tracing

Overview

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).

Build & Run this project

  1. Install Node.js

  2. Clone the repository

  3. Optional: Change sample count in nodejs-js/main.js and nodejs-ts/main.ts

  4. Install dependencies

    npm install
  5. 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

Performance

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

About

JavaScript implementation of Peter Shirley's Ray Tracing in One Weekend book.

Topics

Resources

Stars

Watchers

Forks