Sobre o projeto
BepuPhysics for Rust é uma tradução linha por linha do BepuPhysics v2, descrito por seu autor como um motor de física de alto desempenho originalmente escrito em C#. O port mantém o foco original na detecção de colisão e resolução de restrições otimizadas por SIMD, adiciona agendamento de tarefas sem bloqueio com distribuição automática de trabalho para multithreading, e fornece integração opcional com o motor de jogo Bevy. O suporte a consultas espaciais inclui ray casts filtrados e sweeps de forma.
Os requisitos de construção são notáveis: o crate precisa do Rust nightly 1.95.0 ou mais recente porque usa os recursos portable_simd e generic_const_exprs, e é direcionado ao macOS (SIMD NEON) ou x86_64 (SSE/AVX2). A instalação é uma dependência normal do Cargo, com uma flag de recurso bevy habilitando o plugin.
O caminho Bevy é apresentado como a maneira mais simples de começar. Um BepuPhysicsPlugin é adicionado ao lado dos plugins padrão, a gravidade é inserida como um recurso, e os corpos são gerados com componentes: variantes RigidBody para corpos Dinâmicos, Estáticos e Cinemáticos; colliders para esferas, cuboides, cápsulas e cilindros; e propriedades de material para massa, fricção, restituição e amortecimento linear ou angular. Os componentes de velocidade são sincronizados bidirecionalmente com a simulação. Componentes de ajuste adicionais cobrem rotação bloqueada em torno de eixos locais do corpo (incluindo um preset UPRIGHT que libera o yaw, e um preset ALL), margens especulativas controlando o quão longe de uma superfície os contatos são criados, thresholds de sono, e máscaras de camada de consulta usadas apenas para filtrar consultas espaciais, não para resposta de colisão. Os recursos incluem Gravity e um BepepuConfig para timestep, substeps, contagem de threads e determinismo, este último destinado a cenários de replay ou networking.
As consultas espaciais são expostas por meio de um parâmetro de sistema BepuSpatialQuery que empresta a simulação em modo compartilhado, para que vários sistemas de consulta possam ser executados em paralelo, com memória scratch alocada por sistema. As consultas devem ser agendadas fora do conjunto de passos de física. A API cobre ray casts de hit mais próximo e all-hit, além de shape sweeps, com um QueryFilter suportando exclusão de entidade, máscaras de camada e restrições apenas a estáticos ou apenas a corpos. O README destaca uma variante SweepResult::StartPenetrating para sweeps que começam já em contato: porque nenhum tempo de impacto, ponto de contato ou normal é definido nesse caso, o port o mantém separado de um miss ou um hit, para que os chamadores possam decidir como lidar com isso. A resolução de entidade é documentada como ramificando na mobilidade do collidable antes de usar um handle, já que handles de corpo e estático com o mesmo valor bruto se referem a objetos não relacionados.
O repositório envia exemplos do Bevy, como rain, tower e hello_physics, e enfatiza que eles devem ser executados no modo release, porque as builds de debug são 10 a 100 vezes mais lentas sem otimizações SIMD. Benchmarks de comparação estão em um membro separado do workspace bepu-benchmarks, para que suas dependências pesadas e específicas de plataforma fiquem fora da biblioteca; esses incluem uma comparação com Avian e, atrás de um recurso csharp opcional, a mesma cena executada contra o BepuPhysics C# original por meio de FFI. Esse recurso é mantido opcional porque sua dependência nativa falha ao linkar no MSVC. O projeto é licenciado sob Apache 2.0, correspondendo ao BepuPhysics v2 original, e credita Ross Nordby como o autor original, com o wrapper Bevy descrito como inspirado no design do motor de física Avian.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.