প্রকল্প সম্পর্কে

godot-box3d হলো একটি GDExtension যা Box3D, Erin Catto-র 3D ফিজিক্স ইঞ্জিন, কে Godot 4-এ বিল্ট-ইন PhysicsServer3D-র ড্রপ-ইন বিকল্প হিসেবে সংযুক্ত করে। স্টক Godot ফিজিক্স নোডগুলো কাজ করতে থাকে: আপনার দৃশ্য (scene) নয়, বরং একটি প্রজেক্ট সেটিং পরিবর্তন করতে হয়। প্রকল্পটি প্রাথমিক ও পরীক্ষামূলক হিসেবে বর্ণিত, এবং Box3D নিজেই একটি তরুণ ইঞ্জিন। অনুপ্রেরণা: লেখক SurfsUp তৈরি করছেন, যা Godot-এ Source-ইঞ্জিনের "SkillSurf"-এর একটি পুনর্নির্মাণ। Surf ম্যাপগুলো দীর্ঘ অবতল trimesh র‍্যাম্প, উচ্চ-গতির কোণ এবং জ্যামিতির নিচে হেড সার্ফ দিয়ে ফিজিক্সকে চাপে ফেলে। Godot-এর বিল্ট-ইন ফিজিক্স এবং godot-jolt reportedly এর কিছু অংশে সমস্যায় পড়ে। Box3D-র উৎপত্তি Valve-এর Rubikon-lite থেকে, যা Source 2-এর ফিজিক্স ইঞ্জিন, তাই Rubikon-ধারার সলভার চেষ্টা করার মতো মনে হয়েছিল। Godot-এর PhysicsServer3D এবং Box3D-র মধ্যে সেতুটি godot-jolt-এর আর্কিটেকচার অনুসরণ করে। box3d-godot-এর সাথে তুলনা, Godot-এর জন্য আরেকটি Box3D বাইন্ডিং: box3d-godot Box3D-কে 14টি কাস্টম নোড হিসেবে Godot-এর ফিজিক্সের পাশাপাশি চালায়, অন্যদিকে এই প্রকল্পটি Godot-এর ফিজিক্সকে প্রতিস্থাপন করে। এর মানে স্টক নোড এবং বিদ্যমান অ্যাডনগুলো কাজ করতে থাকে, কিন্তু Box3D-একমাত্র বৈশিষ্ট্য যেমন বিস্ফোরণ, জাইরোস্কোপিক টর্ক, সলভার প্রোফাইলিং এবং অ্যাসিঙ্ক স্টেপিং PhysicsServer3D ইন্টারফেসের মাধ্যমে পাওয়া যায় না। box3d-godot আরও জয়েন্ট টাইপ (৮ বনাম ৩), একটি প্রকৃত হুইল কনস্ট্রেইন্ট এবং আরও প্ল্যাটফর্ম (Android, web) অফার করে, অন্যদিকে এই প্রকল্পটি heightfields এবং VehicleBody3D-কে raycast-এর মাধ্যমে সমর্থন করে। README-তে বলা হয়েছে এই প্রকল্পটি বর্তমানে জয়েন্ট টাইপ, ConeTwist এবং 6DOF, কোয়েরি ফলাফলে per-shape indices, প্রোফাইলিং এবং প্ল্যাটফর্মে box3d-godot-এর চেয়ে পিছিয়ে। কোনোটিকেই প্রোডাকশন-রেডি হিসেবে বর্ণনা করা হয়নি। যা কাজ করে: রিজিড, স্ট্যাটিক এবং কাইনেমেটিক বডি; শেপ যার মধ্যে box, sphere, capsule, cylinder, convex polygon, concave polygon (trimesh), heightmap এবং world boundary; overlap ইভেন্ট, gravity/damping ওভাররাইড, priority ordering এবং point gravity সহ area; direct space state কোয়েরি (ray casts, point এবং shape intersection, shape casts, collide_shape, rest_info); body_test_motion যাতে CharacterBody3D এবং move_and_slide() কাজ করে; প্রকৃত contact point, normal এবং impulse সহ contact monitoring; per-pair collision exception; pin, hinge এবং slider joint; একটি মাল্টিথ্রেডেড সলভার যা স্বয়ংক্রিয়ভাবে ফিজিক্যাল কোর শনাক্ত করে এবং worker_count ওভাররাইড সমর্থন করে, worker সংখ্যার উপর নির্ভর করে deterministic; এবং একটি টেস্ট প্রকল্প যাতে demo hub, deterministic benchmark এবং ১৯টি headless regression test রয়েছে। অবশিষ্ট কাজের মধ্যে রয়েছে separation ray shape, ConeTwist joint, Generic6DOFJoint3D (Box3D-তে per-axis lock/limit/motor constraint নেই, তাই বিশ্বস্ত ম্যাপিং সম্ভব নয়), SoftBody3D, কোয়েরি এবং contact ফলাফলে per-shape indices, solver profiling, macOS universal binary এবং notarization, আরও প্ল্যাটফর্ম ও আর্কিটেকচার, এবং performance benchmarking ও tuning। আচরণগত পার্থক্য নথিভুক্ত করা হয়েছে: Area3D trimesh বা heightmap বডি শনাক্ত করে না, কারণ Box3D concave shape ডিজাইন অনুসারে sensor visitor হিসেবে কাজ করতে পারে না; collide_shape() penetration depth ছাড়া contact point রিপোর্ট করে কারণ Box3D GJK প্রকাশ করে; shape query-এর জন্য একটি convex query shape প্রয়োজন; এবং friction ও restitution ভিন্নভাবে একত্রিত হয় (friction-এর জন্য sqrt(a*b), restitution-এর জন্য max(a,b), বনাম Godot-এর min(a,b) এবং clamped sum), তাই material পুনঃটিউনিং প্রয়োজন হতে পারে। README-তে একটি benchmark দৃশ্য রয়েছে যা একটি নির্দিষ্ট seed থেকে একটি নির্দিষ্ট lattice-এর উপর বক্স ফেলে যতক্ষণ না 4096 বডি বিদ্যমান হয়, Linux-এ Godot 4.7.2.rc দিয়ে চালানো। রিপোর্ট করা ফলাফল সেই নির্দিষ্ট ঘন-বক্স workload-এ 16.66 ms-এ বডি, median step, p95 step, peak step এবং memory-তে Box3D Physics-কে Jolt Physics, Godot Physics এবং Rapier3D-এর চেয়ে এগিয়ে রাখে। README স্পষ্টভাবে সতর্ক করে যে চারটি ব্যাকএন্ডই 4096 বডির অনেক আগেই বাজেট ছাড়িয়ে যায়, এটি overload-এর অধীনে degradation পরিমাপ করে, এবং একটি ঘন বক্স স্তূপ raycast, character controller বা joint সম্পর্কে কিছুই বলে না, তাই এটিকে র‍্যাঙ্কিং নয় বরং একটি সূচনা বিন্দু হিসেবে নেওয়া উচিত। প্রয়োজনীয়তা: Godot 4.3 বা নতুন (টেস্ট প্রকল্প 4.7 লক্ষ্য করে)। ইনস্টলেশন Releases থেকে addon zip-এর মাধ্যমে, addons/godot-box3d/ প্রকল্পে কপি করে, তারপর Project Settings → Physics → 3D → Physics Engine কে Box3D Physics-এ সেট করে পুনরায় চালু করা। সলভার ডিফল্টভাবে প্রতি ফিজিক্যাল কোরের জন্য একটি worker ব্যবহার করে, physics/box3d/worker_count দিয়ে ওভাররাইডযোগ্য। macOS-কে কাজ চলছে হিসেবে বর্ণনা করা হয়েছে: শুধুমাত্র Apple Silicon, notarized নয়, কম্পাইল করার বাইরে অপরীক্ষিত। Linux এবং Windows পরীক্ষিত প্ল্যাটফর্ম। বিল্ড CMake ব্যবহার করে, Linux থেকে Windows DLL ক্রস-কম্পাইল করার জন্য একটি MinGW-w64 toolchain ফাইল সহ। টেস্টিং একটি headless স্ক্রিপ্টের মাধ্যমে চলে যা এক্সটেনশন বিল্ড করে, নিবন্ধন করে, ব্যাকএন্ড লোড হয়েছে যাচাই করে এবং ১৯টি regression test চালায়, ব্যর্থতা বা লিক হওয়া Box3D RID-তে nonzero দিয়ে প্রস্থান করে। অবদান স্বাগত। MIT লাইসেন্স; Box3D MIT, এবং প্রকল্পটি godot-jolt থেকে কাঠামোগত অনুপ্রেরণা নেয়, যেটিও MIT।