ডিফার্ড শেডিং - একাধিক লাইট একত্রিত কিভাবে?


9

আমি জিএলএসএল দিয়ে শুরু করছি এবং আমি সাধারণ ডিফার্ড শেড প্রয়োগ করেছি যা জি-বাফারকে পজিশন, নরমাল এবং আলবেডো দিয়ে আউটপুট করে।

আমি একটি সাধারণ পয়েন্টের হালকা শেডারও লিখেছি।

পয়েন্ট লাইটের জন্য এখন আমি একটি গোলক আঁকবো এবং আউটপুট একটি আলো বাফারে যায়।

সমস্যাটি হ'ল একাধিক লাইট আঁকানোর সময় আমি কীভাবে আলোকিত বাফারের ফলাফলগুলিকে একত্রিত করব?

উদাহরণস্বরূপ, যখন আমি পয়েন্ট লাইট শেডার ব্যবহার করে লাইটবুফারে দ্বিতীয় আলো আঁকছি, আমি কীভাবে আলো বাফারে দ্বিতীয় আলোতে প্রথম আলো যুক্ত করব। মানে, আপনি একই আউটপুট বাফার থেকে পড়তে এবং লিখতে পারবেন না?

উত্তর:


12

অ্যাডিটিভ ব্লেন্ডিং, অর্থাত্ glBlendFunc (GLediaE, GLediaE) এবং glEnable (GL_BLEND)।


গভীরতার পরীক্ষা করা কি এর জন্য অক্ষম করতে হবে?
woojoo666

1
@ woojoo666 নং প্রকৃতপক্ষে এটি গভীর-পরীক্ষার সেটটি কম-সমান হিসাবে সক্রিয় করা উচিত, যাতে পূর্ববর্তী পাসের সাথে সুনির্দিষ্টভাবে মেলে এমন পৃষ্ঠগুলি অতিক্রম করবে। যদি গভীরতা পরীক্ষাটি বন্ধ থাকে, তবে পৃষ্ঠগুলির পেছনের যা কিছু রয়েছে তা থেকে ভুলভাবে আলো সংগ্রহ করবে। :)
নাথান রিড

হুম, মনে হচ্ছে ঠিক ঠিক কী ঘটছে। মিশ্রণটি চালু করা সামনের মুখগুলি পিছনের মুখগুলির সাথে মিশ্রিত করে তোলে, যদিও আমি গভীরতা পরীক্ষার সক্ষম করে রেখেছি। গভীরতার মুখোশটি দিয়ে আমারও কি কিছু করা দরকার?
woojoo666

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

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

2

আমার মুলতুবি রেন্ডারারের জন্য, আমি জি বাফার থেকে তথ্য ব্যবহার করে সমস্ত লাইটকে এক হালকা রেন্ডার টার্গেটে একত্রিত করি এবং তারপরে আমার চূড়ান্ত ব্যাকবফার চিত্রটি তৈরি করার সময় আলোর তীব্রতার জন্য যে নমুনা রেন্ডার করি তা নমুনা করি।

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

বিভিন্ন ধরণের লাইট (পয়েন্ট, স্পটলাইট, সমান্তরাল) হ্যান্ডেল করার জন্য আপনাকে যা যা করতে হবে তা হ'ল সম্ভবত কোন ধরণের আলো প্রক্রিয়াগুলি চালানো উচিত তা নির্ধারণ করার জন্য একটি ধ্রুবক বাফার ব্যবহার করে আলোকে আরও শক্তিশালী করে তোলা।


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

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

কোনও দেয়ালের পিছনে আলো থাকা এবং প্রাচীরের অন্যদিকে কোনও জিনিস জ্বালানো উচিত নয় এমন ক্ষেত্রে আপনি কীভাবে পরিচালনা করবেন?
jjxtra

@ সাইকোড্যাড এটি ছায়ার ডোমেন, যা ... আরও জটিল বিষয়। :)
নাথান রিড

0

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


না, সেভাবে কাজ করে না। আমি প্রতিটি পয়েন্ট আলোর জন্য একটি গোলক আঁকি। দ্বিতীয় বিন্দু আলো প্রথম আলোর প্রভাবের গোলকের সাথে নিযুক্ত না হলে দ্বিতীয় আলো কেবল আঁকানো হবে না। আমি যদি সমস্ত পয়েন্টলাইটের জন্য একটি পূর্ণ স্ক্রিন কোয়াড আঁকতে পারি তবে আপনার পদ্ধতিটি কার্যকর হবে, তবে এটি সঠিক পদ্ধতির নয় কারণ ফুলস্ক্রিন কোয়াড বিশ্বব্যাপী ilumination জন্য ব্যবহৃত হয়। বলুন আমার কাছে ১ small টি ছোট পয়েন্ট লাইট রয়েছে, এটি পিক্সেলটি দ্বারা প্রদাহ না করা হলেও প্রতিটি পিক্সেলের জন্য তাদের মধ্য দিয়ে যেতে আমার বাধ্য করবে। এবং সাধারণত আমি বলতাম প্রতিটি পিক্সেল এক বা দুটি লাইট দ্বারা আলোকিত হয়। আর আমার যদি 100 টি লাইট থাকে? না
জেবারার

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

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

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