alice-physics 2.0.0

Deterministic physics engine: 128-bit fixed-point rigid bodies with bit-exact, replayable results, typed observation and rollback for search and planning, plus FEM, CFD and 3D-print analysis modules
Documentation
# How each part can be used

_Generated by `scripts/integration_levels.py --write`; `--check` fails CI when this file is stale._
_Examples are not counted as integration._

### Modules by how they are used

A module is labelled with the level most of its public items have; items that reach a higher
level are listed next to the label (partly integrated). Examples do not count: an item that
only an example calls is *standalone*, usable from Rust but not wired into
`PhysicsWorld` or a binding. Step entry points: `step`, `step_n`, `step_parallel`, `step_with_bridge`.

| Level | Meaning | Modules |
|-------|---------|--------:|
| step | runs when `PhysicsWorld` steps | 24 |
| world API | used through another `PhysicsWorld` method | 13 |
| binding | reached only from the C ABI, Python or WebAssembly bindings | 2 |
| standalone | a Rust API that only examples call | 126 |
| unused | no caller outside tests | 0 |

| Module | Level | Items: step / world API / binding / standalone / unused | Reached from bindings |
|--------|-------|----------------------------------------------------------|-----------------------|
| `bvh` | step | 23 / 1 / 0 / 3 / 0 | C ABI, Python, WebAssembly |
| `collider` | step | 20 / 1 / 0 / 4 / 0 | C ABI, Python, WebAssembly |
| `cone` | step | 5 / 2 / 0 / 3 / 0 | C ABI, Python, WebAssembly |
| `contact_cache` | step | 11 / 2 / 0 / 11 / 0 | C ABI, Python, WebAssembly |
| `convex_mesh_builder` | step | 3 / 0 / 0 / 1 / 0 | C ABI, Python, WebAssembly |
| `cylinder` | step | 3 / 3 / 0 / 1 / 0 | C ABI, Python, WebAssembly |
| `dynamic_bvh` | step | 9 / 4 / 0 / 2 / 0 | C ABI, Python, WebAssembly |
| `error` | step | 1 / 0 / 0 / 0 / 0 | C ABI, Python, WebAssembly |
| `event` | step | 9 / 4 / 0 / 1 / 0 | C ABI, Python, WebAssembly |
| `force` | step | 6 / 0 / 0 / 2 / 0 | C ABI, Python, WebAssembly |
| `heightfield` | step | 6 / 0 / 1 / 3 / 0 | C ABI, Python, WebAssembly |
| `material` | step | 15 / 0 / 0 / 11 / 0 | C ABI, Python, WebAssembly |
| `math` | step | 66 / 13 / 0 / 17 / 0 | C ABI, Python, WebAssembly |
| `metric` | step | 5 / 3 / 0 / 5 / 0 | C ABI, Python, WebAssembly |
| `motor` | step | 10 / 5 / 0 / 1 / 0 | C ABI, Python, WebAssembly |
| `plane_collider` | step | 4 / 0 / 1 / 4 / 0 | C ABI, Python, WebAssembly |
| `sdf_collider` | step | 23 / 0 / 0 / 17 / 0 | C ABI, Python, WebAssembly |
| `shape_raycast` | step | 28 / 4 / 0 / 2 / 0 | C ABI, Python, WebAssembly |
| `sleeping` | step | 17 / 2 / 0 / 2 / 0 | C ABI, Python, WebAssembly |
| `static_collider` | step | 2 / 0 / 0 / 0 / 0 | C ABI, Python, WebAssembly |
| `torus` | step | 3 / 3 / 0 / 1 / 0 | C ABI, Python, WebAssembly |
| `trimesh` | step | 11 / 0 / 0 / 5 / 0 | C ABI, Python, WebAssembly |
| `wedge` | step | 6 / 2 / 0 / 0 / 0 | C ABI, Python, WebAssembly |
| `world_participant` | step | 37 / 23 / 0 / 28 / 0 | C ABI, Python, WebAssembly |
| `audio_physics` | world API | 0 / 9 / 0 / 7 / 0 | — |
| `contact_viz` | world API | 0 / 5 / 0 / 0 / 0 | — |
| `debug_render` | world API | 0 / 23 / 0 / 5 / 0 | — |
| `ellipsoid` | world API (step 3 of 7 items) | 3 / 4 / 0 / 0 / 0 | C ABI, Python, WebAssembly |
| `heatmap` | world API | 0 / 5 / 0 / 2 / 0 | — |
| `mass_properties` | world API | 0 / 8 / 0 / 1 / 0 | — |
| `rng` | world API | 0 / 6 / 0 / 6 / 0 | — |
| `sdf_ccd` | world API (step 2 of 6 items) | 2 / 4 / 0 / 0 / 0 | C ABI, Python, WebAssembly |
| `sensors` | world API | 0 / 19 / 0 / 11 / 0 | — |
| `shape` | world API (step 4 of 10 items) | 4 / 6 / 0 / 0 / 0 | C ABI, Python, WebAssembly |
| `solver` | world API (step 51 of 193 items) | 51 / 112 / 7 / 23 / 0 | C ABI, Python, WebAssembly |
| `world_character` | world API | 0 / 2 / 0 / 0 / 0 | — |
| `world_shape_query` | world API (step 3 of 7 items) | 3 / 4 / 0 / 0 / 0 | C ABI, Python, WebAssembly |
| `ffi` | binding | 0 / 0 / 0 / 0 / 0 | — |
| `netcode` | binding | 0 / 0 / 25 / 4 / 0 | Python |
| `acoustic_wave` | standalone | 0 / 0 / 0 / 6 / 0 | — |
| `aeroelasticity` | standalone | 0 / 0 / 0 / 5 / 0 | — |
| `analytics_bridge` | standalone | 0 / 0 / 0 / 14 / 0 | — |
| `animation_blend` | standalone | 0 / 0 / 0 / 22 / 0 | — |
| `anisotropic` | standalone | 0 / 0 / 0 / 11 / 0 | — |
| `anisotropic_friction` | standalone | 0 / 0 / 0 / 5 / 0 | — |
| `anomaly` | standalone | 0 / 0 / 0 / 54 / 0 | — |
| `articulation` | standalone | 0 / 0 / 0 / 17 / 0 | — |
| `atmosphere` | standalone | 0 / 0 / 0 / 7 / 0 | — |
| `beam_stress` | standalone | 0 / 0 / 0 / 18 / 0 | — |
| `bimaterial` | standalone | 0 / 0 / 0 / 9 / 0 | — |
| `box_collider` | standalone (step 3, world API 2 of 9 items) | 3 / 2 / 0 / 4 / 0 | C ABI, Python, WebAssembly |
| `bridging` | standalone | 0 / 0 / 0 / 9 / 0 | — |
| `buckling` | standalone | 0 / 0 / 0 / 11 / 0 | — |
| `buoyancy_zone` | standalone | 0 / 0 / 0 / 8 / 0 | — |
| `ccd` | standalone (step 2, world API 1 of 13 items) | 2 / 1 / 0 / 10 / 0 | C ABI, Python, WebAssembly |
| `cfd_solver` | standalone (step 1 of 41 items) | 1 / 0 / 0 / 40 / 0 | C ABI, Python, WebAssembly |
| `character` | standalone (world API 3 of 11 items) | 0 / 3 / 0 / 8 / 0 | — |
| `character_state` | standalone | 0 / 0 / 0 / 6 / 0 | — |
| `cloth` | standalone | 0 / 0 / 0 / 16 / 0 | — |
| `cloth_fluid` | standalone | 0 / 0 / 0 / 5 / 0 | — |
| `collision_mesh_gen` | standalone | 0 / 0 / 0 / 6 / 0 | — |
| `compound` | standalone (step 8, world API 2 of 21 items) | 8 / 2 / 0 / 11 / 0 | C ABI, Python, WebAssembly |
| `compressible` | standalone | 0 / 0 / 0 / 14 / 0 | — |
| `convex_decompose` | standalone | 0 / 0 / 0 / 3 / 0 | — |
| `coupled_field` | standalone | 0 / 0 / 0 / 43 / 0 | — |
| `coupled_iteration` | standalone | 0 / 0 / 0 / 24 / 2 | — |
| `coupling_medium` | standalone | 0 / 0 / 0 / 13 / 0 | — |
| `creep_longterm` | standalone | 0 / 0 / 0 / 9 / 1 | — |
| `crowd_force` | standalone | 0 / 0 / 0 / 24 / 0 | — |
| `cubic_elastic_fem` | standalone | 0 / 0 / 0 / 18 / 0 | — |
| `damping_rayleigh` | standalone | 0 / 0 / 0 / 5 / 0 | — |
| `db_bridge` | standalone | 0 / 0 / 0 / 9 / 0 | — |
| `deformable` | standalone | 0 / 0 / 0 / 9 / 0 | — |
| `dynamic_fem` | standalone | 0 / 0 / 0 / 9 / 0 | — |
| `electromagnetic` | standalone | 0 / 0 / 0 / 6 / 0 | — |
| `erosion` | standalone | 0 / 0 / 0 / 10 / 0 | — |
| `euler_fv` | standalone | 0 / 0 / 0 / 32 / 0 | — |
| `eulerian_grid` | standalone | 0 / 0 / 0 / 131 / 0 | — |
| `fatigue` | standalone | 0 / 0 / 0 / 15 / 0 | — |
| `filament_db` | standalone | 0 / 0 / 0 / 37 / 0 | — |
| `fillet_stress` | standalone | 0 / 0 / 0 / 5 / 0 | — |
| `filter` | standalone (step 3 of 18 items) | 3 / 0 / 0 / 15 / 0 | C ABI, Python, WebAssembly |
| `flow_viz` | standalone | 0 / 0 / 0 / 8 / 0 | — |
| `fluid` | standalone | 0 / 0 / 0 / 7 / 0 | — |
| `fluid_netcode` | standalone | 0 / 0 / 0 / 10 / 0 | — |
| `fracture` | standalone | 0 / 0 / 0 / 8 / 0 | — |
| `fsi_advanced` | standalone | 0 / 0 / 0 / 5 / 0 | — |
| `gpu_bridge` | standalone (step 1 of 3 items) | 1 / 0 / 0 / 2 / 0 | C ABI, Python, WebAssembly |
| `gpu_sdf` | standalone (step 2 of 23 items) | 2 / 0 / 0 / 21 / 0 | C ABI, Python, WebAssembly |
| `hyperelastic` | standalone | 0 / 0 / 0 / 18 / 0 | — |
| `ik_physics_bridge` | standalone | 0 / 0 / 0 / 7 / 0 | — |
| `interface_capture` | standalone | 0 / 0 / 0 / 4 / 0 | — |
| `interpolation` | standalone (step 1 of 19 items) | 1 / 0 / 0 / 18 / 0 | C ABI, Python, WebAssembly |
| `joint` | standalone (step 12, binding 5 of 40 items) | 12 / 0 / 5 / 23 / 0 | C ABI, Python, WebAssembly |
| `joint_extra` | standalone | 0 / 0 / 0 / 24 / 0 | — |
| `kepler` | standalone | 0 / 0 / 0 / 26 / 0 | — |
| `kinematic_loop` | standalone | 0 / 0 / 0 / 7 / 0 | — |
| `laminate` | standalone | 0 / 0 / 0 / 10 / 0 | — |
| `laminate_failure` | standalone | 0 / 0 / 0 / 14 / 0 | — |
| `layer_adhesion` | standalone | 0 / 0 / 0 / 8 / 0 | — |
| `lift_drag` | standalone | 0 / 0 / 0 / 12 / 0 | — |
| `linear_elastic_fem` | standalone (step 2 of 126 items) | 2 / 0 / 0 / 123 / 1 | C ABI, Python, WebAssembly |
| `linear_solver` | standalone | 0 / 0 / 0 / 40 / 0 | — |
| `math_util` | standalone | 0 / 0 / 0 / 5 / 0 | — |
| `maxwell_fdtd` | standalone | 0 / 0 / 0 / 44 / 0 | — |
| `modal` | standalone | 0 / 0 / 0 / 6 / 0 | — |
| `molecular_dynamics` | standalone | 0 / 0 / 0 / 37 / 0 | — |
| `multi_world` | standalone | 0 / 0 / 0 / 12 / 0 | — |
| `multiphase` | standalone | 0 / 0 / 0 / 16 / 0 | — |
| `nbody` | standalone | 0 / 0 / 0 / 14 / 0 | — |
| `netcode_prediction` | standalone | 0 / 0 / 0 / 13 / 0 | — |
| `neural` | standalone | 0 / 0 / 0 / 26 / 0 | — |
| `non_newtonian` | standalone | 0 / 0 / 0 / 14 / 0 | — |
| `pair_potential` | standalone | 0 / 0 / 0 / 23 / 0 | — |
| `particle` | standalone | 0 / 0 / 0 / 13 / 0 | — |
| `phase_change` | standalone | 0 / 0 / 0 / 8 / 0 | — |
| `physics2d` | standalone | 0 / 0 / 0 / 60 / 0 | — |
| `piezoelectric` | standalone | 0 / 0 / 0 / 8 / 0 | — |
| `pipeline` | standalone | 0 / 0 / 0 / 43 / 0 | — |
| `plastic` | standalone | 0 / 0 / 0 / 12 / 1 | — |
| `pressure` | standalone | 0 / 0 / 0 / 8 / 0 | — |
| `prestressed` | standalone | 0 / 0 / 0 / 7 / 0 | — |
| `print_orientation` | standalone | 0 / 0 / 0 / 13 / 0 | — |
| `print_pipeline_solver` | standalone | 0 / 0 / 0 / 4 / 0 | — |
| `privacy` | standalone (step 3 of 44 items) | 3 / 0 / 0 / 41 / 0 | C ABI, Python, WebAssembly |
| `profiling` | standalone | 0 / 0 / 0 / 28 / 0 | — |
| `quadratic_elastic_fem` | standalone | 0 / 0 / 0 / 14 / 0 | — |
| `query` | standalone | 0 / 0 / 0 / 12 / 0 | — |
| `ragdoll` | standalone | 0 / 0 / 0 / 10 / 0 | — |
| `raycast` | standalone (step 4, binding 2 of 16 items) | 4 / 0 / 2 / 10 / 0 | C ABI, Python, WebAssembly |
| `replay` | standalone | 0 / 0 / 0 / 17 / 0 | — |
| `rolling_contact` | standalone | 0 / 0 / 0 / 7 / 0 | — |
| `rope` | standalone | 0 / 0 / 0 / 13 / 0 | — |
| `rope_attach` | standalone | 0 / 0 / 0 / 6 / 0 | — |
| `rotor` | standalone | 0 / 0 / 0 / 15 / 0 | — |
| `scene_io` | standalone (binding 1 of 11 items) | 0 / 0 / 1 / 10 / 0 | Python, WebAssembly |
| `sdf_adaptive` | standalone | 0 / 0 / 0 / 10 / 0 | — |
| `sdf_character` | standalone (world API 7 of 16 items) | 0 / 7 / 0 / 9 / 0 | — |
| `sdf_destruction` | standalone | 0 / 0 / 0 / 17 / 0 | — |
| `sdf_fem_mesh` | standalone | 0 / 0 / 0 / 15 / 0 | — |
| `sdf_force` | standalone | 0 / 0 / 0 / 10 / 0 | — |
| `sdf_manifold` | standalone | 0 / 0 / 0 / 7 / 0 | — |
| `sdf_sph` | standalone | 0 / 0 / 0 / 16 / 0 | — |
| `sdf_wind_field` | standalone | 0 / 0 / 0 / 3 / 0 | — |
| `sim_field` | standalone | 0 / 0 / 0 / 24 / 0 | — |
| `sim_modifier` | standalone | 0 / 0 / 0 / 35 / 0 | — |
| `sketch` | standalone (step 1 of 70 items) | 1 / 0 / 0 / 69 / 0 | C ABI, Python, WebAssembly |
| `smoke_fire` | standalone | 0 / 0 / 0 / 7 / 0 | — |
| `soft_body_cut` | standalone | 0 / 0 / 0 / 4 / 0 | — |
| `spatial` | standalone | 0 / 0 / 0 / 7 / 0 | — |
| `spherical_terrain` | standalone (step 1 of 10 items) | 1 / 0 / 0 / 9 / 0 | C ABI, Python, WebAssembly |
| `structural_solver` | standalone | 0 / 0 / 0 / 13 / 0 | — |
| `support_volume` | standalone | 0 / 0 / 0 / 9 / 0 | — |
| `surface_tension_csf` | standalone | 0 / 0 / 0 / 8 / 0 | — |
| `thermal` | standalone | 0 / 0 / 0 / 8 / 0 | — |
| `thermal_stress` | standalone | 0 / 0 / 0 / 3 / 0 | — |
| `thin_wall` | standalone | 0 / 0 / 0 / 10 / 0 | — |
| `transient_thermal` | standalone | 0 / 0 / 0 / 18 / 0 | — |
| `turbulence` | standalone | 0 / 0 / 0 / 34 / 0 | — |
| `vehicle` | standalone | 0 / 0 / 0 / 11 / 0 | — |
| `vehicle_dynamics` | standalone | 0 / 0 / 0 / 83 / 0 | — |
| `vibration_wall` | standalone | 0 / 0 / 0 / 4 / 0 | — |
| `warp_risk` | standalone | 0 / 0 / 0 / 8 / 0 | — |
| `wave_ship` | standalone | 0 / 0 / 0 / 9 / 0 | — |
| `wind_zone` | standalone | 0 / 0 / 0 / 6 / 0 | — |

### C ABI (`--features ffi`)

`src/ffi.rs` exports 55 `extern "C"` functions. Which consumers declare or call each one:

| Consumer | Functions used | Missing |
|----------|---------------:|---------|
| C header | 55 / 55 | — |
| bindings header | 55 / 55 | — |
| Unity C# | 55 / 55 | — |
| Unreal Engine plugin | 43 / 55 | `alice_physics_body_apply_impulses_batch`, `alice_physics_body_get_info`, `alice_physics_body_get_position_fix128_raw`, `alice_physics_body_observe`, `alice_physics_world_cast_capsule`, `alice_physics_world_cast_ray`, `alice_physics_world_cast_sphere`, `alice_physics_world_create`, `alice_physics_world_get_positions_batch`, `alice_physics_world_get_velocities_batch`, `alice_physics_world_overlap_sphere`, `alice_physics_world_set_velocities_batch` |

Why the missing functions are not wrapped (`scripts/abi-consumer-gaps.txt`):

| Consumer | Function | Reason |
|----------|----------|--------|
| Unreal Engine plugin | `alice_physics_body_apply_impulses_batch` | raw double buffers are not a Blueprint type; C++ code calls the C ABI directly |
| Unreal Engine plugin | `alice_physics_body_get_info` | AliceBodyInfo has no Blueprint struct; C++ code in a project calls the C ABI directly |
| Unreal Engine plugin | `alice_physics_body_get_position_fix128_raw` | Blueprint has no 128-bit integer type; determinism checks call the C ABI from C++ |
| Unreal Engine plugin | `alice_physics_body_observe` | AliceBodyObservation has no Blueprint struct; C++ code calls the C ABI directly |
| Unreal Engine plugin | `alice_physics_world_cast_capsule` | the component exposes no query Blueprint functions yet; C++ code calls the C ABI directly |
| Unreal Engine plugin | `alice_physics_world_cast_ray` | the component exposes no query Blueprint functions yet; C++ code calls the C ABI directly |
| Unreal Engine plugin | `alice_physics_world_cast_sphere` | the component exposes no query Blueprint functions yet; C++ code calls the C ABI directly |
| Unreal Engine plugin | `alice_physics_world_create` | the component always creates its world with alice_physics_world_create_with_config (substeps and gravity from its properties) |
| Unreal Engine plugin | `alice_physics_world_get_positions_batch` | raw double buffers are not a Blueprint type; C++ code calls the C ABI directly |
| Unreal Engine plugin | `alice_physics_world_get_velocities_batch` | raw double buffers are not a Blueprint type; C++ code calls the C ABI directly |
| Unreal Engine plugin | `alice_physics_world_overlap_sphere` | a caller-sized AliceQueryTarget buffer is not a Blueprint type; C++ code calls the C ABI directly |
| Unreal Engine plugin | `alice_physics_world_set_velocities_batch` | raw double buffers are not a Blueprint type; C++ code calls the C ABI directly |