Scenix v1.3.0 Asset Pipeline
Scenix 1.3.0 turns scenix-loader into a production-oriented CPU asset pipeline while preserving explicit renderer-owned GPU upload.
Highlights
- Workspace crates are bumped to
1.3.0. - New
AssetPackage,AssetManager, dependency graph, diagnostics, async file loading, memory budget accounting, and hot-reload invalidation APIs. - New typed IDs:
AssetId,SkinId, andAnimationClipId. - New glTF package APIs:
load_package_file,load_package_bytes, andload_package_url. - glTF package imports now collect skins, skin attributes, morph targets, animation clip metadata, material extension metadata, texture transforms, variants, KTX2/BasisU notes, meshopt diagnostics, and Draco diagnostics.
- New exporter helpers for glTF summary JSON/GLB bytes, OBJ, STL, PLY, and scene JSON.
- New
RendererAssetExt::register_asset_packagefacade bridge for explicit package-to-renderer upload. - New examples:
asset_pipeline,asset_manager,export_scene,animation_import, andcompressed_assets.
Install
[dependencies]
scenix = "1.3"Asset pipeline:
[dependencies]
scenix = { version = "1.3", features = ["loader"] }Asset pipeline with renderer upload:
[dependencies]
scenix = { version = "1.3", features = ["loader", "renderer"] }Code Example
use scenix::{
AssetManager, PerspectiveCamera, Renderer, RendererAssetExt, RendererConfig, ScenixError, Vec3,
};
# async fn run() -> Result<(), ScenixError> {
let mut manager = AssetManager::new();
let package = manager.load_file("assets/robot.glb")?;
let mut renderer = Renderer::headless(RendererConfig::new(512, 512)).await?;
let uploaded = renderer.register_asset_package(&package)?;
let camera = PerspectiveCamera::new(50.0, 1.0, 0.1, 100.0)
.position(Vec3::new(0.0, 1.0, 4.0))
.target(Vec3::ZERO);
let stats = renderer.render(package.scene(), &camera)?;
println!("meshes={}, draws={}", uploaded.meshes, stats.visible_meshes);
# Ok(())
# }Supported Asset Matrix
| Format | Support |
|---|---|
| glTF / GLB | Full CPU import with v1.3 metadata sidecars |
| OBJ / MTL | Full geometry import and material texture metadata |
| STL | Full ASCII/binary triangle import |
| PNG / JPEG / WebP / TGA / TIFF / EXR | Texture decode through image |
| KTX2 / HDR | Partial texture/HDR metadata and supported raw formats |
| DDS / PLY / VOX / SVG / IES / LUT | Recognized with partial metadata/diagnostics |
| FBX / USD / USDZ / 3MF / VTK / Rhino / LDraw / fonts / UltraHDR | Diagnostic-only; use an external converter |
| Draco / meshopt glTF compression | Explicit diagnostics unless preprocessed |
Migration Notes
- Existing
GltfLoader::load_fileandGltfAssetusers keep working. - Use
GltfLoader::load_package_fileorAssetManager::load_filewhen you need v1.3 metadata, diagnostics, exporters, dependency tracking, or renderer upload helpers. AssetPackagestores morph targets, skins, animation clips, and material extension metadata as sidecars so stableGeometryandGltfAssetstruct literals remain compatible.RendererAssetExtis a convenience API; GPU ownership still belongs toRenderer.
Animato 1.6.0 Gate
This release is prepared for animato = "1.6.0", but crates.io currently reports Animato 1.5.0 as the latest published version. Do not publish the final crates.io release until animato 1.6.0 resolves cleanly with the existing std, tween, spring, and serde feature set.
Known Limitations
- Draco and meshopt decoding require external preprocessing in this release.
- FBX/USD/USDZ and other proprietary or broad interchange formats are diagnostic-only.
- Imported animation clips are metadata/keyframe sidecars; full clip mixer/action playback remains planned for the animation runtime milestone.
- Loader output remains CPU-side; GPU upload is explicit.
Links
- Website and demo:
https://aarambhdevhub.github.io/scenix/ - Documentation:
https://docs.rs/scenix - Crates:
https://crates.io/crates/scenix
What's Changed
- [codex] Add v1.3.0 asset pipeline by @aarambh-darshan in #14
Full Changelog: v1.2.0...v1.3.0