একটি নির্দিষ্ট পিক্সেল না লিখতে আমি কীভাবে কোনও খণ্ড শেডারকে বলতে পারি?


11

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

"পিক্সেল লিখবেন না" বলতে কি কোনও টুকরো টুকরো শ্যাডারের মধ্যে এটি সম্ভব?

আমি জানি যে এটি আলফা মিশ্রণ, প্রথমে রেন্ডারিং এবং এটি পিক্সেল আঁকতে চায় না এমন পটভূমির রঙ রাখার পরে, বা গভীরতা বা স্টেনসিল বাফারগুলির সাথে কিছু কৌশল করে এমনটি করা যেতে পারে। আমি এও জানি যে আমি যে রেন্ডার করতে চাই তা মেলানোর জন্য আমি একগুচ্ছ জ্যামিতি তৈরি করতে পারি।

খণ্ড খণ্ডার শেডারে আদৌ পিক্সেল না লেখার জন্য কোনও উপায় আছে কি?

উত্তর:


10

হ্যাঁ, discardপিক্সেলটি এড়াতে আপনি খণ্ড শেডারটিতে রাখতে পারেন । এখানে আমি গুগল থেকে খোলার একটি এলোমেলো উদাহরণ রয়েছে

দ্রষ্টব্য যে এটি প্রকৃতপক্ষে খন্ডের শেডার প্রক্রিয়াজাতকরণ থেকে বিরত থাকতে পারে না (যেমন জিপিইউ ব্লকগুলিতে টুকরো টুকরো প্রক্রিয়া করতে ঝোঁক; কেবলমাত্র একটি ব্লকের সমস্ত টুকরো টুকরো টুকরো করা প্রক্রিয়াটি পরিত্যাগ করবে)। তবে খণ্ডটি আউটপুটটিতে লেখা হবে না, যা মূলত আপনি চান।

পারফরম্যান্সdiscard এবং এসওতে এটির একটি সম্পর্কে আপনি এই সম্পর্কিত প্রশ্নে আগ্রহী হতে পারেন ।

যদিও ওয়েবজিএলে এটি সমর্থন করে তবে আমার কোনও ধারণা নেই। যদি তা না হয় তবে আপনার পরামর্শগুলির একটিতে ফিরে যেতে হবে (আলফা মিশ্রণের মতো; আমি মনে করি এটি সবচেয়ে সোজা হবে)।


3

discardবিবৃতি উপকারে আসে।

আপনি নিজের সিদ্ধান্তের পথ সম্পর্কে খুব বেশি কিছু বলেননি, তাই আমি একটি সাধারণ টেক্সচার লকউইচ ব্যবহার করে একটি উদাহরণ উপস্থাপন করব:

void main() {
    gl_FragColor = texture2D(u_texture, v_uv) * u_color;
    if (gl_FragColor.a <= 0.0) discard;
}

(এটি আলফা মিশ্রণ সম্পর্কে জানার আগে আমি লিখেছি এমন কয়েকটি নমুনা কোড থেকে from)

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