এটি মোকাবেলার জন্য সাধারণত দুটি পদ্ধতি রয়েছে। আজকাল, তাদের ফরোয়ার্ড রেন্ডারিং এবং মুলতুবি রেন্ডারিং বলা হয়। এই দুটি বিষয়ে একটি ভিন্নতা রয়েছে যা আমি নীচে আলোচনা করব।
ফরোয়ার্ড রেন্ডারিং
প্রতিটি বস্তুকে একবার প্রভাবিত করে যা এটি প্রভাবিত করে for এর মধ্যে পরিবেষ্টিত আলো অন্তর্ভুক্ত। আপনি একটি অ্যাডিটিভ মিশ্রণ মোড ব্যবহার করেন ( glBlendFunc(GL_ONE, GL_ONE)
), সুতরাং প্রতিটি আলোর অবদান একে অপরের সাথে যুক্ত করা হয়। যেহেতু বিভিন্ন লাইটের অবদান যুক্ত হয় তাই ফ্রেমব্ফারটি শেষ পর্যন্ত মূল্য পায়
আপনি একটি ভাসমান-পয়েন্ট ফ্রেমবাফারকে রেন্ডার করে এইচডিআর পেতে পারেন। তারপরে আপনি দৃশ্যমান পরিসরে এইচডিআর আলো মানকে ডাউন স্কেল করতে দৃশ্যের চূড়ান্ত উত্তরণ করবেন; এটি আপনি যেখানে পুষ্প এবং অন্যান্য পোস্ট-ইফেক্টগুলি বাস্তবায়ন করবেন সেখানেও এটি হবে।
এই কৌশলটির জন্য একটি সাধারণ পারফরম্যান্স বর্ধন (যদি দৃশ্যে অনেকগুলি অবজেক্ট থাকে) হ'ল "প্রাক-পাস" ব্যবহার করা, যেখানে আপনি রঙের ফ্রেমবফারটিতে কোনও কিছু আঁকাই ছাড়াই সমস্ত বস্তু রেন্ডার করেন ( glColorMask
রঙ লেখার বন্ধ করতে ব্যবহার করুন )। এটি কেবল গভীরতার বাফারে পূরণ করে। এইভাবে, আপনি যদি অন্যটির পিছনে থাকা কোনও বস্তু রেন্ডার করেন, GPU দ্রুত those টুকরো এড়িয়ে যেতে পারে। এটি এখনও ভার্টেক্স শ্যাডার চালাতে হবে, তবে এটি সাধারণত আরও ব্যয়বহুল খণ্ড শেডার গণনা এড়িয়ে যেতে পারে।
এটি কোড করা সহজ এবং ভিজ্যুয়ালাইজ করা সহজ। এবং কিছু হার্ডওয়্যারে (মূলত মোবাইল এবং এম্বেডেড জিপিইউ), এটি বিকল্পের চেয়ে আরও দক্ষ হতে পারে। তবে উচ্চতর শেষের হার্ডওয়্যারে, বিকল্পটি সাধারণত প্রচুর আলো সহ দৃশ্যের জন্য জয়ী হয়।
মুলতুবি রেন্ডারিং
মুলতুবি রেন্ডারিং কিছুটা জটিল।
কোনও পৃষ্ঠের বিন্দুর জন্য আলোকে গণনার জন্য আপনি যে আলো সমীকরণ ব্যবহার করেন তা নীচের পৃষ্ঠের পরামিতিগুলি ব্যবহার করে:
- পৃষ্ঠের অবস্থান
- পৃষ্ঠের স্বাভাবিক
- সারফেস বিছানোর রঙ
- সারফেস স্পেকুলার রঙ
- পৃষ্ঠতল বিশিষ্ট চকচকে
- সম্ভবত অন্যান্য পৃষ্ঠের পরামিতি (আপনার আলো সমীকরণ কতটা জটিল তার উপর নির্ভর করে)
ফরোয়ার্ড রেন্ডারিংয়ে, এই পরামিতিগুলি টেক্সট শেডার থেকে সরাসরি প্রান্তরেখা দ্বারা টেক্সচার (সাধারণত ভার্টেক্স শেডার থেকে উত্পন্ন টেক্সচারের স্থানাঙ্কের মাধ্যমে) পাঠানো বা ফ্রেমের শেডারে পুরো কাপড় থেকে তৈরি করে ভিত্তিতে টুকরা শেডারের আলোক ফাংশনে পৌঁছে অন্যান্য পরামিতি। বিছানার রঙ একটি টেক্সচারের সাথে প্রতি-ভার্টেক্স রঙ মিশ্রিত করে একাধিক টেক্সচারের সমন্বয়ে, যা কিছু হোক না কেন গণনা করা যেতে পারে।
মুলতুবি রেন্ডারিংয়ে আমরা এগুলি সমস্ত স্পষ্ট করি। প্রথম পাসে, আমরা সমস্ত বস্তু রেন্ডার করি। তবে আমরা রং রেন্ডার করি না । পরিবর্তে, আমরা পৃষ্ঠের পরামিতি রেন্ডার করি । সুতরাং স্ক্রিনের প্রতিটি পিক্সেলটিতে পৃষ্ঠের পরামিতিগুলির একটি সেট রয়েছে। এটি অফ-স্ক্রিন টেক্সচারে রেন্ডারিংয়ের মাধ্যমে করা হয়। একটি টেক্সচার বিচ্ছুরিত রঙটিকে তার আরজিবি হিসাবে, এবং সম্ভবত আলফা হিসাবে বর্ণনামূলক চকচকে সংরক্ষণ করবে। অন্য টেক্সচারটি স্পেকুলার রঙ সংরক্ষণ করবে। এক তৃতীয়াংশ সাধারণ সঞ্চয় করবে। ইত্যাদি।
অবস্থান সাধারণত সংরক্ষণ করা হয় না। পরিবর্তে এটি গণিত দ্বারা দ্বিতীয় পাস পুনর্গঠিত হয় যে এখানে toোকা খুব জটিল। এটি যথেষ্ট হিসাবে বলুন, আমরা কোনও পৃষ্ঠের বিন্দুর ক্যামেরা-স্পেস অবস্থান নির্ধারণের জন্য ইনপুট হিসাবে গভীরতা বাফার এবং স্ক্রিন-স্পেস খণ্ডের অবস্থানটি ব্যবহার করি।
সুতরাং, এখন এই টেক্সচারগুলি দৃশ্যের প্রতিটি দৃশ্যমান পিক্সেলের জন্য মূলত পৃষ্ঠের সমস্ত তথ্য রাখে, আমরা পূর্ণ-স্ক্রিনের কোয়াডগুলি রেন্ডারিং শুরু করি। প্রতিটি আলো একটি পূর্ণ-স্ক্রিনের কোয়াড রেন্ডার পায়। আমরা পৃষ্ঠতল পরামিতি টেক্সচার (এবং অবস্থানটি পুনঃস্থাপন) থেকে নমুনা করি, তারপরে কেবল সেই আলোর অবদান গণনা করতে তাদের ব্যবহার করুন। এটি glBlendFunc(GL_ONE, GL_ONE)
চিত্রটিতে যোগ করা হয়েছে (আবার )। আমাদের আলো শেষ না হওয়া পর্যন্ত আমরা এটি চালিয়ে যাচ্ছি।
এইচডিআর আবার একটি প্রক্রিয়া-পরবর্তী পদক্ষেপ।
বিলম্বিত রেন্ডারিংয়ের সবচেয়ে বড় অবক্ষয় হ'ল অ্যান্টিআলাইজিং। এন্টিয়ালিয়াসের সঠিকভাবে আরও কিছুটা কাজ করা দরকার।
সবচেয়ে বড় উত্সাহ, যদি আপনার জিপিইউতে প্রচুর মেমরির ব্যান্ডউইথ থাকে তবে তা হল পারফরম্যান্স। আমরা কেবল একবার আসল জ্যামিতি রেন্ডার করি (বা আলো + 1+ 1 যার ছায়া রয়েছে, যদি আমরা ছায়া ম্যাপিং করছি)। আমরা কখনই লুকানো পিক্সেল বা জ্যামিতিতে কোনও সময় ব্যয় করি না যা এর পরে দৃশ্যমান নয়। লাইটিং পাসের সমস্ত সময় সত্যই দৃশ্যমান জিনিসগুলিতে ব্যয় করা হয়।
যদি আপনার জিপিইউতে প্রচুর মেমরির ব্যান্ডউইথ না থাকে তবে লাইট পাসটি সত্যিই আঘাত লাগতে শুরু করে। প্রতি স্ক্রিন পিক্সেল 3-5 টেক্সচার থেকে টান মজাদার নয়।
হালকা প্রাক পাস
এটি মুলতুবি রেন্ডারিংয়ের ক্ষেত্রে একটি প্রকরণ যা আকর্ষণীয় ট্রেড অফস trade
মুলতুবি রেন্ডারিংয়ের মতোই, আপনি আপনার পৃষ্ঠের পরামিতিগুলি বাফারগুলির একটি সেটকে রেন্ডার করেন। তবে আপনি সংক্ষিপ্ত পৃষ্ঠের ডেটা করেছেন; আপনি এই সময়ের জন্য কেবলমাত্র পৃষ্ঠের ডেটা যত্ন নেবেন হ'ল গভীরতা বাফার মান (অবস্থান পুনর্গঠনের জন্য), সাধারণ এবং স্পেসুলার শিরনেস।
তারপরে প্রতিটি আলোর জন্য, আপনি কেবল আলোকিত ফলাফলগুলি গণনা করুন। পৃষ্ঠের রঙগুলির সাথে কোনও গুণ নয়, কিছুই নয়। কেবল বিন্দু (এন, এল) এবং স্পেকুলার শব্দটি সম্পূর্ণ পৃষ্ঠের রঙ ছাড়াই। স্পেকুলার এবং ডিফিউজ শর্তাদি পৃথক বাফারগুলিতে রাখতে হবে। প্রতিটি আলোর জন্য বর্ণনামূলক এবং ছড়িয়ে পড়া শর্তাদি দুটি বাফারের মধ্যে সংক্ষিপ্ত করা হয়।
তারপরে, আপনি জ্যামিতিকে পুনরায় রেন্ডার করুন, পৃষ্ঠের রঙের সাথে চূড়ান্ত সংমিশ্রণটি করতে মোট অনুশীলনকারী এবং ছড়িয়ে পড়া আলোক গণনাগুলি ব্যবহার করে, সামগ্রিক প্রতিচ্ছবি উত্পাদন করে।
আপসাইডগুলি হ'ল আপনি মাল্টিসম্পলিং ফিরে পেয়েছেন (কমপক্ষে, পেছনের চেয়ে সহজ)। আপনি ফরোয়ার্ড রেন্ডারিংয়ের চেয়ে কম প্রতি-বস্তু রেন্ডারিং করেন। তবে পিছনে মূল বিষয়টি যে এটি সরবরাহ করে তা হ'ল বিভিন্ন পৃষ্ঠের জন্য বিভিন্ন আলোক সমীকরণের সহজ সময়।
বিলম্বিত রেন্ডারিংয়ের সাথে, আপনি সাধারণত প্রতি আলোতে একই শেডার দিয়ে পুরো দৃশ্যটি আঁকেন। সুতরাং প্রতিটি বস্তুকে একই উপাদান পরামিতি ব্যবহার করতে হবে। হালকা প্রাক-পাসের সাহায্যে আপনি প্রতিটি বস্তুকে আলাদা শেডার দিতে পারেন, যাতে এটি চূড়ান্ত আলোয় পদক্ষেপটি নিজেই করতে পারে।
এটি ফরোয়ার্ড রেন্ডারিং মামলার মতো স্বাধীনতা সরবরাহ করে না। তবে আপনার যদি টেক্সচার ব্যান্ডউইথটি ছাড়িয়ে দেয় তবে এটি আরও দ্রুত।