2 ডি পদার্থবিজ্ঞানের ইঞ্জিনে, যখন অবজেক্টগুলি বিশ্রামে আসে তখন আমি কীভাবে অকেজো সংঘর্ষের রেজোলিউশনগুলি এড়াতে পারি?


9

একটি পদার্থবিজ্ঞানের ইঞ্জিনে আমি লাভ -2 ডি ব্যবহার করে (শেখার জন্য) বিকাশ করছি , আমি সংঘর্ষের রেজোলিউশনগুলি এভাবে প্রয়োগ করেছি:

FixedUpdate(dt)  // I use fixed timestep
 foreach collide c1 in allNotStaticColliders
   c1.integartePhysic // i.e. apply gravitational force..
   foreach collider c2 "near" c1 // "near"= I use spatial hashing 
      if collide(c1,c2)
        resolve collision (c1,c2)  // the heavy operation
        collison callbacks c1
        collison callbacks c2
        ...

পড়ে থাকা এবং স্টপ স্থির করার জন্য অ্যানিমেশন

আপনি জিআইএফ অ্যানিমেশনটির শেষে দেখতে পাচ্ছেন, যখন সমস্ত সংঘর্ষকারীরা প্রায় কোনও স্ট্যাটিক অবজেক্টের উপর ভিত্তি করে থাকে তখন একটি এফপিএস ক্ষয় হয়।

2 এফপিএস সহ চূড়ান্ত স্থির অবস্থা state

এটি কারণ সংঘর্ষের রেজোলিউশনের সংখ্যা বৃদ্ধি পায় যখন বস্তুগুলি স্থির হওয়ার সাথে সাথে স্পর্শ করতে আরও বেশি সময় ব্যয় করে। যাইহোক, অনেকগুলি গণনা "বেহুদা" কারণ বস্তুগুলি ইতিমধ্যে একে অপরের বিরুদ্ধে স্থিতিশীল অবস্থানগুলিতে বসেছে।

এই "অকেজো" সংঘর্ষ সনাক্তকরণগুলি এড়াতে সেরা অনুশীলন (আশা করি কোনও পদার্থবিজ্ঞানের ডিগ্রির প্রয়োজন নেই) কী?

সম্পাদনা করুন: স্বীকৃত ডিএমগ্রিগরি ইঙ্গিতগুলি এবং এই ফলাফলটিতে আসুন (এখনও অনুকূল নয়)

এখানে চিত্র বর্ণনা লিখুন

(লাল = স্থির, নীল = সক্রিয়, সবুজ = ঘুমন্ত)


1
স্বাভাবিক পদ্ধতি হ'ল "ঘুম" অবজেক্টগুলি যা বিশ্রামে আসে এবং ঘুমন্ত / স্থির বস্তুগুলির মধ্যে মিথস্ক্রিয়াকে বিবেচনা না করে (তবে একটি ঘুমন্ত বস্তু এখনও জাগ্রত এবং চলমান একটি গতিশীল অবজেক্টের সাথে মিথস্ক্রিয়া দ্বারা জাগ্রত হতে পারে)। দুর্ভাগ্যক্রমে এটি কেবল তখনই সহায়তা করে যখন কোনও বস্তু পুরোপুরি বিশ্রামে থাকে। যদি আমি আপনার উদাহরণটি সঠিকভাবে পড়ছি তবে মনে হচ্ছে আপনার কাজকর্মের সমস্যাগুলি শুরু হয় যখন অবজেক্টগুলি এখনও স্থির হয় এবং কিছুটা সামান্য চলে। আমি এখানে যা করতে চাই তা হ'ল সিস্টেমে আরও ঘর্ষণ / স্যাঁতসেঁতে যোগ করা (সম্ভবত একটি বেগের প্রান্তের সাথে) যাতে ছোট চলাচলগুলি সত্যিকারের বিশ্রামে দ্রুত ক্ষয় হয়।
ডিএমগ্রিগরি

@ ডিএমজি গ্রেগরী এটি একটি ভাল উত্তর বলে মনে হচ্ছে। এটি যোগ করবেন?
আনকো

উত্তর:


9

আমি সন্দেহ করি যে ওপি ইতিমধ্যে এই পদ্ধতিটি জানত তাই আমি মন্তব্যে এটি কেবল একটি সূচনা পয়েন্ট হিসাবে উল্লেখ করেছি, তবে আমি আরও কিছুটা চেষ্টা করার চেষ্টা করব ...

বেশিরভাগ পদার্থবিজ্ঞানের ইঞ্জিনগুলি গতিশীল বস্তুকে দুটি গ্রুপে বিভক্ত করে, " জাগ্রত " এবং " ঘুমন্ত

বস্তুগুলি যখন তারা বিশ্রামে বসে তখন ঘুমায় এবং বাইরের কোনও প্রভাব দ্বারা স্থানান্তরিত বা ত্বরান্বিত হওয়ার পরে জাগ্রত হয়।

একটি ঘুম বস্তু বেশিরভাগ ক্ষেত্রে স্থির বস্তুর মতো আচরণ করে - এর চলন সময়ের সাথে সংহত হয় না (কারণ এটি বিশ্রামে রয়েছে, সুতরাং এর কোনও গতিবিধি নেই) এবং ইঞ্জিন ঘুমন্ত বা স্থির থাকা বস্তুর মধ্যে সংঘর্ষকে উপেক্ষা করে।

স্থির মেঝেতে বসে থাকা একটি ঘুমন্ত বস্তুর সংঘর্ষের প্রতিক্রিয়ার অভাব সত্ত্বেও এর মধ্য দিয়ে পড়ে না, কারণ সমস্ত গতিবিধি একীকরণ মাধ্যাকর্ষণ সহ ঘুমন্ত বস্তুগুলির জন্য বাদ যায়।

সুতরাং, কমপক্ষে একটি জাগ্রত গতিশীল অবজেক্টের সাথে জড়িত সংঘর্ষগুলি পরীক্ষা করা দরকার:

Collisions    Static          Sleeping           Awake
          ------------------------------------------------
Awake     |    Check        Check & Wake         Check
Sleeping  |     No               No
Static    |     No

এটি নাটকীয়ভাবে অ্যাক্টিভ সিমুলেশন প্রয়োজন এমন বস্তুর সংখ্যা হ্রাস করতে পারে, বিশেষত প্রশ্নগুলির মধ্যে বর্ণিত পাইলসগুলিতে নেট থেকে চলাচল করতে না পারার জন্য অনেকগুলি পারস্পরিক সংঘর্ষের ঘটনা ঘটে।

ঘুমানো কেবলমাত্র একবারে বস্তুগুলিকে আসলে সহায়তা করে বিশ্রামে পৌঁছায় , এতে কিছুক্ষণ সময় লাগতে পারে।

শিগগির বিশ্রামে পৌঁছানোর জন্য আপনি কিছু কিছু করতে পারেন:

  • একটি ননজারো ন্যূনতম গতি বা গতি থাকুন এবং এর নিচে শূন্যে নেমে আসা যে কোনও কিছুকে ক্ল্যাম্প করুন। (এটি মূলত একটি এপসিলন যা সাধারণত ফ্লোটের তুলনায় ব্যবহৃত হয়)

  • সিস্টেমের বাইরে শক্তি স্যুপ করার জন্য ঘর্ষণ, স্যাঁতসেঁতে এবং আনলাস্টিক সংঘর্ষগুলি ব্যবহার করুন এবং এটি সামগ্রিকভাবে দ্রুত বিশ্রামে পৌঁছাতে সহায়তা করুন।

  • ধীরে ধীরে চলমান বস্তুগুলিকে আরও শক্তিশালী সংস্থার আচরণকে প্রভাবিত না করে বিশ্রামের চূড়ান্ত ঠাণ্ডা দেওয়ার জন্য বেছে বেছে ঘর্ষণ / স্যাঁতসেঁতে / অস্বচ্ছলতা বাড়ান ।


ভাল উত্তর. আপনি ভাল ধারণাগুলির একটি উত্সাহিত করেছেন the ঘুম / জাগ্রত চেকগুলির জন্য আমি দুর্বল পয়েন্টগুলি দেখতে পাচ্ছি: 1) যদি ঘুমন্ত অবজেক্ট ও 2 এর নীচে ঘুমন্ত অবজেক্টটি ও 2 থেকে দূরে সরে যায় তবে এটি ও 2 জেগে না; 2) যদি আমি একটি ঘুমন্ত বস্তুর অধীনে একটি স্থির প্ল্যাটফর্ম সরিয়ে ফেলি, তবে সেই বস্তুটি জাগবে না (মহাকর্ষ বলের অধীনে)
dnkron.vs.drones

1
@ dnkdrone.vs.drones ভাল পর্যবেক্ষণ। নিজে কখনও পদার্থবিজ্ঞানের ইঞ্জিন না লিখে, আমি জানি না এটি কীভাবে সাধারণত পরিচালনা করা হয়। একটি সম্ভাবনা হ'ল, যখন কোনও বস্তুকে ঘুমানোর সময় সেট করা হয়, আমরা তার স্পর্শকারী অবজেক্টগুলির একটি তালিকা সংরক্ষণ করি (বা এটি স্থানীয় সামগ্রীর অবজেক্টগুলিতে যুক্ত করি)। যখন আমরা একটি ঘুমন্ত বস্তু জাগ্রত করি তখন আমরা তার তালিকা / ক্লাস্টারে সমস্ত কিছু জাগ্রত করি। আরও মার্জিত বিকল্প থাকতে পারে, যেমন জাগরণের মুহূর্তে নিকটস্থ পরিচিতিগুলির জন্য পরীক্ষা করা (এটি দূরে সরে যাওয়ার আগে)।
ডিএমগ্রিগরি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.