Sobre el proyecto

BepuPhysics para Rust es una traducción línea por línea de BepuPhysics v2, descrita por su autor como un motor de física de alto rendimiento originalmente escrito en C#. La versión portada conserva el enfoque original en detección de colisiones y resolución de restricciones optimizadas con SIMD, añade programación de tareas sin bloqueos con distribución automática de trabajo para multihilo, y ofrece integración opcional con el motor de juegos Bevy. Las consultas espaciales incluyen rayos filtrados y barridos de formas. Los requisitos de compilación son notables: el paquete requiere Rust nightly 1.95.0 o superior debido al uso de las características portable_simd y generic_const_exprs, y está orientado a macOS (NEON SIMD) o x86_64 (SSE/AVX2). La instalación se realiza como una dependencia normal de Cargo, con una bandera de característica bevy que activa el plugin. La vía de Bevy se presenta como la forma más sencilla de comenzar. Se añade un BepuPhysicsPlugin junto con los plugins por defecto, se inserta la gravedad como recurso, y se generan cuerpos con componentes: variantes RigidBody para cuerpos dinámicos, estáticos y cinemáticos; colisionadores para esferas, cuboides, cápsulas y cilindros; y propiedades de material para masa, fricción, restitución y amortiguamiento lineal o angular. Los componentes de velocidad se sincronizan bidireccionalmente con la simulación. Componentes adicionales de ajuste cubren rotación bloqueada sobre ejes locales del cuerpo (incluyendo un preset UPRIGHT que libera el yaw, y un preset ALL), márgenes especulativos que controlan cuán lejos por delante de una superficie se crean los contactos, umbrales de sueño y máscaras de capas de consulta utilizadas únicamente para filtrar consultas espaciales, no para la respuesta de colisión. Los recursos incluyen Gravity y un BepuConfig para el paso de tiempo, subpasos, número de hilos y determinismo, este último destinado a escenarios de reproducción o red. Las consultas espaciales se exponen mediante un parámetro de sistema BepuSpatialQuery que toma prestada la simulación en modo compartido, permitiendo que varios sistemas de consulta se ejecuten en paralelo, con memoria de trabajo asignada por sistema. Las consultas deben programarse fuera del conjunto de pasos de física. La API cubre rayos con hit más cercano y todos los hits, además de barridos de forma, con un QueryFilter que admite exclusión de entidades, máscaras de capas y restricciones solo para estáticos o solo para cuerpos. El README destaca la variante SweepResult::StartPenetrating para barridos que comienzan ya en contacto: como en ese caso no se define tiempo de impacto, punto de contacto ni normal, la versión portada la mantiene separada de un fallo o un acierto para que el llamador decida cómo manejarla. La resolución de entidades se documenta como un bifurcación basada en la movilidad colisionable antes de usar un identificador, ya que los identificadores de cuerpo y estático con el mismo valor bruto se refieren a objetos no relacionados. El repositorio incluye ejemplos de Bevy como rain, tower y hello_physics, y enfatiza que deben ejecutarse en modo release, ya que las compilaciones debug son de 10 a 100 veces más lentas sin optimizaciones SIMD. Los benchmarks de comparación viven en un miembro separado del workspace bepu-benchmarks para mantener fuera de la biblioteca sus dependencias pesadas y específicas de plataforma; incluyen una comparación con Avian y, detrás de una característica opcional csharp, la misma escena ejecutada contra la versión original C# de BepuPhysics mediante FFI. Esa característica se mantiene opcional porque su dependencia nativa falla al vincularse en MSVC. El proyecto está licenciado bajo Apache 2.0, igual que BepuPhysics v2 original, y agradece a Ross Nordby como autor original, describiendo el wrapper de Bevy como inspirado en el diseño del motor de física Avian.