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