Skip to content

scenix v0.7.0

Choose a tag to compare

@github-actions github-actions released this 26 May 05:49
· 10 commits to main since this release
65f199a

scenix v0.7.0

Install

[dependencies]
scenix = { version = "0.7.0", features = ["loader", "renderer", "post"] }

Highlights

  • New optional scenix-loader crate for CPU-side glTF/GLB, OBJ/MTL, STL, PNG/JPEG/WebP, KTX2, HDR/EXR, and canonical path cache loading.
  • New optional scenix-post crate for a wgpu full-screen post stack with bloom, SSAO, tonemap, FXAA, TAA, SMAA, depth of field, fog, outline, and motion blur passes.
  • Renderer can now apply an optional post stack through Renderer::set_post_stack without changing the existing Renderer::render signature.
  • The facade crate still keeps CPU authoring features enabled by default; opt into loaders with features = ["loader"] and GPU post-processing with features = ["renderer", "post"].
  • Raycasting, debug helpers, WASM wrappers, and animato integration remain deferred to later milestones.

Crates published to crates.io

Crate Version Description
scenix-math 0.7.0 Custom no_std 3D math primitives
scenix-core 0.7.0 Shared IDs, colors, errors, and traits
scenix-input 0.7.0 Platform-agnostic input state types
scenix-scene 0.7.0 GPU-free scene graph and traversal APIs
scenix-camera 0.7.0 GPU-free cameras, frustums, and controllers
scenix-mesh 0.7.0 CPU-side geometry, primitive generation, instancing, and batching
scenix-material 0.7.0 GPU-free material descriptions and pipeline keys
scenix-light 0.7.0 GPU-free lights, shadow configuration, and light probes
scenix-texture 0.7.0 CPU-side texture data, samplers, atlases, and mipmaps
scenix-loader 0.7.0 CPU-side glTF, OBJ, STL, image, KTX2, HDR, and cache loaders
scenix-post 0.7.0 Optional wgpu post-processing stack and full-screen effects
scenix-renderer 0.7.0 Optional wgpu renderer, resource registries, targets, passes, and pipeline cache
scenix 0.7.0 Facade crate with optional loader, renderer, and post APIs

glTF + post-processing example

use scenix::{
    BloomConfig, FxaaConfig, GltfLoader, PerspectiveCamera, PostStack,
    Renderer, RendererConfig, ToneMapper, Vec3,
};

# async fn run() -> Result<(), scenix::ScenixError> {
let asset = GltfLoader::new().load_file("scene.gltf")?;
let mut renderer = Renderer::headless(RendererConfig::new(256, 256)).await?;
renderer.set_post_stack(Some(
    PostStack::new()
        .with_bloom(BloomConfig::default())
        .with_tonemap(ToneMapper::Aces)
        .with_fxaa(FxaaConfig::default()),
));

for (mesh_id, geometry) in &asset.meshes {
    renderer.register_mesh(*mesh_id, geometry)?;
}
for (material_id, material) in &asset.materials {
    renderer.register_pbr_material(*material_id, material)?;
}

let camera = PerspectiveCamera::new(60.0, 16.0 / 9.0, 0.1, 100.0)
    .position(Vec3::new(0.0, 0.0, 4.0))
    .target(Vec3::ZERO);
let stats = renderer.render(&asset.scene, &camera)?;

assert!(stats.visible_meshes > 0);
# Ok(())
# }

Verification

  • cargo test --workspace --all-features
  • cargo test -p scenix-math -p scenix-core -p scenix-input -p scenix-scene -p scenix-camera -p scenix-mesh -p scenix-material -p scenix-light -p scenix-texture --no-default-features
  • cargo test -p scenix-loader --all-features
  • SCENIX_RUN_GPU_TESTS=1 WGPU_BACKEND=vulkan cargo test -p scenix-renderer -p scenix-post --all-features
  • cargo clippy --workspace --all-features -- -D warnings
  • cargo fmt --check
  • cargo doc --workspace --all-features --no-deps
  • cargo publish --dry-run for every crate before publish