parametric 3d human (anny) model, view the demo.
- parametric 3dmm forward
- bevy plugin
- morphs, skeleton, skinning
- fitting
use bevy::prelude::*;
use bevy_burn_human::{BurnHumanAssets, BurnHumanInput, BurnHumanPlugin};
fn main() {
App::new()
.add_plugins((DefaultPlugins, BurnHumanPlugin::default()))
.add_systems(Startup, setup)
.run();
}
fn setup(
mut commands: Commands,
mut mats: ResMut<Assets<StandardMaterial>>,
assets: Res<BurnHumanAssets>,
) {
commands.spawn((
Camera3d::default(),
Transform::from_xyz(0.0, 1.5, 4.0).looking_at(Vec3::Y, Vec3::Y),
));
commands.spawn((
DirectionalLight::default(),
Transform::from_xyz(2.0, 4.0, 2.0).looking_at(Vec3::Y, Vec3::Y),
));
let n = assets.body.metadata().metadata.phenotype_labels.len();
commands.spawn((
BurnHumanInput {
phenotype_inputs: Some(vec![0.5; n]),
..default()
},
MeshMaterial3d(mats.add(StandardMaterial::default())),
));
}python tool/scripts/export_reference.py --output assets/model/fullbody_default.safetensors --seed 1234The exporter now writes a lighter neutral bundle (fullbody_default.safetensors + fullbody_default.meta.json) with the heavy blendshape tensors quantized to float16 and unused reference cases removed. Output is deterministic (seeded) and cached assets live under .cache/anny/.
Bevy loads the model through the asset server (native and wasm). Keep the files under assets/model/ so the asset path model/fullbody_default.meta.json resolves at runtime.
cargo run -p bevy_burn_humanmit or apache-2.0 (anny stays under its original license)