Box3D - ओपन सोर्स 3D physics engine जारी
(box2d.org)- गेम सर्वर पर बड़े पैमाने की 3D physics simulation को सीधे नियंत्रित करने की ज़रूरत बढ़ने के साथ, Box3D को Box2D परिवार के एक ओपन सोर्स 3D physics engine के रूप में जारी किया गया है
- इसकी संरचना Box2D के काफ़ी करीब है और इसमें C API, C17 source, sub-stepping solver, continuous collision, graph coloring, wide SIMD contact solver, और multithreading hooks शामिल हैं
- Unreal Engine के Chaos में gyroscopic torque, पेड़ों के गिरने, और बड़े पैमाने की broad-phase ज़रूरतों को संतुष्ट करना कठिन रहा — यही इसके विकास की सीधी पृष्ठभूमि बनी
- triangle mesh·height field·baked compound collision, double-आधारित large world, cross-platform determinism, और record/replay जैसी 3D गेम सुविधाएँ इसमें शामिल की गई हैं
- यह पहले से कई गेम और इंजनों में इस्तेमाल हो रहा है, लेकिन अभी भी alpha software है, और v0.1 tag के बाद v1.0 तक पहुँचने के लिए और testing तथा documentation की ज़रूरत है
Box3D की प्रकृति और मुख्य फीचर
- Box3D GitHub पर उपलब्ध एक ओपन सोर्स 3D physics engine है, और इसे Box2D की design को 3D गेम की ज़रूरतों के हिसाब से बढ़ाने वाले प्रोजेक्ट के रूप में देखा जा सकता है
- इसका core architecture लगभग Box2D जैसा ही है, और पूरी library का source C17 में लिखा गया है
- इंजन के मुख्य फीचर इस प्रकार हैं
-
C API
- sub-stepping solver
- continuous collision
- बड़े island के लिए graph coloring
- wide SIMD contact solver
- multithreading hooks
- optional internal scheduler
- position के लिए double का उपयोग करने वाला large world support
- cross-platform determinism
- record और replay
- 3D गेम के लिए जोड़े गए collision फीचर भी शामिल हैं
- triangle mesh collision
- height field collision
- baked compound collision
-
The Legend of California से पैदा हुई ज़रूरत
- Box3D के शुरुआती विकास का कारण Kintsugiyama में विकसित किया जा रहा The Legend of California था
- यह गेम Unreal Engine में बनाया जा रहा है, और प्रोजेक्ट की शुरुआत Unreal 5.0 से हुई थी
- Unreal के डिफ़ॉल्ट physics engine Chaos के साथ प्रयोग में कई सीमाएँ सामने आईं
- यह gyroscopic torque simulation को support नहीं करता था, इसलिए पतली वस्तुओं का angular velocity बनाए रखते हुए लंबे समय तक घूमना संभालना मुश्किल था
- डेवलपर ने 2015 GDC में physics engine में gyroscopic torque जोड़ने के लिए लगभग 10-लाइन का drop-in algorithm प्रस्तुत किया था
- Epic ने यह फीचर 2024 के अंत में Unreal Engine में जोड़ा
- इससे बड़ा मुद्दा survival गेम के मुख्य फीचर पेड़ काटना में सामने आया
- गिरते हुए पेड़ अनियमित ढंग से हिलते थे और स्क्रीन पर teleport हो जाते थे
- यह स्थिति एक बड़े capsule के smooth triangle mesh पर गिरने वाली simulation की थी, जिसे आसानी से संभाला जाना चाहिए था
- सर्वर पर सैकड़ों हज़ार entities मौजूद होने के कारण तेज़ broad-phase भी ज़रूरी था
- यह गेम का केंद्रीय हिस्सा था, इसलिए इसे middleware पर छोड़ना जोखिम भरा माना गया
- डेवलपर के पास broad-phase data structure का काफ़ी अनुभव था और वे इस पर GDC talks भी दे चुके थे
Rubikon-Lite से Box3D तक
- मौजूदा ओपन सोर्स physics engine Jolt का उपयोग भी विचार में था, लेकिन Dirk Gregorius ने Rubikon-Lite को fork करके ज़रूरत के अनुसार संशोधित करने का सुझाव दिया
- Dirk Gregorius वही physics programmer हैं जिन्होंने Half-Life: Alyx में इस्तेमाल हुआ custom physics engine Rubikon बनाया था, और वे Rubikon का hobby/home version बनाए रखते हैं
- जब Rubikon-Lite को सीधे Unreal से जोड़ा गया, तो gyroscopic torque काम करने लगा और पेड़ भी सही तरह गिरने लगे
- Unreal के physics engine को बदलने में कुछ shortcuts का उपयोग किया जा सका
- Blueprint के बजाय अपना scripting system इस्तेमाल किया गया
- Esoterica animation system को Unreal में port करके इस्तेमाल किया गया
- Box3D से सीधे जुड़ने वाला custom ECS इस्तेमाल किया गया
- Box2D v3.0 की optimization को Rubikon-Lite fork में लाने की कोशिश के दौरान 2D और 3D काम को यथासंभव समान रखना ज़रूरी हो गया
- Rubikon-Lite के लगभग सभी API, data structures, और algorithms को Box2D code से बदल दिया गया
- 2D और 3D के data structures का बड़ा हिस्सा spatial dimension से स्वतंत्र था
- समय के साथ Rubikon-Lite fork बदलकर Box3D बन गया
- अभी Box3D में convex hull generation और कुछ collision algorithms में Rubikon-Lite code बचा हुआ है
- बाकी हिस्सा Box2D code और Box3D के लिए नए code का है
- Valve की ओर Rubikon का विकास जारी है, और Dirk ने Box3D जैसी optimization नए engine Ragnarok में विकसित की है
custom physics engine के साथ गेम की ज़रूरतों के मुताबिक़ ढलना
- The Legend of California एक बड़े open world और server-authoritative संरचना वाला प्रोजेक्ट है
- गिरते हुए पेड़, ragdoll, voxel, saloon door, और tumbleweed — सबका simulation सर्वर पर होता है
- custom physics engine इस्तेमाल करने से फीचर और performance को गेम की ज़रूरतों के अनुसार सीधे समायोजित किया जा सकता है
- performance work का बड़ा हिस्सा खासकर गिरते हुए पेड़ों पर किया गया
- विशाल redwood पेड़ voxel terrain पर तेज़ी से गिरते हैं
- mesh collision और CCD को स्थिर रूप से चलाना एक बड़ा काम था
- voxel system के लिए collision mesh भी runtime पर तेज़ी से बनाना ज़रूरी था
- voxel grid-based होने के कारण median split के लिए अच्छी तरह उपयुक्त थे
- streaming भी एक महत्वपूर्ण ज़रूरत थी
- stronghold को kitbashing से बनाया गया था
- बड़े stronghold में लगभग 50,000 अलग collision mesh हो सकते हैं
- इन्हें physics engine में एक-एक करके load करना अक्षम था और बहुत memory लेता था
- अलग collision shapes को optimized data structure में पकाकर एक single uber shape के रूप में load करने के लिए compound collision system बनाया गया
- इस तरीके से हज़ारों body और shape बनाने का overhead हट गया
इसे open source करने का कारण और लक्षित उपयोगकर्ता
- डेवलपर 2004 से गेम के लिए physics engine बना रहे हैं, और हर नौकरी बदलने पर उन्हें वह काम पीछे छोड़ना पड़ता था
- Box2D को कुछ हद तक इसीलिए बनाया गया था कि ज्ञान और मेहनत को open source project के रूप में संचित किया जा सके और आगे के काम की नींव बने
- 3D क्षेत्र में इसी तरह का काम बार-बार दोहराने का बोझ बना हुआ था
- Kintsugiyama ने Box3D को open source के रूप में जारी करने और उस पर काम को नौकरी का हिस्सा मानने की अनुमति दी
- Box3D दूसरे physics engines से प्रतिस्पर्धा करने वाला प्रोजेक्ट नहीं है; लेकिन जिन्हें Box2D की design पसंद है, उनके लिए Box3D भी बहुत उपयुक्त हो सकता है
शुरुआत कैसे करें और documentation
- Box3D के साथ शुरुआत करने के लिए git और CMake इंस्टॉल करने के बाद Box3D repository को clone करना होगा
- build करने का तरीका README में दिया गया है
- build के बाद samples चलाकर फीचर देखे जा सकते हैं, और sample code से coding शुरू की जा सकती है
- engine headers में पूरा Doxygen documentation comments के रूप में मौजूद है, और लिखित manual अभी प्रगति पर है
- hosted documentation उपलब्ध है
- न्यूनतम example code HelloWorld test में देखा जा सकता है
मौजूदा उपयोग और आगे की योजना
- Box3D, The Legend of California के अलावा भी कई जगह पहले से उपयोग में है
- s&box: Facepunch Studios का game platform
- Esoterica: Bobby Anguelov के नेतृत्व वाला open source game engine
- A 1000-player space game: Glenn Fiedler का multiplayer game
- कई गेमों में उपयोग के बावजूद Box3D को अभी भी alpha software माना जाता है
- जल्द ही v0.1 tag बनाया जाएगा और उसके बाद v1.0 release तक आगे बढ़ने की योजना है
- और testing तथा बेहतर documentation की ज़रूरत है, लेकिन feature set पहले से ही अच्छी स्थिति में है
- जिन कामों पर विचार चल रहा है, वे हैं
- character movement फीचर को मज़बूत करना
- ghost collision mitigation में सुधार
- optimization
- joint solver में सुधार
- उम्मीद है कि Box2D के साथ Box3D को भी अनिश्चितकाल तक support किया जाएगा
- mature stage पर पहुँचने के बाद feature work से कुछ समय का विराम लिया जा सकता है
- Box2D के विपरीत, Box3D के लिए pull request स्वीकार किए जाने की संभावना है, और CLA का उपयोग भी हो सकता है
- Box3D के लिए अलग website या Discord server नहीं बनाया जाएगा
- updates Box2D site पर दिए जाएँगे
- चर्चा Box2D Discord server में होगी
- Box3D को The Legend of California में काम करते हुए देखने के लिए home page और Steam पर follow किया जा सकता है
1 टिप्पणियां
Hacker News की राय
जब भी Box2D का ज़िक्र होता है, तो उसी लेखक की Box3D लाइब्रेरी वाला स्वाभाविक कनेक्शन याद आता है, साथ ही एक पुरानी कहानी भी
https://kotaku.com/this-guy-created-angry-birds-physics-and-...
Vesterbacka ने जवाब दिया, “event खत्म होने के बाद मुझसे मिलिए,” और शायद उसी समय Erin को hoodie मिली होगी. कहा जाता है कि उसके तुरंत बाद credits में उनका नाम जोड़ दिया गया
सबको हैरानी इस बात पर हुई कि marketing वाला व्यक्ति जानता था कि कौन-सा physics engine इस्तेमाल हुआ है
Box2D कभी physics-based indie games की बुनियाद हुआ करता था
सोच रहा हूं कि क्या आज का माहौल इतना खाली है कि उसके फिर से उभरने की गुंजाइश हो
इतनी छोटी और सीमित list में नया entry जुड़ना हमेशा स्वागत योग्य है
Box2D और अब Box3D का C API सच में काम करने के लिए बहुत अच्छा है
यह वाकई बहुत अच्छी खबर है. Erin Catto एक बेहतरीन hacker हैं, और open source community के साथ code share करने के लिए उनका धन्यवाद
announcement में determinism की बात नहीं थी, लेकिन उस हिस्से के बारे में और देखना चाहूंगा. Unity की built-in physics से network billiards game बनाने की कोशिश करें, तो clients आपस में इस बात पर सहमत नहीं हो पाते कि हुआ क्या था, और यह काफी सिरदर्द बन जाता है
documentation के मुताबिक
-ffast-mathsupport नहीं है, तो शायद cross-platform determinism का इरादा हो सकता है: https://box2d.org/documentation3d/recording.htmlEdit:
ffast-mathके बारे में meaning स्पष्ट कियाMachine learning researcher के तौर पर Box2D मेरे लिए reinforcement learning environments की वजह से परिचित है. OpenAI Gym में Lunar Lander या Car Racing जैसे standard benchmark environments को support करने वाली नींव यही है
https://gymnasium.farama.org/environments/box2d/car_racing/
Physics simulation एक खतरनाक rabbit hole है. केवल rigid bodies और physically plausible motion पर focus करें, तब भी collision detection और collision resolution में बहुत-से खुले problems हैं
geometry के लिए convex approximation या decomposition इस्तेमाल करना, solver को हाथ से tune करना आम है, और robustness व precision को speed के साथ लगातार trade off करना पड़ता है
मैं इसका सच में इंतजार कर रहा था. पहले Box2D से मुझे काफी सफलता मिली थी, और F/OSS में यह निश्चित रूप से top-tier कामों में से है
Box3D-based Spectre VR? यह तो पक्का आएगा लगता है. इसमें Tanarus वाली feel भी है
Edit: Legend of California demo (Unreal Engine based) में recording और playback पर switch होने वाला हिस्सा काफी अचानक छलांग जैसा दिखता है. शुरुआत में थोड़ा basic लगे तो भी demo video के कम से कम 18-minute mark तक जरूर देखें. यह काफी rough तरीके से दिलचस्प हो जाता है, और recording व playback features शानदार हैं
Rapier, और उससे पहले Cannon और Ammo के बारे में थोड़ा जानता हूं; उत्सुक हूं कि Box3D उनसे कैसे compare होता है
वैसे कुछ हफ्ते पहले मैंने खुद 3D space के लिए एक physics engine बनाया था और यहां भी share किया था. सच कहूं तो वह बस एक single line है जो fixed intervals पर objects को नीचे ले जाती है, लेकिन वह पहले से ही हैरान करने लायक अच्छा काम करती है. learning point of view से यह सच में मजेदार है, इसलिए इसे आज़माने की सलाह दूंगा
कुछ दिन पहले से Jolt का इस्तेमाल करके browser के लिए Tron-style 3D game बनाना शुरू किया था, और अब यह देखना मजेदार संयोग है. अब तक Jolt काफी अच्छी तरह काम कर रहा है, लेकिन इसे भी जरूर देखूंगा
1 - यह domain मेरे पास कई सालों से था: https://lightcycles.io
सोच रहा हूं कि Jolt से इसकी तुलना कैसी होगी. दोनों का track record अच्छा दिखता है—एक तरफ Valve और Erin Catto वाली side है, और दूसरी तरफ Horizon games में इस्तेमाल हुआ engine
“Valve की तरफ Rubikon का development जारी है, और Dirk ने Box3D जैसी optimizations नए engine Ragnarok में develop की हैं. भविष्य के Valve games में आप इसे देखेंगे.”
एक मिनट…
Box3D
3D
3
उम्मीद!