স্থগিতিত রেন্ডারিং ইঞ্জিনের জন্য দৃশ্য গ্রাফ


10

একটি শেখার অনুশীলন হিসাবে আমি একটি মুলতুবি রেন্ডারিং ইঞ্জিন লিখেছি। এখন আমি এই ইঞ্জিনে একটি দৃশ্যের গ্রাফ যুক্ত করতে চাই তবে কীভাবে এটি করা যায় আমি কিছুটা বিস্মিত।

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

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

আমি যে অন্য একটি সমাধানের কথা ভেবেছিলাম তা হ'ল গ্রাফের দৃশ্যটি গ্রাফকে স্বাভাবিক হিসাবে ভ্রমণ করা এবং 3 পৃথক তালিকায় আইটেম যুক্ত করা, জ্যামিতি, ছায়া কাস্টার এবং লাইট পৃথক করে এবং তারপর সঠিক তালিকা আঁকার জন্য এই তালিকাগুলি পুনরায় করা, এটি কি আরও ভাল, এবং এটি কি প্রতি ফ্রেমে 3 টি তালিকা পুনরায় স্থাপন করা বুদ্ধিমান?

উত্তর:


6

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

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

সুতরাং অঙ্কনটি একটি পাসে দৃশ্যমান অ্যারের মধ্য দিয়ে যায় এবং সেই পাসে সেই আইটেমগুলির একটি লিঙ্কযুক্ত তালিকা পুনর্বিবেচনার জন্য তৈরি হয় এবং সেগুলি একটি দ্বিতীয় পাস আঁকতে পারে।

সামনের থেকে পিছনে এবং অস্বচ্ছ-পরে স্বচ্ছ আঁকুন সমস্ত কিছু বুদ্ধিমান রাখতে সহায়তা করে।

এটি সম্ভবত শেডার পরিবর্তনের সংখ্যা ইত্যাদি হ্রাস করছে না তবে এটি কার্যকরভাবে কার্যকর এবং কার্যকর করা সহজ to

এক্সএনএ এবং এটি কতটা প্রযোজ্য এবং আপনি যে এই নিম্ন-স্তরের স্টাফ তৈরি করেন তা সম্পর্কে আমার কোনও ধারণা নেই I'm তবে সি ++ আরটিএসের ক্ষেত্রে প্রবীণরা এই পদ্ধতির বিষয়ে কী ভাবেন তা জানা সবচেয়ে আকর্ষণীয় হবে।


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

3

আমার পরামর্শটি আপনার নিজের বর্ণনার অনুরূপ আপনার নির্দিষ্ট প্রয়োজনীয়তার সাথে মিলিত একটি 2-পদক্ষেপের পদ্ধতির হবে। আপনার ক্ষেত্রে ছায়া, জ্যামিতি, লাইট (সম্ভবত চতুর্থ স্বচ্ছ বস্তু?) রেন্ডারিং পদক্ষেপগুলির প্রতিটি জন্য একটি দৃশ্যের গ্রাফ এবং একটি "রেন্ডার সংগ্রহ" দরকার need

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

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

আপনি যে কোনও ডেটা স্ট্রাকচার বাছাই করুন না কেন, সন্নিবেশ অপারেশনটি দ্রুত এবং নিশ্চিত হয়ে নিন যে এটি কোনও বরাদ্দ / ডেটা ধ্বংস করতে পুলিং এবং অন্যান্য কৌশল ব্যবহার করে কারণ আপনি প্রতিটি ফ্রেম সাফ করে নিবেন এবং এই তালিকা পূরণ করবেন।

এখন সব একসাথে বেঁধে রাখা সহজ। কেবল দৃশ্যের গ্রাফ দিয়ে হেঁটে প্রতিটি আইটেমকে প্রাসঙ্গিক রেন্ডার সংগ্রহ (গুলি) এ যুক্ত করুন। আপনার ডেটা স্ট্রাকচারটি প্রয়োজনীয়তার ভিত্তিতে নতুন এন্ট্রিগুলিকে স্বয়ংক্রিয়ভাবে সাজানো / স্ট্রাকচার করার ক্ষেত্রে সহায়তা করে। আপনার কাজ শেষ হয়ে গেলে সংগ্রহগুলি প্রয়োজনীয় ক্রমে রেন্ডার করুন এবং সেগুলি সরবরাহ করুন।

আপনার ডেটা স্ট্রাকচারগুলিতে দ্রুত inোকানো এবং আবর্জনা উত্পন্ন না করার কারণে, আপনি উল্লিখিত হিসাবে তালিকা পুনরায় সাজানোর জন্য কোনও জরিমানা নেই।

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