Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vvzen/lets-trace-some-rays-in-rust
Very very simple toy OpenEXR renderer application written in Rust
https://github.com/vvzen/lets-trace-some-rays-in-rust
colstodian linear-color openexr renderer rust toy-renderer
Last synced: 3 days ago
JSON representation
Very very simple toy OpenEXR renderer application written in Rust
- Host: GitHub
- URL: https://github.com/vvzen/lets-trace-some-rays-in-rust
- Owner: vvzen
- Created: 2023-03-04T11:01:50.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2023-03-12T20:23:13.000Z (almost 2 years ago)
- Last Synced: 2024-12-23T23:32:37.278Z (10 days ago)
- Topics: colstodian, linear-color, openexr, renderer, rust, toy-renderer
- Language: Rust
- Homepage:
- Size: 5.83 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# README
**TL;DR:** This app is a toy Raytracer writter in Rust.
![screenshoot](screengrab.png)
This is just a pet project of mine, done while sloooowly following along [Ray Tracing in One Weekend](https://misterdanb.github.io/raytracinginrust/#surfacenormalsandmultipleobjects) over the course of >1 weekends.
Current features:
- UI: written in [iced](https://iced.rs/), following the [ELM architecture](https://guide.elm-lang.org/architecture/)- UI: GPU Framebuffer shows a 8bit tonemapped conversion of the render buffer (32bit float)
- UI: Save to filesystem in OpenEXR container (ZIP compression), thanks to [exr](https://crates.io/crates/exr)
- 3D: Rendering done in scene linear ACEScg colorspace, thanks to [colstodian](https://crates.io/crates/colstodian)
- 3D: Rendering happens in the background via async tasks, thanks to the iced Command API
- 3D: Antialiasing (by shooting and averaging multiple rays per pixel)
- 3D: Metallic and Lambertian-like rendering of spheres
## Things I want to do
- Proper multithreaded rendering, based on the number of cores.
- Could happen via [rayon](https://crates.io/crates/rayon), or via a bespoke solution.
- IPR: Continuosly update the render buffer, starting from low res render and increasing resolution and number of samples every iteration## Things I have learned so far
- I don't like immediate GUI approaches, like egui (sending data around is too hard, if you don't have a message/event based approach!)
- GUI frameworks in Rust are cool, but still very very young