मैं OpenGL में एंटी-अलियासिंग कैसे लागू कर सकता हूं?


28

मैं ओपन-स्क्रीन एंटी-अलियासिंग करना चाहता हूं, और ओपन-एंटी द्वारा उपयोग किए जाने वाले एंटी-अलियासिंग का उपयोग नहीं करना चाहता, क्योंकि मैं एक गेम बना रहा हूं और इसमें अच्छे प्रभाव चाहता हूं।

मुझे कैसे आगे बढ़ना चाहिए?


"स्वयं GL द्वारा प्रदान की जाने वाली एंटी-अलियासिंग" के द्वारा, क्या आप पुरानी खराब नामित लाइन और बहुभुज गुणवत्ता संकेत को "एंटीएलियासिंग" के रूप में चिह्नित करते हैं, या आप GLX / डॉग विजुअल के माध्यम से नियमित MSAA का उपयोग करने की बात कर रहे हैं?
लार्स विकलुंड

जवाबों:


28

OpenGL में देशी MSAA के कई विकल्प हैं। प्रसंस्करण के बाद के प्रभावों के साथ, उनके बारे में सबसे अच्छी बात यह है कि आप आमतौर पर सिर्फ अंतिम, अप्रतिबंधित छवि को छाया में फेंक सकते हैं और यह बाकी काम करता है। यहाँ एक नज़र रखने के लायक तीन तरीके हैं:

  • तेजी से अनुमानित एंटी-अलियासिंग (Geeks3D) - ज्यादातर मामलों में अच्छा है। लागू करने और समझने में बहुत आसान है। ड्राबैक तेज है, बनावट में उच्च विपरीत शोर थोड़ा धुंधला हो जाता है। 1/4 पिक्सेल की खड़ी के रूप में सूक्ष्म रूप से धारें पारंपरिक MSAA के रूप में मृत-सटीक दिखती हैं। किसी भी कम की तुलना में, यह थोड़ा सटीकता खो देता है।

  • सामान्य फ़िल्टर्ड एंटी-अलियासिंग (GameDev ) - यह अभी तक सही तरीके से परीक्षण नहीं किया गया है, लेकिन इसे समझना सबसे आसान है। सबसे अच्छे मामलों में यह 16x MSAA से मिलता-जुलता है और सबसे बुरे मामलों में यह 2x MSAA जैसा है। यह किनारों और सापेक्ष कोणों का प्रतिनिधित्व करने के लिए एक अस्थायी सामान्य नक्शा बनाता है। आप सामान्य मानचित्र को या तो लूमा अंतर या रंग अंतर के साथ देख सकते हैं।

  • मॉर्फोलॉजिकल एंटी-अलियासिंग (Iryoku) - SMAA में सुधार हुआ है - सबपिक्सल Mophological AA। यह 4 पास में बहुत जटिल है, लेकिन मैंने जो सबसे अच्छा परिणाम देखा है, उसे प्राप्त करता है। यह किनारों के साथ ग्रेडिएंट्स को क्रमशः 1/100 से 1/200 पिक्सल स्टीप (!) के रूप में ढालता है। सैंपलिंग लूमा-बेस्ड, कलर-बेस्ड या डेप्थ-बेस्ड हो सकती है। बनावट बहुत कुरकुरी और साफ रहती है। (उदाहरण DX10 और HLSL आधारित है, इसे GLSL में सटीक रूप से पोर्ट करने में कुछ समय लगेगा)

ये तकनीक सुपर-सैंपल या मल्टी-सैंपल नहीं हैं, इसलिए मोटाई में 1 पिक्सेल से कम दिखाई देने वाली लाइनें अंतराल के साथ दिखाई देंगी और सही तरीके से एंटी-अलियास नहीं होंगी। यह एक गैर-MSAA दृष्टिकोण का उपयोग करने के लिए नकारात्मक पक्ष है। चूंकि आप पूर्ण रिज़ॉल्यूशन में केवल एक रेखापुंज छवि के साथ काम कर रहे हैं, आप इन खाली अंतरालों से अतिरिक्त जानकारी नहीं बना सकते।

ध्यान दें कि ये सभी तकनीक आसन्न लूमा (चमक) या क्रोमा (रंग) मूल्यों के नमूने पर निर्भर हैं। लूमा और वैकल्पिक गामा सुधार की गणना के लिए एए शेडर पर अतिरिक्त निर्देशों की आवश्यकता होती है, हालांकि यह बहुत सीधा है। आप अल्फा-चैनल में लूमा को संचयित करते हुए, पूर्व-छायांकित छवि को लूम की गणना करके इसे उतार सकते हैं। तो एए shader में, आप बस अल्फा नमूना होगा।


7

एंटीलियासिंग करने के बहुत से तरीके हैं। एक मल्टीसम्प्ल एंटीअलियासिंग (MSAA) का उपयोग करना है, जहां आपके बैक बफर वास्तव में कई उप-पिक्सेल नमूने संग्रहीत करते हैं, और जब आप त्रिकोण, रेखाओं आदि को जमा करते हैं, तो सिस्टम स्वचालित रूप से प्रत्येक पिक्सेल में नमूनों के सही सेट में भर जाता है। फिर छवि को रेंडर करने के अंत में सभी उप-पिक्सेल नमूनों को औसत रूप से प्रति पिक्सेल एक नमूना प्राप्त करने के लिए "हल" किया जाता है।

एक और तरीका पोस्ट-प्रोसेसिंग एंटीलियासिसिंग का उपयोग करना है, जहां आप दृश्य को सामान्य रूप से रेंडर करते हैं और फिर अंतिम परिणाम को अलियास किए गए किनारों को छिपाने के लिए कुछ लक्षित धुंधला करते हैं। इसके लिए कई प्रकार की तकनीकें हैं, लेकिन इस समय सबसे अच्छे / सबसे लोकप्रिय में से एक को एफएक्सएए (फास्ट अनुमानित एंटी-अलियासिंग) कहा जाता है।

MSAA आम तौर पर बाद के प्रसंस्करण AA की तुलना में बेहतर दिखने वाले परिणाम देगा, लेकिन धीमी हो सकती है क्योंकि इसे हर रेंडरिंग ऑपरेशन के लिए लगभग मेमोरी बैंडविड्थ की आवश्यकता होती है। सेटअप के विवरण के आधार पर, MSAA को पोस्ट-प्रोसेसिंग AA से अधिक वीडियो मेमोरी की आवश्यकता हो सकती है।

आप वेब पर MSAA या FXAA लागू करने के बारे में विशिष्ट जानकारी पा सकते हैं - बस Google या तो उन शर्तों में से एक है।


2

क्या आप अपने खुद के GLSL शेडर को कोड करने के लिए तैयार हैं? यदि हां, तो इस ट्यूटोरियल को देखें।


अच्छी तरह से मैं इसे shaders का उपयोग करना पसंद करूँगा क्योंकि im अन्य प्रभावों के लिए shaders का उपयोग कर रहा हूँ। साथ ही आप shaders के लिए कुछ अन्य लिंक भी प्रदान करते हैं
noddy
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.