A Rust-based 3D voxel rendering engine using physically-based ray tracing. Built on Bevy (ECS), Vulkan ray tracing via pumicite.
.vox file loadingVK_KHR_ray_tracing_pipeline and VK_KHR_acceleration_structure# Build everything
bazelisk build -c opt //...
# Run the demo
bazelisk run -c opt //:dust
Cargo also works for code-only builds (cargo build, cargo test), but Bazel is required to run at least once to compile shaders and bundle runtime assets. Tests for the dust_vdb crate run under Cargo.
| Crate | Purpose |
|---|---|
crates/vdb (dust_vdb) |
Hierarchical voxel spatial index. Generic tree with configurable depth via the hierarchy! macro. Bit-packed node storage and pooling. Compiled at opt-level = 3 even in dev. |
crates/vox (dust_vox) |
Voxel geometry, materials, palettes, and .vox loading. Defines the tree as hierarchy!(3, 3, 2, VoxLeafNode) and provides hit-group shaders for ray intersection. |
crates/pbr (dust_pbr) |
PBR ray-tracing renderer: pipeline, Shader Binding Table, camera, sky atmosphere, and super-resolution (denoise + upscale) through the external pumicite_super_resolution crate (DLSS-RR backend). Shaders in crates/pbr/shaders/ (Slang). |
crates/app (dust_app) |
Application-level Bevy plugin glue. |
src/main.rs |
Demo entry point — loads a castle scene, an orbiting teapot, and an animated rainbow. |
Shaders are written in Slang (.slang) and compiled to SPIR-V through custom Bazel rules (slang_shader, slang_playout in third_party/pumicite_cli.bzl). Pipeline layouts are generated as Rust source. Compiled binaries are bundled as Bazel runfiles.
third_party/ contains custom BUILD.bazel files for external C/C++ dependencies: VulkanMemoryAllocator, shader-slang Rust bindings, and the pumicite shader-compilation macros. Bevy is patched to the dust-engine/bevy release-0.17.3 fork; ash is patched to a fork that exposes additional Vulkan metadata.