3 पॉइंट द्वारा GN⁺ 2024-05-25 | 1 टिप्पणियां | WhatsApp पर शेयर करें

2D कठोर-पिंड टक्कर समाधान

समस्या की परिभाषा

  • Mario का बादलों पर पैर रखना से लेकर racing game में दो कारों के टकराने तक, टक्कर को संभालना ज़्यादातर video games का बहुत महत्वपूर्ण हिस्सा है।
  • इस blog series में हम physics simulation के असली गणित और physics पर बात करेंगे।
  • video games इन concepts को संदर्भ में समझाने और कम abstract बनाने का एक अच्छा तरीका हैं।

गणित पर एक बात

  • इस लेख में गणित काफ़ी आएगा, लेकिन हम सलाह देते हैं कि आप गणित से डरें नहीं।
  • mathematical notation जटिल दिख सकती है, लेकिन उसका ज़्यादातर हिस्सा साधारण arithmetic है।
  • गणित से घबराने के बजाय उसे समझने की कोशिश करने की सलाह दी जाती है।

शुरू करने से पहले

कठोर-पिंड

  • कठोर-पिंड physics ऐसी physics simulation है जो उन वस्तुओं से संबंधित है जो विकृत नहीं होतीं।
  • वास्तविक दुनिया में हर वस्तु molecular स्तर पर विकृत होती है, लेकिन simulation में इसे सरल बनाकर कठोर-पिंड माना जाता है।

टक्कर पता लगाना और टक्कर समाधान

  • टक्कर पता लगाना वह प्रक्रिया है जिसमें देखा जाता है कि scene में कौन-सी वस्तुएँ टकरा रही हैं।
  • टक्कर समाधान वह प्रक्रिया है जिसमें तय किया जाता है कि टकराने वाली वस्तुओं को कैसे चलना चाहिए।
  • इस blog series में हम collision resolution चरण पर ध्यान केंद्रित करेंगे।

हम क्या करने वाले हैं?

  • अधिकांश games एक बड़े loop के भीतर चलते हैं।
  • game loop की हर iteration में वस्तुओं की position उनकी current velocity के अनुसार update होती है।
  • velocity एक vector है जिसके पास magnitude और direction दोनों होते हैं।

वेग

  • velocity किसी निश्चित समय के दौरान वस्तु की position में बदलाव को दर्शाती है।
  • वस्तु की नई position, current velocity और time interval के गुणन से मिलने वाले displacement को जोड़कर निकाली जाती है।

टक्कर समाधान

  • collision resolution का लक्ष्य टक्कर के बाद वस्तुओं की velocity बदलना है ताकि वे एक-दूसरे के भीतर घुसी न रहें।
  • टक्कर के बाद की velocity को, टक्कर से पहले की velocity और टक्कर से होने वाले velocity change के योग के रूप में व्यक्त किया जा सकता है।

टक्कर क्या है?

  • यह जाँचने के लिए कि दो वस्तुएँ टक्कर में हैं या नहीं, दो शर्तें पूरी होनी चाहिए:
    1. वस्तुओं के geometric आकार संपर्क में हों या एक-दूसरे पर overlap कर रहे हों।
    2. वस्तुएँ अभी भी टक्कर की दिशा में बढ़ रही हों।

सतह normal

  • किसी वस्तु को सतह से सबसे अधिक दूर ले जाने के लिए उसे सतह के लंबवत दिशा में ले जाना चाहिए।
  • इस दिशा को normal direction कहा जाता है, और यह सतह के लंबवत होती है।

dot product

  • यह गणना करने के लिए कि दो vectors कितनी हद तक एक ही दिशा में इशारा करते हैं, dot product का उपयोग किया जाता है।
  • dot product को दो vectors के corresponding elements के गुणनफल के योग के रूप में परिभाषित किया जाता है।
  • dot product के sign से यह जाना जा सकता है कि दो vectors एक ही दिशा में हैं या विपरीत दिशा में।

निष्कर्ष

  • टक्कर तब होती है जब एक वस्तु का कोई बिंदु दूसरी वस्तु के किसी बिंदु के संपर्क में हो और relative normal velocity ऋणात्मक हो।
  • अगले लेख में हम टक्कर की वास्तविक physics पर चर्चा करेंगे।

GN⁺ की राय

  • physics simulation का महत्व: game development में physics simulation यथार्थवाद बढ़ाने वाला एक महत्वपूर्ण तत्व है।
  • गणित की भूमिका: गणित physics simulation का मूल है, और इसे समझने से बेहतर simulations बनाए जा सकते हैं।
  • collision resolution की जटिलता: collision resolution केवल वस्तुओं की position update करने से कहीं अधिक जटिल प्रक्रिया है।
  • शैक्षिक मूल्य: यह लेख physics simulation की बुनियाद समझने में बहुत मदद करता है।
  • अतिरिक्त अध्ययन: physics engine को स्वयं implement करना भी सीखने का अच्छा तरीका है। Box2D या Chipmunk जैसे open source physics engines का संदर्भ लिया जा सकता है।

1 टिप्पणियां

 
GN⁺ 2024-05-25
Hacker News राय

Hacker News टिप्पणियों का संक्षिप्त सार

  • Hey everyone, author here!

    • यह ब्लॉग सीरीज़ की पहली पोस्ट है, और इसका लक्ष्य ऐसे लोग हैं जो game developer नहीं हैं या जिनकी गणित की पृष्ठभूमि कमज़ोर है।
    • इसी वजह से इसमें concepts को विस्तार से समझाया गया है।
    • कोई भी सवाल हो तो हमेशा स्वागत है।
  • Oh! Look, a well-researched, deeply-explained, and interactive post.

    • domain name और ".ski" TLD देखकर लगा कि यह वही लेखक होंगे जिन्होंने दूसरी शानदार पोस्टें लिखी थीं, लेकिन यह कोई और निकले।
    • पोस्ट की quality उतनी ही बेहतरीन है।
    • ".ski" TLD का राज़ जानने की जिज्ञासा है।
  • One side project I am working on right now is a 2d space shooter I am developing with my son.

    • मैं अपने बेटे के साथ एक 2D space shooter game बना रहा हूँ।
    • game engine का इस्तेमाल किए बिना इसे खुद implement करने की कोशिश की, लेकिन collision detection में मुश्किलें आईं।
    • आखिरकार Box2D इस्तेमाल करने का फैसला किया।
    • 20 साल से ज़्यादा के development experience और गणित की पृष्ठभूमि होने के बावजूद, मैंने इस समस्या को कम करके आंका था, यह समझ आया।
  • I always enjoyed the explanation from the N game: N game tutorial

    • Flash के लोकप्रिय दिनों में N game की explanation पढ़ना हमेशा अच्छा लगता था।
  • I had fun building a TypeScript demo about this topic, involving balls that can bounce and collide. I learned a lot.

    • उछलने और टकराने वाली balls पर आधारित TypeScript demo बनाते हुए बहुत कुछ सीखा।
    • कोड
    • परिणाम/डेमो
  • This is great. This reminds me of Chris Hecker's Rigid Body Dynamics series from GDMag/Gamasutra that I read (checks watch) almost 30 years ago!

  • Collisions are violations of the pairwise non-intersection constraint between bodies.

    • collisions, bodies के बीच pairwise non-intersection constraint के उल्लंघन होते हैं।
    • collision force, इसी constraint का Lagrange multiplier है।
    • collision normal, constraint function का partial derivative है।
  • If you want to go further and go for rigid body dynamics and constraint, I found that series of blog post very useful: Toptal blog post

    • अगर आप rigid body dynamics और constraints में और आगे जाना चाहते हैं, तो यह blog post series काफ़ी उपयोगी लगी।
  • To dredge up a related oldie-but-goodie memory of blog posts: Gaffer on Games

    • इससे इस विषय से जुड़ी पुरानी लेकिन शानदार blog posts की याद ताज़ा हो गई।
    • Gaffer on Games
  • Guess this is a Shameless plug but I wrote an interesting program over 12 years ago using even then very old three Js which is not quite the metal but much less abstract than today's tools.

    • शायद यह थोड़ा shameless plug है, लेकिन मैंने 12 साल से भी पहले एक दिलचस्प program लिखा था, जिसमें उस समय भी काफ़ी पुराना three Js इस्तेमाल किया था; यह पूरी तरह low-level नहीं है, लेकिन आज के tools की तुलना में कहीं कम abstract है।
    • Busy Boxes