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 runto 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
