একাধিক শেডার ব্যবহার করা


53

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

http://www.youtube.com/watch?v=1ogg4ZfdBqU

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


নাথন এবং ডেভিডের ভাল উত্তর, আপনি পাসের বা শেডার পাস শব্দটি দেখতে পান ; চূড়ান্ত চিত্র / ফ্রেম রচনা করার জন্য একাধিক পাসের প্রয়োজন। জিপিইউ প্রক্রিয়াকরণটি এত জঘন্য সমান্তরাল হয়ে উঠার কারণগুলির মধ্যে একটি এবং এভাবে দ্রুত ফ্রেম প্রতি একাধিক পাসের প্রয়োজন। ভূমিকম্প II বা হাফ লাইফ সফটওয়্যার রেন্ডারগুলিতে ফিরে যান নিজেকে কতটা ভালবাসার শেডার পাসটি পুরো 3D গ্রাফিক্স অভিজ্ঞতায় যুক্ত করে তা স্মরণ করিয়ে দিতে।
ইঞ্জিনিয়ার

উত্তর:


59

সহজ উত্তর হ'ল আপনি প্রতিটি ড্র কলের মধ্যে সেগুলি পরিবর্তন করেন। একটি শেডার সেট করুন, একটি চাঁচা আঁকুন, অন্য একটি শেডার সেট করুন, অন্য একটি টিপোট আঁকুন।

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

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

ডিফার্ড শেডিং নামে আরও একটি কৌশল রয়েছে যেখানে আপনি দৃশ্যটি আলোকিত না করেই রেন্ডার করেন এবং পরে স্ক্রিন স্পেসে প্রয়োগ করেন। মূল লক্ষ্য হ'ল প্রতি পিক্সেল আলোতে ব্যয় হ্রাস করা।

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

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

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

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

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


16

আপনি কেবল একটি শেডারকে বেঁধে ফেলুন, সেই শেডার ব্যবহার করে সমস্ত বস্তু রেন্ডার করুন, তারপরে পরবর্তী শেডারকে আবদ্ধ করুন, সেই জিনিসটি ব্যবহার করে অবজেক্টগুলি রেন্ডার করুন etc.

আপনার যতগুলি শেডার অবজেক্ট থাকতে পারে (শেডারগুলি স্মৃতিতে লোড করা এবং সংকলিত) আপনি যেমন চান তেমন; একবারে কেবলমাত্র একটি সীমাবদ্ধ (সক্রিয়) হতে পারে।


5
বাস্তবায়নের ক্ষেত্রে, প্রতিটি ছায়ায় আমি ছায়াময় পরিবর্তন করতে glUseProgram (1) এবং glUseProgram (2) ব্যবহার করি? পারফরম্যান্সের জন্য এটি কত ব্যয়বহুল?
ইব্রাবাইকার

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

9

একটি দৃশ্যে একাধিক শেডার ব্যবহার করা বেশ সহজ; শেডার পরিবর্তন করুন, এর জন্য মান নির্ধারণ করুন, তারপরে অবজেক্টটি রেন্ডার করুন।

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

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

পারফরম্যান্স প্রভাব হ্রাস করার দ্বিতীয় উপায়টি হল শেডার সেট করা, সেই শেডার ব্যবহার করা প্রতিটি বস্তু রেন্ডার করুন, তারপরে পুনরাবৃত্তি করুন। অন্য কথায়, আপনার উপস্থাপনা ব্যাচিং।

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


7

আমি আবিষ্কার করেছি যে করার আরেকটি উপায় হ'ল glsl subroutines নামক কোনও কিছুর মাধ্যমে, যেখানে প্রতিটি ধরণের শেডারকে একটি ফাংশনে সংজ্ঞায়িত করা হয় এবং ওপেনজিএল অ্যাপ্লিকেশনটিতে আমরা বর্তমান সাবরুটিনকে সংজ্ঞায়িত করতে, বাফারের শীর্ষবিন্দু আঁকতে, সাব্রোটিন পরিবর্তন করতে পারি এবং অন্য একটি বাফার রেন্ডারিং


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