প্রকল্প সম্পর্কে
BepuPhysics for Rust হল BepuPhysics v2-এর লাইন-বাই-লাইন অনুবাদ, যা এর লেখক দ্বারা একটি অত্যন্ত উচ্চ-কর্মক্ষমতা সম্পন্ন পদার্থবিদ্যা ইঞ্জিন হিসেবে বর্ণনা করেছেন, যা মূলত C# এ লেখা হয়েছিল। এই পোর্টে মূলটির SIMD-অপ্টিমাইজড সংঘর্ষ সনাক্তকরণ এবং সীমাবদ্ধতা সমাধানের উপর জোর রাখা হয়েছে, মাল্টিথ্রেডিংয়ের জন্য স্বয়ংক্রিয় কাজের বন্টন সহ লক-মুক্ত টাস্ক শিডিউলিং যোগ করা হয়েছে, এবং Bevy গেম ইঞ্জিনের সাথে ঐচ্ছিক একীকরণ প্রদান করা হয়েছে। স্থানিক প্রশ্নগুলির মধ্যে ফিল্টার করা রে-কাস্ট এবং শেপ সুইপ অন্তর্ভুক্ত রয়েছে।
বিল্ডের প্রয়োজনীয়তাগুলি উল্লেখযোগ্য: এই ক্রেটটির জন্য Rust nightly 1.95.0 বা তার বেশি প্রয়োজন, কারণ এটি portable_simd এবং generic_const_exprs বৈশিষ্ট্যগুলি ব্যবহার করে, এবং এটি macOS (NEON SIMD) বা x86_64 (SSE/AVX2) লক্ষ্য করে। ইনস্টলেশন একটি সাধারণ Cargo নির্ভরতা, একটি bevy বৈশিষ্ট্য পতাকা প্লাগইনকে সক্ষম করে।
Bevy পথটি শুরু করার জন্য সবচেয়ে সহজ উপায় হিসেবে উপস্থাপন করা হয়েছে। একটি BepuPhysicsPlugin ডিফল্ট প্লাগইনগুলির পাশাপাশি যোগ করা হয়, মাধ্যাকর্ষণ একটি রিসোর্স হিসেবে সন্নিবেশ করা হয়, এবং বডিগুলি উপাদানগুলির সাথে স্পন করা হয়: Dynamic, Static এবং Kinematic বডিগুলির জন্য RigidBody ভ্যারিয়েন্ট; গোলক, কিউবয়েড, ক্যাপসুল এবং সিলিন্ডারের জন্য কোলাইডার; এবং ভর, ঘর্ষণ, প্রতিস্থাপন এবং রৈখিক বা কৌণিক ড্যাম্পিংয়ের জন্য উপাদান বৈশিষ্ট্য। বেগ উপাদানগুলি সিমুলেশনের সাথে দ্বিমুখী সিঙ্ক করে। অতিরিক্ত টিউনিং উপাদানগুলির মধ্যে বডি-স্থানীয় অক্ষগুলির চারপাশে লক করা ঘূর্ণন (একটি UPRIGHT প্রিসেট সহ যা ইয়-কে মুক্ত করে, এবং একটি ALL প্রিসেট), অনুমানমূলক মার্জিন যা নিয়ন্ত্রণ করে যে পৃষ্ঠের কতটা আগে যোগাযোগ তৈরি হয়, ঘুম thresholds, এবং স্থানিক প্রশ্নগুলি ফিল্টার করার জন্য ব্যবহৃত query layer masks অন্তর্ভুক্ত রয়েছে, সংঘর্ষের প্রতিক্রিয়া নয়। রিসোর্সগুলির মধ্যে রয়েছে Gravity এবং timestep, substeps, thread count এবং determinism-এর জন্য একটি BepuConfig, যা শেষোক্তটি রিপ্লে বা নেটওয়ার্কিং পরিস্থিতির জন্য intended।
স্থানিক প্রশ্নগুলি একটি BepuSpatialQuery সিস্টেম প্যারামিটারের মাধ্যমে প্রকাশ করা হয়, যা শেয়ার্ড মোডে সিমুলেশন ধার করে, যাতে বেশ কয়েকটি প্রশ্ন সিস্টেম সমান্তরালভাবে চলতে পারে, প্রতিটি সিস্টেমের জন্য স্ক্র্যাচ মেমরি বরাদ্দ করা হয়। প্রশ্নগুলি পদার্থবিদ্যা ধাপের সেটের বাইরে শিডিউল করা উচিত। API-তে closest-hit এবং all-hit রে-কাস্ট প্লাস শেপ সুইপ অন্তর্ভুক্ত রয়েছে, একটি QueryFilter সহ যা entity exclusion, layer masks, এবং statics-only বা bodies-only সীমাবদ্ধতা সমর্থন করে। README-তে একটি SweepResult::StartPenetrating ভ্যারিয়েন্ট হাইলাইট করা হয়েছে, যা সুইপগুলির জন্য যা ইতিমধ্যেই সংস্পর্শে শুরু হয়: যেহেতু সেই ক্ষেত্রে কোনো time of impact, contact point বা normal সংজ্ঞায়িত নয়, তাই পোর্টটি এটিকে miss বা hit থেকে আলাদা রাখে, যাতে কলকারীরা সিদ্ধান্ত নিতে পারে কীভাবে এটি পরিচালনা করতে হবে। entity resolution-এর জন্য নথিভুক্ত করা হয়েছে যে collidable mobility-এর উপর ভিত্তি করে ব্রাঞ্চিং করা উচিত, কারণ একই raw value সহ বডি এবং স্ট্যাটিক হ্যান্ডেলগুলি অপ্রাসঙ্গিক বস্তুগুলিকে নির্দেশ করে।
রিপজিটরিটি rain, tower এবং hello_physics-এর মতো Bevy উদাহরণগুলি সরবরাহ করে, এবং জোর দেয় যে এগুলি অবশ্যই রিলিজ মোডে চালানো উচিত, কারণ ডিবাগ বিল্ডগুলি SIMD অপ্টিমাইজেশন ছাড়াই 10 থেকে 100 গুণ ধীর। তুলনা বেঞ্চমার্কগুলি একটি পৃথক bepu-benchmarks workspace member-এ বাস করে, যাতে তাদের ভারী, প্ল্যাটফর্ম-নির্দিষ্ট নির্ভরতাগুলি লাইব্রেরি থেকে দূরে থাকে; এর মধ্যে Avian-এর সাথে একটি তুলনা এবং, একটি ঐচ্ছিক csharp বৈশিষ্ট্যের পিছনে, FFI-এর মাধ্যমে মূল C# BepuPhysics-এর বিরুদ্ধে একই দৃশ্য চালানো অন্তর্ভুক্ত রয়েছে। সেই বৈশিষ্ট্যটি ঐচ্ছিক রাখা হয়েছে, কারণ এর native dependency MSVC-তে লিঙ্ক করতে ব্যর্থ হয়। এই প্রকল্পটি Apache 2.0 লাইসেন্সের অধীনে রয়েছে, যা মূল BepuPhysics v2-এর সাথে মিলে যায়, এবং Ross Nordby-কে মূল লেখক হিসেবে কৃতিত্ব দেয়, যেখানে Bevy wrapper-কে Avian পদার্থবিদ্যা ইঞ্জিনের নকশা দ্বারা অনুপ্রাণিত হিসেবে বর্ণনা করা হয়েছে।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.