프로젝트 소개
BepuPhysics for Rust는 BepuPhysics v2의 라인별 번역으로, 저자는 이를 원래 C#으로 작성된 매우 고성능 물리 엔진이라고 설명합니다. 이 포트는 원래의 SIMD 최적화된 충돌 감지 및 제약 해결을 유지하고, 멀티스레딩을 위한 자동 작업 분배를 갖춘 락 없는 작업 스케줄링을 추가하며, Bevy 게임 엔진과의 선택적 통합을 제공합니다. 공간 쿼리 지원에는 필터링된 레이 캐스트와 모양 스윕이 포함됩니다.
빌드 요구 사항은 주목할 만합니다. 이 크레이트는 portable_simd 및 generic_const_exprs 기능을 사용하기 때문에 Rust nightly 1.95.0 이상이 필요하며, macOS(NEON SIMD) 또는 x86_64(SSE/AVX2)를 대상으로 합니다. 설치는 일반적인 Cargo 종속성이며, bevy 기능 플래그를 통해 플러그인을 활성화할 수 있습니다.
Bevy 경로는 시작하는 가장 간단한 방법으로 제시됩니다. BepuPhysicsPlugin은 기본 플러그인과 함께 추가되고, 중력은 리소스로 삽입되며, 바디는 컴포넌트로 생성됩니다. 여기에는 Dynamic, Static, Kinematic 바디를 위한 RigidBody 변형, 구, 직육면체, 캡슐, 원통을 위한 콜라이더, 그리고 질량, 마찰, 반발력, 선형 또는 각 운동량 감쇠를 위한 재료 속성이 포함됩니다. 속도 컴포넌트는 시뮬레이션과 양방향으로 동기화됩니다.
추가적인 튜닝 컴포넌트는 바디 로컬 축을 중심으로 한 회전 잠금(yaw를 자유롭게 하는 UPRIGHT 프리셋 및 모든 축을 잠그는 ALL 프리셋 포함), 표면 앞쪽으로 얼마나 멀리 접촉을 생성할지 제어하는 추측 마진, 슬립 임계값, 그리고 충돌 응답보다는 공간 쿼리 필터링에만 사용되는 쿼리 레이어 마스크를 다룹니다. 리소스에는 중력과 시뮬레이션의 시간 단계, 서브스텝, 스레드 수, 그리고 결정론을 설정하는 BepuConfig가 있으며, 후자는 리플레이 또는 네트워킹 시나리오를 위한 것입니다.
공간 쿼리는 BepuSpatialQuery 시스템 매개변수를 통해 노출되며, 이는 시뮬레이션을 공유 모드로 빌려 여러 쿼리 시스템이 병렬로 실행될 수 있도록 합니다. 스크래치 메모리는 시스템마다 할당되며, 쿼리는 물리 단계 설정 외부에서 스케줄링해야 합니다. API는 가장 가까운 적중 및 모든 적중 레이 캐스트, 그리고 모양 스윕을 다루며, QueryFilter는 엔티티 제외, 레이어 마스크, 그리고 정적 전용 또는 바디 전용 제한을 지원합니다. README는 스윕이 이미 접촉 상태에서 시작되는 경우를 위한 SweepResult::StartPenetrating 변형을 강조합니다. 이 경우 충돌 시간, 접촉점, 법선이 정의되지 않으므로, 포트는 이를 누락이나 적중과 별도로 유지하여 호출자가 이를 처리하도록 합니다. 엔티티 해석은 바디와 정적 핸들이 동일한 원시 값을 가질 수 있기 때문에, 콜라이더 이동성을 확인한 후 핸들을 사용하는 것으로 문서화되어 있습니다.
저장소에는 비, 탑, hello_physics와 같은 Bevy 예제가 포함되어 있으며, 디버그 빌드가 SIMD 최적화 없이 10~100배 느리기 때문에 릴리스 모드로 실행해야 한다고 강조합니다. 비교 벤치마크는 별도의 bepu-benchmarks 작업 공간 멤버에 있으며, 여기에는 Avian 비교와, 선택적인 csharp 기능을 통해 FFI를 통해 원본 C# BepuPhysics를 실행하는 동일한 장면이 포함되어 있습니다. 이 기능은 네이티브 종속성이 MSVC에서 링크되지 않기 때문에 선택 사항으로 유지됩니다. 이 프로젝트는 원본 BepuPhysics v2와 동일한 Apache 2.0 라이선스로 배포되며, Ross Nordby를 원본 저자로, Bevy 래퍼는 Avian 물리 엔진의 디자인에서 영감을 받았다고 설명합니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.