rustracer
rustracer copied to clipboard
Vulkan path tracing with Rust
A PBR glTF 2.0 renderer based on Vulkan ray-tracing, written in Rust.
Naming
This project and I are not affiliated with the Rust Foundation. I name it rus-tracer
only because I love Rust and ray tracing.
Credits
This project is based on Adrien Ben's vulkan-examples-rs.
Sample accumulation implementation, heatmap and Lucy obj model are from project Ray Tracing In Vulkan.
I stole the PBR shaders from the referencePT project and made some changes.
Demos
Features
-
[x] Loading arbitrary glTF 2.0 models
- [x] Full node hierarchy
- [x] Mesh
- [x] Geometry normal generation
- [x] Two sets of texture coords
- [x] Mikktspace tangent generation
- [x] Normal mapping
- [ ] Camera
- [x] Mesh
- [x] Alpha blending and testing
- [x] Full PBR material support
- [x] Metallic-Roughness workflow
- [x] Specular-Glossiness workflow
- [x] Animations
- [x] Articulated (translate, rotate, scale)
- [x] Skinning(using compute shader)
- [ ] Morph targets
- [x] Extensions
- [x] "KHR_materials_ior",
- [x] "KHR_materials_pbrSpecularGlossiness",
- [x] "KHR_materials_transmission",
- [ ] importance sampling and BTDF
- [x] "KHR_materials_variants",
- [ ] GUI support
- [x] "KHR_materials_volume",
- [ ] "KHR_materials_specular",
- [ ] "KHR_texture_transform",
- [x] "KHR_materials_unlit",
- [x] "KHR_lights_punctual",
- [x] Full node hierarchy
-
[x] Optimizations
- [x] Rayon-accelerated texture loading
- [x] Async model loading
- [ ] Async acceleration structure building
-
[ ] Realtime ray tracing
- [ ] Rasterization mode
- [ ] G-buffer
- [ ] Hybrid mode
- [ ] SVGF denoiser
- [ ] Path regularization
- [ ] Better multi-light sampling like ReSTIR
- [ ] Blue noise and Halton sequence
-
[x] Extras
- [x] Open file by drag-and-drop
- [x] Skybox
- [ ] Skydome(hdr)
- [ ] Loading multiple glTF scene dynamically
- [ ] Rigid-body simulation
Building
Prerequisites
- Linux and a graphics card that supports KHR ray tracing
- Currently, I hard-coded all test model paths in an enum(in
gui_state.rs
) and load models in the search paths(seeresource manager
). - You can open arbitrary glTF file by
cargo run -- -f <filename>
or drag-and-drop
- Currently, I hard-coded all test model paths in an enum(in
- Windows not supported. Need some minor cfg tweaks to work on Windows. Open to pull requests.
Build command
Thanks to the superior Rust package manager Cargo
, building and running can be as brainless as a one-liner: cargo run
.
However, some external C libraries like Vulkan SDK may be missing on your system(those libraries are necessary for basically any Vulkan or non-trivial graphics programming project, regardless of whatever programming language used).
- To install those libraries automatically,
- To install external libraries manually
-
cargo run
to find out what is missing and install it - Look into the list in flake.nix.
-
Assets
Pointers to glTF models:
- My collection
- glTF sample models.
- A ton of glTF models
- Open Research Content Archive can be converted to glTF with Blender.
- Poly heaven