Skip to main content

Crate oxihuman_physics

Crate oxihuman_physics 

Source
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.