গেমটিতে গ্রাফিক্স এবং পদার্থবিজ্ঞানের ইঞ্জিনের মধ্যে ডেটা ভাগ করা উচিত?


9

আমি কয়েকটি মডিউল নিয়ে গেম ইঞ্জিনটি লিখছি। এর মধ্যে দুটি গ্রাফিক্স ইঞ্জিন এবং পদার্থবিজ্ঞান ইঞ্জিন

আমি ভাবছি তাদের মধ্যে ডেটা ভাগ করে নেওয়া যদি ভাল সমাধান হয়?

দুটি উপায় (ভাগ করে নেওয়া বা না করা) এর মতো দেখায়:

ডেটা ভাগ করে নিই

GraphicsModel{
    //some common for graphics and physics data like position

    //some only graphic data 
    //like textures and detailed model's verticles that physics doesn't need
};

PhysicsModel{
    //some common for graphics and physics data like position

    //some only physics data 
    //usually my physics data contains A LOT more informations than graphics data
}

engine3D->createModel3D(...);
physicsEngine->createModel3D(...);

//connect graphics and physics data 
//e.g. update graphics model's position when physics model's position will change

আমি দুটি প্রধান সমস্যা দেখতে পাচ্ছি:

  1. প্রচুর রিডানড্যান্ট ডেটা (পদার্থবিজ্ঞান এবং গ্রাফিক্স ডেটা উভয়ের জন্য দুটি অবস্থানের মতো)
  2. ডেটা আপডেট করার ক্ষেত্রে সমস্যা (পদার্থবিজ্ঞানের ডেটা পরিবর্তিত হওয়ার সময় আমাকে গ্রাফিক্স ডেটা ম্যানুয়ালি আপডেট করতে হবে)

ডেটা ভাগ করে নেওয়ার সাথে

Model{
     //some common for graphics and physics data like position
};

GraphicModel : public Model{
    //some only graphics data 
    //like textures and detailed model's verticles that physics doesn't need
};

PhysicsModel : public Model{
     //some only physics data 
    //usually my physics data contains A LOT more informations than graphics data
}

model = engine3D->createModel3D(...);
physicsEngine->assingModel3D(&model); //will cast to 
//PhysicsModel for it's purposes??

//when physics changes anything (like position) in model 
//(which it treats like PhysicsModel), the position for graphics data 
//will change as well (because it's the same model)

সমস্যা এখানে:

  1. পদার্থবিজ্ঞান ইঞ্জিন নতুন অবজেক্ট তৈরি করতে পারে না, কেবল ইঞ্জিন 3 ডি থেকে বিদ্যমান বিদ্যমানগুলিকে "অ্যাসিডিং" করতে পারে (একরকম এটি আমার পক্ষে আরও বিরোধী স্বাধীন বলে মনে হচ্ছে)
  2. AssingModel3D ফাংশনে ডেটা কাস্ট করা
  3. পদার্থবিজ্ঞান ইঞ্জিন এবং গ্রাফিক্স ইঞ্জিন অবশ্যই সাবধান হওয়া উচিত - যখন তাদের প্রয়োজন হয় না তখন তারা ডেটা মুছতে পারে না (কারণ দ্বিতীয়টির এটির প্রয়োজন হতে পারে)। তবে এটি বিরল পরিস্থিতি। তদুপরি, তারা কেবল পয়েন্টারটি মুছতে পারে, বস্তুটি নয়। বা আমরা ধরে নিতে পারি যে গ্রাফিক্স ইঞ্জিন বস্তুগুলিকে মুছে ফেলবে, পদার্থবিজ্ঞানজাইন তাদের কেবল পয়েন্টার করে।

কোন উপায় ভাল?

ভবিষ্যতে কোনটি আরও সমস্যার সৃষ্টি করবে?

আমি দ্বিতীয় সমাধানটি আরও পছন্দ করি, তবে আমি অবাক হয়েছি কেন বেশিরভাগ গ্রাফিক্স এবং পদার্থবিজ্ঞানের ইঞ্জিনগুলি প্রথমটিকে পছন্দ করে (সম্ভবত তারা সাধারণত গ্রাফিক বা কেবল পদার্থবিজ্ঞান ইঞ্জিন তৈরি করে এবং অন্য কেউ তাদের খেলায় সংযুক্ত করে?)

তাদের কি আরও কোনও লুকানো উপকার ও বিপরীতে আছে?


ঠিক আমার প্রশ্নও।
দানিজার

উত্তর:


9

আজকাল, আরও গেম ইঞ্জিনগুলি একটি উপাদান নকশা গ্রহণ করে (যেমন ইউনিটি, অবাস্তব)। এই ধরণের ডিজাইনে, ক GameObjectউপাদানগুলির একটি তালিকা দিয়ে তৈরি। আপনার পরিস্থিতিতে একটি MeshComponentএবং একটি হতে পারেPhysicalComponent উভয়ই একক গেমের সাথে যুক্ত

সরলতার জন্য, আপনি একটি বিশ্বের পরিবর্তনশীল রুপান্তর লাগাতে পারেন GameObject। আপডেট বাক্যাংশ চলাকালীন, PhysicalComponentবিশ্বটিকে সেই পরিবর্তনশীলে রূপান্তরিত করে। রেন্ডারিংয়ের সময়,MeshComponent পাঠকগুলি সেই পরিবর্তনশীলটি পড়েন।

এই নকশার পিছনে যুক্তিটি উপাদানগুলির মধ্যে ডিক্লুপ করা। না হয় MeshComponentনাPhysicalComponent একে অপরের জানেন। তারা কেবল একটি সাধারণ ইন্টারফেসের উপর নির্ভর করে। এবং উত্তরাধিকারের একক স্তরক্রম ব্যবহারের চেয়ে, রচনাটি দ্বারা সিস্টেমটি প্রসারিত করা সহজ হতে পারে।

বাস্তববাদী দৃশ্যে, তবে আপনার পদার্থবিদ্যা / গ্রাফিক্স সিঙ্ক্রোনাইজেশনের মধ্যে আরও পরিশীলিত হ্যান্ডলিংয়ের প্রয়োজন হতে পারে। উদাহরণস্বরূপ, পদার্থবিজ্ঞানের সিমুলেশনটি নির্দিষ্ট সময়ের ধাপে চালানোর প্রয়োজন হতে পারে (উদাহরণস্বরূপ 30Hz), যখন রেন্ডারিংকে পরিবর্তনশীল হওয়া দরকার। এবং আপনাকে পদার্থবিজ্ঞানের ইঞ্জিনের আউটপুট থেকে ফলাফলগুলি ছড়িয়ে দেওয়ার প্রয়োজন হতে পারে। কিছু পদার্থবিজ্ঞানের ইঞ্জিন (যেমন বুলেট) এর এই সমস্যার সরাসরি সমর্থন রয়েছে।

Ityক্য তাদের উপাদানগুলির একটি ভাল রেফারেন্স সরবরাহ করেছিল , যা দেখার জন্য মূল্যবান।


এটি মোটেই প্রশ্নের উত্তর দেয় না, 2 টি উপাদান থাকা তারা জাল-ডেটা ভাগ করে নেয় কিনা সে সম্পর্কে কিছুই জানায় না।
মাইক সেমদার

2
প্রকৃতপক্ষে, এটি আরও ভাল নকশা সরবরাহ করে, যা সম্পূর্ণ বৈধ।
jcora

7

ইঞ্জিনগুলি সাধারণত প্রথম বিকল্পটি বেছে নেয় (নিজস্ব পদার্থবিজ্ঞান-জাল এবং নিজস্ব রেন্ডার-জাল) কারণ তাদের মানের এবং পরিমাণ উভয়ই খুব আলাদা ডেটা প্রয়োজন।

গুণমান কারণ পদার্থবিজ্ঞানের ইঞ্জিন টেক্সচার কোঅর্ডিনেট, সাধারণ গোষ্ঠী এবং উদাহরণস্বরূপ এই সমস্ত অভিনব স্টাফিকে রেন্ডার করে না। প্রত্যেকে প্রান্তিককরণের সমস্যাগুলি, প্যাকিং, ডেটা ইন্টারলাইভিং ইত্যাদিতে খুব নির্দিষ্ট একটি বিন্যাসে নেমে আসার প্রত্যাশা করে Each

পরিমাণ কারণ পদার্থবিজ্ঞানের জাল সাধারণত উপায় কম ত্রিভুজ হয়, এটি উচ্চ রেজোলিউশন জাল রেন্ডার একটি সহজ সংস্করণ।

উভয়কে ডিকপল করে আমরা নিশ্চিত করে থাকি যে আমরা অপরটিকে কলুষিত না করে আরও ভাল পারফরম্যান্সের জন্য এর ডেটা-লেআউট পরিবর্তন সহ একটিকে টুইট করতে পারি। এটি উপায় আরও স্কেলেবল।


0

@ মিলো ইপ দুর্দান্ত উত্তর ছাড়াও আমি আপনাকে কেবল স্মরণ করিয়ে দিতে চাই যে আপনি একই তথ্য নিয়ন্ত্রণগুলি মডিউল এবং এআই মডিউলের সাথে ভাগ করতে হবে এবং যদি আমি ভুল না করি তবে বেশিরভাগ অডিও লাইব্রেরিতে সাউন্ড ইমিটারের অবস্থান সম্পর্কে ধারণা থাকতে পারে সুতরাং আপনাকে সেই মডিউলটির সাথেও ডেটা ভাগ করতে হবে।


0

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

পদার্থবিজ্ঞান থেকে ডেটা কীভাবে উপস্থাপনযোগ্য হয় তা সম্পূর্ণ আপনার উপর নির্ভর করে।

আপনি ইভেন্ট / বার্তা ব্যবহার করে কিছু আন্ত-সাবসিস্টেম প্রেরণ প্রক্রিয়াটির মাধ্যমে এটি করতে পারেন। পদার্থবিজ্ঞানের সাবসিস্টেমটিতে রেন্ডার সাবসিস্টেমের একটি সর্বজনীন ইন্টারফেস প্রকাশ করে আপনি এটি করতে পারেন যাতে পদার্থবিজ্ঞান কেবল একটি বিশেষভাবে উপস্থাপনযোগ্য অবস্থান নির্ধারণ করতে পারে। আরেকটি বিকল্প হ'ল রেন্ডারেবল সাবসিস্টেমটি আপডেট হওয়ার সময় রূপান্তরটির জন্য সত্তাকে জিজ্ঞাসা করে এবং রেন্ডারেবল উপাদানটির অবস্থান আপডেট করে তারপরে অঙ্কন করে।

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.