Skip to content

scenix v1.3.0

Latest

Choose a tag to compare

@github-actions github-actions released this 16 Jun 11:53
bbb6922

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, and AnimationClipId.
  • New glTF package APIs: load_package_file, load_package_bytes, and load_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_package facade bridge for explicit package-to-renderer upload.
  • New examples: asset_pipeline, asset_manager, export_scene, animation_import, and compressed_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_file and GltfAsset users keep working.
  • Use GltfLoader::load_package_file or AssetManager::load_file when you need v1.3 metadata, diagnostics, exporters, dependency tracking, or renderer upload helpers.
  • AssetPackage stores morph targets, skins, animation clips, and material extension metadata as sidecars so stable Geometry and GltfAsset struct literals remain compatible.
  • RendererAssetExt is a convenience API; GPU ownership still belongs to Renderer.

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

Full Changelog: v1.2.0...v1.3.0