scenix
Italian: scenix - scene, the stage on which everything appears.
scenix v0.8.0 is the Raycasting & Helpers release. It adds CPU-side BVH raycasting, exact mesh picking, and debug line helpers while keeping renderer and loader features optional.
This release ships:
scenix-math: vectors, matrices, quaternions, transforms, rays, bounds, planes, and coordinate helpers.scenix-core: typed IDs, color, errors, and shared traits.scenix-input: pointer and keyboard state.scenix-scene: scene node hierarchy, transform propagation, traversal, fog, sprites, and LOD helpers.scenix-camera: perspective, orthographic, and cube cameras, frustums, screen rays, orbit controls, and fly controls.scenix-mesh: geometry buffers, primitive generation, morph targets, instancing, and batching helpers.scenix-material: GPU-free material traits, pipeline keys, PBR, physical, toon, line, point, and custom shader materials.scenix-light: GPU-free light types, shadow configuration, and raw-sample spherical-harmonics light probes.scenix-texture: raw CPU texture data, samplers, atlases, video-frame updates, and RGBA8 mipmap generation.scenix-loader: optional glTF/GLB, OBJ/MTL, STL, PNG/JPEG/WebP, KTX2, HDR/EXR, and path-cache loaders that output CPU-side scenix data.scenix-renderer: optionalwgpurenderer with headless/surface targets, renderer-owned registries, G-buffer/shadow targets, culling/sorting helpers, and pipeline caching.scenix-post: optionalwgpufull-screen post stack with bloom, SSAO, tonemap, FXAA, TAA, SMAA, depth of field, fog, outline, and motion blur passes.scenix-raycaster: BVH-accelerated CPU picking with exact mesh intersections and camera-ray helpers.scenix-helpers: CPU debugLineGeometryfor grids, axes, bounds, arrows, lights, cameras, and skeletons.scenix: facade crate re-exporting CPU APIs by default, loader APIs behindfeatures = ["loader"], and GPU APIs behindfeatures = ["renderer", "post"].
WASM integration and animato integration remain later roadmap milestones.
Installation
Most users should start with the facade crate:
[]
= "0.8"
Enable CPU asset loading:
[]
= { = "0.8", = ["loader"] }
Enable GPU rendering and post-processing:
[]
= { = "0.8", = ["renderer", "post"] }
Use focused crates directly when you only need one layer:
[]
= "0.8"
= "0.8"
= "0.8"
= "0.8"
= "0.8"
= "0.8"
= "0.8"
= "0.8"
= "0.8"
= "0.8"
= "0.8"
= "0.8"
= "0.8"
= "0.8"
For no_std-capable CPU crates:
[]
= { = "0.8", = false, = ["libm"] }
= { = "0.8", = false }
= { = "0.8", = false }
= { = "0.8", = false }
= { = "0.8", = false }
= { = "0.8", = false }
= { = "0.8", = false }
= { = "0.8", = false }
= { = "0.8", = false }
= { = "0.8", = false }
= { = "0.8", = false }
scenix-loader, scenix-renderer, and scenix-post are std crates.
Quick Start
Load glTF And Render Headless
use ;
# async
Post-Processing Stack
use ;
# async
Raycasting
use BTreeMap;
use ;
let mesh_id = new;
let material_id = new;
let mut meshes = new;
meshes.insert;
let mut scene = new;
scene.add;
scene.update_world_transforms;
let camera = new
.position
.target;
let ray = from_camera_ndc;
let mut raycaster = new;
raycaster.build_bvh.unwrap;
let hit = raycaster.cast_ray;
assert!;
Debug Helpers
use ;
let mut lines = new;
lines.merge;
lines.merge;
lines.merge;
lines.validate.unwrap;
assert_eq!;
Texture And Camera
use ;
let pixels = vec!;
let mip_chain = generate.unwrap;
let texture = from_mips.unwrap;
let camera = new
.position
.target;
let ray = camera.screen_to_ray;
assert_eq!;
assert!;
Feature Flags
| Feature | Default | Description |
|---|---|---|
std |
yes | Enables standard-library conveniences for CPU crates. |
scene |
yes | Enables scenix-scene graph APIs from the facade crate. |
camera |
yes | Enables cameras, frustums, and controllers from the facade crate. |
mesh |
yes | Enables geometry and primitive APIs from the facade crate. |
material |
yes | Enables GPU-free material types and pipeline keys from the facade crate. |
light |
yes | Enables GPU-free light types, shadow config, and light probes from the facade crate. |
texture |
yes | Enables raw texture, sampler, atlas, video, and mipmap APIs from the facade crate. |
raycaster |
yes | Enables BVH scene picking and exact mesh ray intersection APIs. |
helpers |
yes | Enables debug LineGeometry helpers for grids, axes, bounds, cameras, lights, and skeletons. |
loader |
no | Enables optional scenix-loader asset loading APIs from the facade crate. |
renderer |
no | Enables optional scenix-renderer/wgpu APIs from the facade crate. |
post |
no | Enables optional scenix-post APIs and renderer post-stack integration. |
libm |
no | Uses libm for portable no_std trigonometry in scenix-math. |
serde |
no | Derives Serialize and Deserialize for public data types. |
approx |
no | Implements approx traits for math types. |
gpu |
no | Enables the GpuUpload trait in scenix-core. |
Workspace Layout
scenix/
├── crates/
│ ├── scenix-math/
│ ├── scenix-core/
│ ├── scenix-input/
│ ├── scenix-scene/
│ ├── scenix-camera/
│ ├── scenix-mesh/
│ ├── scenix-material/
│ ├── scenix-light/
│ ├── scenix-texture/
│ ├── scenix-loader/
│ ├── scenix-renderer/
│ ├── scenix-post/
│ ├── scenix-raycaster/
│ ├── scenix-helpers/
│ └── scenix/
├── examples/
│ ├── raycasting.rs
│ ├── helpers_demo.rs
│ ├── gltf_scene.rs
│ ├── post_processing.rs
│ ├── hello_cube.rs
│ ├── pbr_sphere.rs
│ ├── shadow_demo.rs
│ ├── textures_and_camera.rs
│ └── orbit_camera.rs
├── benches/
│ ├── loader_bench.rs
│ ├── post_bench.rs
│ ├── bvh_bench.rs
│ ├── helpers_bench.rs
│ └── render_bench.rs
├── ARCHITECTURE.md
├── ROADMAP.md
├── CHANGELOG.md
└── README.md
Running Checks
SCENIX_RUN_GPU_TESTS=1 WGPU_BACKEND=vulkan
RUSTDOCFLAGS="-D warnings"
Roadmap
The long-term design remains the full scenix workspace described in ARCHITECTURE.md. Version 0.8.0 adds CPU raycasting and debug helpers. The next milestone is v0.9.0 Integration.
See ROADMAP.md for the full versioned plan.
License
Licensed under either of:
at your option.