Crate ozz_animation_rs

Source
Expand description

Ozz-animation-rs is a rust version skeletal animation library with cross-platform deterministic.

Ozz-animation-rs is based on ozz-animation library, an open source C++ 3d skeletal animation library and toolset. Ozz-animation-rs only implement ozz-animation’s runtime part. You should use this library with ozz-animation’s toolset.

In order to introduce cross-platform deterministic, ozz-animation-rs does not simply wrap ozz-animation’s runtime, but rewrite the full runtime library in rust. So it can be used in network game scenarios, such as lock-step networking synchronize.

use glam::Mat4;
use ozz_animation_rs::*;
use std::cell::RefCell;
use std::rc::Rc;

// Load resources
let skeleton = Rc::new(Skeleton::from_path("./resource/playback/skeleton.ozz").unwrap());
let animation = Rc::new(Animation::from_path("./resource/playback/animation.ozz").unwrap());

// Init sample job (Rc style)
let mut sample_job: SamplingJobRc = SamplingJob::default();
sample_job.set_animation(animation.clone());
sample_job.set_context(SamplingContext::new(animation.num_tracks()));
let sample_out = Rc::new(RefCell::new(vec![SoaTransform::default(); skeleton.num_soa_joints()]));
sample_job.set_output(sample_out.clone());

// Init local to model job (Ref style)
let mut l2m_job: LocalToModelJobRef = LocalToModelJob::default();
l2m_job.set_skeleton(&skeleton);
let sample_out_ref = sample_out.borrow();
l2m_job.set_input(sample_out_ref.as_ref());
let mut l2m_out = vec![Mat4::default(); skeleton.num_joints()];
l2m_job.set_output(&mut l2m_out);

// Run the jobs
let ratio = 0.5;

sample_job.set_ratio(ratio);
sample_job.run().unwrap();

l2m_job.run().unwrap();
l2m_out.buf().unwrap(); // Outputs here, are model-space matrices

Re-exports§

pub use animation::Animation;
pub use archive::Archive;
pub use archive::ArchiveRead;
pub use base::ozz_arc_buf;
pub use base::ozz_rc_buf;
pub use base::OzzArcBuf;
pub use base::OzzBuf;
pub use base::OzzError;
pub use base::OzzMutBuf;
pub use base::OzzObj;
pub use base::OzzRcBuf;
pub use base::SKELETON_MAX_JOINTS;
pub use base::SKELETON_MAX_SOA_JOINTS;
pub use base::SKELETON_NO_PARENT;
pub use blending_job::BlendingContext;
pub use blending_job::BlendingJob;
pub use blending_job::BlendingJobArc;
pub use blending_job::BlendingJobRc;
pub use blending_job::BlendingJobRef;
pub use blending_job::BlendingLayer;
pub use ik_aim_job::IKAimJob;
pub use ik_two_bone_job::IKTwoBoneJob;
pub use local_to_model_job::LocalToModelJob;
pub use local_to_model_job::LocalToModelJobArc;
pub use local_to_model_job::LocalToModelJobRc;
pub use local_to_model_job::LocalToModelJobRef;
pub use math::SoaQuat;
pub use math::SoaTransform;
pub use math::SoaVec3;
pub use sampling_job::InterpSoaFloat3;
pub use sampling_job::InterpSoaQuaternion;
pub use sampling_job::SamplingContext;
pub use sampling_job::SamplingJob;
pub use sampling_job::SamplingJobArc;
pub use sampling_job::SamplingJobRc;
pub use sampling_job::SamplingJobRef;
pub use skeleton::JointHashMap;
pub use skeleton::Skeleton;
pub use skinning_job::SkinningJob;
pub use skinning_job::SkinningJobArc;
pub use skinning_job::SkinningJobRc;
pub use skinning_job::SkinningJobRef;
pub use track::Track;
pub use track_sampling_job::TrackSamplingJob;
pub use track_sampling_job::TrackSamplingJobArc;
pub use track_sampling_job::TrackSamplingJobRc;
pub use track_sampling_job::TrackSamplingJobRef;
pub use track_triggering_job::Edge;
pub use track_triggering_job::TrackTriggeringJob;
pub use track_triggering_job::TrackTriggeringJobArc;
pub use track_triggering_job::TrackTriggeringJobRc;
pub use track_triggering_job::TrackTriggeringJobRef;

Modules§

animation
Animation data structure definition.
archive
Animation data structure definition.
base
Base types, traits and utils.
blending_job
Blending job.
ik_aim_job
Aim IK Job.
ik_two_bone_job
Two bone IK job.
local_to_model_job
Local to Model Job.
math
Math library for SIMD operations.
sampling_job
Sampling Job.
skeleton
Skeleton data structure definition.
skinning_job
Skinning Job.
track
Track data structure definition.
track_sampling_job
Track sampling job.
track_triggering_job
Track Triggering Job.