A PBR glTF 2.0 renderer based on Vulkan ray-tracing, written in Rust.
This project and I are not affiliated with the Rust Foundation. I name it rus-tracer
only because I love Rust and ray tracing.
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.
-
Loading arbitrary glTF 2.0 models
- Full node hierarchy
- Mesh
- Geometry normal generation
- Two sets of texture coords
- Mikktspace tangent generation
- Normal mapping
- Camera
- Mesh
- Alpha blending and testing
- Full PBR material support
- Metallic-Roughness workflow
- Specular-Glossiness workflow
- Animations
- Articulated (translate, rotate, scale)
- Skinning(using compute shader)
- Morph targets
- Extensions
- "KHR_materials_ior",
- "KHR_materials_pbrSpecularGlossiness",
- "KHR_materials_transmission",
- importance sampling and BTDF
- "KHR_materials_variants",
- GUI support
- "KHR_materials_volume",
- "KHR_materials_specular",
- "KHR_texture_transform",
- "KHR_materials_unlit",
- "KHR_lights_punctual",
- Full node hierarchy
-
Optimizations
- Rayon-accelerated texture loading
- 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
-
Extras
- Open file by drag-and-drop
- Skybox
- Skydome(hdr)
- Loading multiple glTF scene dynamically
- Rigid-body simulation
- 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.
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.
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