মুলতুবি শেড রেন্ডারারে জ্যামিতি পাসের জন্য সাধারণ রেন্ডারিং অপ্টিমাইজেশন কৌশলগুলি কী কী? [বন্ধ]


16

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

বর্তমান সিস্টেমটিতে একটি দৃশ্যের সমন্বয়ে একটি রেন্ডারার রয়েছে এবং বর্তমান বিশ্ব এবং বিশ্ব পৃথকভাবে সত্ত্বা এবং আলোক সত্ত্বাকে ধারণ করে std::vectors

সুতরাং মূলত প্রতিটি সময় দৃশ্যের দ্বারা ডাকা হয় ->render(), এবং এটি রেন্ডারারকে কল করে, বিশ্বকে প্যারামিটার হিসাবে পাস করে এবং সত্ত্বার পুনরাবৃত্তিগুলি বিশ্ব থেকে পায়, তাদের এফবিওতে টেনে তোলে এবং তারপরে দ্বিতীয় পাসের জন্য আলোক সত্ত্বার মধ্য দিয়ে যায়। এবং আমি মনে করি এটি যথেষ্ট নয়।

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

উত্তর:


41

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

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

ডিফার্ড রেন্ডারিং সমস্যা সমাধান করার চেষ্টা করে যখন লাইটের সংখ্যা বৃদ্ধি পায়, যা সামনে রেন্ডারিংয়ে পাসের সংখ্যা বিস্ফোরিত হতে পারে।

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

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

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

ফ্রাস্টাম কুলিং

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

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

এমনকি বাউন্ডিং ভলিউমগুলির সাথেও, আপনাকে অবশ্যই প্রতিটি পরীক্ষা করার দরকার নেই, বিকল্পভাবে আপনি পূর্বের কুলিংয়ের জন্য একটি বাউন্ডিং ভলিউম স্তরক্রম তৈরি করতে পারেন, এটি ব্যবহার করে দৃশ্যের জটিলতার উপর নির্ভরশীল।

এটি একটি ছোট ইঞ্জিনের জন্য একটি ভাল এবং একটি সহজ কৌশল, এবং আমি ব্যবহৃত প্রতিটি ইঞ্জিনে প্রায় ব্যবহৃত হয়। যদি আপনার ইঞ্জিনটিকে খুব জটিল দৃশ্যের রেন্ডারিংয়ের প্রয়োজন না হয় তবে হায়ারার্কিগুলি ছাড়াই একটি "সাধারণ" বাউন্ডিং ভলিউম / ফ্রাস্টাম চেক ব্যবহার করার পরামর্শ দিচ্ছি।

বাউন্ডিং ভলিউম স্তরক্রম

পিছনে মুখ কুলিং

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

অন্তর্ভুক্তি কুলিং

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

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

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

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

LOD

বিশদ স্তরের

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

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

যদি এই সমস্ত কাজ না করে?

ঠিক আছে, এটি একটি ভাল প্রশ্ন।

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

এর পরে আপনাকে বাটনেলেকে কিছু অপ্টিমাইজেশন করতে হবে, মনে রাখবেন যে এর কোনও সঠিক উত্তর নেই, এবং অন্যটি হার্ডওয়্যার থেকে আলাদা হবে।

কিছু সাধারণ জিপিইউ অপ্টিমাইজেশন কৌশল:

  • শেডারগুলিতে শাখা প্রশস্ত করা এড়িয়ে চলুন।
  • উদাহরণস্বরূপ {VNT}একই অ্যারে বা {V},{N},{T}বিভিন্ন অ্যারেতে আন্তঃবিস্তারিত বিভিন্ন ভার্টেক্স কাঠামোগুলি চেষ্টা করুন ।
  • সামনে পিছনে দৃশ্যের আঁকুন।
  • উদাহরণস্বরূপ কিছু পয়েন্টে জেড-বাফারটি বন্ধ করুন যদি কোনও চিত্রকে জেড পরীক্ষার প্রয়োজন হয় না।
  • সংকুচিত টেক্সচার ব্যবহার করুন।

কিছু সাধারণ সিপিইউ অপ্টিমাইজেশন কৌশল:

  • ছোট ফাংশনের জন্য ইনলাইন ফাংশন ব্যবহার করুন।
  • সম্ভব হলে সিমডি (একক নির্দেশনা একাধিক ডেটা) ব্যবহার করুন।
  • ক্যাশে বন্ধুত্বপূর্ণ মেমরি জাম্প এড়ান।
  • "সঠিক" পরিমাণের ডেটা সহ ভিবিও ব্যবহার করুন। (আপনার হার্ডওয়ারের উপর নির্ভর করে) তবে সাধারণত কম ড্র কলগুলি আরও ভাল।

তবে আমার বাধা যদি মুলতুবি শেডে থাকে?

এই ক্ষেত্রে, যেহেতু মুলতুবি শেডিং লাইট সম্পর্কে বেশি উদ্বিগ্ন তাই সর্বাধিক সুস্পষ্ট অংশ হ'ল আসল শেডিং গণনাগুলি অনুকূল করা। কিছু বিষয় লক্ষ্য রাখতে হবে:

  • রেন্ডার লাইটগুলি যা আসলে চূড়ান্ত চিত্রকে প্রভাবিত করে। অন্য কথায় লাইটগুলি অবদান রাখুন না c আমি পূর্বে উল্লিখিত অবসমন কুলিং ব্যবহার করে এটি কার্যকরভাবে প্রয়োগ করা যেতে পারে।
  • এই আলোতে কি স্পেকুলার বা অন্য কোনও উপাদানগুলির প্রয়োজন? হয়তো না.
  • এই আলো কি ছায়া ফেলেছে? কিছু লাইটের ছায়া castালাই করার দরকার নেই।
  • এই হালকা অবদান কি প্রাক গণনা করা যেতে পারে? যদি এটি চলমান না হয় তবে কিছু দিক প্রাক-গণনা করা যেতে পারে।

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

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

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

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

আমি যদি আমার স্পর্শটি পরিষ্কার করে দিই যে এই অপ্টিমাইজেশনগুলি কোনও পিছিয়ে দেওয়া রেন্ডারারের পক্ষে সবচেয়ে কম কার্যকর, তবে আমি আপনাকে তার / গুগলদের দেখায়নি যে পারফরম্যান্স ইস্যুটি ডিফার্ড শেডিংয়ের সাথে কোন সম্পর্কযুক্ত নয় I'll
মিকএলএইচ

6

আপনার সমস্যাটি যা কিছু পিছিয়ে দেওয়া শেডের সাথে সম্পর্কিত নয় , আপনি নির্দিষ্ট কিছু অংশ গতি বাড়ানোর চেষ্টা করার আগে আপনাকে কোনও রেন্ডারারের প্রাথমিক মূল উপাদানগুলি প্রয়োগ করতে হবে।

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

আপনি যদি গতিশীল আলোর সংখ্যার দ্বারা সীমাবদ্ধ না হন তবে আপনি কেন স্থিত শেড ব্যবহার করছেন না তা বিবেচনা করা উচিত তবে আপনি যদি যদি হন তবে আপনি সেই অপটিমাইজেশন চেষ্টা করতে চাইবেন যা যুদ্ধক্ষেত্র 3 কে সম্ভব করেছে। (তারা তাদের সর্বজনীন পিডিএফের 10 স্লাইডে এটি ইঙ্গিত করেছে: http://dice.se/wp-content/uploads/GDC11_DX11inBF3_Public.pdf )

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