Skip to content

KaminariOS/rustracer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rustracer

Lines of code GitHub repo size dependency status GitHub

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

rustracer-0.2.0-Demo videos.

rustracer-0.1.0-Demo videos.

Lucy in Cornell

Features

  • Loading arbitrary glTF 2.0 models

    • Full node hierarchy
      • Mesh
        • Geometry normal generation
        • Two sets of texture coords
        • Mikktspace tangent generation
        • Normal mapping
      • Camera
    • 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",
  • 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

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(see resource manager).
    • You can open arbitrary glTF file by cargo run -- -f <filename> or drag-and-drop
  • 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,
    • Install Nix package manager(Linux only) and direnv.
    • cd into the project directory and direnv allow.
  • 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:

References