Expand description
Physics simulation and collision proxy generation for OxiHuman meshes.
This crate provides two distinct capabilities:
Collision proxies — a set of CapsuleProxy, SphereProxy, and
BoxProxy primitives assembled into a BodyProxies set that
approximates the humanoid body for use in external physics engines (Rapier,
PhysX, Bullet, etc.). The sampling sub-module fits capsules via PCA on
surface-sampled point clouds for higher accuracy.
Simulation subsystems — cloth (ClothSim), soft-body tetrahedra
(SoftBody), hair strands (HairSystem), aerodynamics (AeroConfig),
garment fitting (GarmentFitConfig), wind forces (WindConfig),
distance/bend/volume constraints (DistanceConstraint etc.), and a
contact solver (ContactSolverConfig).
§Example: generate body proxies
use oxihuman_physics::BodyProxies;
// proxies are normally produced by oxihuman_physics::rig::build_rig
let proxies = BodyProxies::new();
println!("total proxy count: {}", proxies.total_count());Re-exports§
pub use oxirs_adapter::BodyHandle;pub use oxirs_adapter::BodyRigMapper;pub use oxirs_adapter::ColliderShape;pub use oxirs_adapter::ContactPair as OxiRsContactPair;pub use oxirs_adapter::OxiRsConfig;pub use oxirs_adapter::OxiRsWorld;pub use oxirs_adapter::RayCastHit;pub use oxirs_adapter::RigidBodyDef;pub use cloth::ClothParticle;pub use cloth::ClothSim;pub use cloth::Spring;pub use cloth::SpringKind;pub use material::ClothMaterial;pub use material::ClothStack;pub use hair::HairConfig;pub use hair::HairStrand;pub use hair::HairSystem;pub use collision::aabb_aabb;pub use collision::aabb_plane;pub use collision::capsule_capsule;pub use collision::capsule_plane;pub use collision::capsule_sphere;pub use collision::closest_point_on_aabb;pub use collision::closest_point_on_segment;pub use collision::resolve_contact;pub use collision::sphere_aabb;pub use collision::sphere_plane;pub use collision::sphere_sphere;pub use collision::sq_dist_point_segment;pub use collision::Capsule;pub use collision::CollisionAabb;pub use collision::CollisionPlane;pub use collision::Contact;pub use collision::Sphere;pub use rig::build_rig;pub use rig::CapsuleChain;pub use rig::PhysicsRig;pub use rig::RigJoint;pub use constraint::apply_bend_constraint;pub use constraint::apply_distance_constraint;pub use constraint::apply_volume_constraint;pub use constraint::constraint_energy;pub use constraint::tet_volume;pub use constraint::BendConstraint;pub use constraint::ConstraintKind;pub use constraint::DistanceConstraint;pub use constraint::VolumeConstraint;pub use contact_solver::contact_energy;pub use contact_solver::detect_sphere_contacts;pub use contact_solver::resolve_contacts;pub use contact_solver::Contact as SolverContact;pub use contact_solver::ContactSolverConfig;pub use soft_body::build_tet_edges;pub use soft_body::make_cube_soft_body;pub use soft_body::SoftBody;pub use soft_body::Tetrahedron;pub use aerodynamics::apply_aero_to_particles;pub use aerodynamics::compute_aero_force;pub use aerodynamics::drag_force_magnitude;pub use aerodynamics::reynolds_number;pub use aerodynamics::stokes_drag;pub use aerodynamics::terminal_velocity;pub use aerodynamics::AeroConfig;pub use aerodynamics::AeroForce;pub use garment_fit::fit_garment_to_proxies;pub use garment_fit::garment_clearance_stats;pub use garment_fit::point_to_capsule_sdf;pub use garment_fit::point_to_sphere_sdf;pub use garment_fit::push_out_of_capsule;pub use garment_fit::spring_pull;pub use garment_fit::GarmentFitConfig;pub use garment_fit::GarmentFitResult;pub use garment_fit::GarmentVertex;pub use wind_force::apply_wind_to_cloth;pub use wind_force::dynamic_pressure;pub use wind_force::value_noise_3d;pub use wind_force::wind_force_on_face;pub use wind_force::wind_speed_beaufort;pub use wind_force::WindConfig;pub use wind_force::WindField;pub use wind_force::WindSample;pub use proxy_types::proxies_from_json;pub use proxy_types::proxies_to_json;pub use proxy_types::BodyProxies;pub use proxy_types::BoxProxy;pub use proxy_types::CapsuleProxy;pub use proxy_types::SphereProxy;pub use proxy_gen::generate_fitted_proxies;pub use proxy_gen::generate_proxies;pub use proxy_gen::proxies_from_measurements;pub use proxy_gen::voxelize_to_proxies;pub use proxy_gen::BODY_PART_BANDS;pub use modules_a::*;pub use modules_b::*;pub use modules_c::*;pub use modules_d::*;pub use modules_e::*;pub use modules_f::*;pub use modules_g::*;
Modules§
- aerodynamics
- Aerodynamic drag and lift forces for cloth and hair simulation.
- cloth
- Cloth spring-mass simulation using Verlet integration.
- collision
- Geometric collision detection and response for physics primitives.
- constraint
- XPBD (eXtended Position Based Dynamics) constraint types and solvers.
- contact_
solver - Iterative Gauss-Seidel contact resolution with Coulomb friction.
- garment_
fit - Garment fitting to a body proxy using SDF proximity constraints and iterative relaxation.
- garment_
fit_ v2 - Garment fitting pipeline v2.
- hair
- Hair strand simulation using Verlet integration with distance constraints.
- joint_
limits - Anatomical joint limit constraints.
- material
- Physical cloth material definitions and presets.
- modules_
a - Auto-generated module re-exports — do not edit directly.
- modules_
b - Auto-generated module re-exports — do not edit directly.
- modules_
c - Auto-generated module re-exports — do not edit directly.
- modules_
d - Auto-generated module re-exports — do not edit directly.
- modules_
e - Auto-generated module re-exports — do not edit directly.
- modules_
f - Auto-generated module re-exports — do not edit directly.
- modules_
g - Auto-generated module re-exports — do not edit directly.
- oxirs_
adapter - OxiRS simulation backend adapter.
- proxy_
gen - Proxy generation functions: measurement-based, PCA-fitted, and voxelized.
- proxy_
tests - Tests for proxy generation, JSON serialization, and voxelization.
- proxy_
types - Proxy primitive types and JSON serialization / deserialization.
- rig
- Skeleton rig adapter: hierarchy of joints linking body-part capsule proxies into a physics skeleton.
- sampling
- Surface-based vertex sampling for improved physics proxy fitting.
- sdf_gen
- Mesh-to-SDF (Signed Distance Field) generation.
- self_
collision - Self-collision detection for deformable meshes.
- self_
intersection - Mesh self-intersection detection and resolution.
- soft_
body - Tetrahedral soft body simulation using XPBD.
- soft_
body_ v2 - Soft-body simulation v2 with Finite Element Method (FEM).
- wind_
force - Turbulent wind field with Simplex-like value noise for vortex and gusting effects.