scenix
Italian: scenix - scene, the stage on which everything appears.
scenix v0.9.0 is the Integration release. It adds optional Animato 1.4.0 animation bridges and a browser/WASM renderer wrapper while keeping the default facade focused on CPU authoring, raycasting, and helper geometry.
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-animato: optional Animato 1.4.0 bridge for node, camera, PBR material, and skeleton pose animation.scenix-wasm: optional browser canvas renderer wrapper, DOM input mapping helpers, and generated-scene setup.scenix: facade crate re-exporting CPU APIs by default, loader APIs behindfeatures = ["loader"], GPU APIs behindfeatures = ["renderer", "post"], and integration APIs behindfeatures = ["animato", "wasm"].
Installation
Most users should start with the facade crate:
[]
= "0.9"
Enable CPU asset loading:
[]
= { = "0.9", = ["loader"] }
Enable GPU rendering and post-processing:
[]
= { = "0.9", = ["renderer", "post"] }
Enable Animato or browser integration:
[]
= { = "0.9", = ["animato"] }
= "0.9"
Use focused crates directly when you only need one layer:
[]
= "0.9"
= "0.9"
= "0.9"
= "0.9"
= "0.9"
= "0.9"
= "0.9"
= "0.9"
= "0.9"
= "0.9"
= "0.9"
= "0.9"
= "0.9"
= "0.9"
= "0.9"
= "0.9"
For no_std-capable CPU crates:
[]
= { = "0.9", = false, = ["libm"] }
= { = "0.9", = false }
= { = "0.9", = false }
= { = "0.9", = false }
= { = "0.9", = false }
= { = "0.9", = false }
= { = "0.9", = false }
= { = "0.9", = false }
= { = "0.9", = false }
= { = "0.9", = false }
= { = "0.9", = false }
scenix-loader, scenix-renderer, scenix-post, and scenix-wasm are std crates. scenix-animato is optional and bridges the animato = "1.4.0" facade crate.
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!;
Animato Integration
use BTreeMap;
use ;
let mut scene = new;
let node = scene.add;
let mut driver = new;
driver.add_node;
let camera_id = new;
let mut perspective = from;
let mut orthographic = new;
let mut cameras = CameraStores ;
let mut materials = from;
let mut skeletons = Vecnew;
driver.tick.unwrap;
assert_eq!;
WASM Viewer
use *;
pub async
The standalone example lives in examples/wasm_viewer and compiles with:
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. |
animato |
no | Enables optional Animato 1.4.0 animation bridge APIs. |
wasm |
no | Enables optional browser renderer wrapper and DOM input helpers. |
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-animato/
│ ├── scenix-wasm/
│ └── scenix/
├── examples/
│ ├── animato_integration.rs
│ ├── wasm_viewer/
│ ├── 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
│ ├── animato_bridge_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.9.0 adds Animato and browser integration. The next milestone is v1.0.0 Stable.
See ROADMAP.md for the full versioned plan.
License
Licensed under either of:
at your option.