https://github.com/dps/rust-raytracer
🔠A simple ray tracer in Rust 🦀
https://github.com/dps/rust-raytracer
raytracing rust
Last synced: 5 months ago
JSON representation
🔠A simple ray tracer in Rust 🦀
- Host: GitHub
- URL: https://github.com/dps/rust-raytracer
- Owner: dps
- License: bsd-2-clause
- Created: 2021-12-23T16:01:33.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2022-01-05T04:12:50.000Z (over 3 years ago)
- Last Synced: 2024-08-02T00:21:51.097Z (9 months ago)
- Topics: raytracing, rust
- Language: Rust
- Homepage:
- Size: 70.9 MB
- Stars: 235
- Watchers: 3
- Forks: 18
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-rust - dps/rust-raytracer - An implementation of a very simple raytracer based on Ray Tracing in One Weekend by Peter Shirley. (Applications / Graphics)
- awesome-rust - dps/rust-raytracer - An implementation of a very simple raytracer based on Ray Tracing in One Weekend by Peter Shirley. (Applications / Graphics)
- fucking-awesome-rust - dps/rust-raytracer - An implementation of a very simple raytracer based on Ray Tracing in One Weekend by Peter Shirley. (Applications / Graphics)
- fucking-awesome-rust - dps/rust-raytracer - An implementation of a very simple raytracer based on Ray Tracing in One Weekend by Peter Shirley. (Applications / Graphics)
README
# rust-raytracer
An implementation of a very simple raytracer based on [Ray Tracing in One Weekend
by Peter Shirley](https://raytracing.github.io/books/RayTracingInOneWeekend.html) in Rust. I used this project to *learn* Rust from scratch - the code may not be perfectly idiomatic, or even good, but it does make pretty pictures.Additional features beyond Shirley's course:
* Texture mapping (e.g. earth and moon textures below)
* Lighting
* Parallel rendering - will use all CPU cores for best performance
* Read scene data from JSON file
* Render a sky texture## Example output
https://user-images.githubusercontent.com/237355/147687883-4e9ca4fc-7c3b-4adb-85d7-6b08d1bc69f7.mp4
## Example usage
```
$ cargo build --release
Compiling raytracer v0.1.0 (/Users/dps/proj/rust-raytracer/raytracer)
Finished release [optimized] target(s) in 2.57s$ ./target/release/raytracer data/test_scene.json out.png
Rendering out.png
Frame time: 2840ms$ ./target/release/raytracer data/cover_scene.json cover.png
Rendering cover.png
Frame time: 27146ms
```### Texture mapping
### Lighting
### Parallel rendering - will use all CPU cores for best performance
#### Original
```
🚀 ./target/release/raytracer anim/frame
Compiling raytracer v0.1.0 (/Users/dps/proj/rust-raytracer/raytracer)
Finished release [optimized] target(s) in 2.21sRendering anim/frame_000.png
............................................................
Frame time: 21s
```
#### Using rayon
```
Rendering anim/frame_000.png
Frame time: 2573ms
```
### Render a sky texture
### Read scene data from JSON file
#### Example
```
{
"width": 800,
"height": 600,
"samples_per_pixel": 128,
"max_depth": 50,
"sky": {
"texture":"data/beach.jpg"
},
"camera": {
"look_from": { "x": -2.0, "y": 0.5, "z": 1.0 },
"look_at": { "x": 0.0, "y": 0.0, "z": -1.0 },
"vup": { "x": 0.0, "y": 1.0, "z": 0.0 },
"vfov": 50.0,
"aspect": 1.3333333333333333
},
"objects": [
{
"center": { "x": 0.0, "y": 0.0, "z": -1.0 },
"radius": 0.5,
"material": {
"Texture": {
"albedo": [
1.0,
1.0,
1.0
],
"pixels": "data/earth.jpg",
"width": 2048,
"height": 1024,
"h_offset": 0.75
}
}
}
]
}
```### Make animation
```
🚀 ffmpeg -f image2 -framerate 15 -i anim/frame_%03d.png -loop -0 anim.gif
```### Credits
Earth and moon textures from https://www.solarsystemscope.com/textures/### Extreme lighting example
### Progressive max_depth animation
