একটি সংঘর্ষ ইঞ্জিন এবং একটি পদার্থবিজ্ঞানের ইঞ্জিনের মধ্যে একটি বড় পার্থক্য রয়েছে। তারা একই কাজ করে না, যদিও পদার্থবিজ্ঞানের ইঞ্জিনটি সাধারণত একটি সংঘর্ষের ইঞ্জিনের উপর নির্ভর করে।
সংঘর্ষ ইঞ্জিনটি তারপরে দুটি ভাগে বিভক্ত: সংঘর্ষ সনাক্তকরণ এবং সংঘর্ষের প্রতিক্রিয়া। দ্বিতীয়টি সাধারণত পদার্থবিজ্ঞানের ইঞ্জিনের একটি অংশ। এ কারণেই সংঘর্ষের ইঞ্জিন এবং পদার্থবিজ্ঞানের ইঞ্জিনগুলি একই লাইব্রেরিতে রোল করা হয়।
সংঘর্ষ সনাক্তকরণ পৃথক এবং অবিচ্ছিন্ন দুটি রূপে আসে। উন্নত ইঞ্জিনগুলি উভয়কেই সমর্থন করে, কারণ তাদের বিভিন্ন বৈশিষ্ট্য রয়েছে। সাধারণভাবে, অবিচ্ছিন্ন সংঘর্ষ শনাক্তকরণ খুব ব্যয়বহুল এবং কেবল যেখানে এটির প্রয়োজন সেখানে ব্যবহৃত হয়। সংঘর্ষ এবং পদার্থবিজ্ঞানের সিংহভাগ বিযুক্ত পদ্ধতি ব্যবহার করে পরিচালিত হয়। বিচ্ছিন্ন পদ্ধতিতে অবজেক্টগুলি একে অপরের অনুপ্রবেশ করে এবং পদার্থবিজ্ঞানের ইঞ্জিন এগুলি পরে আলাদা করার জন্য কাজ করে। সুতরাং ইঞ্জিনটি আসলে কোনও খেলোয়াড়কে দেয়াল বা মেঝে দিয়ে আংশিকভাবে হাঁটাচলা বন্ধ করে না, প্লেয়ারটি দেওয়াল / মেঝেতে আংশিক রয়েছে তা সনাক্ত করার পরে এটি ঠিক করে দেয়। আমি এখানে পৃথক সংঘর্ষ সনাক্তকরণের উপর ফোকাস করতে যাচ্ছি, যেহেতু স্ক্র্যাচ থেকে আমার সবচেয়ে বেশি অভিজ্ঞতা কার্যকর হয়েছে।
সংঘর্ষ সনাক্তকরণ
সংঘর্ষ সনাক্তকরণ তুলনামূলকভাবে সহজ। প্রতিটি বস্তুর একটি রূপান্তর এবং একটি আকার রয়েছে (সম্ভবত একাধিক আকার)। নিষ্পাপ পদ্ধতির সাথে সংঘর্ষের ইঞ্জিনটি সমস্ত অবজেক্টের জোড় দিয়ে একটি O (n ^ 2) লুপ করে এবং জোড়গুলির মধ্যে ওভারল্যাপ থাকে কিনা তা পরীক্ষা করে দেখায়। স্মার্ট পদ্ধতির মধ্যে একাধিক স্পেসিয়াল ডেটা স্ট্রাকচার রয়েছে (যেমন স্ট্যাটিক বনাম ডায়নামিক অবজেক্টের জন্য), প্রতিটি বস্তুর সীমাবদ্ধ আকার এবং প্রতিটি বস্তুর জন্য বহু অংশের উত্তল উপ-আকার রয়েছে।
স্থানীয় ডেটা স্ট্রাকচারগুলিতে কেডি-ট্রি, ডায়নামিক এএবিবি ট্রি, অক্ট্রি / কোয়াডট্রিজ, বাইনারি স্পেস পার্টিশন গাছ এবং আরও কিছু অন্তর্ভুক্ত রয়েছে। প্রত্যেকের নিজস্ব সুবিধা এবং অসুবিধা রয়েছে যার কারণে কিছু উচ্চতর ইঞ্জিন একের বেশি ব্যবহার করে। উদাহরণস্বরূপ ডায়নামিক এএবিবি গাছগুলি প্রচুর চলন্ত বস্তু পরিচালনা করার জন্য সত্যই দ্রুত এবং ভাল, যখন কোনও কেডি-ট্রি স্থির স্তরের জ্যামিতির জন্য বস্তুগুলির সাথে সংঘর্ষের জন্য আরও উপযুক্ত হতে পারে। এছাড়াও অন্যান্য বিকল্প আছে।
বিস্তৃত পর্যায়ে প্রতিটি অবজেক্টের জন্য স্পেসিয়াল ডেটা স্ট্রাকচার এবং একটি অ্যাবস্ট্রাক্ট বাউন্ডিং ভলিউম ব্যবহার করা হয়। একটি বাউন্ডিং ভলিউম একটি সাধারণ আকৃতি যা পুরো বস্তুকে ঘিরে রাখে, সাধারণত এটি "শক্তভাবে" হিসাবে ঘেরানোর লক্ষ্য নিয়ে যখন সংঘর্ষের পরীক্ষার জন্য সস্তা থাকা অবস্থায় থাকে। সর্বাধিক সাধারণ বাউন্ডিং আকারগুলি হ'ল অক্ষ-অ্যালাইন্টেড বাউন্ডিং বক্সস, অবজেক্ট-অ্যালাইন্টেড বাউন্ডিং বক্সস, গোলক এবং ক্যাপসুলস। এএবিবিগুলি সাধারণত দ্রুত এবং সহজতম হিসাবে বিবেচনা করা হয় (কিছু ক্ষেত্রে গোলকগুলি সহজ এবং দ্রুত হয় তবে এই স্থানিক ডেটা কাঠামোগুলির মধ্যে অনেককেই গোলককে কোনও এএবিবিতে রূপান্তরকরণের প্রয়োজন হবে), তবে তারা অনেকগুলি অবজেক্টের চেয়েও খারাপভাবে ফিট করে। অক্ষর-স্তরের সংঘর্ষগুলি পরিচালনা করার জন্য ক্যাপসুলগুলি 3 ডি ইঞ্জিনগুলিতে জনপ্রিয়। কিছু ইঞ্জিন দুটি সীমাবদ্ধ আকার ব্যবহার করবে,
সংঘর্ষ শনাক্তকরণের শেষ পর্বটি হ'ল জ্যামিতিটি ছেদ করছে ঠিক ঠিক তা সনাক্ত করা। এটি সাধারণত জাল (বা 2 ডি তে বহুভুজ) ব্যবহার করে বোঝায়, যদিও সর্বদা না। এই পর্বের উদ্দেশ্য হ'ল বস্তুগুলি সত্যই সংঘর্ষে আছে কিনা তা খুঁজে বের করা, যদি সূক্ষ্ম মাত্রার বিশদ প্রয়োজন হয় (বলুন, কোনও শ্যুটারের বুলেট সংঘর্ষ, যেখানে আপনি যে শটগুলি সবেমাত্র মিস করেন) এড়াতে সক্ষম হতে চান, এবং বস্তুগুলির ঠিক কোথায় সংঘর্ষ হয় তা অনুসন্ধান করার জন্য, যা বস্তুগুলি কীভাবে প্রতিক্রিয়া দেখায় তা প্রভাবিত করে। উদাহরণস্বরূপ, যদি কোনও বাক্স কোনও টেবিলের প্রান্তে বসে থাকে তবে ইঞ্জিনটি অবশ্যই জানতে হবে যে টেবিলটি বক্সের বিরুদ্ধে কী চাপ দিচ্ছে; বক্সটি কতদূর ঝুলছে তার উপর নির্ভর করে বাক্সটি কাত হয়ে পড়ে এবং পড়তে শুরু করতে পারে।
ম্যানিফোল্ড জেনারেশনের সাথে যোগাযোগ করুন
এখানে ব্যবহৃত অ্যালগরিদমগুলির মধ্যে রয়েছে জনপ্রিয় জেজেকে এবং মিনকোভস্কি পোর্টাল সংশোধন অ্যালগরিদম, পাশাপাশি পৃথকীকরণ অক্ষ পরীক্ষা। যেহেতু জনপ্রিয় অ্যালগরিদমগুলি সাধারণত উত্তল আকারগুলির জন্য কাজ করে, অনেক জটিল বস্তুকে উত্তল সাব-অবজেক্টগুলিতে ভাঙ্গা এবং পৃথকভাবে প্রতিটিটির জন্য সংঘর্ষ পরীক্ষা করা প্রয়োজন। সরলীকৃত মেসগুলি প্রায়শই সংঘর্ষের জন্য ব্যবহৃত হয়, তেমনি কম ত্রিভুজ ব্যবহারের জন্য প্রক্রিয়াজাতকরণের সময় হ্রাস করার কারণ এটি of
এর মধ্যে কয়েকটি অ্যালগোরিদম কেবল আপনাকে বলে দেয় না যে বস্তুগুলি নিশ্চিতভাবে সংঘর্ষ হয়েছে, তবে তারা কোথায় সংঘর্ষ করেছিল - তারা একে অপরের দিকে কতটা অনুপ্রবেশ করছে এবং "যোগাযোগের পয়েন্টগুলি" কী। কিছু তথ্য অ্যালগরিদমের অতিরিক্ত পদক্ষেপের প্রয়োজন, যেমন বহুভুজ ক্লিপিং, এই তথ্যটি পেতে।
শারীরিক প্রতিক্রিয়া
এই মুহুর্তে, একটি পরিচিতি সন্ধান করা হয়েছে এবং পদার্থবিজ্ঞানের ইঞ্জিনের যোগাযোগের প্রক্রিয়া করার জন্য পর্যাপ্ত তথ্য রয়েছে। পদার্থ বিজ্ঞান পরিচালনা খুব জটিল পেতে পারেন। সরল অ্যালগরিদম কিছু গেমের জন্য কাজ করে তবে কিছুটা স্ট্যাক বক্সের স্থিতিশীল রাখার মতো আপাতদৃষ্টিতে সোজা-সামনের দিকেও বেশ কঠিন হয়ে যায় এবং এর জন্য প্রচুর পরিশ্রম এবং অ-স্পষ্ট হ্যাকের প্রয়োজন হয়।
সর্বাধিক প্রাথমিক স্তরে পদার্থবিজ্ঞান ইঞ্জিন এরকম কিছু করবে: এটি সংঘর্ষকৃত বস্তু এবং তাদের যোগাযোগ বহুগুণে নেবে এবং সংঘর্ষযুক্ত বস্তুগুলিকে পৃথক করার জন্য প্রয়োজনীয় নতুন অবস্থানগুলি গণনা করবে। এটি বস্তুগুলিকে এই নতুন অবস্থানে নিয়ে যাবে। এটি পুনরুক্তি (বাউচনেস) এবং ঘর্ষণ মূল্যগুলির সাথে মিলিত এই ধাক্কা দ্বারা সৃষ্ট বেগের পরিবর্তনও গণনা করবে। পদার্থবিজ্ঞানের ইঞ্জিন বস্তুর নতুন গতিবেগ গণনা করতে এবং তারপরে (পরবর্তী ফ্রেম) তাদের নতুন অবস্থানগুলিতে মাধ্যাকর্ষণ হিসাবে বস্তুগুলিতে অভিনয় করা অন্য যে কোনও বাহিনীও প্রয়োগ করবে।
আরও উন্নত পদার্থবিজ্ঞানের প্রতিক্রিয়া দ্রুত জটিল হয়ে ওঠে। উপরের অ্যাপ্রোচটি অনেক ক্ষেত্রেই ভেঙে যাবে, যার মধ্যে একটি বস্তু অন্য দু'জনের উপরে বসে including প্রতিটি জুটি নিজে থেকে ডিল করার ফলে "জিটার" হবে এবং বস্তুগুলি প্রচুর পরিমাণে বাউন্স করবে। সর্বাধিক প্রাথমিক কৌশলটি সংঘর্ষকৃত বস্তুর জোড়ের উপর দিয়ে বেশিরভাগ বেগ-সংশোধন পুনরাবৃত্তি করা। উদাহরণস্বরূপ, একটি বাক্স "এ" দিয়ে অন্য দুটি বাক্স "বি" এবং "সি" এর উপরে বসে, সংঘর্ষের এবিটি প্রথমে পরিচালিত হবে, যার ফলে বক্স এ বাক্সটি সি সিটিতে আরও কাত হয়ে যাবে তখন এসি সংঘর্ষটি হ্যান্ডেল হয়ে গেছে, সন্ধ্যায় কিছুটা বাক্সগুলি বাইরে বের করে আনুন, তবে এটিকে নীচে এবং বি তে টানুন Then তারপর অন্য পুনরাবৃত্তিটি সম্পন্ন করা হবে, সুতরাং এসি সংশোধনের ফলে হওয়া এবি ত্রুটিটি সামান্য সমাধান করা হয়েছে, এসি প্রতিক্রিয়াতে কিছুটা আরও ত্রুটি তৈরি করে। এসি আবার প্রক্রিয়া করা হয় যা হ্যান্ডেল করা হয়। সম্পন্ন পুনরাবৃত্তির সংখ্যা নির্ধারিত নয়, এবং এমন কোনও বিন্দু নেই যা এটি "নিখুঁত" হয়ে ওঠে, বরং যে কোনও সংখ্যক পুনরাবৃত্তি অর্থবহ ফলাফল প্রদান বন্ধ করে দেয়। 10 পুনরাবৃত্তি একটি প্রথম প্রথম চেষ্টা, তবে এটি একটি নির্দিষ্ট ইঞ্জিন এবং একটি নির্দিষ্ট গেমের প্রয়োজনের জন্য সেরা নম্বর বের করার জন্য টুইচিং লাগে।
যোগাযোগ ক্যাচিং
বিভিন্ন ধরণের গেমগুলির সাথে ডিল করার সময় এমন আরও কৌশলগুলি সত্যই কার্যকর (কম-বেশি প্রয়োজনীয়) হয়ে উঠেছে। পরিচিতি ক্যাচিং আরও দরকারীগুলির মধ্যে একটি। একটি পরিচিতি ক্যাশে দিয়ে, সংঘর্ষযুক্ত বস্তুর প্রতিটি সেট একটি দেখার সারণীতে সংরক্ষণ করা হয়। প্রতিটি ফ্রেম, যখন কোনও সংঘর্ষ শনাক্ত করা হয়, তখন এই ক্যাশেটি জিজ্ঞাসা করা হয় যে বস্তুগুলি পূর্বে যোগাযোগ করেছিল। যদি বস্তুগুলি পূর্বে যোগাযোগে না থাকে তবে একটি "নতুন সংঘর্ষ" ইভেন্ট উত্পন্ন করা যেতে পারে। যদি বস্তুগুলি পূর্বে যোগাযোগে থাকে তবে তথ্যটি আরও স্থিতিশীল প্রতিক্রিয়া সরবরাহ করতে ব্যবহৃত হতে পারে। যোগাযোগের ক্যাশে যে কোনও এন্ট্রি যা কোনও ফ্রেমে আপডেট করা হয়নি সেগুলি দুটি পৃথক পৃথক বস্তু নির্দেশ করে এবং একটি "পৃথককারী অবজেক্ট" ইভেন্ট উত্পন্ন করা যেতে পারে। গেম লজিক এই ইভেন্টগুলির জন্য প্রায়শই ব্যবহার করে।
গেম যুক্তির পক্ষে নতুন সংঘর্ষের ইভেন্টগুলিতে প্রতিক্রিয়া জানানো এবং এড়িয়ে যাওয়া হিসাবে তাদের পতাকাঙ্কিত করাও সম্ভব। প্ল্যাটফর্মগুলিতে সাধারণ কিছু বৈশিষ্ট্য যেমন প্ল্যাটফর্মগুলির মাধ্যমে আপনি ঝাঁপিয়ে পড়তে পারেন তবে দাঁড়াতে পারেন এটি কার্যকরভাবে কার্যকর। নিষ্কলুষ বাস্তবায়ন কেবল এমন সংঘর্ষগুলিকে অগ্রাহ্য করতে পারে যা নীচের দিকে প্ল্যাটফর্ম-> চরিত্রের সংঘর্ষকে স্বাভাবিক করে তোলে (প্লেয়ারের মাথা প্ল্যাটফর্মের নীচে আঘাত করে ইঙ্গিত করে), তবে যোগাযোগের ক্যাচিং ছাড়াই, খেলোয়াড়ের মাথা প্ল্যাটফর্মের মধ্য দিয়ে উঠলে এবং এটি শুরু হলে এটি ভেঙে যাবে পড়া. এই মুহুর্তে, পরিচিতিটি স্বাভাবিক হতে পারে উপরের দিকে পয়েন্ট করে, প্লেয়ারটি যখন না করা উচিত তখন তাকে প্ল্যাটফর্মের মাধ্যমে পপআপ করে দেয়। যোগাযোগের ক্যাচিংয়ের সাথে, ইঞ্জিনটি নির্ভরযোগ্যভাবে প্রাথমিক সংঘর্ষকে স্বাভাবিকভাবে দেখতে পারে এবং প্ল্যাটফর্ম এবং প্লেয়ারটিকে পৃথক না করা পর্যন্ত পরবর্তী সমস্ত যোগাযোগের ইভেন্টগুলি উপেক্ষা করতে পারে।
ঘুমন্ত
আর একটি খুব কার্যকর কৌশল হ'ল বস্তুগুলিকে "ঘুমন্ত" হিসাবে চিহ্নিত করা যদি তাদের সাথে যোগাযোগ করা হয় না। ঘুমন্ত বস্তুগুলি পদার্থবিজ্ঞানের আপডেটগুলি পায় না, অন্যান্য ঘুমন্ত বস্তুর সাথে সংঘর্ষ না করে এবং মূলত ঠিক সেখানে হিমায়িত বসে থাকে যতক্ষণ না অন্য ঘুমন্ত বস্তু তাদের সাথে সংঘর্ষ হয়।
এর প্রভাবটি হ'ল যে সমস্ত সংঘর্ষকারী বস্তু যা কেবল সেখানে বসে আছে কোনও প্রসেসিংয়ের সময় নেয় না। এছাড়াও, ছোট ছোট পদার্থবিজ্ঞানের সংশোধনের স্থির পরিমাণ না থাকায় স্ট্যাকগুলি স্থিতিশীল থাকবে।
যখন কোনও একক ফ্রেমের চেয়ে বেশি সময় শূন্যের গতিবেগ থাকে তখন কোনও বস্তু ঘুমের জন্য প্রার্থী। মনে রাখবেন যে শূন্যগতির এই বেগটি পরীক্ষা করার জন্য আপনি যে অ্যাপসিলনটি ব্যবহার করছেন সেটি সম্ভবত সাধারণ ভাসমান পয়েন্ট তুলনা অ্যাপসিলনের চেয়ে কিছুটা বেশি হবে, কারণ আপনার স্ট্যাকযুক্ত বস্তুগুলির সাথে কিছুটা ঝাঁকুনির প্রত্যাশা করা উচিত এবং আপনি যদি চান যে পুরো বস্তুগুলি ঘুমিয়ে পড়ে তবে তারা ' স্থিতিশীল "যথেষ্ট কাছাকাছি" থাকা। প্রান্তিকের জন্য অবশ্যই টুইট এবং পরীক্ষার প্রয়োজন হবে।
সীমাবদ্ধতাসমূহ
অনেক পদার্থবিজ্ঞানের ইঞ্জিনের শেষ বড় বিটটি সীমাবদ্ধ দ্রাবক। এই জাতীয় ব্যবস্থার উদ্দেশ্য হ'ল ঝর্ণা, মোটর, চাকা অক্ষ, সিমুলেটেড নরম দেহ, কাপড়, দড়ি এবং চেইন এবং কখনও কখনও এমনকি তরল (যদিও তরল প্রায়শই সম্পূর্ণ ভিন্ন সিস্টেম হিসাবে প্রয়োগ করা হয়) এর মতো জিনিসগুলির বাস্তবায়নের সুবিধার্থে।
এমনকি সীমাবদ্ধতা সমাধানের প্রাথমিক বিষয়গুলি খুব গণিত নিবিড় পেতে পারে এবং এই বিষয়ে আমার দক্ষতার বাইরে। বিষয়টির আরও গভীরতার সাথে ব্যাখ্যা দেওয়ার জন্য আমি পদার্থবিজ্ঞানের বিষয়ে র্যান্ডি গলের দুর্দান্ত নিবন্ধ সিরিজটি পরীক্ষা করার পরামর্শ দিচ্ছি ।